delete tokens

This commit is contained in:
Cadey Ratio 2020-10-28 14:09:03 -04:00
parent 05c8dd36e3
commit 392d9642b7
2 changed files with 49 additions and 2 deletions

View File

@ -1,4 +1,5 @@
use crate::{jwt, models, schema, MainDatabase};
use chrono::prelude::*;
use color_eyre::eyre::Report;
use diesel::prelude::*;
use rocket::http::{ContentType, Status};
@ -19,6 +20,45 @@ pub fn get_user(user: models::User, uuid: Uuid) -> Result<Json<models::User>> {
Ok(Json(user))
}
#[tracing::instrument]
#[get("/whoami")]
pub fn whoami(user: models::User) -> Json<models::User> {
Json(user)
}
#[tracing::instrument(skip(conn))]
#[get("/token")]
pub fn get_tokens(user: models::User, conn: MainDatabase) -> Result<Json<Vec<models::Token>>> {
use schema::tokens::dsl::*;
Ok(Json(
tokens
.filter(user_id.eq(user.id))
.load::<models::Token>(&*conn)
.map_err(Error::Database)?,
))
}
#[tracing::instrument(skip(conn))]
#[delete("/token/<uuid>")]
pub fn delete_token(user: models::User, conn: MainDatabase, uuid: Uuid) -> Result {
use schema::tokens::dsl::*;
let uuid = uuid.into_inner();
let tok: models::Token = tokens.find(uuid.clone())
.get_result(&*conn).map_err(Error::Database)?;
if tok.user_id != user.id && !user.is_admin {
return Err(Error::LackPermissions);
}
diesel::update(tokens.find(uuid))
.set(deleted_at.eq(Utc::now().naive_utc()))
.get_result::<models::Token>(&*conn)?;
Ok(())
}
#[derive(thiserror::Error, Debug)]
pub enum Error {
#[error("internal database error: {0}")]
@ -89,7 +129,6 @@ impl<'a, 'r> FromRequest<'a, 'r> for models::User {
}
}
}
}
1 => {
let tok = keys[0].to_string();

View File

@ -125,7 +125,15 @@ fn main() -> Result<()> {
.attach(OAuth2::<Gitea>::fairing("gitea"))
.attach(MainDatabase::fairing())
.attach(SpaceHelmet::default())
.mount("/api", routes![api::get_user])
.mount(
"/api",
routes![
api::whoami,
api::get_user,
api::get_tokens,
api::delete_token
],
)
.mount("/", routes![gitea_login, gitea_callback])
.launch();