mirror of
				https://github.com/nitnelave/lldap.git
				synced 2023-04-12 14:25:13 +00:00 
			
		
		
		
	app: migrate user creation to GraphQL
This commit is contained in:
		
							parent
							
								
									351c7267d3
								
							
						
					
					
						commit
						cd7424e2c7
					
				
							
								
								
									
										6
									
								
								app/queries/create_user.graphql
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								app/queries/create_user.graphql
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,6 @@
 | 
			
		||||
mutation CreateUser($user: UserInput!) {
 | 
			
		||||
  createUser(user: $user) {
 | 
			
		||||
    id
 | 
			
		||||
    creationDate
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@ -1,7 +1,7 @@
 | 
			
		||||
use crate::cookies::set_cookie;
 | 
			
		||||
use anyhow::{anyhow, Context, Result};
 | 
			
		||||
use graphql_client::GraphQLQuery;
 | 
			
		||||
use lldap_model::*;
 | 
			
		||||
use lldap_model::{login, registration, JWTClaims};
 | 
			
		||||
 | 
			
		||||
use yew::callback::Callback;
 | 
			
		||||
use yew::format::Json;
 | 
			
		||||
@ -231,16 +231,4 @@ impl HostService {
 | 
			
		||||
            "Could not logout",
 | 
			
		||||
        )
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    pub fn create_user(
 | 
			
		||||
        request: CreateUserRequest,
 | 
			
		||||
        callback: Callback<Result<()>>,
 | 
			
		||||
    ) -> Result<FetchTask> {
 | 
			
		||||
        call_server_empty_response_with_error_message(
 | 
			
		||||
            "/api/users/create",
 | 
			
		||||
            &request,
 | 
			
		||||
            callback,
 | 
			
		||||
            "Could not create a user",
 | 
			
		||||
        )
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -1,6 +1,7 @@
 | 
			
		||||
use crate::api::HostService;
 | 
			
		||||
use anyhow::{anyhow, Context, Result};
 | 
			
		||||
use lldap_model::*;
 | 
			
		||||
use graphql_client::GraphQLQuery;
 | 
			
		||||
use lldap_model::{opaque, registration};
 | 
			
		||||
use yew::prelude::*;
 | 
			
		||||
use yew::services::{fetch::FetchTask, ConsoleService};
 | 
			
		||||
use yew_router::{
 | 
			
		||||
@ -8,6 +9,15 @@ use yew_router::{
 | 
			
		||||
    route::Route,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#[derive(GraphQLQuery)]
 | 
			
		||||
#[graphql(
 | 
			
		||||
    schema_path = "../schema.graphql",
 | 
			
		||||
    query_path = "queries/create_user.graphql",
 | 
			
		||||
    response_derives = "Debug",
 | 
			
		||||
    custom_scalars_module = "crate::graphql"
 | 
			
		||||
)]
 | 
			
		||||
pub struct CreateUser;
 | 
			
		||||
 | 
			
		||||
pub struct CreateUserForm {
 | 
			
		||||
    link: ComponentLink<Self>,
 | 
			
		||||
    route_dispatcher: RouteAgentDispatcher,
 | 
			
		||||
@ -19,7 +29,7 @@ pub struct CreateUserForm {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
pub enum Msg {
 | 
			
		||||
    CreateUserResponse(Result<()>),
 | 
			
		||||
    CreateUserResponse(Result<create_user::ResponseData>),
 | 
			
		||||
    SubmitForm,
 | 
			
		||||
    SuccessfulCreation,
 | 
			
		||||
    RegistrationStartResponse(Result<Box<registration::ServerRegistrationStartResponse>>),
 | 
			
		||||
@ -35,26 +45,33 @@ impl CreateUserForm {
 | 
			
		||||
    fn handle_msg(&mut self, msg: <Self as Component>::Message) -> Result<()> {
 | 
			
		||||
        match msg {
 | 
			
		||||
            Msg::SubmitForm => {
 | 
			
		||||
                let req = CreateUserRequest {
 | 
			
		||||
                    user_id: get_element("username")
 | 
			
		||||
                let req = create_user::Variables {
 | 
			
		||||
                    user: create_user::UserInput {
 | 
			
		||||
                        id: get_element("username")
 | 
			
		||||
                            .filter(not_empty)
 | 
			
		||||
                            .ok_or_else(|| anyhow!("Missing username"))?,
 | 
			
		||||
                        email: get_element("email")
 | 
			
		||||
                            .filter(not_empty)
 | 
			
		||||
                            .ok_or_else(|| anyhow!("Missing email"))?,
 | 
			
		||||
                    display_name: get_element("displayname").filter(not_empty),
 | 
			
		||||
                    first_name: get_element("firstname").filter(not_empty),
 | 
			
		||||
                    last_name: get_element("lastname").filter(not_empty),
 | 
			
		||||
                        displayName: get_element("displayname").filter(not_empty),
 | 
			
		||||
                        firstName: get_element("firstname").filter(not_empty),
 | 
			
		||||
                        lastName: get_element("lastname").filter(not_empty),
 | 
			
		||||
                    },
 | 
			
		||||
                };
 | 
			
		||||
                self._task = Some(
 | 
			
		||||
                    HostService::create_user(req, self.link.callback(Msg::CreateUserResponse))
 | 
			
		||||
                        .context("Error trying to create user")?,
 | 
			
		||||
                );
 | 
			
		||||
                self._task = Some(HostService::graphql_query::<CreateUser>(
 | 
			
		||||
                    req,
 | 
			
		||||
                    self.link.callback(Msg::CreateUserResponse),
 | 
			
		||||
                    "Error trying to create user",
 | 
			
		||||
                )?);
 | 
			
		||||
            }
 | 
			
		||||
            Msg::CreateUserResponse(r) => {
 | 
			
		||||
                if r.is_err() {
 | 
			
		||||
                    return r;
 | 
			
		||||
                }
 | 
			
		||||
                match r {
 | 
			
		||||
                    Err(e) => return Err(e),
 | 
			
		||||
                    Ok(r) => ConsoleService::log(&format!(
 | 
			
		||||
                        "Created user '{}' at '{}'",
 | 
			
		||||
                        &r.create_user.id, &r.create_user.creation_date
 | 
			
		||||
                    )),
 | 
			
		||||
                };
 | 
			
		||||
                let user_id = get_element("username")
 | 
			
		||||
                    .filter(not_empty)
 | 
			
		||||
                    .ok_or_else(|| anyhow!("Missing username"))?;
 | 
			
		||||
@ -183,7 +200,7 @@ impl Component for CreateUserForm {
 | 
			
		||||
                    <label for="password">{"Password:"}</label>
 | 
			
		||||
                    <input type="password" id="password" />
 | 
			
		||||
                </div>
 | 
			
		||||
                <button type="submit">{"Login"}</button>
 | 
			
		||||
                <button type="submit">{"Submit"}</button>
 | 
			
		||||
                <div>
 | 
			
		||||
                { if let Some(e) = &self.error {
 | 
			
		||||
                    html! { e.to_string() }
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user