/// <summary> /// Prepares the object to serialize as JSON for adding/updating a User object /// </summary> /// <param name="user">The source User object</param> /// <param name="parser">The PnP Token Parser</param> /// <returns>The User object to serialize as JSON</returns> private object PrepareUserRequestContent(Model.AzureActiveDirectory.User user, TokenParser parser) { var content = new { accountEnabled = user.AccountEnabled, displayName = parser.ParseString(user.DisplayName), mailNickname = parser.ParseString(user.MailNickname), userPrincipalName = parser.ParseString(user.UserPrincipalName), givenName = parser.ParseString(user.GivenName), surname = parser.ParseString(user.Surname), jobTitle = parser.ParseString(user.JobTitle), mobilePhone = parser.ParseString(user.MobilePhone), officeLocation = parser.ParseString(user.OfficeLocation), preferredLanguage = parser.ParseString(user.PreferredLanguage), userType = "Member", usageLocation = parser.ParseString(user.UsageLocation), passwordPolicies = parser.ParseString(user.PasswordPolicies), passwordProfile = new { forceChangePasswordNextSignIn = user.PasswordProfile.ForceChangePasswordNextSignIn, forceChangePasswordNextSignInWithMfa = user.PasswordProfile.ForceChangePasswordNextSignInWithMfa, password = EncryptionUtility.ToInsecureString(user.PasswordProfile.Password), } }; return(content); }
/// <summary> /// Creates a User in AAD and configures password and services /// </summary> /// <param name="scope">The PnP Provisioning Scope</param> /// <param name="parser">The PnP Token Parser</param> /// <param name="user">The User to create</param> /// <param name="accessToken">The OAuth 2.0 Access Token</param> /// <returns>The ID of the User</returns> private object CreateOrUpdateUser(PnPMonitoredScope scope, TokenParser parser, Model.AzureActiveDirectory.User user, string accessToken) { var content = PrepareUserRequestContent(user, parser); var userId = GraphHelper.CreateOrUpdateGraphObject(scope, HttpMethodVerb.POST, $"{GraphHelper.MicrosoftGraphBaseURI}v1.0/users", content, HttpHelper.JsonContentType, accessToken, "ObjectConflict", CoreResources.Provisioning_ObjectHandlers_AAD_User_AlreadyExists, "userPrincipalName", parser.ParseString(user.UserPrincipalName), CoreResources.Provisioning_ObjectHandlers_AAD_User_ProvisioningError, canPatch: true); return(userId); }
/// <summary> /// Synchronizes User's Photo /// </summary> /// <param name="scope">The PnP Provisioning Scope</param> /// <param name="parser">The PnP Token Parser</param> /// <param name="connector">The PnP file connector</param> /// <param name="user">The target User</param> /// <param name="userId">The ID of the target User</param> /// <param name="accessToken">The OAuth 2.0 Access Token</param> /// <returns>Whether the Photo has been updated or not</returns> private static bool SetUserPhoto(PnPMonitoredScope scope, TokenParser parser, FileConnectorBase connector, Model.AzureActiveDirectory.User user, string userId, string accessToken) { Boolean result = false; if (!String.IsNullOrEmpty(user.ProfilePhoto) && connector != null) { var photoPath = parser.ParseString(user.ProfilePhoto); var photoBytes = ConnectorFileHelper.GetFileBytes(connector, user.ProfilePhoto); using (var mem = new MemoryStream()) { mem.Write(photoBytes, 0, photoBytes.Length); mem.Position = 0; HttpHelper.MakePostRequest( $"{GraphHelper.MicrosoftGraphBaseURI}v1.0/users/{userId}/photo/$value", mem, "image/jpeg", accessToken); } } return(result); }