use crate::models::user::Model as User;
use doido::controller::{controller, Response};
use doido::model::password::HasSecurePassword;
use doido_auth::{sign_in, sign_out};
use serde::Deserialize;
#[derive(Deserialize)]
pub struct SignInForm {
pub email: String,
pub password: String,
}
pub struct SessionsController;
#[controller]
impl SessionsController {
/// POST /users/sign_in
pub async fn create(mut ctx: doido::controller::Context) -> doido::Result<Response> {
let form: SignInForm = ctx.body_json().await?;
if let Some(user) = User::find_by_email(ctx.db(), &form.email).await? {
if user.authenticate(&form.password) {
sign_in(ctx, &user)?;
return Ok(ctx.json(user));
}
}
Ok(ctx.status(401))
}
/// DELETE /users/sign_out
pub async fn destroy(mut ctx: doido::controller::Context) -> doido::Result<Response> {
sign_out(ctx)?;
Ok(ctx.status(204))
}
}