mirror of
				https://github.com/nitnelave/lldap.git
				synced 2023-04-12 14:25:13 +00:00 
			
		
		
		
	Changed the struct to make things launch. I've done no testing.
This commit is contained in:
		
							parent
							
								
									665e525f0a
								
							
						
					
					
						commit
						cef5252a60
					
				@ -86,7 +86,7 @@ impl CommonComponent<CreateUserForm> for CreateUserForm {
 | 
			
		||||
                    user: create_user::CreateUserInput {
 | 
			
		||||
                        id: model.username,
 | 
			
		||||
                        email: model.email,
 | 
			
		||||
                        displayName: to_option(model.display_name),
 | 
			
		||||
                        displayName: model.display_name,
 | 
			
		||||
                        firstName: to_option(model.first_name),
 | 
			
		||||
                        lastName: to_option(model.last_name),
 | 
			
		||||
                        avatar: None,
 | 
			
		||||
 | 
			
		||||
@ -355,7 +355,7 @@ impl UserDetailsForm {
 | 
			
		||||
        let mut user_input = update_user::UpdateUserInput {
 | 
			
		||||
            id: self.common.user.id.clone(),
 | 
			
		||||
            email: None,
 | 
			
		||||
            displayName: None,
 | 
			
		||||
            displayName: self.common.user.id.clone(),
 | 
			
		||||
            firstName: None,
 | 
			
		||||
            lastName: None,
 | 
			
		||||
            avatar: None,
 | 
			
		||||
@ -367,7 +367,7 @@ impl UserDetailsForm {
 | 
			
		||||
            user_input.email = Some(email);
 | 
			
		||||
        }
 | 
			
		||||
        if base_user.display_name != model.display_name {
 | 
			
		||||
            user_input.displayName = Some(model.display_name);
 | 
			
		||||
            user_input.displayName = model.display_name;
 | 
			
		||||
        }
 | 
			
		||||
        if base_user.first_name != model.first_name {
 | 
			
		||||
            user_input.firstName = Some(model.first_name);
 | 
			
		||||
 | 
			
		||||
@ -57,7 +57,7 @@ type Query {
 | 
			
		||||
input CreateUserInput {
 | 
			
		||||
  id: String!
 | 
			
		||||
  email: String!
 | 
			
		||||
  displayName: String
 | 
			
		||||
  displayName: String!
 | 
			
		||||
  firstName: String
 | 
			
		||||
  lastName: String
 | 
			
		||||
  avatar: String
 | 
			
		||||
@ -84,7 +84,7 @@ type Success {
 | 
			
		||||
input UpdateUserInput {
 | 
			
		||||
  id: String!
 | 
			
		||||
  email: String
 | 
			
		||||
  displayName: String
 | 
			
		||||
  displayName: String!
 | 
			
		||||
  firstName: String
 | 
			
		||||
  lastName: String
 | 
			
		||||
  avatar: String
 | 
			
		||||
 | 
			
		||||
@ -1,7 +1,8 @@
 | 
			
		||||
use super::{
 | 
			
		||||
    error::Result,
 | 
			
		||||
    types::{
 | 
			
		||||
        Group, GroupDetails, GroupId, JpegPhoto, User, UserAndGroups, UserColumn, UserId, Uuid,
 | 
			
		||||
        DisplayName, Group, GroupDetails, GroupId, JpegPhoto, User, UserAndGroups, UserColumn,
 | 
			
		||||
        UserId, Uuid,
 | 
			
		||||
    },
 | 
			
		||||
};
 | 
			
		||||
use async_trait::async_trait;
 | 
			
		||||
@ -44,7 +45,7 @@ pub struct CreateUserRequest {
 | 
			
		||||
    // Same fields as User, but no creation_date, and with password.
 | 
			
		||||
    pub user_id: UserId,
 | 
			
		||||
    pub email: String,
 | 
			
		||||
    pub display_name: Option<String>,
 | 
			
		||||
    pub display_name: DisplayName,
 | 
			
		||||
    pub first_name: Option<String>,
 | 
			
		||||
    pub last_name: Option<String>,
 | 
			
		||||
    pub avatar: Option<JpegPhoto>,
 | 
			
		||||
@ -55,7 +56,7 @@ pub struct UpdateUserRequest {
 | 
			
		||||
    // Same fields as CreateUserRequest, but no with an extra layer of Option.
 | 
			
		||||
    pub user_id: UserId,
 | 
			
		||||
    pub email: Option<String>,
 | 
			
		||||
    pub display_name: Option<String>,
 | 
			
		||||
    pub display_name: DisplayName,
 | 
			
		||||
    pub first_name: Option<String>,
 | 
			
		||||
    pub last_name: Option<String>,
 | 
			
		||||
    pub avatar: Option<JpegPhoto>,
 | 
			
		||||
 | 
			
		||||
@ -48,7 +48,7 @@ fn get_user_attribute(
 | 
			
		||||
                .into_bytes()
 | 
			
		||||
            })
 | 
			
		||||
            .collect(),
 | 
			
		||||
        "cn" | "displayname" => vec![user.display_name.clone()?.into_bytes()],
 | 
			
		||||
        "cn" | "displayname" => vec![user.display_name.to_string().into_bytes()],
 | 
			
		||||
        "createtimestamp" | "modifytimestamp" => vec![user.creation_date.to_rfc3339().into_bytes()],
 | 
			
		||||
        "1.1" => return None,
 | 
			
		||||
        // We ignore the operational attribute wildcard.
 | 
			
		||||
 | 
			
		||||
@ -3,7 +3,7 @@
 | 
			
		||||
use sea_orm::entity::prelude::*;
 | 
			
		||||
use serde::{Deserialize, Serialize};
 | 
			
		||||
 | 
			
		||||
use crate::domain::types::{JpegPhoto, UserId, Uuid};
 | 
			
		||||
use crate::domain::types::{DisplayName, JpegPhoto, UserId, Uuid};
 | 
			
		||||
 | 
			
		||||
#[derive(Copy, Clone, Default, Debug, DeriveEntity)]
 | 
			
		||||
pub struct Entity;
 | 
			
		||||
@ -14,7 +14,7 @@ pub struct Model {
 | 
			
		||||
    #[sea_orm(primary_key, auto_increment = false)]
 | 
			
		||||
    pub user_id: UserId,
 | 
			
		||||
    pub email: String,
 | 
			
		||||
    pub display_name: Option<String>,
 | 
			
		||||
    pub display_name: DisplayName,
 | 
			
		||||
    pub first_name: Option<String>,
 | 
			
		||||
    pub last_name: Option<String>,
 | 
			
		||||
    pub avatar: Option<JpegPhoto>,
 | 
			
		||||
 | 
			
		||||
@ -26,7 +26,7 @@ pub mod tests {
 | 
			
		||||
                CreateUserRequest, GroupBackendHandler, UserBackendHandler, UserRequestFilter,
 | 
			
		||||
            },
 | 
			
		||||
            sql_tables::init_table,
 | 
			
		||||
            types::{GroupId, UserId},
 | 
			
		||||
            types::{DisplayName, GroupId, UserId},
 | 
			
		||||
        },
 | 
			
		||||
        infra::configuration::ConfigurationBuilder,
 | 
			
		||||
    };
 | 
			
		||||
@ -86,7 +86,7 @@ pub mod tests {
 | 
			
		||||
            .create_user(CreateUserRequest {
 | 
			
		||||
                user_id: UserId::new(name),
 | 
			
		||||
                email: "bob@bob.bob".to_string(),
 | 
			
		||||
                display_name: Some("display ".to_string() + name),
 | 
			
		||||
                display_name: DisplayName::new(("display ".to_owned() + name).as_str()),
 | 
			
		||||
                first_name: Some("first ".to_string() + name),
 | 
			
		||||
                last_name: Some("last ".to_string() + name),
 | 
			
		||||
                ..Default::default()
 | 
			
		||||
 | 
			
		||||
@ -163,7 +163,7 @@ impl UserBackendHandler for SqlBackendHandler {
 | 
			
		||||
        let new_user = model::users::ActiveModel {
 | 
			
		||||
            user_id: Set(request.user_id),
 | 
			
		||||
            email: Set(request.email),
 | 
			
		||||
            display_name: to_value(&request.display_name),
 | 
			
		||||
            display_name: ActiveValue::Set(request.display_name),
 | 
			
		||||
            first_name: to_value(&request.first_name),
 | 
			
		||||
            last_name: to_value(&request.last_name),
 | 
			
		||||
            avatar: request.avatar.into_active_value(),
 | 
			
		||||
@ -181,7 +181,7 @@ impl UserBackendHandler for SqlBackendHandler {
 | 
			
		||||
        let update_user = model::users::ActiveModel {
 | 
			
		||||
            user_id: ActiveValue::Set(request.user_id),
 | 
			
		||||
            email: request.email.map(ActiveValue::Set).unwrap_or_default(),
 | 
			
		||||
            display_name: to_value(&request.display_name),
 | 
			
		||||
            display_name: ActiveValue::Set(request.display_name),
 | 
			
		||||
            first_name: to_value(&request.first_name),
 | 
			
		||||
            last_name: to_value(&request.last_name),
 | 
			
		||||
            avatar: request.avatar.into_active_value(),
 | 
			
		||||
@ -238,7 +238,7 @@ mod tests {
 | 
			
		||||
    use super::*;
 | 
			
		||||
    use crate::domain::{
 | 
			
		||||
        sql_backend_handler::tests::*,
 | 
			
		||||
        types::{JpegPhoto, UserColumn},
 | 
			
		||||
        types::{DisplayName, JpegPhoto, UserColumn},
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    #[tokio::test]
 | 
			
		||||
@ -407,11 +407,7 @@ mod tests {
 | 
			
		||||
            .map(|u| {
 | 
			
		||||
                (
 | 
			
		||||
                    u.user.user_id.to_string(),
 | 
			
		||||
                    u.user
 | 
			
		||||
                        .display_name
 | 
			
		||||
                        .as_deref()
 | 
			
		||||
                        .unwrap_or("<unknown>")
 | 
			
		||||
                        .to_owned(),
 | 
			
		||||
                    u.user.display_name.to_string(),
 | 
			
		||||
                    u.groups
 | 
			
		||||
                        .unwrap_or_default()
 | 
			
		||||
                        .into_iter()
 | 
			
		||||
@ -567,7 +563,7 @@ mod tests {
 | 
			
		||||
            .update_user(UpdateUserRequest {
 | 
			
		||||
                user_id: UserId::new("bob"),
 | 
			
		||||
                email: Some("email".to_string()),
 | 
			
		||||
                display_name: Some("display_name".to_string()),
 | 
			
		||||
                display_name: DisplayName::new("display_name"),
 | 
			
		||||
                first_name: Some("first_name".to_string()),
 | 
			
		||||
                last_name: Some("last_name".to_string()),
 | 
			
		||||
                avatar: Some(JpegPhoto::for_tests()),
 | 
			
		||||
@ -581,7 +577,7 @@ mod tests {
 | 
			
		||||
            .await
 | 
			
		||||
            .unwrap();
 | 
			
		||||
        assert_eq!(user.email, "email");
 | 
			
		||||
        assert_eq!(user.display_name.unwrap(), "display_name");
 | 
			
		||||
        assert_eq!(user.display_name.as_str(), "display_name");
 | 
			
		||||
        assert_eq!(user.first_name.unwrap(), "first_name");
 | 
			
		||||
        assert_eq!(user.last_name.unwrap(), "last_name");
 | 
			
		||||
        assert_eq!(user.avatar, Some(JpegPhoto::for_tests()));
 | 
			
		||||
@ -607,7 +603,7 @@ mod tests {
 | 
			
		||||
            .get_user_details(&UserId::new("bob"))
 | 
			
		||||
            .await
 | 
			
		||||
            .unwrap();
 | 
			
		||||
        assert_eq!(user.display_name.unwrap(), "display bob");
 | 
			
		||||
        assert_eq!(user.display_name.as_str(), "display bob");
 | 
			
		||||
        assert_eq!(user.first_name.unwrap(), "first_name");
 | 
			
		||||
        assert_eq!(user.last_name, None);
 | 
			
		||||
        assert_eq!(user.avatar, None);
 | 
			
		||||
 | 
			
		||||
@ -167,6 +167,82 @@ impl ValueType for UserId {
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[derive(PartialEq, Eq, Clone, Debug, Default, Serialize, Deserialize)]
 | 
			
		||||
#[serde(from = "String")]
 | 
			
		||||
pub struct DisplayName(String);
 | 
			
		||||
 | 
			
		||||
impl DisplayName {
 | 
			
		||||
    pub fn new(display_name: &str) -> Self {
 | 
			
		||||
        Self(display_name.to_string())
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    pub fn as_str(&self) -> &str {
 | 
			
		||||
        self.0.as_str()
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    pub fn into_string(self) -> String {
 | 
			
		||||
        self.0
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl std::fmt::Display for DisplayName {
 | 
			
		||||
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
 | 
			
		||||
        write!(f, "{}", self.0)
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl From<String> for DisplayName {
 | 
			
		||||
    fn from(s: String) -> Self {
 | 
			
		||||
        Self::new(&s)
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl From<DisplayName> for Value {
 | 
			
		||||
    fn from(display_name: DisplayName) -> Self {
 | 
			
		||||
        display_name.into_string().into()
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl From<&DisplayName> for Value {
 | 
			
		||||
    fn from(display_name: &DisplayName) -> Self {
 | 
			
		||||
        display_name.as_str().into()
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl TryGetable for DisplayName {
 | 
			
		||||
    fn try_get(res: &QueryResult, pre: &str, col: &str) -> Result<Self, TryGetError> {
 | 
			
		||||
        Ok(DisplayName::new(&String::try_get(res, pre, col)?))
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl TryFromU64 for DisplayName {
 | 
			
		||||
    fn try_from_u64(_n: u64) -> Result<Self, DbErr> {
 | 
			
		||||
        Err(DbErr::ConvertFromU64(
 | 
			
		||||
            "DisplayName cannot be constructed from u64",
 | 
			
		||||
        ))
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl ValueType for DisplayName {
 | 
			
		||||
    fn try_from(v: Value) -> Result<Self, ValueTypeErr> {
 | 
			
		||||
        Ok(DisplayName::new(
 | 
			
		||||
            <String as ValueType>::try_from(v)?.as_str(),
 | 
			
		||||
        ))
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fn type_name() -> String {
 | 
			
		||||
        "DisplayName".to_owned()
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fn array_type() -> ArrayType {
 | 
			
		||||
        ArrayType::String
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fn column_type() -> ColumnType {
 | 
			
		||||
        ColumnType::String(Some(255))
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[derive(PartialEq, Eq, Clone, Debug, Serialize, Deserialize)]
 | 
			
		||||
pub struct JpegPhoto(#[serde(with = "serde_bytes")] Vec<u8>);
 | 
			
		||||
 | 
			
		||||
@ -304,7 +380,7 @@ impl IntoActiveValue<JpegPhoto> for JpegPhoto {
 | 
			
		||||
pub struct User {
 | 
			
		||||
    pub user_id: UserId,
 | 
			
		||||
    pub email: String,
 | 
			
		||||
    pub display_name: Option<String>,
 | 
			
		||||
    pub display_name: DisplayName,
 | 
			
		||||
    pub first_name: Option<String>,
 | 
			
		||||
    pub last_name: Option<String>,
 | 
			
		||||
    pub avatar: Option<JpegPhoto>,
 | 
			
		||||
@ -320,7 +396,7 @@ impl Default for User {
 | 
			
		||||
        User {
 | 
			
		||||
            user_id: UserId::default(),
 | 
			
		||||
            email: String::new(),
 | 
			
		||||
            display_name: None,
 | 
			
		||||
            display_name: DisplayName::default(),
 | 
			
		||||
            first_name: None,
 | 
			
		||||
            last_name: None,
 | 
			
		||||
            avatar: None,
 | 
			
		||||
 | 
			
		||||
@ -171,9 +171,7 @@ where
 | 
			
		||||
        Some(token) => token,
 | 
			
		||||
    };
 | 
			
		||||
    if let Err(e) = super::mail::send_password_reset_email(
 | 
			
		||||
        user.display_name
 | 
			
		||||
            .as_deref()
 | 
			
		||||
            .unwrap_or_else(|| user.user_id.as_str()),
 | 
			
		||||
        user.display_name.as_str(),
 | 
			
		||||
        &user.email,
 | 
			
		||||
        &token,
 | 
			
		||||
        &data.server_url,
 | 
			
		||||
 | 
			
		||||
@ -1,6 +1,6 @@
 | 
			
		||||
use crate::domain::{
 | 
			
		||||
    handler::{BackendHandler, CreateUserRequest, UpdateGroupRequest, UpdateUserRequest},
 | 
			
		||||
    types::{GroupId, JpegPhoto, UserId},
 | 
			
		||||
    types::{DisplayName, GroupId, JpegPhoto, UserId},
 | 
			
		||||
};
 | 
			
		||||
use anyhow::Context as AnyhowContext;
 | 
			
		||||
use juniper::{graphql_object, FieldResult, GraphQLInputObject, GraphQLObject};
 | 
			
		||||
@ -27,7 +27,7 @@ impl<Handler: BackendHandler> Mutation<Handler> {
 | 
			
		||||
pub struct CreateUserInput {
 | 
			
		||||
    id: String,
 | 
			
		||||
    email: String,
 | 
			
		||||
    display_name: Option<String>,
 | 
			
		||||
    display_name: String,
 | 
			
		||||
    first_name: Option<String>,
 | 
			
		||||
    last_name: Option<String>,
 | 
			
		||||
    // Base64 encoded JpegPhoto.
 | 
			
		||||
@ -39,7 +39,7 @@ pub struct CreateUserInput {
 | 
			
		||||
pub struct UpdateUserInput {
 | 
			
		||||
    id: String,
 | 
			
		||||
    email: Option<String>,
 | 
			
		||||
    display_name: Option<String>,
 | 
			
		||||
    display_name: String,
 | 
			
		||||
    first_name: Option<String>,
 | 
			
		||||
    last_name: Option<String>,
 | 
			
		||||
    // Base64 encoded JpegPhoto.
 | 
			
		||||
@ -79,6 +79,7 @@ impl<Handler: BackendHandler + Sync> Mutation<Handler> {
 | 
			
		||||
            return Err("Unauthorized user creation".into());
 | 
			
		||||
        }
 | 
			
		||||
        let user_id = UserId::new(&user.id);
 | 
			
		||||
        let display_name = DisplayName::new(&user.display_name);
 | 
			
		||||
        let avatar = user
 | 
			
		||||
            .avatar
 | 
			
		||||
            .map(base64::decode)
 | 
			
		||||
@ -92,7 +93,7 @@ impl<Handler: BackendHandler + Sync> Mutation<Handler> {
 | 
			
		||||
            .create_user(CreateUserRequest {
 | 
			
		||||
                user_id: user_id.clone(),
 | 
			
		||||
                email: user.email,
 | 
			
		||||
                display_name: user.display_name,
 | 
			
		||||
                display_name: display_name.clone(),
 | 
			
		||||
                first_name: user.first_name,
 | 
			
		||||
                last_name: user.last_name,
 | 
			
		||||
                avatar,
 | 
			
		||||
@ -137,6 +138,7 @@ impl<Handler: BackendHandler + Sync> Mutation<Handler> {
 | 
			
		||||
            debug!(?user.id);
 | 
			
		||||
        });
 | 
			
		||||
        let user_id = UserId::new(&user.id);
 | 
			
		||||
        let display_name = DisplayName::new(&user.display_name);
 | 
			
		||||
        if !context.validation_result.can_write(&user_id) {
 | 
			
		||||
            span.in_scope(|| debug!("Unauthorized"));
 | 
			
		||||
            return Err("Unauthorized user update".into());
 | 
			
		||||
@ -154,7 +156,7 @@ impl<Handler: BackendHandler + Sync> Mutation<Handler> {
 | 
			
		||||
            .update_user(UpdateUserRequest {
 | 
			
		||||
                user_id,
 | 
			
		||||
                email: user.email,
 | 
			
		||||
                display_name: user.display_name,
 | 
			
		||||
                display_name: display_name.clone(),
 | 
			
		||||
                first_name: user.first_name,
 | 
			
		||||
                last_name: user.last_name,
 | 
			
		||||
                avatar,
 | 
			
		||||
 | 
			
		||||
@ -214,7 +214,7 @@ impl<Handler: BackendHandler + Sync> User<Handler> {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fn display_name(&self) -> &str {
 | 
			
		||||
        self.user.display_name.as_deref().unwrap_or("")
 | 
			
		||||
        self.user.display_name.as_str()
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fn first_name(&self) -> &str {
 | 
			
		||||
 | 
			
		||||
@ -10,7 +10,7 @@ use crate::{
 | 
			
		||||
            },
 | 
			
		||||
        },
 | 
			
		||||
        opaque_handler::OpaqueHandler,
 | 
			
		||||
        types::{JpegPhoto, UserId},
 | 
			
		||||
        types::{DisplayName, JpegPhoto, UserId},
 | 
			
		||||
    },
 | 
			
		||||
    infra::auth_service::{Permission, ValidationResults},
 | 
			
		||||
};
 | 
			
		||||
@ -460,6 +460,8 @@ impl<Backend: BackendHandler + LoginHandler + OpaqueHandler> LdapHandler<Backend
 | 
			
		||||
            &self.ldap_info.base_dn,
 | 
			
		||||
            &self.ldap_info.base_dn_str,
 | 
			
		||||
        )?;
 | 
			
		||||
 | 
			
		||||
        //
 | 
			
		||||
        fn parse_attribute(mut attr: LdapPartialAttribute) -> LdapResult<(String, Vec<u8>)> {
 | 
			
		||||
            if attr.vals.len() > 1 {
 | 
			
		||||
                Err(LdapError {
 | 
			
		||||
@ -506,7 +508,12 @@ impl<Backend: BackendHandler + LoginHandler + OpaqueHandler> LdapHandler<Backend
 | 
			
		||||
                    .or_else(|| get_attribute("email"))
 | 
			
		||||
                    .transpose()?
 | 
			
		||||
                    .unwrap_or_default(),
 | 
			
		||||
                display_name: get_attribute("cn").transpose()?,
 | 
			
		||||
                display_name: DisplayName::new(
 | 
			
		||||
                    get_attribute("cn")
 | 
			
		||||
                        .transpose()?
 | 
			
		||||
                        .unwrap_or_default()
 | 
			
		||||
                        .as_str(),
 | 
			
		||||
                ),
 | 
			
		||||
                first_name: get_attribute("givenname").transpose()?,
 | 
			
		||||
                last_name: get_attribute("sn").transpose()?,
 | 
			
		||||
                avatar: attributes
 | 
			
		||||
@ -989,7 +996,7 @@ mod tests {
 | 
			
		||||
                    user: User {
 | 
			
		||||
                        user_id: UserId::new("bob_1"),
 | 
			
		||||
                        email: "bob@bobmail.bob".to_string(),
 | 
			
		||||
                        display_name: Some("Bôb Böbberson".to_string()),
 | 
			
		||||
                        display_name: DisplayName::new("Bôb Böbberson"),
 | 
			
		||||
                        first_name: Some("Bôb".to_string()),
 | 
			
		||||
                        last_name: Some("Böbberson".to_string()),
 | 
			
		||||
                        uuid: uuid!("698e1d5f-7a40-3151-8745-b9b8a37839da"),
 | 
			
		||||
@ -1001,7 +1008,7 @@ mod tests {
 | 
			
		||||
                    user: User {
 | 
			
		||||
                        user_id: UserId::new("jim"),
 | 
			
		||||
                        email: "jim@cricket.jim".to_string(),
 | 
			
		||||
                        display_name: Some("Jimminy Cricket".to_string()),
 | 
			
		||||
                        display_name: DisplayName::new("Jimminy Cricket"),
 | 
			
		||||
                        first_name: Some("Jim".to_string()),
 | 
			
		||||
                        last_name: Some("Cricket".to_string()),
 | 
			
		||||
                        avatar: Some(JpegPhoto::for_tests()),
 | 
			
		||||
@ -1540,7 +1547,7 @@ mod tests {
 | 
			
		||||
                user: User {
 | 
			
		||||
                    user_id: UserId::new("bob_1"),
 | 
			
		||||
                    email: "bob@bobmail.bob".to_string(),
 | 
			
		||||
                    display_name: Some("Bôb Böbberson".to_string()),
 | 
			
		||||
                    display_name: DisplayName::new("Bôb Böbberson"),
 | 
			
		||||
                    first_name: Some("Bôb".to_string()),
 | 
			
		||||
                    last_name: Some("Böbberson".to_string()),
 | 
			
		||||
                    ..Default::default()
 | 
			
		||||
@ -1614,7 +1621,7 @@ mod tests {
 | 
			
		||||
                user: User {
 | 
			
		||||
                    user_id: UserId::new("bob_1"),
 | 
			
		||||
                    email: "bob@bobmail.bob".to_string(),
 | 
			
		||||
                    display_name: Some("Bôb Böbberson".to_string()),
 | 
			
		||||
                    display_name: DisplayName::new("Bôb Böbberson"),
 | 
			
		||||
                    last_name: Some("Böbberson".to_string()),
 | 
			
		||||
                    avatar: Some(JpegPhoto::for_tests()),
 | 
			
		||||
                    uuid: uuid!("b4ac75e0-2900-3e21-926c-2f732c26b3fc"),
 | 
			
		||||
@ -2041,7 +2048,7 @@ mod tests {
 | 
			
		||||
            .with(eq(CreateUserRequest {
 | 
			
		||||
                user_id: UserId::new("bob"),
 | 
			
		||||
                email: "".to_owned(),
 | 
			
		||||
                display_name: Some("Bob".to_string()),
 | 
			
		||||
                display_name: DisplayName::new("Bob"),
 | 
			
		||||
                ..Default::default()
 | 
			
		||||
            }))
 | 
			
		||||
            .times(1)
 | 
			
		||||
 | 
			
		||||
@ -9,6 +9,7 @@ use crate::{
 | 
			
		||||
        handler::{CreateUserRequest, GroupBackendHandler, GroupRequestFilter, UserBackendHandler},
 | 
			
		||||
        sql_backend_handler::SqlBackendHandler,
 | 
			
		||||
        sql_opaque_handler::register_password,
 | 
			
		||||
        types::DisplayName,
 | 
			
		||||
    },
 | 
			
		||||
    infra::{cli::*, configuration::Configuration, db_cleaner::Scheduler, healthcheck, mail},
 | 
			
		||||
};
 | 
			
		||||
@ -33,7 +34,7 @@ async fn create_admin_user(handler: &SqlBackendHandler, config: &Configuration)
 | 
			
		||||
        .create_user(CreateUserRequest {
 | 
			
		||||
            user_id: config.ldap_user_dn.clone(),
 | 
			
		||||
            email: config.ldap_user_email.clone(),
 | 
			
		||||
            display_name: Some("Administrator".to_string()),
 | 
			
		||||
            display_name: DisplayName::new("Administrator"),
 | 
			
		||||
            ..Default::default()
 | 
			
		||||
        })
 | 
			
		||||
        .and_then(|_| register_password(handler, &config.ldap_user_dn, &config.ldap_user_pass))
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user