feat: add logout endpoint
Some checks failed
ci/woodpecker/push/publish-docs Pipeline is pending
ci/woodpecker/push/build-and-publish Pipeline failed

This commit is contained in:
Radical 2025-05-31 14:43:48 +02:00
parent 38aab46534
commit 60f0219e85
2 changed files with 33 additions and 0 deletions

31
src/api/v1/auth/logout.rs Normal file
View file

@ -0,0 +1,31 @@
use actix_web::{HttpRequest, HttpResponse, post, web};
use diesel::{ExpressionMethods, delete};
use diesel_async::RunQueryDsl;
use crate::{
Data,
error::Error,
schema::refresh_tokens::{self, dsl},
};
// TODO: Should maybe be a delete request?
#[post("/logout")]
pub async fn res(
req: HttpRequest,
data: web::Data<Data>,
) -> Result<HttpResponse, Error> {
let mut refresh_token_cookie = req.cookie("refresh_token").ok_or(Error::Unauthorized("request has no refresh token".to_string()))?;
let refresh_token = String::from(refresh_token_cookie.value());
let mut conn = data.pool.get().await?;
delete(refresh_tokens::table)
.filter(dsl::token.eq(refresh_token))
.execute(&mut conn)
.await?;
refresh_token_cookie.make_removal();
Ok(HttpResponse::Ok().cookie(refresh_token_cookie).finish())
}