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