Manually add users to database, better handling of errors in API
All checks were successful
continuous-integration/drone/push Build is passing

Also manually remove users from database, and list them only as admin
This commit is contained in:
2023-01-16 00:09:50 +01:00
parent 8c62727ec9
commit 425e00acc1
4 changed files with 167 additions and 17 deletions

View File

@@ -1,16 +1,52 @@
use juniper::FieldResult;
use crate::db::{models::users::User, DatabaseError};
use super::Context;
pub struct Mutation;
#[juniper::graphql_object(Context = Context)]
impl Mutation {
fn api_version(
context: &Context,
) -> String {
fn api_version(context: &Context) -> String {
if context.user_auth {
"0.1 (authentified)"
} else {
"0.1 (not authentified)"
}.into()
}
.into()
}
pub fn db_only_new_user(
context: &Context,
username: String,
id: String,
admin_key: String,
) -> FieldResult<User> {
if admin_key == context.other_vars.admin_key {
context
.db
.insert_user(username, id)
.map_err(std::convert::Into::into)
} else {
Err(DatabaseError::new("Invalid admin key", "Invalid admin key")
.into())
}
}
pub fn db_only_delete_user(
context: &Context,
id: String,
admin_key: String,
) -> FieldResult<String> {
if admin_key == context.other_vars.admin_key {
match context.db.delete_user(&id) {
Ok(_) => Ok("done".into()),
Err(e) => Err(e.into()),
}
} else {
Err(DatabaseError::new("Invalid admin key", "Invalid admin key")
.into())
}
}
}

View File

@@ -1,8 +1,12 @@
use juniper::FieldResult;
use super::Context;
use crate::db::models::{languages::Language, users::User, words::Word};
use crate::db::{models::{languages::Language, users::User, words::Word}, DatabaseError};
use std::str::FromStr;
use std::convert::Into;
#[derive(Debug)]
pub struct Query;
@@ -16,6 +20,14 @@ impl Query {
context.db.all_languages().unwrap()
}
fn all_users(context: &Context, admin_key: String) -> FieldResult<Vec<User>> {
if admin_key == context.other_vars.admin_key {
context.db.all_users().map_err(Into::into)
} else {
Err(DatabaseError::new("Invalid admin key", "Invalid admin key").into())
}
}
#[graphql(
description = "Retrieve a specific language from its name and its owner's id",
arguments(