mirror of
https://github.com/nitnelave/lldap.git
synced 2023-04-12 14:25:13 +00:00
57 lines
1.6 KiB
Rust
57 lines
1.6 KiB
Rust
|
use crate::domain::handler::BackendHandler;
|
||
|
use juniper::{graphql_object, FieldResult, GraphQLInputObject};
|
||
|
use lldap_model::UserDetailsRequest;
|
||
|
|
||
|
use super::api::Context;
|
||
|
|
||
|
#[derive(PartialEq, Eq, Debug)]
|
||
|
/// The top-level GraphQL mutation type.
|
||
|
pub struct Mutation<Handler: BackendHandler> {
|
||
|
_phantom: std::marker::PhantomData<Box<Handler>>,
|
||
|
}
|
||
|
|
||
|
impl<Handler: BackendHandler> Mutation<Handler> {
|
||
|
pub fn new() -> Self {
|
||
|
Self {
|
||
|
_phantom: std::marker::PhantomData,
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
#[derive(PartialEq, Eq, Debug, GraphQLInputObject)]
|
||
|
/// The details required to create a user.
|
||
|
pub struct UserInput {
|
||
|
id: String,
|
||
|
email: String,
|
||
|
display_name: Option<String>,
|
||
|
first_name: Option<String>,
|
||
|
last_name: Option<String>,
|
||
|
}
|
||
|
|
||
|
#[graphql_object(context = Context<Handler>)]
|
||
|
impl<Handler: BackendHandler + Sync> Mutation<Handler> {
|
||
|
async fn create_user(
|
||
|
context: &Context<Handler>,
|
||
|
user: UserInput,
|
||
|
) -> FieldResult<super::query::User<Handler>> {
|
||
|
if !context.validation_result.is_admin {
|
||
|
return Err("Unauthorized user creation".into());
|
||
|
}
|
||
|
context
|
||
|
.handler
|
||
|
.create_user(lldap_model::CreateUserRequest {
|
||
|
user_id: user.id.clone(),
|
||
|
email: user.email,
|
||
|
display_name: user.display_name,
|
||
|
first_name: user.first_name,
|
||
|
last_name: user.last_name,
|
||
|
})
|
||
|
.await?;
|
||
|
Ok(context
|
||
|
.handler
|
||
|
.get_user_details(UserDetailsRequest { user_id: user.id })
|
||
|
.await
|
||
|
.map(Into::into)?)
|
||
|
}
|
||
|
}
|