Fixed all 35 compile time issues with new auth module

Ready for testing
This commit is contained in:
shockrah 2020-05-06 02:20:32 -07:00
parent 306156407d
commit 220bc11ef0

View File

@ -1,14 +1,21 @@
// Handlers for the base auth routes
use crate::users{self, Member};
use crate::rand_utils::new_key;
use crate::{
DBConn, schema,
models::{
Invite,
User
}
};
use rocket::http::Status;
use rocket::response::{self, Responder, Response};
use rocket::request::{Form, Request};
use rocket_contrib::json::Json;
use diesel::{self, prelude::*};
use std::{error, fmt};
use diesel;
#[derive(FromForm)]
struct JoinParams {
pub struct JoinParams {
code: u64,
name: String,
}
@ -21,7 +28,7 @@ pub struct AuthKey {
pub type AuthResult<T, AuthErr> = std::result::Result<T, AuthErr>;
#[derive(Clone)]
#[derive(Debug, Clone)]
pub struct AuthErr {
msg: &'static str,
status: u16,
@ -48,73 +55,78 @@ impl<'r> Responder<'r> for AuthErr {
}
}
/*
#[post("/login")]
pub fn login() {
}
*/
#[post("/join", data="<params>")]
pub fn join(conn: DBConn, params: JoinParams) -> AuthResult<Json<User>, AuthErr>{
pub fn join(conn: DBConn, params: Form<JoinParams>, hashcode: u64) -> AuthResult<Json<User>, AuthErr>{
/*
* Requires <code:int> -> body
* Requires <name:string> -> body
* Struct JoinParams enforces this for us so if something is missing then rocket should 404
*/
use schema::invites::{self, dsl::*};
const expired: &'static str = "Invite expired";
const negate: &'static str = "Malformed request";
let diesel_result: Result<Invite, diesel::result::Error> = invites
.filter(id.eq(code))
.filter(invites::dsl::id.eq(params.code))
.first(&conn.0);
if let Ok(data) = diesel_result {
match data.uses {
1 ... std::i32::MAX => {
let new_user = users::new_member(conn):
1 ..= std::i32::MAX => {
let new_user = crate::users::create_new_user(conn, params.name);
// update the uses counter
diesel::update(users.filter(userid.eq(user.userid)))
let _ignored = diesel::update(invites.filter(invites::dsl::id.eq(hashcode)))
.set(uses.eq(data.uses - 1))
.execute(&conn.0)
.execute(&conn.0);
AuthResult(Json(new_user))
Ok(Json(new_user))
}
// The invite has been used up and thus should be removed
std::i32::MIN ... 0 => {
let _ = diesel::delete(invites.filter(id.eq(data.id)))
std::i32::MIN ..= 0 => {
let _ = diesel::delete(invites.filter(invites::dsl::id.eq(data.id)))
.execute(&conn.0)
.expect("Could not delete invite");
AuthResult(AuthErr{msg: expired})
Err(AuthErr{msg: expired, status: 404})
}
}
}
else {
AuthResult(AuthErr{msg:negate})
Err(AuthErr{msg:negate, status: 500})
}
}
#[post("/leave", data = "<api_key>")]
pub fn leave(conn: DBConn, api_key: AuthKey) -> Status {
pub fn leave(conn: DBConn, api_key: Form<AuthKey>) -> Status {
/*
* Basic removal of the user from our users table
*/
diesel::delete(users.filter(id.eq(api_key.id), ))
let db_result = diesel::delete(users)
use crate::schema::users::dsl::*;
use crate::diesel::ExpressionMethods;
let db_result = diesel::delete(users
.filter(id.eq(api_key.id))
.filter(secret.eq(api_key.secret))
.execute(&conn.0);
if let result = Ok(db_result) {
.filter(secret.eq(api_key.secret)))
.execute(&conn.0).unwrap();
Status::Accepted
}
else {
Status::BadRequst
}
}
/*
#[pust("/close")]
pub fn close() {
}
#[cfg(test)]
mod auth_tests {
use super::*;
use rocket;
use diesel::mysql::MysqlConnection;
*/
fn feed_n_leave() {
// Create an invite in our db manually
// Use that invite to join
// Then leave using our neato /auth/leave route
let app = rocket::ignite()
.mount("/auth", routes![crate::invites::use_invite, leave])
.attach(super::DBConn::fairing());
let conn = MysqlConnection::establish("mysql://freechat_dev:password@localhost:3306/freechat");
}
}