diff --git a/server-api/src/main.rs b/server-api/src/main.rs
index 86f5e76..cd0c35b 100644
--- a/server-api/src/main.rs
+++ b/server-api/src/main.rs
@@ -38,7 +38,7 @@ mod perms;
mod messages;
mod admin;
-mod http_params;
+mod http;
mod testing;
const NO_ERR: u16 = 0;
@@ -85,7 +85,7 @@ async fn main_responder(request: Request
) -> Result, hyper:
let method = parts.method;
let path = parts.uri.path();
- let params_res = http_params::parse_params(&mut body).await;
+ let params_res = http::parse_json_params(&mut body).await;
if let Ok(params) = params_res {
let mysql_pool = Pool::new(&env::var("DATABASE_URL").unwrap());
@@ -131,6 +131,38 @@ async fn start_server(ecode: u16) -> u16 {
}
+async fn attempt_owner_creation(name: &str) {
+ /*
+ * Attempts to create an owner level account 'name' as the name
+ * Writes succesful output to stdout
+ * Writes error output to stderr
+ * NOTE: Messy because there's 0 other places where this kind of direct
+ * functionality is required. db-lib is basically built to talk to the api
+ * */
+ let p = Pool::new(&env::var("DATABASE_URL").unwrap());
+ let owner_secret = auth::generate_secret();
+ if let Ok(enc_secret) = auth::encrypt_secret(&owner_secret) {
+ if let Ok(response) = db::member::Member::add(&p, name, &enc_secret, perms::OWNER).await {
+ match response {
+ db::Response::Row(mut owner) => {
+ owner.secret = owner_secret; // giving the secret itself back to the user
+ println!("{}", serde_json::to_string(&owner).expect("SQL query passed but serde couldn't parse the data for some reason"))
+ },
+ db::Response::Empty => {
+ eprintln!("SQL server failed to return owner data, check configs and also the members table to make sure there's nothing there by accident");
+ },
+ _ => {}
+ };
+ }
+ else {
+ eprintln!("Could not communicate with the SQL server, check your configs!");
+ }
+ }
+ else {
+ eprintln!("Could not generate a proper secret");
+ }
+ p.disconnect();
+}
#[tokio::main]
async fn main() -> Result<(), u16>{
@@ -190,34 +222,7 @@ OPTIONS:
}
if let Some(owner_name) = args.value_of("create-owner") {
- let p = Pool::new(&env::var("DATABASE_URL").unwrap());
- let owner_secret = auth::generate_secret();
- // creation of owner should just dump straight to stdout since this fires
- // from a commandline parameter anyway
- if let Ok(enc_secret) = auth::encrypt_secret(&owner_secret) {
- match db::member::Member::add(&p, owner_name, &enc_secret, perms::OWNER).await {
- Ok(response) => {
- match response {
- db::Response::Row(mut owner) => {
- owner.secret = owner_secret; // giving the secret itself back to the user
- println!("{}", serde_json::to_string(&owner).expect("SQL query passed but serde couldn't parse the data for some reason"))
- },
- db::Response::Empty => {
- eprintln!("SQL server failed to return owner data, check configs and also the members table to make sure there's nothing there by accident");
- },
- _ => {}
- };
- },
- Err(_) => {
- eprintln!("Could not communicate with the SQL server, check your configs!");
- }
- }
- }
- else {
- eprintln!("Could not generate a proper secret");
- }
- //println!("{}", serde_json::to_string(&owner).unwrap());
- p.disconnect();
+ attempt_owner_creation(owner_name).await;
}
if args.is_present("server") {