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 fn create_auth_token( conn: DbConn, config: State, auth_request: Json ) -> Result, ErrorResponse<()>> { let user_info = LocalUser::get_user_by_creds(&conn, &auth_request.username, &auth_request.password)?; 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 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 = LocalUser::create_user(&conn, user_request.into_inner())?; Response::build() .status(Status::Created) .ok() }