use rocket_contrib::json::Json; use rocket::{Response, State}; use rocket::http::Status; use crate::config::Config; use crate::DbConn; use crate::models::errors::{ErrorResponse, make_500}; use crate::models::users::{LocalUser, CreateUserRequest, AuthClaims, AuthTokenRequest, AuthTokenResponse}; #[post("/users/me/token", data = "")] pub async fn create_auth_token( conn: DbConn, config: State<'_, Config>, auth_request: Json ) -> Result, ErrorResponse<()>> { let user_info = conn.run(move |c| { LocalUser::get_user_by_creds(c, &auth_request.username, &auth_request.password) }).await?; let token = AuthClaims::new(&user_info, config.web_app.token_duration) .encode(&config.web_app.secret) .map_err(|e| make_500(e))?; Ok(Json(AuthTokenResponse { token })) } #[post("/users", data = "")] pub async fn create_user<'r>(conn: DbConn, user_request: Json) -> Result, ErrorResponse<()>>{ // TODO: Check current user if any to check if user has permission to create users (with or without role) let _user_info = conn.run(|c| { LocalUser::create_user(&c, user_request.into_inner()) }).await?; Response::build() .status(Status::Created) .ok() }