Serve frontend code
parent
16179f0191
commit
3a264df20f
|
@ -15,5 +15,5 @@ uuid = { version = "0.8.1", features = ["serde", "v4"] }
|
||||||
log = "0.4.0"
|
log = "0.4.0"
|
||||||
env_logger = "0.8.4"
|
env_logger = "0.8.4"
|
||||||
chrono = { version = "0.4.11", features = ["serde"] }
|
chrono = { version = "0.4.11", features = ["serde"] }
|
||||||
rocket_contrib = { version = "0.4.10", default-features = false, features = ["json"] }
|
rocket_contrib = { version = "0.4.10", default-features = false, features = ["json", "serve"] }
|
||||||
once_cell = "1.8.0"
|
once_cell = "1.8.0"
|
||||||
|
|
|
@ -25,7 +25,7 @@
|
||||||
<input type="number" id="pin" name="pin" required><br><br>
|
<input type="number" id="pin" name="pin" required><br><br>
|
||||||
|
|
||||||
<label for="newuname">New Username:</label><br>
|
<label for="newuname">New Username:</label><br>
|
||||||
<input type="number" id="newuname" name="newuname"><br>
|
<input type="text" id="newuname" name="newuname"><br>
|
||||||
|
|
||||||
<label for="newpin">New Pin:</label><br>
|
<label for="newpin">New Pin:</label><br>
|
||||||
<input type="number" id="newpin" name="newpin"><br><br>
|
<input type="number" id="newpin" name="newpin"><br><br>
|
||||||
|
@ -38,4 +38,4 @@
|
||||||
|
|
||||||
<div id="incorrect"></div>
|
<div id="incorrect"></div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
@ -60,5 +60,5 @@ const rawResponse = await fetch(`/api/users/change/${uname}/${pin}/${newUname}/$
|
||||||
body: ""
|
body: ""
|
||||||
});
|
});
|
||||||
document.querySelector("#incorrect").innerHTML = 'Login Changed!'
|
document.querySelector("#incorrect").innerHTML = 'Login Changed!'
|
||||||
window.location.replace("http://127.0.0.1:5500/login.html")
|
window.location.replace("/login.html")
|
||||||
}
|
}
|
||||||
|
|
|
@ -36,7 +36,7 @@ form.addEventListener("submit", async function(event) {
|
||||||
})
|
})
|
||||||
|
|
||||||
async function getUname() {
|
async function getUname() {
|
||||||
let response = await fetch(`$/api/users/${uname}`);
|
let response = await fetch(`/api/users/${uname}`);
|
||||||
responseText = await response.text();
|
responseText = await response.text();
|
||||||
return responseText;
|
return responseText;
|
||||||
}
|
}
|
||||||
|
@ -50,6 +50,6 @@ const rawResponse = await fetch(`/api/register/${uname.toString().toLowerCase()}
|
||||||
body: ""
|
body: ""
|
||||||
});
|
});
|
||||||
document.querySelector("#taken").innerHTML = 'Registered!'
|
document.querySelector("#taken").innerHTML = 'Registered!'
|
||||||
window.location.replace("http://127.0.0.1:5500/login.html")
|
window.location.replace("/login.html")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
27
src/auth.rs
27
src/auth.rs
|
@ -1,7 +1,8 @@
|
||||||
extern crate log;
|
extern crate log;
|
||||||
use crate::file_io::{append_json, read_json, write_json};
|
use crate::file_io::{append_json, read_json, write_json};
|
||||||
|
use rocket::http::{Cookie, Cookies};
|
||||||
use crate::user::User;
|
use crate::user::User;
|
||||||
use rocket_contrib::json::{Json, JsonValue};
|
use rocket_contrib::{json::Json, json::JsonValue, serve::StaticFiles};
|
||||||
extern crate sha1;
|
extern crate sha1;
|
||||||
|
|
||||||
#[get("/")]
|
#[get("/")]
|
||||||
|
@ -22,7 +23,7 @@ pub fn index() -> &'static str {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Post request to register a user and pin
|
// Post request to register a user and pin
|
||||||
#[post("/api/register/<name>/<pin>/<pronouns>")]
|
#[post("/register/<name>/<pin>/<pronouns>")]
|
||||||
pub fn register_user(name: String, pin: i32, pronouns: String) -> JsonValue {
|
pub fn register_user(name: String, pin: i32, pronouns: String) -> JsonValue {
|
||||||
let mut users: Vec<User> = read_json(); // Create an array of users out of parsed json
|
let mut users: Vec<User> = read_json(); // Create an array of users out of parsed json
|
||||||
for i in &users {
|
for i in &users {
|
||||||
|
@ -46,7 +47,7 @@ pub fn register_user(name: String, pin: i32, pronouns: String) -> JsonValue {
|
||||||
}); // append the user to the vec
|
}); // append the user to the vec
|
||||||
|
|
||||||
// append to the json file
|
// append to the json file
|
||||||
match append_json(&users) {
|
match append_json(&users[users.len()-1]) {
|
||||||
Err(why) => panic!("couldn't append json: {}", why),
|
Err(why) => panic!("couldn't append json: {}", why),
|
||||||
Ok(()) => info!("Succesfully appended to json"),
|
Ok(()) => info!("Succesfully appended to json"),
|
||||||
};
|
};
|
||||||
|
@ -62,8 +63,21 @@ pub fn register_user(name: String, pin: i32, pronouns: String) -> JsonValue {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn create_token(name: String, mut users: Vec<User>) -> String {
|
||||||
|
for i in 0..users.len() {
|
||||||
|
if users[i].name == name {
|
||||||
|
users[i].session_token = "token".to_string();
|
||||||
|
append_json(&users[i]);
|
||||||
|
info!("succesfully created token for user {}", name);
|
||||||
|
let token = users[i].session_token.clone();
|
||||||
|
return token;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
return "NULL".to_string();
|
||||||
|
}
|
||||||
|
|
||||||
// Check if pin matches user
|
// Check if pin matches user
|
||||||
#[get("/api/users/<name>/<pin>")]
|
#[get("/users/<name>/<pin>")]
|
||||||
pub fn check_pin(name: String, pin: i32) -> JsonValue {
|
pub fn check_pin(name: String, pin: i32) -> JsonValue {
|
||||||
let users: Vec<User> = read_json();
|
let users: Vec<User> = read_json();
|
||||||
let hashed_pin_input = sha1::Sha1::from(&pin.to_string()).digest().to_string();
|
let hashed_pin_input = sha1::Sha1::from(&pin.to_string()).digest().to_string();
|
||||||
|
@ -72,6 +86,7 @@ pub fn check_pin(name: String, pin: i32) -> JsonValue {
|
||||||
if i.name == name.to_lowercase() {
|
if i.name == name.to_lowercase() {
|
||||||
if i.pin_hashed == hashed_pin_input {
|
if i.pin_hashed == hashed_pin_input {
|
||||||
info!("pin correct for user {}", i.name);
|
info!("pin correct for user {}", i.name);
|
||||||
|
// Create token for user & set a cookie
|
||||||
return json!({
|
return json!({
|
||||||
"status": "ok",
|
"status": "ok",
|
||||||
"reason": "pin matches",
|
"reason": "pin matches",
|
||||||
|
@ -96,7 +111,7 @@ pub fn check_pin(name: String, pin: i32) -> JsonValue {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Change a users pin/name
|
// Change a users pin/name
|
||||||
#[post("/api/users/change/<name>/<pin>/<new_name>/<new_pin>")]
|
#[post("/users/change/<name>/<pin>/<new_name>/<new_pin>")]
|
||||||
pub fn change(name: String, pin: i32, new_name: String, new_pin: i32) -> JsonValue {
|
pub fn change(name: String, pin: i32, new_name: String, new_pin: i32) -> JsonValue {
|
||||||
let mut users: Vec<User> = read_json();
|
let mut users: Vec<User> = read_json();
|
||||||
|
|
||||||
|
@ -174,7 +189,7 @@ pub fn change(name: String, pin: i32, new_name: String, new_pin: i32) -> JsonVal
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
#[get("/api/users/<name>")]
|
#[get("/users/<name>")]
|
||||||
pub fn get_user(name: String) -> JsonValue {
|
pub fn get_user(name: String) -> JsonValue {
|
||||||
let users: Vec<User> = read_json();
|
let users: Vec<User> = read_json();
|
||||||
let found_user = users
|
let found_user = users
|
||||||
|
|
|
@ -11,7 +11,7 @@ use crate::user::User;
|
||||||
|
|
||||||
static MESSAGES: Lazy<Mutex<Vec<Message>>> = Lazy::new(|| Mutex::new(Vec::new()));
|
static MESSAGES: Lazy<Mutex<Vec<Message>>> = Lazy::new(|| Mutex::new(Vec::new()));
|
||||||
|
|
||||||
#[get("/api/message/messages.json")]
|
#[get("/message/messages.json")]
|
||||||
pub fn fetch_messages() -> Json<Vec<Message>> {
|
pub fn fetch_messages() -> Json<Vec<Message>> {
|
||||||
let messages = {
|
let messages = {
|
||||||
let messages = MESSAGES.lock().unwrap();
|
let messages = MESSAGES.lock().unwrap();
|
||||||
|
@ -87,7 +87,7 @@ fn check_token(message: Json<MessageInput>) -> JsonValue {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Receive a basic message
|
// Receive a basic message
|
||||||
#[post("/api/message/send", format = "json", data = "<message>")]
|
#[post("/message/send", format = "json", data = "<message>")]
|
||||||
pub fn send_message(message: Json<MessageInput<'_>>) -> JsonValue {
|
pub fn send_message(message: Json<MessageInput<'_>>) -> JsonValue {
|
||||||
check_token(message)
|
check_token(message)
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,6 +6,7 @@ extern crate log;
|
||||||
extern crate rocket;
|
extern crate rocket;
|
||||||
#[macro_use]
|
#[macro_use]
|
||||||
extern crate rocket_contrib;
|
extern crate rocket_contrib;
|
||||||
|
use rocket_contrib::serve::StaticFiles;
|
||||||
|
|
||||||
use rocket::fairing::AdHoc;
|
use rocket::fairing::AdHoc;
|
||||||
|
|
||||||
|
@ -25,7 +26,7 @@ fn main() {
|
||||||
|
|
||||||
rocket::ignite()
|
rocket::ignite()
|
||||||
.mount(
|
.mount(
|
||||||
"/",
|
"/api",
|
||||||
routes![
|
routes![
|
||||||
auth::index,
|
auth::index,
|
||||||
auth::get_user,
|
auth::get_user,
|
||||||
|
@ -36,6 +37,8 @@ fn main() {
|
||||||
chat::fetch_messages
|
chat::fetch_messages
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
.mount("/", routes![auth::index])
|
||||||
|
.mount("/", StaticFiles::from("frontend"))
|
||||||
.attach(cors_fairing)
|
.attach(cors_fairing)
|
||||||
.launch();
|
.launch();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue