rusty-bever/src/auth/mod.rs

69 lines
1.5 KiB
Rust
Raw Normal View History

2021-08-30 15:28:01 +02:00
use rocket::{serde::json::Json, State};
2021-08-29 20:30:33 +02:00
use serde::Deserialize;
use self::{
jwt::{generate_jwt_token, JWTResponse},
pass::verify_user,
2021-08-29 19:04:06 +02:00
};
2021-09-01 12:50:33 +02:00
use crate::{errors::RbResult, guards::User, RbConfig, RbDbConn};
2021-08-29 19:04:06 +02:00
pub mod jwt;
2021-08-29 20:30:33 +02:00
pub mod pass;
#[derive(Deserialize)]
pub struct Credentials
{
username: String,
password: String,
}
#[post("/login")]
pub async fn already_logged_in(_user: User) -> String
{
String::from("You're already logged in!")
}
2021-08-29 19:04:06 +02:00
2021-08-29 20:30:33 +02:00
#[post("/login", data = "<credentials>", rank = 2)]
2021-08-30 15:28:01 +02:00
pub async fn login(
conn: RbDbConn,
conf: &State<RbConfig>,
credentials: Json<Credentials>,
) -> RbResult<Json<JWTResponse>>
2021-08-29 19:04:06 +02:00
{
2021-08-29 20:30:33 +02:00
let credentials = credentials.into_inner();
2021-08-30 15:28:01 +02:00
let jwt = conf.jwt.clone();
2021-08-29 20:30:33 +02:00
// Get the user, if credentials are valid
let user = conn
.run(move |c| verify_user(c, &credentials.username, &credentials.password))
.await?;
2021-08-30 15:28:01 +02:00
Ok(Json(
conn.run(move |c| generate_jwt_token(c, &jwt, &user))
.await?,
))
2021-08-29 19:04:06 +02:00
}
2021-08-29 20:30:33 +02:00
#[derive(Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct RefreshTokenRequest
2021-08-29 19:04:06 +02:00
{
2021-08-29 20:30:33 +02:00
pub refresh_token: String,
2021-08-29 19:04:06 +02:00
}
2021-08-29 20:30:33 +02:00
#[post("/refresh", data = "<refresh_token_request>")]
pub async fn refresh_token(
conn: RbDbConn,
2021-08-30 15:28:01 +02:00
conf: &State<RbConfig>,
2021-08-29 20:30:33 +02:00
refresh_token_request: Json<RefreshTokenRequest>,
) -> RbResult<Json<JWTResponse>>
2021-08-29 19:04:06 +02:00
{
2021-08-29 20:30:33 +02:00
let refresh_token = refresh_token_request.into_inner().refresh_token;
2021-08-30 15:28:01 +02:00
let jwt = conf.jwt.clone();
2021-08-29 20:30:33 +02:00
Ok(Json(
2021-08-30 15:28:01 +02:00
conn.run(move |c| crate::auth::jwt::refresh_token(c, &jwt, &refresh_token))
2021-08-29 20:30:33 +02:00
.await?,
))
2021-08-29 19:04:06 +02:00
}