peer-group-grading/crates/backend/src/controller/auth.rs

35 lines
746 B
Rust

use actix_session::Session;
use actix_web::{
HttpResponse, Responder, post,
web::{self, ServiceConfig},
};
use serde::Deserialize;
use crate::{Database, error::ApiError};
#[derive(Deserialize)]
struct LoginRequest {
username: String,
password: String,
}
pub fn setup(cfg: &mut ServiceConfig) {
cfg.service(login);
}
#[post("/login")]
async fn login(
db: web::Data<Database>,
login_request: web::Json<LoginRequest>,
session: Session,
) -> Result<impl Responder, ApiError> {
let login_request = login_request.into_inner();
let user_id = db
.verify_local_user(&login_request.username, &login_request.password)
.await?;
session.insert("user", user_id)?;
Ok(HttpResponse::Ok())
}