aboutsummaryrefslogtreecommitdiff
path: root/backend/src/routes/users.rs
diff options
context:
space:
mode:
authorIlion Beyst <ilion.beyst@gmail.com>2021-12-30 11:45:59 +0100
committerIlion Beyst <ilion.beyst@gmail.com>2021-12-30 11:45:59 +0100
commit3edf5d60f54bfd0cd2c818e5fb1ca133e324325d (patch)
tree9b8bd057e3e27c9e2488957f02ffc8de4ed4c438 /backend/src/routes/users.rs
parent71ee6c99e963d96286cae8d0bfc2f20a9c9c920b (diff)
downloadplanetwars.dev-3edf5d60f54bfd0cd2c818e5fb1ca133e324325d.tar.xz
planetwars.dev-3edf5d60f54bfd0cd2c818e5fb1ca133e324325d.zip
rename to planetwars-server
Diffstat (limited to 'backend/src/routes/users.rs')
-rw-r--r--backend/src/routes/users.rs94
1 files changed, 0 insertions, 94 deletions
diff --git a/backend/src/routes/users.rs b/backend/src/routes/users.rs
deleted file mode 100644
index fc77d7b..0000000
--- a/backend/src/routes/users.rs
+++ /dev/null
@@ -1,94 +0,0 @@
-use crate::db::users::{Credentials, User};
-use crate::db::{sessions, users};
-use crate::DatabaseConnection;
-use axum::extract::{FromRequest, RequestParts, TypedHeader};
-use axum::headers::authorization::Bearer;
-use axum::headers::Authorization;
-use axum::http::StatusCode;
-use axum::{async_trait, Json};
-use serde::{Deserialize, Serialize};
-
-type AuthorizationHeader = TypedHeader<Authorization<Bearer>>;
-
-#[async_trait]
-impl<B> FromRequest<B> for User
-where
- B: Send,
-{
- type Rejection = (StatusCode, String);
-
- async fn from_request(req: &mut RequestParts<B>) -> Result<Self, Self::Rejection> {
- let conn = DatabaseConnection::from_request(req).await?;
- let TypedHeader(Authorization(bearer)) = AuthorizationHeader::from_request(req)
- .await
- .map_err(|_| (StatusCode::UNAUTHORIZED, "".to_string()))?;
-
- let (_session, user) = sessions::find_user_by_session(bearer.token(), &conn)
- .map_err(|_| (StatusCode::UNAUTHORIZED, "".to_string()))?;
-
- Ok(user)
- }
-}
-
-#[derive(Serialize, Deserialize)]
-pub struct UserData {
- pub user_id: i32,
- pub username: String,
-}
-
-impl From<User> for UserData {
- fn from(user: User) -> Self {
- UserData {
- user_id: user.id,
- username: user.username,
- }
- }
-}
-
-#[derive(Deserialize)]
-pub struct RegistrationParams {
- pub username: String,
- pub password: String,
-}
-
-pub async fn register(
- conn: DatabaseConnection,
- params: Json<RegistrationParams>,
-) -> Json<UserData> {
- let credentials = Credentials {
- username: &params.username,
- password: &params.password,
- };
- let user = users::create_user(&credentials, &conn).unwrap();
- Json(user.into())
-}
-
-#[derive(Deserialize)]
-pub struct LoginParams {
- pub username: String,
- pub password: String,
-}
-
-pub async fn login(
- conn: DatabaseConnection,
- params: Json<LoginParams>,
-) -> Result<String, StatusCode> {
- let credentials = Credentials {
- username: &params.username,
- password: &params.password,
- };
- // TODO: handle failures
- let authenticated = users::authenticate_user(&credentials, &conn);
-
- match authenticated {
- None => Err(StatusCode::FORBIDDEN),
- Some(user) => {
- let session = sessions::create_session(&user, &conn);
- Ok(session.token)
- }
- }
-}
-
-pub async fn current_user(user: User) -> Json<UserData> {
- Json(user.into())
-}