feat(otter): cli command to toggle admin status

This commit is contained in:
Jef Roosens 2025-08-29 14:02:26 +02:00
parent ee9db5ae36
commit b946e1ce98
Signed by: Jef Roosens
GPG key ID: 02D4C0997E74717B
6 changed files with 50 additions and 2 deletions

View file

@ -2,7 +2,7 @@ use diesel::prelude::*;
use crate::schema::*;
#[derive(Clone, Queryable, Selectable)]
#[derive(Clone, Queryable, Selectable, AsChangeset)]
#[diesel(table_name = users)]
#[diesel(check_for_backend(diesel::sqlite::Sqlite))]
pub struct User {

View file

@ -24,6 +24,17 @@ impl From<User> for gpodder::User {
}
}
impl From<gpodder::User> for User {
fn from(value: gpodder::User) -> Self {
Self {
id: value.id,
username: value.username,
password_hash: value.password_hash,
admin: value.admin,
}
}
}
impl From<SignupLink> for gpodder::SignupLink {
fn from(value: SignupLink) -> Self {
Self {
@ -58,6 +69,18 @@ impl gpodder::GpodderAuthStore for SqliteRepository {
.map_err(DbError::from)?)
}
fn update_user(&self, user: gpodder::User) -> Result<gpodder::User, AuthErr> {
let conn = &mut self.pool.get().map_err(DbError::from)?;
let user: User = user.into();
Ok(diesel::update(users::table.filter(users::id.eq(user.id)))
.set(&user)
.returning(User::as_returning())
.get_result(conn)
.map(gpodder::User::from)
.map_err(DbError::from)?)
}
fn get_session(&self, session_id: i64) -> Result<Option<gpodder::models::Session>, AuthErr> {
match sessions::table
.inner_join(users::table)