diff --git a/.build/ModulePackage.targets b/.build/ModulePackage.targets index d13a51f..d5eed10 100644 --- a/.build/ModulePackage.targets +++ b/.build/ModulePackage.targets @@ -60,7 +60,24 @@ - + + + + + + + + + + + + + + + + + + diff --git a/DotNetNuke.Authentication.Azure.B2C/App_LocalResources/UserManagement.ascx.de-de.resx b/DotNetNuke.Authentication.Azure.B2C/App_LocalResources/UserManagement.ascx.de-de.resx index b31b239..70ae277 100644 --- a/DotNetNuke.Authentication.Azure.B2C/App_LocalResources/UserManagement.ascx.de-de.resx +++ b/DotNetNuke.Authentication.Azure.B2C/App_LocalResources/UserManagement.ascx.de-de.resx @@ -420,4 +420,10 @@ Thank you, we appreciate your support. Sie werden das Passwort für + + Löschen + + + Das Benutzerkennwort wurde aktualisiert + \ No newline at end of file diff --git a/DotNetNuke.Authentication.Azure.B2C/App_LocalResources/UserManagement.ascx.es-es.resx b/DotNetNuke.Authentication.Azure.B2C/App_LocalResources/UserManagement.ascx.es-es.resx index b38f8e6..70b5b81 100644 --- a/DotNetNuke.Authentication.Azure.B2C/App_LocalResources/UserManagement.ascx.es-es.resx +++ b/DotNetNuke.Authentication.Azure.B2C/App_LocalResources/UserManagement.ascx.es-es.resx @@ -423,4 +423,10 @@ Gracias, apreciamos tu soporte. Nombre de usuario + + Eliminar + + + Contraseña cambiada con éxito + \ No newline at end of file diff --git a/DotNetNuke.Authentication.Azure.B2C/App_LocalResources/UserManagement.ascx.resx b/DotNetNuke.Authentication.Azure.B2C/App_LocalResources/UserManagement.ascx.resx index 72f9fe0..c6ae07b 100644 --- a/DotNetNuke.Authentication.Azure.B2C/App_LocalResources/UserManagement.ascx.resx +++ b/DotNetNuke.Authentication.Azure.B2C/App_LocalResources/UserManagement.ascx.resx @@ -423,4 +423,10 @@ Thank you, we appreciate your support. Username + + Delete + + + User password has been updated + \ No newline at end of file diff --git a/DotNetNuke.Authentication.Azure.B2C/AzureADB2C.Web/src/components/general/img/AADB2C.png b/DotNetNuke.Authentication.Azure.B2C/AzureADB2C.Web/src/components/general/img/AADB2C.png index a5571ce..225591c 100644 Binary files a/DotNetNuke.Authentication.Azure.B2C/AzureADB2C.Web/src/components/general/img/AADB2C.png and b/DotNetNuke.Authentication.Azure.B2C/AzureADB2C.Web/src/components/general/img/AADB2C.png differ diff --git a/DotNetNuke.Authentication.Azure.B2C/AzureADB2CLicense.txt b/DotNetNuke.Authentication.Azure.B2C/AzureADB2CLicense.txt index 14cc8b0..deccd92 100644 --- a/DotNetNuke.Authentication.Azure.B2C/AzureADB2CLicense.txt +++ b/DotNetNuke.Authentication.Azure.B2C/AzureADB2CLicense.txt @@ -1,5 +1,5 @@

Intelequia Software Solutions -
Copyright (c) 2019 by Intelequia Software Solutions

+
Copyright (c) 2010-2022 by Intelequia Software Solutions

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

\ No newline at end of file diff --git a/DotNetNuke.Authentication.Azure.B2C/AzureADB2CProvider.dnn b/DotNetNuke.Authentication.Azure.B2C/AzureADB2CProvider.dnn index 08fda30..bdf3a0b 100644 --- a/DotNetNuke.Authentication.Azure.B2C/AzureADB2CProvider.dnn +++ b/DotNetNuke.Authentication.Azure.B2C/AzureADB2CProvider.dnn @@ -1,10 +1,8 @@ - + DNN Azure Active Directory B2C Provider - - The DNN Azure Active Directory B2C Provider is an Authentication provider for DNN Platform that uses Azure Active Directory B2C OAuth2 authentication to authenticate users. - + The DNN Azure Active Directory B2C Provider is an Authentication provider for DNN Platform that uses Azure Active Directory B2C OAuth2 authentication to authenticate users. ~/DesktopModules/AuthenticationServices/AzureB2C/Images/azure.png Intelequia @@ -16,7 +14,7 @@ true - 09.03.00 + 09.04.03 Dnn.PersonaBar.UI @@ -67,6 +65,66 @@ bin Microsoft.IdentityModel.JsonWebTokens.dll + + bin + Microsoft.Graph.dll + + + bin + Microsoft.Graph.Core.dll + + + bin + Microsoft.Identity.Client.dll + + + bin + Microsoft.Bcl.AsyncInterfaces.dll + + + bin + Azure.Core.dll + + + bin + System.Text.Json.dll + + + bin + System.Threading.Tasks.Extensions.dll + + + bin + System.Text.Encodings.Web.dll + + + System.ValueTuple.dll + bin + + + System.Memory.dll + bin + + + bin + System.Memory.Data.dll + + + System.Diagnostics.DiagnosticSource.dll + bin + + + System.Runtime.CompilerServices.Unsafe.dll + bin + + + System.Buffers.dll + bin + + + System.Numerics.Vectors.dll + bin + @@ -151,36 +209,6 @@ - - - AzureAD.B2C.Impersonate - AzureAD.B2C.Impersonate - DotNetNuke.Authentication.Azure.B2C.Components.FeatureController - - - - - - AzureAD.B2C.Impersonate - 0 - - - - DesktopModules/AuthenticationServices/AzureB2C/Impersonate.ascx - False - - View - - - 0 - - - - - - - - web.config @@ -222,11 +250,9 @@ - + DNN Azure Active Directory B2C User Management - - The DNN Azure Active Directory B2C Provider is an Authentication provider for DNN Platform that uses Azure Active Directory B2C OAuth2 authentication to authenticate users. - + The DNN Azure Active Directory B2C Provider is an Authentication provider for DNN Platform that uses Azure Active Directory B2C OAuth2 authentication to authenticate users. ~/DesktopModules/AuthenticationServices/AzureB2C/Images/azure.png Intelequia @@ -238,7 +264,7 @@ true - 09.03.00 + 09.04.03 @@ -285,5 +311,55 @@ + + DNN Azure Active Directory B2C Impersonate + The DNN Azure Active Directory B2C Provider is an Authentication provider for DNN Platform that uses Azure Active Directory B2C OAuth2 authentication to authenticate users. + ~/DesktopModules/AuthenticationServices/AzureB2C/Images/azure.png + + Intelequia + Intelequia Software Solutions + http://intelequia.com + info@intelequia.com + + + + true + + 09.04.03 + + + + + + + AzureAD.B2C.Impersonate + AzureAD.B2C.Impersonate + DotNetNuke.Authentication.Azure.B2C.Components.FeatureController + + + + + + AzureAD.B2C.Impersonate + 0 + + + + DesktopModules/AuthenticationServices/AzureB2C/Impersonate.ascx + False + + View + + + 0 + + + + + + + + + diff --git a/DotNetNuke.Authentication.Azure.B2C/AzureADB2CReleaseNotes.txt b/DotNetNuke.Authentication.Azure.B2C/AzureADB2CReleaseNotes.txt index 4500549..81fe2a6 100644 --- a/DotNetNuke.Authentication.Azure.B2C/AzureADB2CReleaseNotes.txt +++ b/DotNetNuke.Authentication.Azure.B2C/AzureADB2CReleaseNotes.txt @@ -96,3 +96,11 @@
  • Added extensibility to the login stage, so that developers can add their own logic when the OAuth token is available and authorize or deny the login
+ +

Version 01.05.00

+
    +
  • Removed Azure AD Graph dependency. Now all working with Microsoft Graph API
  • +
  • Removed default user profile property mappings from installation
  • +
  • Fix for to avoid issues with case sensitive collations on databases
  • +
  • Fixed bug creating a duplicated desktop module definition during the install, causing a DNN error when editing pages
  • +
\ No newline at end of file diff --git a/DotNetNuke.Authentication.Azure.B2C/Components/AzureClient.cs b/DotNetNuke.Authentication.Azure.B2C/Components/AzureClient.cs index b3b4867..554d1c4 100644 --- a/DotNetNuke.Authentication.Azure.B2C/Components/AzureClient.cs +++ b/DotNetNuke.Authentication.Azure.B2C/Components/AzureClient.cs @@ -44,6 +44,7 @@ using System; using System.Collections.Generic; using System.Collections.Specialized; +using System.Configuration; using System.IdentityModel.Tokens; using System.IdentityModel.Tokens.Jwt; using System.IO; @@ -672,7 +673,7 @@ public override void AuthenticateUser(UserData user, PortalSettings settings, st } var usernamePrefixEnabled = bool.Parse(AzureConfig.GetSetting(AzureConfig.ServiceName, "UsernamePrefixEnabled", portalSettings.PortalId, "true")); - var usernameToFind = usernamePrefixEnabled ? $"azureb2c-{userClaim.Value}" : userClaim.Value; + var usernameToFind = usernamePrefixEnabled ? $"{AzureConfig.ServiceName}-{userClaim.Value}" : userClaim.Value; var userInfo = UserController.GetUserByName(portalSettings.PortalId, usernameToFind); // If user doesn't exist on current portal, AuthenticateUser() will create it. // Otherwise, AuthenticateUser will perform a Response.Redirect, so we have to sinchronize the roles before that, to avoid the ThreadAbortException caused by the Response.Redirect @@ -884,71 +885,91 @@ private void UpdateUserRoles(string aadUserId, UserInfo userInfo) var aadGroups = GraphClient.GetUserGroups(aadUserId); - if (aadGroups != null && aadGroups.Values != null) + if (aadGroups != null) { var groupPrefix = PrefixServiceToGroupName ? $"{Service}-" : ""; - var groups = aadGroups.Values; - if (syncOnlyMappedRoles) + while (aadGroups != null && aadGroups.Count > 0) { - groupPrefix = ""; - var b2cRoles = CustomRoleMappings.Select(rm => rm.B2cRoleName); - groups.RemoveAll(x => !b2cRoles.Contains(x.DisplayName)); - } + var groups = aadGroups.CurrentPage.OfType().ToList(); - var dnnB2cRoles = GetDnnB2cRoles(); - // In DNN, remove user from roles where the user doesn't belong to in AAD (we'll take care only the roles that we are synchronizing with B2C) - foreach (var dnnUserRole in userInfo.Roles.Where(role => dnnB2cRoles.Contains(role))) - { - var aadGroupName = dnnUserRole; - var roleName = dnnUserRole; - var mapping = CustomRoleMappings?.FirstOrDefault(x => x.DnnRoleName == dnnUserRole); - if (mapping != null) + var filter = ConfigurationManager.AppSettings["AzureADB2C.GetUserGroups.Filter"]; + if (!string.IsNullOrEmpty(filter)) { - aadGroupName = mapping.B2cRoleName; - roleName = mapping.DnnRoleName; + var onlyGroups = filter.Split(';'); + var g = new List(); + foreach (var f in onlyGroups) + { + var r = groups.Where(x => x.DisplayName.StartsWith(f)); + if (r.Count() > 0) + g.AddRange(r); + } + groups = g; } - if (groups.FirstOrDefault(aadGroup => $"{groupPrefix}{aadGroup.DisplayName}" == aadGroupName) == null) + + + if (syncOnlyMappedRoles) { - var role = RoleController.Instance.GetRoleByName(PortalSettings.Current.PortalId, roleName); - RoleController.DeleteUserRole(userInfo, role, PortalSettings.Current, false); + groupPrefix = ""; + var b2cRoles = CustomRoleMappings.Select(rm => rm.B2cRoleName); + groups.RemoveAll(x => !b2cRoles.Contains(x.DisplayName)); } - } - - foreach (var group in groups) - { - var roleToAssign = syncOnlyMappedRoles ? CustomRoleMappings.Find(r => r.B2cRoleName == group.DisplayName).DnnRoleName : $"{groupPrefix}{group.DisplayName}"; - var dnnRole = RoleController.Instance.GetRoleByName(PortalSettings.Current.PortalId, roleToAssign); - if (dnnRole == null) + var dnnB2cRoles = GetDnnB2cRoles(); + // In DNN, remove user from roles where the user doesn't belong to in AAD (we'll take care only the roles that we are synchronizing with B2C) + foreach (var dnnUserRole in userInfo.Roles.Where(role => dnnB2cRoles.Contains(role))) { - // Create role - var roleId = AddRole($"{groupPrefix}{group.DisplayName}", group.Description, true); - dnnRole = RoleController.Instance.GetRoleById(PortalSettings.Current.PortalId, roleId); - // Add user to Role - RoleController.Instance.AddUserRole(PortalSettings.Current.PortalId, - userInfo.UserID, - roleId, - RoleStatus.Approved, - false, - group.CreatedDateTime.HasValue ? group.CreatedDateTime.Value.DateTime : DotNetNuke.Common.Utilities.Null.NullDate, - DotNetNuke.Common.Utilities.Null.NullDate); + var aadGroupName = dnnUserRole; + var roleName = dnnUserRole; + var mapping = CustomRoleMappings?.FirstOrDefault(x => x.DnnRoleName == dnnUserRole); + if (mapping != null) + { + aadGroupName = mapping.B2cRoleName; + roleName = mapping.DnnRoleName; + } + if (groups.FirstOrDefault(aadGroup => $"{groupPrefix}{aadGroup.DisplayName}" == aadGroupName) == null) + { + var role = RoleController.Instance.GetRoleByName(PortalSettings.Current.PortalId, roleName); + RoleController.DeleteUserRole(userInfo, role, PortalSettings.Current, false); + } } - else + + foreach (var group in groups) { - // If user doesn't belong to that DNN role, let's add it - if (!userInfo.Roles.Contains(roleToAssign)) + var roleToAssign = syncOnlyMappedRoles ? CustomRoleMappings.Find(r => r.B2cRoleName == group.DisplayName).DnnRoleName : $"{groupPrefix}{group.DisplayName}"; + var dnnRole = RoleController.Instance.GetRoleByName(PortalSettings.Current.PortalId, roleToAssign); + + if (dnnRole == null) { - RoleController.Instance.AddUserRole(PortalSettings.Current.PortalId, - userInfo.UserID, - dnnRole.RoleID, - Security.Roles.RoleStatus.Approved, - false, - group.CreatedDateTime.HasValue ? group.CreatedDateTime.Value.DateTime : DateTime.Today, + // Create role + var roleId = AddRole($"{groupPrefix}{group.DisplayName}", group.Description, true); + dnnRole = RoleController.Instance.GetRoleById(PortalSettings.Current.PortalId, roleId); + // Add user to Role + RoleController.Instance.AddUserRole(PortalSettings.Current.PortalId, + userInfo.UserID, + roleId, + RoleStatus.Approved, + false, + group.CreatedDateTime.HasValue ? group.CreatedDateTime.Value.DateTime : DotNetNuke.Common.Utilities.Null.NullDate, DotNetNuke.Common.Utilities.Null.NullDate); } + else + { + // If user doesn't belong to that DNN role, let's add it + if (!userInfo.Roles.Contains(roleToAssign)) + { + RoleController.Instance.AddUserRole(PortalSettings.Current.PortalId, + userInfo.UserID, + dnnRole.RoleID, + Security.Roles.RoleStatus.Approved, + false, + group.CreatedDateTime.HasValue ? group.CreatedDateTime.Value.DateTime : DateTime.Today, + DotNetNuke.Common.Utilities.Null.NullDate); + } + } } + aadGroups = aadGroups.NextPageRequest?.GetSync(); } - } + } } catch (Exception e) { @@ -958,18 +979,22 @@ private void UpdateUserRoles(string aadUserId, UserInfo userInfo) private void UpdateUserProfilePicture(string aadUserId, UserInfo userInfo, bool saveUserInfo = false) { + if (!Settings.ProfileSyncEnabled) + { + return; + } try { if (!string.IsNullOrEmpty(aadUserId) && userInfo != null) { var profilePictureMetadata = GraphClient.GetUserProfilePictureMetadata(aadUserId); - if (profilePictureMetadata != null && !string.IsNullOrEmpty(profilePictureMetadata.ODataMediaContentType)) + if (profilePictureMetadata != null && profilePictureMetadata.AdditionalData.ContainsKey("@odata.mediaContentType")) { - var pictureBytes = GraphClient.GetUserProfilePicture(aadUserId); + var pictureBytes = GraphClient.GetUserProfilePicture(aadUserId); var userFolder = FolderManager.Instance.GetUserFolder(userInfo); var stream = new MemoryStream(pictureBytes); - var profilePictureInfo = FileManager.Instance.AddFile(userFolder, - $"{aadUserId}.{GetExtensionFromMediaContentType(profilePictureMetadata.ODataMediaContentType)}", + var profilePictureInfo = FileManager.Instance.AddFile(userFolder, + $"{aadUserId}.{GetExtensionFromMediaContentType(profilePictureMetadata.AdditionalData["@odata.mediaContentType"].ToString())}", stream, true); userInfo.Profile.Photo = profilePictureInfo.FileId.ToString(); @@ -985,7 +1010,6 @@ private void UpdateUserProfilePicture(string aadUserId, UserInfo userInfo, bool Logger.Warn($"Error while synchronizing user profile picture from user {aadUserId}", e); } } - private static string GetExtensionFromMediaContentType(string contentType) { switch (contentType) diff --git a/DotNetNuke.Authentication.Azure.B2C/Components/AzureUserData.cs b/DotNetNuke.Authentication.Azure.B2C/Components/AzureUserData.cs index 7ad7df8..b5c78a4 100644 --- a/DotNetNuke.Authentication.Azure.B2C/Components/AzureUserData.cs +++ b/DotNetNuke.Authentication.Azure.B2C/Components/AzureUserData.cs @@ -73,7 +73,7 @@ public UserInfo ToUserInfo(bool usernamePrefixEnabled) FirstName = this.FirstName, LastName = this.LastName, Email = this.Email, - Username = usernamePrefixEnabled ? $"AzureB2C-{this.Id}" : this.Id + Username = usernamePrefixEnabled ? $"{AzureConfig.ServiceName}-{this.Id}" : this.Id }; } diff --git a/DotNetNuke.Authentication.Azure.B2C/Components/B2CController.cs b/DotNetNuke.Authentication.Azure.B2C/Components/B2CController.cs index efd7ffb..99fcd37 100644 --- a/DotNetNuke.Authentication.Azure.B2C/Components/B2CController.cs +++ b/DotNetNuke.Authentication.Azure.B2C/Components/B2CController.cs @@ -245,7 +245,7 @@ internal UserInfo TryGetUser(JwtSecurityToken jwt, bool isImpersonation = false) private static UserInfo GetOrCreateCachedUserInfo(JwtSecurityToken jwt, PortalSettings portalSettings, System.Security.Claims.Claim userClaim) { var usernamePrefixEnabled = bool.Parse(AzureConfig.GetSetting(AzureConfig.ServiceName, "UsernamePrefixEnabled", portalSettings.PortalId, "true")); - var usernameToFind = usernamePrefixEnabled ? $"azureb2c-{userClaim.Value}" : userClaim.Value; + var usernameToFind = usernamePrefixEnabled ? $"{AzureConfig.ServiceName}-{userClaim.Value}" : userClaim.Value; var userInfo = UserController.GetUserByName(portalSettings.PortalId, usernameToFind); var tokenKey = ComputeSha256Hash(jwt.RawData); var cache = DotNetNuke.Services.Cache.CachingProvider.Instance(); diff --git a/DotNetNuke.Authentication.Azure.B2C/Components/Graph/GraphClient.cs b/DotNetNuke.Authentication.Azure.B2C/Components/Graph/GraphClient.cs index 2d1d41e..cbceb96 100644 --- a/DotNetNuke.Authentication.Azure.B2C/Components/Graph/GraphClient.cs +++ b/DotNetNuke.Authentication.Azure.B2C/Components/Graph/GraphClient.cs @@ -1,306 +1,330 @@ -using DotNetNuke.Authentication.Azure.B2C.Components.Graph.Models; -using Microsoft.IdentityModel.Clients.ActiveDirectory; -using Newtonsoft.Json; +using DotNetNuke.Authentication.Azure.B2C.Components.Models; +using DotNetNuke.Instrumentation; +using Microsoft.Graph; +using Microsoft.Identity.Client; using System; using System.Collections.Generic; -using System.Dynamic; +using System.Configuration; +using System.IO; using System.Linq; using System.Net; -using System.Net.Http; -using System.Net.Http.Headers; -using System.Text; +using System.Text.Json; using System.Threading.Tasks; namespace DotNetNuke.Authentication.Azure.B2C.Components.Graph { public class GraphClient { - private const string aadInstance = "https://login.microsoftonline.com/"; - private const string aadGraphResourceId = "https://graph.windows.net/"; - private const string aadGraphEndpoint = "https://graph.windows.net/"; - private const string aadGraphVersion = "api-version=1.6"; - private const string msGraphResourceId = "https://graph.microsoft.com/"; - private const string msGraphEndpoint = "https://graph.microsoft.com/"; - private const string msGraphVersion = "1.0"; - - private enum GraphApiVersion - { - beta, - latest - } + private static string[] Scopes = new[] { "https://graph.microsoft.com/.default" }; + private const string UserMembersToRetrieve = "id,displayName,surname,givenName,mail,mailNickname,otherMails,signInNames,userIdentities,identities,issuer,userPrincipalName,country,city,userType,accountEnabled,telephoneNumber,additionalData"; + private static readonly ILog Logger = LoggerSource.Instance.GetLogger(typeof(GraphClient)); - #region Properties - private string ClientId { get; set; } - private string ClientSecret { get; set; } - private string Tenant { get; set; } - private AuthenticationContext AuthContext { get; set; } - private ClientCredential Credential { get; set; } - #endregion + private readonly IConfidentialClientApplication _app; - #region Constructors - public GraphClient(string clientId, string clientSecret, string tenant) - { - // The client_id, client_secret, and tenant are pulled in from the App.config file - ClientId = clientId; - ClientSecret = clientSecret; - Tenant = tenant; + // Required for Advanced Queries + private readonly QueryOption OdataCount = new QueryOption("$count", "true"); + // Required for Advanced Queries + private readonly HeaderOption EventualConsistency = new HeaderOption("ConsistencyLevel", "eventual"); - // The AuthenticationContext is ADAL's primary class, in which you indicate the direcotry to use. - AuthContext = new AuthenticationContext(aadInstance + tenant); + public string CustomUserAttributes { get; set; } + public string B2CApplicationId { get; set; } + public UserMapping PortalIdUserMapping { get; set; } - // The ClientCredential is where you pass in your client_id and client_secret, which are - // provided to Azure AD in order to receive an access_token using the app's identity. - Credential = new ClientCredential(clientId, clientSecret); - } - #endregion - - public User GetUser(string objectId) + public GraphClient(string clientId, string clientSecret, string tenant, string customUserAttributes = "", string b2cApplicationId = "", UserMapping portalIdUserMapping = null) { - var result = SendAADGraphRequest("/users/" + objectId); - return JsonConvert.DeserializeObject(result); + CustomUserAttributes = customUserAttributes; + B2CApplicationId = b2cApplicationId; + PortalIdUserMapping = portalIdUserMapping; + _app = ConfidentialClientApplicationBuilder + .Create(clientId) + .WithClientSecret(clientSecret) + .WithAuthority(new Uri("https://login.microsoftonline.com/" + tenant)) + .Build(); + } - public GraphList GetAllUsers(string query) + // Gets a Graph client configured with + // the specified scopes + private GraphServiceClient GetGraphClient() { - //var result = SendGraphRequest("/users", query, apiVersion: GraphApiVersion.beta, consistencyLevel: "eventual"); - var result = SendAADGraphRequest("/users", query); - return JsonConvert.DeserializeObject>(result); + return GraphServiceClientFactory.GetAuthenticatedGraphClient(async () => + { + var token = await GetTokenAsync(_app); + return token; + } + ); } - public GraphList GetNextUsers(string nextLink) + + private async Task GetTokenAsync(IConfidentialClientApplication app) { - var result = SendAADGraphRequest("/" + nextLink); - return JsonConvert.DeserializeObject>(result); + string[] ResourceIds = Scopes; + try + { + var result = app.AcquireTokenForClient(ResourceIds).ExecuteSync(); + await Task.CompletedTask; + return result.AccessToken; + } + catch (MsalClientException ex) + { + Logger.Error(ex); + throw; + } } - public void DeleteUser(string objectId) + private void AddAdvancedOptions(IBaseRequest request) { - _ = SendGraphRequest("/users/" + objectId, httpMethod: HttpMethod.Delete); + request.QueryOptions.Add(OdataCount); + request.Headers.Add(EventualConsistency); + // Add extra options + var options = new JsonSerializerOptions + { + ReadCommentHandling = JsonCommentHandling.Skip, + AllowTrailingCommas = true, + WriteIndented = true + }; + + Serializer serializer = new Serializer(options); + IResponseHandler responseHandler = new ResponseHandler(serializer); // Our Response Handler with custom Serializer + ((BaseRequest) request).WithResponseHandler(responseHandler); } - public User AddUser(NewUser newUser) + public string GetExtensionAttributeName(string customAttributeName) { - var body = JsonConvert.SerializeObject(newUser); - var result = SendAADGraphRequest("/users", body: body, httpMethod: HttpMethod.Post); - return JsonConvert.DeserializeObject(result); + return $"extension_{B2CApplicationId.Replace("-", "")}_{customAttributeName.Replace(" ", "")}"; } - public void UpdateUser(User user) + private string GetCustomUserExtensions() { - var body = JsonConvert.SerializeObject(user); - _ = SendAADGraphRequest("/users/" + user.ObjectId, body: body, httpMethod: new HttpMethod("PATCH")); + var c = CustomUserAttributes; + if (string.IsNullOrEmpty(c)) + { + c = ConfigurationManager.AppSettings["AzureADB2C.CustomUserExtensions"] ?? ""; + } + if (PortalIdUserMapping != null + && !string.IsNullOrEmpty(PortalIdUserMapping?.GetB2cCustomClaimName()) + && !c.Split(',').Any(x => x.ToLowerInvariant() == PortalIdUserMapping?.GetB2cCustomClaimName())) + { + c = c + (string.IsNullOrEmpty(c) ? "" : ",") + PortalIdUserMapping?.GetB2cCustomClaimName(); + } + return string.Join(",", c.Split(',').Select(x => GetExtensionAttributeName(x))); } - public void UpdateUserPassword(NewUser user) + public User GetUser(string objectId) { - var body = JsonConvert.SerializeObject(user); - _ = SendAADGraphRequest("/users/" + user.ObjectId, body: body, httpMethod: new HttpMethod("PATCH")); + var graphClient = GetGraphClient(); + return graphClient.Users[objectId] + .Request() + .Select($"{UserMembersToRetrieve},{GetCustomUserExtensions()}") + .GetSync(); } - - public GraphList GetAllGroups(string query) + public IGraphServiceUsersCollectionPage GetAllUsers(string search = "") { - var result = SendAADGraphRequest("/groups", query); - return JsonConvert.DeserializeObject>(result); - } + var graphClient = GetGraphClient(); + var request = graphClient.Users.Request() + .Select($"{UserMembersToRetrieve},{GetCustomUserExtensions()}") + .Filter(search); + if (string.IsNullOrEmpty(search)) + { + request.OrderBy("displayName"); + } + + AddAdvancedOptions(request); - public GraphList GetNextGroups(string nextLink) - { - var result = SendAADGraphRequest("/" + nextLink); - return JsonConvert.DeserializeObject>(result); + return FixExtensionDataValues(request.GetSync()); } - public GraphList GetUserGroups(string userId) + // Workaround for "ValueKind" issue when deserializing from Microsoft Graph. Revisit this + private T FixExtensionDataValues(dynamic obs) { - var result = SendAADGraphRequest($"/users/{userId}/memberOf"); - //var result = await SendGraphGetRequest($"/users/{userId}/memberOf?$select=displayName,description", null); - return JsonConvert.DeserializeObject>(result); + foreach (var o in obs) + { + var data = o.AdditionalData; + if (data != null) + { + o.AdditionalData = new Dictionary(); + foreach (var d in data) + { + if (d.Key.StartsWith("extension_")) + { + o.AdditionalData.Add(d.Key, d.Value.ToString()); + } + } + } + } + return obs; } - public GraphList GetGroupMembers(string groupId) + public void DeleteUser(string objectId) { - var result = SendAADGraphRequest($"/groups/{groupId}/members"); - return JsonConvert.DeserializeObject>(result); + var graphClient = GetGraphClient(); + graphClient.Users[objectId].Request().DeleteSync(); } - public string GetAADObjectReference(string objectId) + public User AddUser(User newUser) { - return aadGraphEndpoint + Tenant + "/directoryObjects/" + objectId; - } - public string GetObjectReference(string objectId) - { - return msGraphEndpoint + msGraphVersion + "/directoryObjects/" + objectId; - } + if (newUser.AdditionalData == null) + { + newUser.AdditionalData = new Dictionary(); + } - public void AddGroupMember(string groupId, string userId) - { - var body = "{'url':'" + GetAADObjectReference(userId) + "'}"; - _ = SendAADGraphRequest($"/groups/{groupId}/$links/members", body: body, httpMethod: HttpMethod.Post); + var graphClient = GetGraphClient(); + return graphClient.Users.Request() + .AddSync(newUser); } - public void RemoveGroupMember(string groupId, string userId) + public User UpdateUser(User user) { - var result = SendAADGraphRequest($"/groups/{groupId}/$links/members/{userId}", httpMethod: HttpMethod.Delete); + var graphClient = GetGraphClient(); + return graphClient.Users[user.Id].Request() + .UpdateSync(user); } - public ProfilePictureMetadata GetUserProfilePictureMetadata(string userId) + public User UpdateUserPassword(User user) { - try - { - var result = SendGraphRequest("/users/" + userId + "/photo", apiVersion: GraphApiVersion.beta); - return JsonConvert.DeserializeObject(result); - } - catch (WebException) + // Downgrading the MS Graph Client from 4.x to 3.x, the user must be a new object instead of + // retrieving the current one + var tmpGraphUser = GetUser(user.Id); + //var tmpGraphUser = new User(); + tmpGraphUser.Id = user.Id; + tmpGraphUser.PasswordProfile = new PasswordProfile() { - // When the user doesn't have profile picture, the request throws a WebException - return null; - } + ForceChangePasswordNextSignIn = user.PasswordProfile.ForceChangePasswordNextSignIn, + Password = user.PasswordProfile.Password + }; + + // Note: if you get a "Insufficient privileges to complete the operation." error, ensure the service principal + // accessing graph has the "User administrator" or "Global Administrator" role. + // See https://docs.microsoft.com/en-us/answers/questions/9024/error-while-updating-the-password-profile.html + return UpdateUser(tmpGraphUser); } - public byte[] GetUserProfilePicture(string userId) + public IGraphServiceGroupsCollectionPage GetAllGroups(string search = "") { - try + string filter = ConfigurationManager.AppSettings["AzureADB2C.GetAllGroups.Filter"]; + if (!string.IsNullOrEmpty(search)) { - var metadata = GetUserProfilePictureMetadata(userId); - return SendGraphBinaryRequest("/users/" + userId + "/photo/$value", null, GraphApiVersion.beta); - } - catch (WebException) - { - // When the user doesn't have profile picture, the request throws a WebException - return null; + if (!string.IsNullOrEmpty(filter)) + { + filter += " and "; + } + filter += $"startswith(displayName, '{search}')"; } + var graphClient = GetGraphClient(); + var request = graphClient.Groups.Request() + .Filter(filter) + .OrderBy("displayName"); + AddAdvancedOptions(request); + return request.GetSync(); } - public GraphList GetApplications(string query) + public IUserMemberOfCollectionWithReferencesPage GetUserGroups(string userId) { - var result = SendAADGraphRequest("/applications", query); - return JsonConvert.DeserializeObject>(result); + var graphClient = GetGraphClient(); + return graphClient + .Users[userId] + .MemberOf + .Request() + .GetSync(); } - public Extension RegisterExtension(string appObjectId, Extension extension) + //public IGroupTransitiveMembersCollectionWithReferencesPage GetGroupMembers(string groupId) + //{ + // var graphClient = GetGraphClient(); + + // return graphClient.Groups[groupId].TransitiveMembers.Request() + // .Select($"{UserMembersToRetrieve},,{GetCustomUserExtensions()}") + // .OrderBy("displayName") + // .GetSync(); + //} + + public void UpdateGroupMembers(User user, List groups) { - var body = JsonConvert.SerializeObject(extension); - var result = SendAADGraphRequest("/applications/" + appObjectId + "/extensionProperties", body: body, httpMethod: HttpMethod.Post); - return JsonConvert.DeserializeObject(result); + var graphClient = GetGraphClient(); + var usersGroups = graphClient.Users[user.Id].MemberOf.Request().GetSync(); + foreach (var group in usersGroups) + { + if (!groups.Any(g => g.Id == group.Id)) + { + // User is no longer a member of the group, remove it. + graphClient.Groups[group.Id].Members[user.Id].Reference.Request().DeleteSync(); + } + } + foreach (var group in groups) + { + if (!usersGroups.Any(g => g.Id == group.Id)) + { + // User is not a member of the group, add them. + graphClient.Groups[group.Id].Members.References.Request().AddSync(user); + } + } } - public void UnregisterExtension(string appObjectId, string extensionObjectId) + public void AddGroupMember(string groupId, string userId) { - _ = SendAADGraphRequest("/applications/" + appObjectId + "/extensionProperties/" + extensionObjectId, httpMethod: HttpMethod.Delete); + var user = GetUser(userId); + AddGroupMember(groupId, user); } - - public GraphList GetExtensions(string appObjectId) + public void AddGroupMember(string groupId, User user) { - var result = SendAADGraphRequest("/applications/" + appObjectId + "/extensionProperties"); - return JsonConvert.DeserializeObject>(result); + var graphClient = GetGraphClient(); + graphClient.Groups[groupId].Members.References.Request().AddSync(user); } - public Models.Application GetB2CExtensionApplication() + public void RemoveGroupMember(string groupId, string userId) { - return GetApplications("$filter=startswith(displayName, 'b2c-extensions-app')").Values?.FirstOrDefault(); + var graphClient = GetGraphClient(); + graphClient.Groups[groupId].Members[userId].Reference.Request().DeleteSync(); } - private string SendAADGraphRequest(string api, string query = null, string body = null, HttpMethod httpMethod = null) + public ProfilePhoto GetUserProfilePictureMetadata(string userId) { - // First, use ADAL to acquire a token using the app's identity (the credential) - // The first parameter is the resource we want an access_token for; in this case, the Graph API. - var result = AuthContext.AcquireTokenAsync(aadGraphResourceId, Credential).Result; - - // For B2C user managment, be sure to use the 1.6 Graph API version. - using (var http = new HttpClient()) + try { - var url = aadGraphEndpoint + Tenant + api + (api.Contains("?") ? "&" : "?") + aadGraphVersion; - if (!string.IsNullOrEmpty(query)) - { - url += "&" + query; - } - - // Append the access token for the Graph API to the Authorization header of the request, using the Bearer scheme. - var request = new HttpRequestMessage(httpMethod ?? HttpMethod.Get, url); - request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", result.AccessToken); - if (!string.IsNullOrEmpty(body)) - { - request.Content = new StringContent(body, Encoding.UTF8, "application/json"); - } - var response = http.SendAsync(request).Result; - - if (!response.IsSuccessStatusCode) + var graphClient = GetGraphClient(); + return graphClient.Users[userId].Photo.Request().GetSync(); + } + catch (Exception ex) + { + if (Logger.IsDebugEnabled) { - var error = response.Content.ReadAsStringAsync().Result; - var formatted = JsonConvert.DeserializeObject(error); - throw new WebException("Error Calling the Graph API: \n" + JsonConvert.SerializeObject(formatted, Formatting.Indented)); + Logger.Debug(ex.Message, ex); } - return response.Content.ReadAsStringAsync().Result; + // When the user doesn't have profile picture, the request throws a WebException + return null; } } - private string SendGraphRequest(string api, string query = null, string body = null, GraphApiVersion apiVersion = GraphApiVersion.latest, HttpMethod httpMethod = null, string consistencyLevel = "") + public byte[] GetUserProfilePicture(string userId) { - // First, use ADAL to acquire a token using the app's identity (the credential) - // The first parameter is the resource we want an access_token for; in this case, the Graph API. - var result = AuthContext.AcquireTokenAsync(msGraphResourceId, Credential).Result; - - // For B2C user managment, be sure to use the 1.6 Graph API version. - using (var http = new HttpClient()) + try { - var url = msGraphEndpoint + (apiVersion == GraphApiVersion.latest ? "v" + msGraphVersion : "beta") + "/" + Tenant + api; - if (!string.IsNullOrEmpty(query)) + var graphClient = GetGraphClient(); + var stream = graphClient.Users[userId].Photo.Content.Request().GetSync(); + using (var memoryStream = new MemoryStream()) { - url += "?" + query; + stream.CopyTo(memoryStream); + return memoryStream.ToArray(); } - - // Append the access token for the Graph API to the Authorization header of the request, using the Bearer scheme. - var request = new HttpRequestMessage(httpMethod ?? HttpMethod.Get, url); - request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", result.AccessToken); - if (!string.IsNullOrEmpty(consistencyLevel)) - { - request.Headers.Add("ConsistencyLevel", consistencyLevel); - } - if (!string.IsNullOrEmpty(body)) - { - request.Content = new StringContent(body, Encoding.UTF8, "application/json"); - } - var response = http.SendAsync(request).Result; - - if (!response.IsSuccessStatusCode) + } + catch (WebException ex) + { + if (Logger.IsDebugEnabled) { - var error = response.Content.ReadAsStringAsync().Result; - var formatted = JsonConvert.DeserializeObject(error); - throw new WebException("Error Calling the Graph API: \n" + JsonConvert.SerializeObject(formatted, Formatting.Indented)); + Logger.Debug(ex.Message, ex); } - return response.Content.ReadAsStringAsync().Result; + // When the user doesn't have profile picture or the API permission + // User.Read.All for Type Application has not been consent + return null; } } - private byte[] SendGraphBinaryRequest(string api, string query, GraphApiVersion apiVersion = GraphApiVersion.latest, HttpMethod httpMethod = null) + internal Microsoft.Graph.Application GetB2CExtensionApplication() { - // First, use ADAL to acquire a token using the app's identity (the credential) - // The first parameter is the resource we want an access_token for; in this case, the Graph API. - var result = AuthContext.AcquireTokenAsync(msGraphResourceId, Credential).Result; - - // For B2C user managment, be sure to use the 1.6 Graph API version. - using (var http = new HttpClient()) - { - var url = msGraphEndpoint + (apiVersion == GraphApiVersion.latest ? msGraphVersion : "beta") + api; - if (!string.IsNullOrEmpty(query)) - { - url += "&" + query; - } - - // Append the access token for the Graph API to the Authorization header of the request, using the Bearer scheme. - var request = new HttpRequestMessage(httpMethod ?? HttpMethod.Get, url); - request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", result.AccessToken); - var response = http.SendAsync(request).Result; - - if (!response.IsSuccessStatusCode) - { - var error = response.Content.ReadAsStringAsync().Result; - var formatted = JsonConvert.DeserializeObject(error); - throw new WebException("Error Calling the Graph API: \n" + JsonConvert.SerializeObject(formatted, Formatting.Indented)); - } - - return response.Content.ReadAsByteArrayAsync().Result; - } + var graphClient = GetGraphClient(); + var apps = graphClient.Applications.Request().Filter("startswith(displayName, 'b2c-extensions-app')").GetSync(); + return apps?.FirstOrDefault(); } } } diff --git a/DotNetNuke.Authentication.Azure.B2C/Components/Graph/GraphExtensions.cs b/DotNetNuke.Authentication.Azure.B2C/Components/Graph/GraphExtensions.cs new file mode 100644 index 0000000..7a7f230 --- /dev/null +++ b/DotNetNuke.Authentication.Azure.B2C/Components/Graph/GraphExtensions.cs @@ -0,0 +1,191 @@ +using Microsoft.Graph; +using Microsoft.Identity.Client; +using System.IO; +using System.Threading; +using System.Threading.Tasks; + +namespace DotNetNuke.Authentication.Azure.B2C.Components.Graph +{ + // Added Sync extensions methods because the current Graph nuget package is + // getting frozen on async calls. Horrible workaround but can't get it working. + // See https://stackoverflow.com/questions/55105321/microsoft-graph-getasync-hangs-indefinitely + // See https://stackoverflow.com/questions/66109869/getting-an-access-token-for-the-graph-api-works-in-a-console-app-but-just-hangs + internal static class GraphExtensions + { + internal static IUserMemberOfCollectionWithReferencesPage GetSync(this IUserMemberOfCollectionWithReferencesRequest request) + { + using (var task = Task.Run(async () => await request.GetAsync())) + { + while (!task.IsCompleted) + Thread.Sleep(10); + return task.Result; + } + } + internal static User GetSync(this IUserRequest request) + { + using (var task = Task.Run(async () => await request.GetAsync())) + { + while (!task.IsCompleted) + Thread.Sleep(10); + return task.Result; + } + } + + internal static ProfilePhoto GetSync(this IProfilePhotoRequest request) + { + using (var task = Task.Run(async () => await request.GetAsync())) + { + while (!task.IsCompleted) + Thread.Sleep(10); + return task.Result; + } + } + + internal static Stream GetSync(this IProfilePhotoContentRequest request) + { + using (var task = Task.Run(async () => await request.GetAsync())) + { + while (!task.IsCompleted) + Thread.Sleep(10); + return task.Result; + } + } + + + + internal static void DeleteSync(this IUserRequest request) + { + using (var task = Task.Run(async () => await request.DeleteAsync())) + { + while (!task.IsCompleted) + Thread.Sleep(10); + return; + } + } + + internal static IGraphServiceUsersCollectionPage GetSync(this IGraphServiceUsersCollectionRequest request) + { + using (var task = Task.Run(async () => await request.GetAsync())) + { + while (!task.IsCompleted) + Thread.Sleep(10); + return task.Result; + } + } + + internal static User AddSync(this IGraphServiceUsersCollectionRequest request, User user) + { + using (var task = Task.Run(async () => await request.AddAsync(user))) + { + while (!task.IsCompleted) + Thread.Sleep(10); + return task.Result; + } + } + + internal static IGraphServiceApplicationsCollectionPage GetSync(this IGraphServiceApplicationsCollectionRequest request) + { + using (var task = Task.Run(async () => await request.GetAsync())) + { + while (!task.IsCompleted) + Thread.Sleep(10); + return task.Result; + } + } + + internal static User UpdateSync(this IUserRequest request, User user) + { + using (var task = Task.Run(async () => await request.UpdateAsync(user))) + { + while (!task.IsCompleted) + Thread.Sleep(10); + return task.Result; + } + } + + internal static IGraphServiceGroupsCollectionPage GetSync(this IGraphServiceGroupsCollectionRequest request) + { + using (var task = Task.Run(async () => await request.GetAsync())) + { + while (!task.IsCompleted) + Thread.Sleep(10); + return task.Result; + } + } + + internal static IGroupTransitiveMembersCollectionWithReferencesPage GetSync(this IGroupTransitiveMembersCollectionWithReferencesRequest request) + { + using (var task = Task.Run(async () => await request.GetAsync())) + { + while (!task.IsCompleted) + Thread.Sleep(10); + return task.Result; + } + } + + + internal static Group AddSync(this IGraphServiceGroupsCollectionRequest request, Group group) + { + using (var task = Task.Run(async () => await request.AddAsync(group))) + { + while (!task.IsCompleted) + Thread.Sleep(10); + return task.Result; + } + } + + + + internal static Group UpdateSync(this IGroupRequest request, Group group) + { + using (var task = Task.Run(async () => await request.UpdateAsync(group))) + { + while (!task.IsCompleted) + Thread.Sleep(10); + return task.Result; + } + } + + + internal static void AddSync(this IGroupMembersCollectionReferencesRequest request, User user) + { + using (var task = Task.Run(async () => await request.AddAsync(user))) + { + while (!task.IsCompleted) + Thread.Sleep(10); + return; + } + } + + internal static void DeleteSync(this IDirectoryObjectReferenceRequest request) + { + using (var task = Task.Run(async () => await request.DeleteAsync())) + { + while (!task.IsCompleted) + Thread.Sleep(10); + return; + } + } + + + internal static AuthenticationResult ExecuteSync(this AcquireTokenForClientParameterBuilder request) + { + using (var task = Task.Run(async () => await request.ExecuteAsync())) + { + while (!task.IsCompleted) + Thread.Sleep(10); + return task.Result; + } + } + + internal static T RunSynchronous(this Task t) + { + using (var task = Task.Run(async () => await t)) + { + while (!task.IsCompleted) + Thread.Sleep(10); + return task.Result; + } + } + } +} diff --git a/DotNetNuke.Authentication.Azure.B2C/Components/Graph/GraphServiceClientFactory.cs b/DotNetNuke.Authentication.Azure.B2C/Components/Graph/GraphServiceClientFactory.cs new file mode 100644 index 0000000..7e4d447 --- /dev/null +++ b/DotNetNuke.Authentication.Azure.B2C/Components/Graph/GraphServiceClientFactory.cs @@ -0,0 +1,38 @@ +using Microsoft.Graph; +using System; +using System.Net.Http; +using System.Net.Http.Headers; +using System.Threading.Tasks; + +namespace DotNetNuke.Authentication.Azure.B2C.Components.Graph +{ + internal static class GraphServiceClientFactory + { + public static GraphServiceClient GetAuthenticatedGraphClient( + Func> acquireAccessToken) + { + return new GraphServiceClient( + new CustomAuthenticationProvider(acquireAccessToken) + ); + } + } + + class CustomAuthenticationProvider : IAuthenticationProvider + { + private readonly Func> _acquireAccessToken; + public CustomAuthenticationProvider(Func> acquireAccessToken) + { + _acquireAccessToken = acquireAccessToken; + } + + public async Task AuthenticateRequestAsync(HttpRequestMessage requestMessage) + { + var accessToken = await _acquireAccessToken.Invoke(); + + // Add the token in the Authorization header + requestMessage.Headers.Authorization = new AuthenticationHeaderValue( + "Bearer", accessToken + ); + } + } +} diff --git a/DotNetNuke.Authentication.Azure.B2C/Components/Graph/Models/Application.cs b/DotNetNuke.Authentication.Azure.B2C/Components/Graph/Models/Application.cs deleted file mode 100644 index b82762a..0000000 --- a/DotNetNuke.Authentication.Azure.B2C/Components/Graph/Models/Application.cs +++ /dev/null @@ -1,45 +0,0 @@ -#region Copyright - -// -// Intelequia Software solutions - https://intelequia.com -// Copyright (c) 2019 -// by Intelequia Software Solutions -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated -// documentation files (the "Software"), to deal in the Software without restriction, including without limitation -// the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and -// to permit persons to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or substantial portions -// of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED -// TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF -// CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -#endregion - -using Newtonsoft.Json; - -namespace DotNetNuke.Authentication.Azure.B2C.Components.Graph.Models -{ - [JsonObject(MemberSerialization = MemberSerialization.OptIn)] - public class Application : DirectoryObject - { - - [JsonProperty(NullValueHandling = NullValueHandling.Ignore, PropertyName = "objectType", Required = Required.Default)] - public string ObjectType { get; set; } - - [JsonProperty(NullValueHandling = NullValueHandling.Ignore, PropertyName = "appId", Required = Required.Default)] - public string AppId { get; set; } - - [JsonProperty(NullValueHandling = NullValueHandling.Ignore, PropertyName = "displayName", Required = Required.Default)] - public string DisplayName { get; set; } - - [JsonProperty(NullValueHandling = NullValueHandling.Ignore, PropertyName = "publisherDomain", Required = Required.Default)] - public string PublisherDomain { get; set; } - - } -} diff --git a/DotNetNuke.Authentication.Azure.B2C/Components/Graph/Models/DirectoryObject.cs b/DotNetNuke.Authentication.Azure.B2C/Components/Graph/Models/DirectoryObject.cs deleted file mode 100644 index 5fbbf83..0000000 --- a/DotNetNuke.Authentication.Azure.B2C/Components/Graph/Models/DirectoryObject.cs +++ /dev/null @@ -1,40 +0,0 @@ -#region Copyright - -// -// Intelequia Software solutions - https://intelequia.com -// Copyright (c) 2019 -// by Intelequia Software Solutions -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated -// documentation files (the "Software"), to deal in the Software without restriction, including without limitation -// the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and -// to permit persons to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or substantial portions -// of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED -// TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF -// CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -#endregion - -using Newtonsoft.Json; -using System; - -namespace DotNetNuke.Authentication.Azure.B2C.Components.Graph.Models -{ - [JsonObject(MemberSerialization = MemberSerialization.OptIn)] - public partial class DirectoryObject : Entity - { - - /// - /// Gets or sets deleted date time. - /// - [JsonProperty(NullValueHandling = NullValueHandling.Ignore, PropertyName = "deletedDateTime", Required = Newtonsoft.Json.Required.Default)] - public DateTimeOffset? DeletedDateTime { get; set; } - - } -} diff --git a/DotNetNuke.Authentication.Azure.B2C/Components/Graph/Models/Entity.cs b/DotNetNuke.Authentication.Azure.B2C/Components/Graph/Models/Entity.cs deleted file mode 100644 index 603ae2b..0000000 --- a/DotNetNuke.Authentication.Azure.B2C/Components/Graph/Models/Entity.cs +++ /dev/null @@ -1,69 +0,0 @@ -#region Copyright - -// -// Intelequia Software solutions - https://intelequia.com -// Copyright (c) 2019 -// by Intelequia Software Solutions -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated -// documentation files (the "Software"), to deal in the Software without restriction, including without limitation -// the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and -// to permit persons to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or substantial portions -// of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED -// TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF -// CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -#endregion - -using Newtonsoft.Json; -using System.Collections.Generic; - -namespace DotNetNuke.Authentication.Azure.B2C.Components.Graph.Models -{ - [JsonObject(MemberSerialization = MemberSerialization.OptIn)] - public partial class Entity - { - - /// - /// The internal Entity constructor - /// - protected internal Entity() - { - // Don't allow initialization of abstract entity types - AdditionalData = new Dictionary(); - } - - /// - /// Gets or sets id. - /// Read-only. - /// - [JsonProperty(NullValueHandling = NullValueHandling.Ignore, PropertyName = "id", Required = Newtonsoft.Json.Required.Default)] - public string Id { get; set; } - - /// - /// Gets or sets id. - /// Read-only. - /// - [JsonProperty(NullValueHandling = NullValueHandling.Ignore, PropertyName = "objectId", Required = Newtonsoft.Json.Required.Default)] - public string ObjectId { get; set; } - - /// - /// Gets or sets @odata.type. - /// - [JsonProperty(NullValueHandling = NullValueHandling.Ignore, PropertyName = "@odata.type", Required = Newtonsoft.Json.Required.Default)] - public string ODataType { get; set; } - - /// - /// Gets or sets additional data. - /// - [JsonExtensionData(ReadData = true, WriteData = true)] - public IDictionary AdditionalData { get; set; } - - } -} diff --git a/DotNetNuke.Authentication.Azure.B2C/Components/Graph/Models/Extension.cs b/DotNetNuke.Authentication.Azure.B2C/Components/Graph/Models/Extension.cs deleted file mode 100644 index 483c6a7..0000000 --- a/DotNetNuke.Authentication.Azure.B2C/Components/Graph/Models/Extension.cs +++ /dev/null @@ -1,49 +0,0 @@ -#region Copyright - -// -// Intelequia Software solutions - https://intelequia.com -// Copyright (c) 2019 -// by Intelequia Software Solutions -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated -// documentation files (the "Software"), to deal in the Software without restriction, including without limitation -// the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and -// to permit persons to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or substantial portions -// of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED -// TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF -// CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -#endregion - -using Newtonsoft.Json; - -namespace DotNetNuke.Authentication.Azure.B2C.Components.Graph.Models -{ - [JsonObject(MemberSerialization = MemberSerialization.OptIn)] - public class Extension : DirectoryObject - { - [JsonProperty(NullValueHandling = NullValueHandling.Ignore, PropertyName = "objectType", Required = Required.Default)] - public string ObjectType { get; set; } - - [JsonProperty(NullValueHandling = NullValueHandling.Ignore, PropertyName = "appDisplayName", Required = Required.Default)] - public string AppDisplayName { get; set; } - - [JsonProperty(NullValueHandling = NullValueHandling.Ignore, PropertyName = "name", Required = Required.Default)] - public string Name { get; set; } - - [JsonProperty(NullValueHandling = NullValueHandling.Ignore, PropertyName = "dataType", Required = Required.Default)] - public string DataType { get; set; } - - [JsonProperty(NullValueHandling = NullValueHandling.Ignore, PropertyName = "isSyncedFromOnPremises", Required = Required.Default)] - public bool? IsSyncedFromOnPremises { get; set; } - - [JsonProperty(NullValueHandling = NullValueHandling.Ignore, PropertyName = "targetObjects", Required = Required.Default)] - public string[] TargetObjects { get; set; } - } -} diff --git a/DotNetNuke.Authentication.Azure.B2C/Components/Graph/Models/GraphList.cs b/DotNetNuke.Authentication.Azure.B2C/Components/Graph/Models/GraphList.cs deleted file mode 100644 index 0bfda25..0000000 --- a/DotNetNuke.Authentication.Azure.B2C/Components/Graph/Models/GraphList.cs +++ /dev/null @@ -1,44 +0,0 @@ -#region Copyright - -// -// Intelequia Software solutions - https://intelequia.com -// Copyright (c) 2019 -// by Intelequia Software Solutions -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated -// documentation files (the "Software"), to deal in the Software without restriction, including without limitation -// the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and -// to permit persons to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or substantial portions -// of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED -// TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF -// CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -#endregion - -using Newtonsoft.Json; -using System.Collections.Generic; - -namespace DotNetNuke.Authentication.Azure.B2C.Components.Graph.Models -{ - [JsonObject(MemberSerialization = MemberSerialization.OptIn)] - public class GraphList - { - [JsonProperty(NullValueHandling = NullValueHandling.Ignore, PropertyName = "odata.metadata", Required = Required.Default)] - public string ODataMetadata { get; set; } - - [JsonProperty(NullValueHandling = NullValueHandling.Ignore, PropertyName = "odata.context", Required = Required.Default)] - public string ODataContext { get; set; } - - [JsonProperty(NullValueHandling = NullValueHandling.Ignore, PropertyName = "odata.nextlink", Required = Required.Default)] - public string ODataNextLink { get; set; } - - [JsonProperty(NullValueHandling = NullValueHandling.Ignore, PropertyName = "value", Required = Required.Default)] - public List Values { get; set; } - } -} diff --git a/DotNetNuke.Authentication.Azure.B2C/Components/Graph/Models/Group.cs b/DotNetNuke.Authentication.Azure.B2C/Components/Graph/Models/Group.cs deleted file mode 100644 index 56ef5f5..0000000 --- a/DotNetNuke.Authentication.Azure.B2C/Components/Graph/Models/Group.cs +++ /dev/null @@ -1,53 +0,0 @@ -#region Copyright - -// -// Intelequia Software solutions - https://intelequia.com -// Copyright (c) 2019 -// by Intelequia Software Solutions -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated -// documentation files (the "Software"), to deal in the Software without restriction, including without limitation -// the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and -// to permit persons to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or substantial portions -// of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED -// TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF -// CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -#endregion - -using Newtonsoft.Json; -using System; - -namespace DotNetNuke.Authentication.Azure.B2C.Components.Graph.Models -{ - [JsonObject(MemberSerialization = MemberSerialization.OptIn)] - public class Group : DirectoryObject - { - /// - /// Gets or sets description. - /// An optional description for the group. Returned by default. - /// - [JsonProperty(NullValueHandling = NullValueHandling.Ignore, PropertyName = "description", Required = Newtonsoft.Json.Required.Default)] - public string Description { get; set; } - - /// - /// Gets or sets display name. - /// The display name for the group. This property is required when a group is created and cannot be cleared during updates. Returned by default. Supports $filter and $orderby. - /// - [JsonProperty(NullValueHandling = NullValueHandling.Ignore, PropertyName = "displayName", Required = Newtonsoft.Json.Required.Default)] - public string DisplayName { get; set; } - - /// - /// Gets or sets created date time. - /// Timestamp of when the group was created. The value cannot be modified and is automatically populated when the group is created. The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 would look like this: '2014-01-01T00:00:00Z'. Returned by default. Read-only. - /// - [JsonProperty(NullValueHandling = NullValueHandling.Ignore, PropertyName = "createdDateTime", Required = Newtonsoft.Json.Required.Default)] - public DateTimeOffset? CreatedDateTime { get; set; } - } -} diff --git a/DotNetNuke.Authentication.Azure.B2C/Components/Graph/Models/NewUser.cs b/DotNetNuke.Authentication.Azure.B2C/Components/Graph/Models/NewUser.cs index fc947df..b453520 100644 --- a/DotNetNuke.Authentication.Azure.B2C/Components/Graph/Models/NewUser.cs +++ b/DotNetNuke.Authentication.Azure.B2C/Components/Graph/Models/NewUser.cs @@ -1,11 +1,12 @@ -using Newtonsoft.Json; +using Microsoft.Graph; +using Newtonsoft.Json; using System.Collections.Generic; using System.Linq; namespace DotNetNuke.Authentication.Azure.B2C.Components.Graph.Models { [JsonObject(MemberSerialization = MemberSerialization.OptIn)] - public class NewUser: User + public class NewUser : User { public NewUser() { @@ -34,45 +35,25 @@ public NewUser(User user, bool initializeForAdd = true) private void Initialize(bool initializeForAdd = true) { + if (AdditionalData == null) + { + AdditionalData = new Dictionary(); + } if (initializeForAdd) { AccountEnabled = true; - SignInNames = new List(); - CreationType = "LocalAccount"; + if (Identities == null) + { + Identities = new List(); + } } PasswordPolicies = "DisablePasswordExpiration"; PasswordProfile = new PasswordProfile() { - ForceChangePasswordNextLogin = false + ForceChangePasswordNextSignIn = false }; } - [JsonProperty(NullValueHandling = NullValueHandling.Ignore, PropertyName = "creationType", Required = Required.Default)] - public string CreationType { get; set; } - - [JsonProperty(NullValueHandling = NullValueHandling.Ignore, PropertyName = "passwordProfile", Required = Required.Default)] - public PasswordProfile PasswordProfile { get; set; } - - } - - [JsonObject(MemberSerialization = MemberSerialization.OptIn)] - public class SignInName - { - [JsonProperty(NullValueHandling = NullValueHandling.Ignore, PropertyName = "type", Required = Required.Default)] - public string Type { get; set; } - - [JsonProperty(NullValueHandling = NullValueHandling.Ignore, PropertyName = "value", Required = Required.Default)] - public string Value { get; set; } - } - - [JsonObject(MemberSerialization = MemberSerialization.OptIn)] - public class PasswordProfile - { - [JsonProperty(NullValueHandling = NullValueHandling.Ignore, PropertyName = "password", Required = Required.Default)] - public string Password { get; set; } - - [JsonProperty(NullValueHandling = NullValueHandling.Ignore, PropertyName = "forceChangePasswordNextLogin", Required = Required.Default)] - public bool ForceChangePasswordNextLogin { get; set; } } } diff --git a/DotNetNuke.Authentication.Azure.B2C/Components/Graph/Models/ProfilePicture.cs b/DotNetNuke.Authentication.Azure.B2C/Components/Graph/Models/ProfilePicture.cs deleted file mode 100644 index d2eaf81..0000000 --- a/DotNetNuke.Authentication.Azure.B2C/Components/Graph/Models/ProfilePicture.cs +++ /dev/null @@ -1,30 +0,0 @@ -#region Copyright - -// -// Intelequia Software solutions - https://intelequia.com -// Copyright (c) 2019 -// by Intelequia Software Solutions -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated -// documentation files (the "Software"), to deal in the Software without restriction, including without limitation -// the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and -// to permit persons to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or substantial portions -// of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED -// TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF -// CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -#endregion - -namespace DotNetNuke.Authentication.Azure.B2C.Components.Graph.Models -{ - public class ProfilePicture : ProfilePictureMetadata - { - public byte[] Picture { get; set; } - } -} diff --git a/DotNetNuke.Authentication.Azure.B2C/Components/Graph/Models/ProfilePictureMetadata.cs b/DotNetNuke.Authentication.Azure.B2C/Components/Graph/Models/ProfilePictureMetadata.cs deleted file mode 100644 index 919f55c..0000000 --- a/DotNetNuke.Authentication.Azure.B2C/Components/Graph/Models/ProfilePictureMetadata.cs +++ /dev/null @@ -1,43 +0,0 @@ -#region Copyright - -// -// Intelequia Software solutions - https://intelequia.com -// Copyright (c) 2019 -// by Intelequia Software Solutions -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated -// documentation files (the "Software"), to deal in the Software without restriction, including without limitation -// the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and -// to permit persons to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or substantial portions -// of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED -// TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF -// CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -#endregion - -using Newtonsoft.Json; - -namespace DotNetNuke.Authentication.Azure.B2C.Components.Graph.Models -{ - [JsonObject(MemberSerialization = MemberSerialization.OptIn)] - public class ProfilePictureMetadata : DirectoryObject - { - [JsonProperty(NullValueHandling = NullValueHandling.Ignore, PropertyName = "@odata.context", Required = Required.Default)] - public string ODataContext { get; set; } - - [JsonProperty(NullValueHandling = NullValueHandling.Ignore, PropertyName = "@odata.mediaContentType", Required = Required.Default)] - public string ODataMediaContentType { get; set; } - - [JsonProperty(NullValueHandling = NullValueHandling.Ignore, PropertyName = "width", Required = Required.Default)] - public int Width { get; set; } - - [JsonProperty(NullValueHandling = NullValueHandling.Ignore, PropertyName = "height", Required = Required.Default)] - public int Height { get; set; } - } -} diff --git a/DotNetNuke.Authentication.Azure.B2C/Components/Graph/Models/User.cs b/DotNetNuke.Authentication.Azure.B2C/Components/Graph/Models/User.cs deleted file mode 100644 index e4760ab..0000000 --- a/DotNetNuke.Authentication.Azure.B2C/Components/Graph/Models/User.cs +++ /dev/null @@ -1,349 +0,0 @@ -#region Copyright - -// -// Intelequia Software solutions - https://intelequia.com -// Copyright (c) 2019 -// by Intelequia Software Solutions -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated -// documentation files (the "Software"), to deal in the Software without restriction, including without limitation -// the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and -// to permit persons to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or substantial portions -// of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED -// TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF -// CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -#endregion - -using Newtonsoft.Json; -using System; -using System.Collections.Generic; - -namespace DotNetNuke.Authentication.Azure.B2C.Components.Graph.Models -{ - [JsonObject(MemberSerialization = MemberSerialization.OptIn)] - public class User : DirectoryObject - { - [JsonProperty(NullValueHandling = NullValueHandling.Ignore, PropertyName = "accountEnabled", Required = Required.Default)] - public bool? AccountEnabled { get; set; } - - [JsonProperty(NullValueHandling = NullValueHandling.Ignore, PropertyName = "ageGroup", Required = Required.Default)] - public string AgeGroup { get; set; } - - [JsonProperty(NullValueHandling = NullValueHandling.Ignore, PropertyName = "businessPhones", Required = Required.Default)] - public IEnumerable BusinessPhones { get; set; } - - [JsonProperty(NullValueHandling = NullValueHandling.Ignore, PropertyName = "city", Required = Required.Default)] - public string City { get; set; } - - [JsonProperty(NullValueHandling = NullValueHandling.Ignore, PropertyName = "companyName", Required = Required.Default)] - public string CompanyName { get; set; } - - [JsonProperty(NullValueHandling = NullValueHandling.Ignore, PropertyName = "country", Required = Required.Default)] - public string Country { get; set; } - - [JsonProperty(NullValueHandling = NullValueHandling.Ignore, PropertyName = "department", Required = Required.Default)] - public string Department { get; set; } - - [JsonProperty(NullValueHandling = NullValueHandling.Ignore, PropertyName = "displayName", Required = Required.Default)] - public string DisplayName { get; set; } - - [JsonProperty(NullValueHandling = NullValueHandling.Ignore, PropertyName = "employeeId", Required = Newtonsoft.Json.Required.Default)] - public string EmployeeId { get; set; } - - [JsonProperty(NullValueHandling = NullValueHandling.Ignore, PropertyName = "faxNumber", Required = Newtonsoft.Json.Required.Default)] - public string FaxNumber { get; set; } - - [JsonProperty(NullValueHandling = NullValueHandling.Ignore, PropertyName = "givenName", Required = Newtonsoft.Json.Required.Default)] - public string GivenName { get; set; } - - [JsonProperty(NullValueHandling = NullValueHandling.Ignore, PropertyName = "imAddresses", Required = Newtonsoft.Json.Required.Default)] - public IEnumerable ImAddresses { get; set; } - - [JsonProperty(NullValueHandling = NullValueHandling.Ignore, PropertyName = "isResourceAccount", Required = Newtonsoft.Json.Required.Default)] - public bool? IsResourceAccount { get; set; } - - [JsonProperty(NullValueHandling = NullValueHandling.Ignore, PropertyName = "jobTitle", Required = Newtonsoft.Json.Required.Default)] - public string JobTitle { get; set; } - - /// - /// Gets or sets legal age group classification. - /// Used by enterprise applications to determine the legal age group of the user. This property is read-only and calculated based on ageGroup and consentProvidedForMinor properties. Allowed values: null, minorWithOutParentalConsent, minorWithParentalConsent, minorNoParentalConsentRequired, notAdult and adult. Refer to the legal age group property definitions for further information.) - /// - [JsonProperty(NullValueHandling = NullValueHandling.Ignore, PropertyName = "legalAgeGroupClassification", Required = Newtonsoft.Json.Required.Default)] - public string LegalAgeGroupClassification { get; set; } - - /// - /// Gets or sets mail. - /// The SMTP address for the user, for example, 'jeff@contoso.onmicrosoft.com'. Read-Only. Supports $filter. - /// - [JsonProperty(NullValueHandling = NullValueHandling.Ignore, PropertyName = "mail", Required = Newtonsoft.Json.Required.Default)] - public string Mail { get; set; } - - /// - /// Gets or sets mail nickname. - /// The mail alias for the user. This property must be specified when a user is created. Supports $filter. - /// - [JsonProperty(NullValueHandling = NullValueHandling.Ignore, PropertyName = "mailNickname", Required = Newtonsoft.Json.Required.Default)] - public string MailNickname { get; set; } - - /// - /// Gets or sets mobile phone. - /// The primary cellular telephone number for the user. - /// - [JsonProperty(NullValueHandling = NullValueHandling.Ignore, PropertyName = "mobilePhone", Required = Newtonsoft.Json.Required.Default)] - public string MobilePhone { get; set; } - - /// - /// Gets or sets on premises distinguished name. - /// Contains the on-premises Active Directory distinguished name or DN. The property is only populated for customers who are synchronizing their on-premises directory to Azure Active Directory via Azure AD Connect. Read-only. - /// - [JsonProperty(NullValueHandling = NullValueHandling.Ignore, PropertyName = "onPremisesDistinguishedName", Required = Newtonsoft.Json.Required.Default)] - public string OnPremisesDistinguishedName { get; set; } - - /// - /// Gets or sets on premises immutable id. - /// This property is used to associate an on-premises Active Directory user account to their Azure AD user object. This property must be specified when creating a new user account in the Graph if you are using a federated domain for the user’s userPrincipalName (UPN) property. Important: The $ and _ characters cannot be used when specifying this property. Supports $filter. - /// - [JsonProperty(NullValueHandling = NullValueHandling.Ignore, PropertyName = "onPremisesImmutableId", Required = Newtonsoft.Json.Required.Default)] - public string OnPremisesImmutableId { get; set; } - - /// - /// Gets or sets on premises last sync date time. - /// Indicates the last time at which the object was synced with the on-premises directory; for example: '2013-02-16T03:04:54Z'. The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 would look like this: '2014-01-01T00:00:00Z'. Read-only. - /// - [JsonProperty(NullValueHandling = NullValueHandling.Ignore, PropertyName = "onPremisesLastSyncDateTime", Required = Newtonsoft.Json.Required.Default)] - public DateTimeOffset? OnPremisesLastSyncDateTime { get; set; } - - /// - /// Gets or sets on premises security identifier. - /// Contains the on-premises security identifier (SID) for the user that was synchronized from on-premises to the cloud. Read-only. - /// - [JsonProperty(NullValueHandling = NullValueHandling.Ignore, PropertyName = "onPremisesSecurityIdentifier", Required = Newtonsoft.Json.Required.Default)] - public string OnPremisesSecurityIdentifier { get; set; } - - /// - /// Gets or sets on premises sync enabled. - /// true if this object is synced from an on-premises directory; false if this object was originally synced from an on-premises directory but is no longer synced; null if this object has never been synced from an on-premises directory (default). Read-only - /// - [JsonProperty(NullValueHandling = NullValueHandling.Ignore, PropertyName = "onPremisesSyncEnabled", Required = Newtonsoft.Json.Required.Default)] - public bool? OnPremisesSyncEnabled { get; set; } - - /// - /// Gets or sets on premises domain name. - /// Contains the on-premises domainFQDN, also called dnsDomainName synchronized from the on-premises directory. The property is only populated for customers who are synchronizing their on-premises directory to Azure Active Directory via Azure AD Connect. Read-only. - /// - [JsonProperty(NullValueHandling = NullValueHandling.Ignore, PropertyName = "onPremisesDomainName", Required = Newtonsoft.Json.Required.Default)] - public string OnPremisesDomainName { get; set; } - - /// - /// Gets or sets on premises sam account name. - /// Contains the on-premises samAccountName synchronized from the on-premises directory. The property is only populated for customers who are synchronizing their on-premises directory to Azure Active Directory via Azure AD Connect. Read-only. - /// - [JsonProperty(NullValueHandling = NullValueHandling.Ignore, PropertyName = "onPremisesSamAccountName", Required = Newtonsoft.Json.Required.Default)] - public string OnPremisesSamAccountName { get; set; } - - /// - /// Gets or sets on premises user principal name. - /// Contains the on-premises userPrincipalName synchronized from the on-premises directory. The property is only populated for customers who are synchronizing their on-premises directory to Azure Active Directory via Azure AD Connect. Read-only. - /// - [JsonProperty(NullValueHandling = NullValueHandling.Ignore, PropertyName = "onPremisesUserPrincipalName", Required = Newtonsoft.Json.Required.Default)] - public string OnPremisesUserPrincipalName { get; set; } - - /// - /// Gets or sets other mails. - /// A list of additional email addresses for the user; for example: ['bob@contoso.com', 'Robert@fabrikam.com']. Supports $filter. - /// - [JsonProperty(NullValueHandling = NullValueHandling.Ignore, PropertyName = "otherMails", Required = Newtonsoft.Json.Required.Default)] - public IEnumerable OtherMails { get; set; } - - /// - /// Gets or sets other mails. - /// A list of additional email addresses for the user; for example: ['bob@contoso.com', 'Robert@fabrikam.com']. Supports $filter. - /// - [JsonProperty(NullValueHandling = NullValueHandling.Ignore, PropertyName = "userIdentities", Required = Newtonsoft.Json.Required.Default)] - public IEnumerable UserIdentities { get; set; } - - /// - /// Gets or sets other mails. - /// A list of additional email addresses for the user; for example: ['bob@contoso.com', 'Robert@fabrikam.com']. Supports $filter. - /// - [JsonProperty(NullValueHandling = NullValueHandling.Ignore, PropertyName = "signInNames", Required = Newtonsoft.Json.Required.Default)] - public List SignInNames { get; set; } - - /// - /// Gets or sets password policies. - /// Specifies password policies for the user. This value is an enumeration with one possible value being 'DisableStrongPassword', which allows weaker passwords than the default policy to be specified. 'DisablePasswordExpiration' can also be specified. The two may be specified together; for example: 'DisablePasswordExpiration, DisableStrongPassword'. - /// - [JsonProperty(NullValueHandling = NullValueHandling.Ignore, PropertyName = "passwordPolicies", Required = Newtonsoft.Json.Required.Default)] - public string PasswordPolicies { get; set; } - - /// - /// Gets or sets office location. - /// The office location in the user's place of business. - /// - [JsonProperty(NullValueHandling = NullValueHandling.Ignore, PropertyName = "officeLocation", Required = Newtonsoft.Json.Required.Default)] - public string OfficeLocation { get; set; } - - /// - /// Gets or sets postal code. - /// The postal code for the user's postal address. The postal code is specific to the user's country/region. In the United States of America, this attribute contains the ZIP code. - /// - [JsonProperty(NullValueHandling = NullValueHandling.Ignore, PropertyName = "postalCode", Required = Newtonsoft.Json.Required.Default)] - public string PostalCode { get; set; } - - /// - /// Gets or sets preferred language. - /// The preferred language for the user. Should follow ISO 639-1 Code; for example 'en-US'. - /// - [JsonProperty(NullValueHandling = NullValueHandling.Ignore, PropertyName = "preferredLanguage", Required = Newtonsoft.Json.Required.Default)] - public string PreferredLanguage { get; set; } - - /// - /// Gets or sets proxy addresses. - /// For example: ['SMTP: bob@contoso.com', 'smtp: bob@sales.contoso.com'] The any operator is required for filter expressions on multi-valued properties. Read-only, Not nullable. Supports $filter. - /// - [JsonProperty(NullValueHandling = NullValueHandling.Ignore, PropertyName = "proxyAddresses", Required = Newtonsoft.Json.Required.Default)] - public IEnumerable ProxyAddresses { get; set; } - - /// - /// Gets or sets show in address list. - /// true if the Outlook global address list should contain this user, otherwise false. If not set, this will be treated as true. For users invited through the invitation manager, this property will be set to false. - /// - [JsonProperty(NullValueHandling = NullValueHandling.Ignore, PropertyName = "showInAddressList", Required = Newtonsoft.Json.Required.Default)] - public bool? ShowInAddressList { get; set; } - - /// - /// Gets or sets state. - /// The state or province in the user's address. Supports $filter. - /// - [JsonProperty(NullValueHandling = NullValueHandling.Ignore, PropertyName = "state", Required = Newtonsoft.Json.Required.Default)] - public string State { get; set; } - - /// - /// Gets or sets street address. - /// The street address of the user's place of business. - /// - [JsonProperty(NullValueHandling = NullValueHandling.Ignore, PropertyName = "streetAddress", Required = Newtonsoft.Json.Required.Default)] - public string StreetAddress { get; set; } - - /// - /// Gets or sets surname. - /// The user's surname (family name or last name). Supports $filter. - /// - [JsonProperty(NullValueHandling = NullValueHandling.Ignore, PropertyName = "surname", Required = Newtonsoft.Json.Required.Default)] - public string Surname { get; set; } - - /// - /// Gets or sets usage location. - /// A two letter country code (ISO standard 3166). Required for users that will be assigned licenses due to legal requirement to check for availability of services in countries. Examples include: 'US', 'JP', and 'GB'. Not nullable. Supports $filter. - /// - [JsonProperty(NullValueHandling = NullValueHandling.Ignore, PropertyName = "usageLocation", Required = Newtonsoft.Json.Required.Default)] - public string UsageLocation { get; set; } - - /// - /// Gets or sets user principal name. - /// The user principal name (UPN) of the user. The UPN is an Internet-style login name for the user based on the Internet standard RFC 822. By convention, this should map to the user's email name. The general format is alias@domain, where domain must be present in the tenant’s collection of verified domains. This property is required when a user is created. The verified domains for the tenant can be accessed from the verifiedDomains property of organization. Supports $filter and $orderby. - /// - [JsonProperty(NullValueHandling = NullValueHandling.Ignore, PropertyName = "userPrincipalName", Required = Newtonsoft.Json.Required.Default)] - public string UserPrincipalName { get; set; } - - /// - /// Gets or sets user principal name. - /// The user principal name (UPN) of the user. The UPN is an Internet-style login name for the user based on the Internet standard RFC 822. By convention, this should map to the user's email name. The general format is alias@domain, where domain must be present in the tenant’s collection of verified domains. This property is required when a user is created. The verified domains for the tenant can be accessed from the verifiedDomains property of organization. Supports $filter and $orderby. - /// - [JsonProperty(NullValueHandling = NullValueHandling.Ignore, PropertyName = "username", Required = Newtonsoft.Json.Required.Default)] - public string Username { get; set; } - - /// - /// Gets or sets user type. - /// A string value that can be used to classify user types in your directory, such as 'Member' and 'Guest'. Supports $filter. - /// - [JsonProperty(NullValueHandling = NullValueHandling.Ignore, PropertyName = "userType", Required = Newtonsoft.Json.Required.Default)] - public string UserType { get; set; } - - /// - /// Gets or sets about me. - /// A freeform text entry field for the user to describe themselves. - /// - [JsonProperty(NullValueHandling = NullValueHandling.Ignore, PropertyName = "aboutMe", Required = Newtonsoft.Json.Required.Default)] - public string AboutMe { get; set; } - - /// - /// Gets or sets birthday. - /// The birthday of the user. The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 would look like this: '2014-01-01T00:00:00Z' - /// - [JsonProperty(NullValueHandling = NullValueHandling.Ignore, PropertyName = "birthday", Required = Newtonsoft.Json.Required.Default)] - public DateTimeOffset? Birthday { get; set; } - - /// - /// Gets or sets hire date. - /// The hire date of the user. The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 would look like this: '2014-01-01T00:00:00Z' - /// - [JsonProperty(NullValueHandling = NullValueHandling.Ignore, PropertyName = "hireDate", Required = Newtonsoft.Json.Required.Default)] - public DateTimeOffset? HireDate { get; set; } - - /// - /// Gets or sets interests. - /// A list for the user to describe their interests. - /// - [JsonProperty(NullValueHandling = NullValueHandling.Ignore, PropertyName = "interests", Required = Newtonsoft.Json.Required.Default)] - public IEnumerable Interests { get; set; } - - /// - /// Gets or sets my site. - /// The URL for the user's personal site. - /// - [JsonProperty(NullValueHandling = NullValueHandling.Ignore, PropertyName = "mySite", Required = Newtonsoft.Json.Required.Default)] - public string MySite { get; set; } - - /// - /// Gets or sets past projects. - /// A list for the user to enumerate their past projects. - /// - [JsonProperty(NullValueHandling = NullValueHandling.Ignore, PropertyName = "pastProjects", Required = Newtonsoft.Json.Required.Default)] - public IEnumerable PastProjects { get; set; } - - /// - /// Gets or sets preferred name. - /// The preferred name for the user. - /// - [JsonProperty(NullValueHandling = NullValueHandling.Ignore, PropertyName = "preferredName", Required = Newtonsoft.Json.Required.Default)] - public string PreferredName { get; set; } - - /// - /// Gets or sets responsibilities. - /// A list for the user to enumerate their responsibilities. - /// - [JsonProperty(NullValueHandling = NullValueHandling.Ignore, PropertyName = "responsibilities", Required = Newtonsoft.Json.Required.Default)] - public IEnumerable Responsibilities { get; set; } - - /// - /// Gets or sets schools. - /// A list for the user to enumerate the schools they have attended. - /// - [JsonProperty(NullValueHandling = NullValueHandling.Ignore, PropertyName = "schools", Required = Newtonsoft.Json.Required.Default)] - public IEnumerable Schools { get; set; } - - /// - /// Gets or sets skills. - /// A list for the user to enumerate their skills. - /// - [JsonProperty(NullValueHandling = NullValueHandling.Ignore, PropertyName = "skills", Required = Newtonsoft.Json.Required.Default)] - public IEnumerable Skills { get; set; } - - /// - /// Gets or sets device enrollment limit. - /// The limit on the maximum number of devices that the user is permitted to enroll. Allowed values are 5 or 1000. - /// - [JsonProperty(NullValueHandling = NullValueHandling.Ignore, PropertyName = "deviceEnrollmentLimit", Required = Newtonsoft.Json.Required.Default)] - public Int32? DeviceEnrollmentLimit { get; set; } - - } -} diff --git a/DotNetNuke.Authentication.Azure.B2C/Components/Graph/Models/UserIdentity.cs b/DotNetNuke.Authentication.Azure.B2C/Components/Graph/Models/UserIdentity.cs deleted file mode 100644 index 53cf0cc..0000000 --- a/DotNetNuke.Authentication.Azure.B2C/Components/Graph/Models/UserIdentity.cs +++ /dev/null @@ -1,15 +0,0 @@ -using Newtonsoft.Json; - -namespace DotNetNuke.Authentication.Azure.B2C.Components.Graph.Models -{ - [JsonObject(MemberSerialization = MemberSerialization.OptIn)] - public class UserIdentity - { - /// - /// Gets or sets display name. - /// The display name for the group. This property is required when a group is created and cannot be cleared during updates. Returned by default. Supports $filter and $orderby. - /// - [JsonProperty(NullValueHandling = NullValueHandling.Ignore, PropertyName = "issuer", Required = Newtonsoft.Json.Required.Default)] - public string Issuer { get; set; } - } -} diff --git a/DotNetNuke.Authentication.Azure.B2C/DotNetNuke.Authentication.Azure.B2C.csproj b/DotNetNuke.Authentication.Azure.B2C/DotNetNuke.Authentication.Azure.B2C.csproj index 5270186..fef513b 100644 --- a/DotNetNuke.Authentication.Azure.B2C/DotNetNuke.Authentication.Azure.B2C.csproj +++ b/DotNetNuke.Authentication.Azure.B2C/DotNetNuke.Authentication.Azure.B2C.csproj @@ -37,6 +37,9 @@ false + + packages\Azure.Core.1.18.0\lib\net461\Azure.Core.dll + packages\Dnn.PersonaBar.Library.9.4.3\lib\net45\Dnn.PersonaBar.Library.dll @@ -64,6 +67,9 @@ packages\DotNetNuke.Core.9.4.3\lib\net45\Microsoft.ApplicationBlocks.Data.dll + + packages\Microsoft.Bcl.AsyncInterfaces.5.0.0\lib\net461\Microsoft.Bcl.AsyncInterfaces.dll + packages\Microsoft.Extensions.DependencyInjection.2.1.1\lib\net461\Microsoft.Extensions.DependencyInjection.dll @@ -71,40 +77,80 @@ packages\Microsoft.Extensions.DependencyInjection.Abstractions.2.1.1\lib\netstandard2.0\Microsoft.Extensions.DependencyInjection.Abstractions.dll + + packages\Microsoft.Graph.4.10.0\lib\net462\Microsoft.Graph.dll + + + packages\Microsoft.Graph.Core.2.0.5\lib\net462\Microsoft.Graph.Core.dll + + + packages\Microsoft.Identity.Client.4.35.1\lib\net461\Microsoft.Identity.Client.dll + packages\Microsoft.IdentityModel.Clients.ActiveDirectory.5.0.5\lib\net45\Microsoft.IdentityModel.Clients.ActiveDirectory.dll - - packages\Microsoft.IdentityModel.JsonWebTokens.5.4.0\lib\net451\Microsoft.IdentityModel.JsonWebTokens.dll + + packages\Microsoft.IdentityModel.JsonWebTokens.6.12.2\lib\net472\Microsoft.IdentityModel.JsonWebTokens.dll - - packages\Microsoft.IdentityModel.Logging.5.4.0\lib\net451\Microsoft.IdentityModel.Logging.dll + + packages\Microsoft.IdentityModel.Logging.6.12.2\lib\net472\Microsoft.IdentityModel.Logging.dll - - packages\Microsoft.IdentityModel.Protocols.5.4.0\lib\net451\Microsoft.IdentityModel.Protocols.dll + + packages\Microsoft.IdentityModel.Protocols.6.12.2\lib\net472\Microsoft.IdentityModel.Protocols.dll - - packages\Microsoft.IdentityModel.Protocols.OpenIdConnect.5.4.0\lib\net451\Microsoft.IdentityModel.Protocols.OpenIdConnect.dll + + packages\Microsoft.IdentityModel.Protocols.OpenIdConnect.6.12.2\lib\net472\Microsoft.IdentityModel.Protocols.OpenIdConnect.dll - - packages\Microsoft.IdentityModel.Tokens.5.4.0\lib\net451\Microsoft.IdentityModel.Tokens.dll + + packages\Microsoft.IdentityModel.Tokens.6.12.2\lib\net472\Microsoft.IdentityModel.Tokens.dll packages\Newtonsoft.Json.10.0.3\lib\net45\Newtonsoft.Json.dll True + + packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll + + + packages\System.Diagnostics.DiagnosticSource.4.7.1\lib\net46\System.Diagnostics.DiagnosticSource.dll + - - packages\System.IdentityModel.Tokens.Jwt.5.4.0\lib\net451\System.IdentityModel.Tokens.Jwt.dll + + packages\System.IdentityModel.Tokens.Jwt.6.12.2\lib\net472\System.IdentityModel.Tokens.Jwt.dll + + + packages\System.Memory.4.5.4\lib\net461\System.Memory.dll + + + packages\System.Memory.Data.1.0.2\lib\net461\System.Memory.Data.dll packages\Microsoft.AspNet.WebApi.Client.5.2.3\lib\net45\System.Net.Http.Formatting.dll + + + packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll + + + packages\System.Runtime.CompilerServices.Unsafe.5.0.0\lib\net45\System.Runtime.CompilerServices.Unsafe.dll + + + packages\System.Text.Encodings.Web.5.0.1\lib\net461\System.Text.Encodings.Web.dll + + + packages\System.Text.Json.5.0.2\lib\net461\System.Text.Json.dll + + + packages\System.Threading.Tasks.Extensions.4.5.4\lib\net461\System.Threading.Tasks.Extensions.dll + + + packages\System.ValueTuple.4.5.0\lib\net47\System.ValueTuple.dll + @@ -179,17 +225,9 @@ - - - - - - + + - - - - diff --git a/DotNetNuke.Authentication.Azure.B2C/Images/azure.png b/DotNetNuke.Authentication.Azure.B2C/Images/azure.png index 5d8640d..f804516 100644 Binary files a/DotNetNuke.Authentication.Azure.B2C/Images/azure.png and b/DotNetNuke.Authentication.Azure.B2C/Images/azure.png differ diff --git a/DotNetNuke.Authentication.Azure.B2C/Providers/DataProviders/SqlDataProvider/01.02.00.SqlDataProvider b/DotNetNuke.Authentication.Azure.B2C/Providers/DataProviders/SqlDataProvider/01.02.00.SqlDataProvider index 47d1241..a033253 100644 --- a/DotNetNuke.Authentication.Azure.B2C/Providers/DataProviders/SqlDataProvider/01.02.00.SqlDataProvider +++ b/DotNetNuke.Authentication.Azure.B2C/Providers/DataProviders/SqlDataProvider/01.02.00.SqlDataProvider @@ -58,78 +58,6 @@ BEGIN ) ON [PRIMARY] ) ON [PRIMARY] - -- Insert default values: - INSERT INTO {databaseOwner}[{objectQualifier}AzureB2C_ProfileMappings] ([DnnProfilePropertyName],[B2cClaimName],[PortalId],[CreatedByUserId],[CreatedOnDate],[LastModifiedByUserId],[LastModifiedOnDate]) - SELECT 'Biography', 'Biography', PortalId, -1, GETDATE(), -1, GETDATE() - FROM (Select PortalId FROM {databaseOwner}[{objectQualifier}Portals] UNION SELECT PortalId = -1) p - - INSERT INTO {databaseOwner}[{objectQualifier}AzureB2C_ProfileMappings] ([DnnProfilePropertyName],[B2cClaimName],[PortalId],[CreatedByUserId],[CreatedOnDate],[LastModifiedByUserId],[LastModifiedOnDate]) - SELECT 'Cell', 'Cell', PortalId, -1, GETDATE(), -1, GETDATE() - FROM (Select PortalId FROM {databaseOwner}[{objectQualifier}Portals] UNION SELECT PortalId = -1) p - - INSERT INTO {databaseOwner}[{objectQualifier}AzureB2C_ProfileMappings] ([DnnProfilePropertyName],[B2cClaimName],[PortalId],[CreatedByUserId],[CreatedOnDate],[LastModifiedByUserId],[LastModifiedOnDate]) - SELECT 'City', 'City', PortalId, -1, GETDATE(), -1, GETDATE() - FROM (Select PortalId FROM {databaseOwner}[{objectQualifier}Portals] UNION SELECT PortalId = -1) p - - INSERT INTO {databaseOwner}[{objectQualifier}AzureB2C_ProfileMappings] ([DnnProfilePropertyName],[B2cClaimName],[PortalId],[CreatedByUserId],[CreatedOnDate],[LastModifiedByUserId],[LastModifiedOnDate]) - SELECT 'Fax', 'Fax', PortalId, -1, GETDATE(), -1, GETDATE() - FROM (Select PortalId FROM {databaseOwner}[{objectQualifier}Portals] UNION SELECT PortalId = -1) p - - INSERT INTO {databaseOwner}[{objectQualifier}AzureB2C_ProfileMappings] ([DnnProfilePropertyName],[B2cClaimName],[PortalId],[CreatedByUserId],[CreatedOnDate],[LastModifiedByUserId],[LastModifiedOnDate]) - SELECT 'IM', 'IM', PortalId, -1, GETDATE(), -1, GETDATE() - FROM (Select PortalId FROM {databaseOwner}[{objectQualifier}Portals] UNION SELECT PortalId = -1) p - - INSERT INTO {databaseOwner}[{objectQualifier}AzureB2C_ProfileMappings] ([DnnProfilePropertyName],[B2cClaimName],[PortalId],[CreatedByUserId],[CreatedOnDate],[LastModifiedByUserId],[LastModifiedOnDate]) - SELECT 'LinkedIn', 'LinkedIn', PortalId, -1, GETDATE(), -1, GETDATE() - FROM (Select PortalId FROM {databaseOwner}[{objectQualifier}Portals] UNION SELECT PortalId = -1) p - - INSERT INTO {databaseOwner}[{objectQualifier}AzureB2C_ProfileMappings] ([DnnProfilePropertyName],[B2cClaimName],[PortalId],[CreatedByUserId],[CreatedOnDate],[LastModifiedByUserId],[LastModifiedOnDate]) - SELECT 'MiddleName', 'MiddleName', PortalId, -1, GETDATE(), -1, GETDATE() - FROM (Select PortalId FROM {databaseOwner}[{objectQualifier}Portals] UNION SELECT PortalId = -1) p - - INSERT INTO {databaseOwner}[{objectQualifier}AzureB2C_ProfileMappings] ([DnnProfilePropertyName],[B2cClaimName],[PortalId],[CreatedByUserId],[CreatedOnDate],[LastModifiedByUserId],[LastModifiedOnDate]) - SELECT 'Photo', 'Photo', PortalId, -1, GETDATE(), -1, GETDATE() - FROM (Select PortalId FROM {databaseOwner}[{objectQualifier}Portals] UNION SELECT PortalId = -1) p - - INSERT INTO {databaseOwner}[{objectQualifier}AzureB2C_ProfileMappings] ([DnnProfilePropertyName],[B2cClaimName],[PortalId],[CreatedByUserId],[CreatedOnDate],[LastModifiedByUserId],[LastModifiedOnDate]) - SELECT 'PreferredLocale', 'PreferredLocale', PortalId, -1, GETDATE(), -1, GETDATE() - FROM (Select PortalId FROM {databaseOwner}[{objectQualifier}Portals] UNION SELECT PortalId = -1) p - - INSERT INTO {databaseOwner}[{objectQualifier}AzureB2C_ProfileMappings] ([DnnProfilePropertyName],[B2cClaimName],[PortalId],[CreatedByUserId],[CreatedOnDate],[LastModifiedByUserId],[LastModifiedOnDate]) - SELECT 'PreferredTimeZone', 'PreferredTimeZone', PortalId, -1, GETDATE(), -1, GETDATE() - FROM (Select PortalId FROM {databaseOwner}[{objectQualifier}Portals] UNION SELECT PortalId = -1) p - - INSERT INTO {databaseOwner}[{objectQualifier}AzureB2C_ProfileMappings] ([DnnProfilePropertyName],[B2cClaimName],[PortalId],[CreatedByUserId],[CreatedOnDate],[LastModifiedByUserId],[LastModifiedOnDate]) - SELECT 'Prefix', 'Prefix', PortalId, -1, GETDATE(), -1, GETDATE() - FROM (Select PortalId FROM {databaseOwner}[{objectQualifier}Portals] UNION SELECT PortalId = -1) p - - INSERT INTO {databaseOwner}[{objectQualifier}AzureB2C_ProfileMappings] ([DnnProfilePropertyName],[B2cClaimName],[PortalId],[CreatedByUserId],[CreatedOnDate],[LastModifiedByUserId],[LastModifiedOnDate]) - SELECT 'Skype', 'Skype', PortalId, -1, GETDATE(), -1, GETDATE() - FROM (Select PortalId FROM {databaseOwner}[{objectQualifier}Portals] UNION SELECT PortalId = -1) p - - INSERT INTO {databaseOwner}[{objectQualifier}AzureB2C_ProfileMappings] ([DnnProfilePropertyName],[B2cClaimName],[PortalId],[CreatedByUserId],[CreatedOnDate],[LastModifiedByUserId],[LastModifiedOnDate]) - SELECT 'Suffix', 'Suffix', PortalId, -1, GETDATE(), -1, GETDATE() - FROM (Select PortalId FROM {databaseOwner}[{objectQualifier}Portals] UNION SELECT PortalId = -1) p - - INSERT INTO {databaseOwner}[{objectQualifier}AzureB2C_ProfileMappings] ([DnnProfilePropertyName],[B2cClaimName],[PortalId],[CreatedByUserId],[CreatedOnDate],[LastModifiedByUserId],[LastModifiedOnDate]) - SELECT 'Telephone', 'Telephone', PortalId, -1, GETDATE(), -1, GETDATE() - FROM (Select PortalId FROM {databaseOwner}[{objectQualifier}Portals] UNION SELECT PortalId = -1) p - - INSERT INTO {databaseOwner}[{objectQualifier}AzureB2C_ProfileMappings] ([DnnProfilePropertyName],[B2cClaimName],[PortalId],[CreatedByUserId],[CreatedOnDate],[LastModifiedByUserId],[LastModifiedOnDate]) - SELECT 'TimeZone', 'TimeZone', PortalId, -1, GETDATE(), -1, GETDATE() - FROM (Select PortalId FROM {databaseOwner}[{objectQualifier}Portals] UNION SELECT PortalId = -1) p - - INSERT INTO {databaseOwner}[{objectQualifier}AzureB2C_ProfileMappings] ([DnnProfilePropertyName],[B2cClaimName],[PortalId],[CreatedByUserId],[CreatedOnDate],[LastModifiedByUserId],[LastModifiedOnDate]) - SELECT 'Twitter', 'Twitter', PortalId, -1, GETDATE(), -1, GETDATE() - FROM (Select PortalId FROM {databaseOwner}[{objectQualifier}Portals] UNION SELECT PortalId = -1) p - - INSERT INTO {databaseOwner}[{objectQualifier}AzureB2C_ProfileMappings] ([DnnProfilePropertyName],[B2cClaimName],[PortalId],[CreatedByUserId],[CreatedOnDate],[LastModifiedByUserId],[LastModifiedOnDate]) - SELECT 'Unit', 'Unit', PortalId, -1, GETDATE(), -1, GETDATE() - FROM (Select PortalId FROM {databaseOwner}[{objectQualifier}Portals] UNION SELECT PortalId = -1) p - - INSERT INTO {databaseOwner}[{objectQualifier}AzureB2C_ProfileMappings] ([DnnProfilePropertyName],[B2cClaimName],[PortalId],[CreatedByUserId],[CreatedOnDate],[LastModifiedByUserId],[LastModifiedOnDate]) - SELECT 'Website', 'Website', PortalId, -1, GETDATE(), -1, GETDATE() - FROM (Select PortalId FROM {databaseOwner}[{objectQualifier}Portals] UNION SELECT PortalId = -1) p END GO diff --git a/DotNetNuke.Authentication.Azure.B2C/ScheduledTasks/SyncSchedule.cs b/DotNetNuke.Authentication.Azure.B2C/ScheduledTasks/SyncSchedule.cs index 543e47e..c607f76 100644 --- a/DotNetNuke.Authentication.Azure.B2C/ScheduledTasks/SyncSchedule.cs +++ b/DotNetNuke.Authentication.Azure.B2C/ScheduledTasks/SyncSchedule.cs @@ -149,21 +149,15 @@ internal string SyncRoles(int portalId, AzureConfig settings) } var graphClient = new GraphClient(settings.AADApplicationId, settings.AADApplicationKey, settings.TenantId); - var query = "$orderby=displayName"; - var filter = ConfigurationManager.AppSettings["AzureADB2C.GetAllGroups.Filter"]; - if (!string.IsNullOrEmpty(filter)) - { - query = $"$filter={filter}"; - } // Add roles from AAD B2C - var aadGroups = graphClient.GetAllGroups(query); - var allaadGroups = new List(); - if (aadGroups != null && aadGroups.Values != null) + var aadGroups = graphClient.GetAllGroups(); + var allaadGroups = new List(); + if (aadGroups != null) { - var groupPrefix = settings.GroupNamePrefixEnabled ? "AzureB2C-" : ""; - while (aadGroups.Values.Count > 0) + var groupPrefix = settings.GroupNamePrefixEnabled ? $"{AzureConfig.ServiceName}-" : ""; + while (aadGroups != null && aadGroups.Count > 0) { - var groups = aadGroups.Values; + var groups = aadGroups.CurrentPage.ToList(); allaadGroups.AddRange(groups); if (customRoleMappings != null && customRoleMappings.Count > 0) { @@ -198,9 +192,7 @@ internal string SyncRoles(int portalId, AzureConfig settings) } } - if (string.IsNullOrEmpty(aadGroups.ODataNextLink)) - break; - aadGroups = graphClient.GetNextGroups(aadGroups.ODataNextLink); + aadGroups = aadGroups.NextPageRequest?.GetSync(); } } // Let's remove DNN roles imported from B2C that no longer exists in B2C @@ -218,12 +210,12 @@ internal string SyncRoles(int portalId, AzureConfig settings) foreach (var dnnRole in dnnB2cRoles) { if (allaadGroups.Count == 0 - || aadGroups.Values.FirstOrDefault(x => x.DisplayName == (settings.GroupNamePrefixEnabled ? dnnRole.RoleName.Substring("AzureB2C-".Length) : dnnRole.RoleName)) == null) + || aadGroups.FirstOrDefault(x => x.DisplayName == (settings.GroupNamePrefixEnabled ? dnnRole.RoleName.Substring($"{AzureConfig.ServiceName}-".Length) : dnnRole.RoleName)) == null) { try { RoleController.Instance.DeleteRole(dnnRole); - // This is a workaround to a bug in DNN where RoleSettings is not deleted when a role is deleted + // This is a workaround due to a bug in DNN where RoleSettings are not deleted when a role is deleted DotNetNuke.Data.DataContext.Instance().Execute(System.Data.CommandType.Text, $"DELETE {DotNetNuke.Data.DataProvider.Instance().DatabaseOwner}{DotNetNuke.Data.DataProvider.Instance().ObjectQualifier}RoleSettings WHERE RoleID = @0", dnnRole.RoleID); groupsDeleted++; } diff --git a/DotNetNuke.Authentication.Azure.B2C/Services/AuthorizationController.cs b/DotNetNuke.Authentication.Azure.B2C/Services/AuthorizationController.cs index 60fc671..95a82aa 100644 --- a/DotNetNuke.Authentication.Azure.B2C/Services/AuthorizationController.cs +++ b/DotNetNuke.Authentication.Azure.B2C/Services/AuthorizationController.cs @@ -1,6 +1,7 @@ using DotNetNuke.Authentication.Azure.B2C.Components; using DotNetNuke.Common; using DotNetNuke.Entities.Portals; +using DotNetNuke.Instrumentation; using DotNetNuke.Web.Api; using System; using System.Linq; @@ -12,6 +13,8 @@ namespace DotNetNuke.Authentication.Azure.B2C.Services { public class AuthorizationController : DnnApiController { + private static readonly ILog _logger = LoggerSource.Instance.GetLogger(typeof(AuthorizationController)); + [HttpGet] [AllowAnonymous] public HttpResponseMessage RedirectToPortal() @@ -67,6 +70,7 @@ public HttpResponseMessage RedirectToPortal() } catch (Exception ex) { + _logger.Error(ex); return Request.CreateResponse(HttpStatusCode.InternalServerError, ex.Message); } } diff --git a/DotNetNuke.Authentication.Azure.B2C/Services/AzureADB2CController.cs b/DotNetNuke.Authentication.Azure.B2C/Services/AzureADB2CController.cs index 537a140..02c9db3 100644 --- a/DotNetNuke.Authentication.Azure.B2C/Services/AzureADB2CController.cs +++ b/DotNetNuke.Authentication.Azure.B2C/Services/AzureADB2CController.cs @@ -152,6 +152,20 @@ public HttpResponseMessage UpdateGeneralSettings(AzureADB2CProviderSettings sett return Request.CreateResponse(HttpStatusCode.OK, new { Success = true }); } + catch (AggregateException ex) + { + Logger.Error(ex); + var aex = ex as AggregateException; + if (aex?.InnerException as Microsoft.Graph.ServiceException != null) + { + var sex = (Microsoft.Graph.ServiceException) aex.InnerException; + return Request.CreateResponse(HttpStatusCode.Forbidden, $"{sex.Error.Code}: {sex.Error.Message}"); + } + else + { + return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, ex); + } + } catch (Exception ex) { Logger.Error(ex); @@ -455,6 +469,20 @@ public HttpResponseMessage UpdateAdvancedSettings(AzureADB2CProviderSettings set AzureADB2CProviderSettings.SaveAdvancedSettings(AzureConfig.ServiceName, PortalId, settings); return Request.CreateResponse(HttpStatusCode.OK, new { Success = true }); } + catch (AggregateException ex) + { + Logger.Error(ex); + var aex = ex as AggregateException; + if (aex?.InnerException as Microsoft.Graph.ServiceException != null) + { + var sex = (Microsoft.Graph.ServiceException)aex.InnerException; + return Request.CreateResponse(HttpStatusCode.Forbidden, $"{sex.Error.Code}: {sex.Error.Message}"); + } + else + { + return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, ex); + } + } catch (Exception ex) { Logger.Error(ex); diff --git a/DotNetNuke.Authentication.Azure.B2C/Services/HelloController.cs b/DotNetNuke.Authentication.Azure.B2C/Services/HelloController.cs index b2a9b16..d987425 100644 --- a/DotNetNuke.Authentication.Azure.B2C/Services/HelloController.cs +++ b/DotNetNuke.Authentication.Azure.B2C/Services/HelloController.cs @@ -21,6 +21,7 @@ #endregion +using DotNetNuke.Instrumentation; using DotNetNuke.Web.Api; using System; using System.Net; @@ -39,6 +40,8 @@ public void RegisterRoutes(IMapRoute mapRouteManager) public class HelloController : DnnApiController { + private static readonly ILog _logger = LoggerSource.Instance.GetLogger(typeof(HelloController)); + [HttpGet] [DnnAuthorize(AuthTypes = "JWT")] public HttpResponseMessage Test() @@ -49,6 +52,7 @@ public HttpResponseMessage Test() } catch (Exception ex) { + _logger.Error(ex); return Request.CreateResponse(HttpStatusCode.InternalServerError, ex.Message); } } diff --git a/DotNetNuke.Authentication.Azure.B2C/Services/UserManagementController.cs b/DotNetNuke.Authentication.Azure.B2C/Services/UserManagementController.cs index d7f7319..e9a49f6 100644 --- a/DotNetNuke.Authentication.Azure.B2C/Services/UserManagementController.cs +++ b/DotNetNuke.Authentication.Azure.B2C/Services/UserManagementController.cs @@ -5,13 +5,14 @@ using DotNetNuke.Authentication.Azure.B2C.Components.Models; using DotNetNuke.Authentication.Azure.B2C.Data; using DotNetNuke.Common; -using DotNetNuke.Common.Utilities; using DotNetNuke.Entities.Controllers; using DotNetNuke.Entities.Users; +using DotNetNuke.Instrumentation; using DotNetNuke.Security; -using DotNetNuke.Services.Authentication.OAuth; using DotNetNuke.Services.Localization; using DotNetNuke.Web.Api; +using Microsoft.Graph; +using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Collections.Specialized; @@ -22,7 +23,6 @@ using System.Net; using System.Net.Http; using System.Net.Http.Headers; -using System.Text; using System.Web; using System.Web.Http; using System.Web.Security; @@ -31,6 +31,8 @@ namespace DotNetNuke.Authentication.Azure.B2C.Services { public class UserManagementController: DnnApiController { + private static readonly ILog _logger = LoggerSource.Instance.GetLogger(typeof(UserManagementController)); + private string LocalResourceFile { get @@ -54,11 +56,12 @@ public HttpResponseMessage GetAllGroups() var graphClient = new GraphClient(settings.AADApplicationId, settings.AADApplicationKey, settings.TenantId); var query = ""; - var users = graphClient.GetAllGroups(query); - return Request.CreateResponse(HttpStatusCode.OK, users.Values); + var groups = graphClient.GetAllGroups(query); + return Request.CreateResponse(HttpStatusCode.OK, groups.ToList()); } catch (Exception ex) { + _logger.Error(ex); return Request.CreateResponse(HttpStatusCode.InternalServerError, ex.Message); } } @@ -70,8 +73,9 @@ public HttpResponseMessage GetAllUsers(string search) try { var settings = new AzureConfig(AzureConfig.ServiceName, PortalSettings.PortalId); - var graphClient = new GraphClient(settings.AADApplicationId, settings.AADApplicationKey, settings.TenantId); - var query = "$orderby=displayName"; + var customAttributes = Utils.GetTabModuleSetting(ActiveModule.TabModuleID, "CustomFields").Replace(" ", ""); + var portalIdUserMapping = UserMappingsRepository.Instance.GetUserMapping("PortalId", settings.UseGlobalSettings ? -1 : PortalSettings.PortalId); + var graphClient = new GraphClient(settings.AADApplicationId, settings.AADApplicationKey, settings.TenantId, customAttributes, settings.B2cApplicationId, portalIdUserMapping); var filter = ConfigurationManager.AppSettings["AzureADB2C.GetAllUsers.Filter"]; var moduleFilter = Utils.GetTabModuleSetting(ActiveModule.TabModuleID, "GraphFilter"); if (!string.IsNullOrEmpty(moduleFilter)) @@ -90,26 +94,22 @@ public HttpResponseMessage GetAllUsers(string search) filter += " and "; } filter += $"startswith(displayName, '{search}')"; - } - var userMapping = UserMappingsRepository.Instance.GetUserMapping("PortalId", settings.UseGlobalSettings ? -1 : PortalSettings.PortalId); - if (userMapping != null && !string.IsNullOrEmpty(userMapping.GetB2cCustomAttributeName(PortalSettings.PortalId))) + } + if (portalIdUserMapping != null && !string.IsNullOrEmpty(portalIdUserMapping.GetB2cCustomAttributeName(PortalSettings.PortalId))) { if (!string.IsNullOrEmpty(filter)) { filter += " and "; } - filter += $"{userMapping.GetB2cCustomAttributeName(PortalSettings.PortalId)} eq {PortalSettings.PortalId}"; - } - if (!string.IsNullOrEmpty(filter)) - { - query = $"$filter={filter}"; + filter += $"{portalIdUserMapping.GetB2cCustomAttributeName(PortalSettings.PortalId)} eq {PortalSettings.PortalId}"; } - var users = graphClient.GetAllUsers(query); - return Request.CreateResponse(HttpStatusCode.OK, users.Values); + var users = graphClient.GetAllUsers(filter); + return Request.CreateResponse(HttpStatusCode.OK, users.ToList()); } catch (Exception ex) { + _logger.Error(ex); return Request.CreateResponse(HttpStatusCode.InternalServerError, ex.Message); } } @@ -138,10 +138,11 @@ public HttpResponseMessage GetUserGroups(string objectId) } var groups = graphClient.GetUserGroups(objectId); - return Request.CreateResponse(HttpStatusCode.OK, groups.Values); + return Request.CreateResponse(HttpStatusCode.OK, groups.ToList()); } catch (Exception ex) { + _logger.Error(ex); return Request.CreateResponse(HttpStatusCode.InternalServerError, ex.Message); } } @@ -164,30 +165,39 @@ public HttpResponseMessage AddUser(AddUserParameters parameters) { return Request.CreateResponse(HttpStatusCode.Forbidden, "You are not allowed to add users"); } + var settings = new AzureConfig(AzureConfig.ServiceName, PortalSettings.PortalId); - var graphClient = new GraphClient(settings.AADApplicationId, settings.AADApplicationKey, settings.TenantId); + var customAttributes = Utils.GetTabModuleSetting(ActiveModule.TabModuleID, "CustomFields").Replace(" ", ""); + var userMapping = UserMappingsRepository.Instance.GetUserMapping("PortalId", settings.UseGlobalSettings ? -1 : PortalSettings.PortalId); + var graphClient = new GraphClient(settings.AADApplicationId, settings.AADApplicationKey, settings.TenantId, customAttributes, settings.B2cApplicationId, userMapping); var newUser = new NewUser(parameters.user); + + if (newUser?.Identities == null || newUser.Identities.Count() != 1) + { + throw new ApplicationException("Identity is required"); + } + // Ensure user is on this tenant + var identity = newUser.Identities.FirstOrDefault(); + identity.Issuer = $"{settings.TenantName}.onmicrosoft.com"; + if (bool.Parse(Utils.GetTabModuleSetting(ActiveModule.TabModuleID, "EnableAddUsersByUsername", "False")) - && !string.IsNullOrEmpty(newUser.Username)) + && !string.IsNullOrEmpty(newUser.UserPrincipalName)) { - AddSignInName(newUser, "userName", newUser.Username); + AddIdentity(newUser, $"{settings.TenantName}.onmicrosoft.com", "userName", newUser.UserPrincipalName); } if (bool.Parse(Utils.GetTabModuleSetting(ActiveModule.TabModuleID, "EnableAddUsersByEmail", "True")) && !string.IsNullOrEmpty(newUser.Mail)) { - AddSignInName(newUser, "emailAddress", newUser.Mail); + AddIdentity(newUser, $"{settings.TenantName}.onmicrosoft.com", "emailAddress", newUser.Mail); newUser.OtherMails = new string[] { newUser.Mail }; } newUser.PasswordProfile.Password = parameters.passwordType == "auto" ? Membership.GeneratePassword(Membership.MinRequiredPasswordLength < 8 ? 8 : Membership.MinRequiredPasswordLength, Membership.MinRequiredNonAlphanumericCharacters < 2 ? 2 : Membership.MinRequiredNonAlphanumericCharacters) : parameters.password; - newUser.Mail = null; - newUser.Username = null; // Add custom extension claim PortalId if configured - var userMapping = UserMappingsRepository.Instance.GetUserMapping("PortalId", settings.UseGlobalSettings ? -1 : PortalSettings.PortalId); if (userMapping != null) { var b2cExtensionName = userMapping.GetB2cCustomAttributeName(PortalSettings.PortalId); @@ -212,6 +222,7 @@ public HttpResponseMessage AddUser(AddUserParameters parameters) } catch (Exception ex) { + _logger.Error(ex); return Request.CreateResponse(HttpStatusCode.InternalServerError, ex.Message); } } @@ -236,16 +247,17 @@ public HttpResponseMessage ChangePassword(AddUserParameters parameters) } var settings = new AzureConfig(AzureConfig.ServiceName, PortalSettings.PortalId); - var graphClient = new GraphClient(settings.AADApplicationId, settings.AADApplicationKey, settings.TenantId); - var portalUserMapping = UserMappingsRepository.Instance.GetUserMapping("PortalId", settings.UseGlobalSettings ? -1 : PortalSettings.PortalId); + var customAttributes = Utils.GetTabModuleSetting(ActiveModule.TabModuleID, "CustomFields").Replace(" ", ""); + var portalIdUserMapping = UserMappingsRepository.Instance.GetUserMapping("PortalId", settings.UseGlobalSettings ? -1 : PortalSettings.PortalId); + var graphClient = new GraphClient(settings.AADApplicationId, settings.AADApplicationKey, settings.TenantId, customAttributes, settings.B2cApplicationId, portalIdUserMapping); // Validate permissions - var user = graphClient.GetUser(parameters.user.ObjectId); - string portalUserMappingB2cCustomClaimName = portalUserMapping?.GetB2cCustomClaimName(); - if (!UserInfo.IsSuperUser && portalUserMapping != null && !string.IsNullOrEmpty(portalUserMappingB2cCustomClaimName)) + var user = graphClient.GetUser(parameters.user.Id); + string portalUserMappingB2cCustomClaimName = portalIdUserMapping?.GetB2cCustomClaimName(); + if (!UserInfo.IsSuperUser && portalIdUserMapping != null && !string.IsNullOrEmpty(portalUserMappingB2cCustomClaimName)) { - if (!user.AdditionalData.ContainsKey(portalUserMapping.GetB2cCustomClaimName()) - || (int)(long)user.AdditionalData[portalUserMapping.GetB2cCustomClaimName()] != PortalSettings.PortalId) + if (!user.AdditionalData.ContainsKey(portalIdUserMapping.GetB2cCustomClaimName()) + || (int)(long)user.AdditionalData[portalIdUserMapping.GetB2cCustomClaimName()] != PortalSettings.PortalId) { return Request.CreateResponse(HttpStatusCode.Forbidden, "You are not allowed to modify this user"); } @@ -256,7 +268,6 @@ public HttpResponseMessage ChangePassword(AddUserParameters parameters) Membership.MinRequiredNonAlphanumericCharacters < 2 ? 2 : Membership.MinRequiredNonAlphanumericCharacters) : parameters.password; - newUser.AdditionalData.Clear(); graphClient.UpdateUserPassword(newUser); // Send welcome email with password @@ -269,6 +280,7 @@ public HttpResponseMessage ChangePassword(AddUserParameters parameters) } catch (Exception ex) { + _logger.Error(ex); return Request.CreateResponse(HttpStatusCode.InternalServerError, ex.Message); } } @@ -289,11 +301,12 @@ public HttpResponseMessage UpdateUser(UpdateUserParameters parameters) } var settings = new AzureConfig(AzureConfig.ServiceName, PortalSettings.PortalId); - var graphClient = new GraphClient(settings.AADApplicationId, settings.AADApplicationKey, settings.TenantId); + var customAttributes = Utils.GetTabModuleSetting(ActiveModule.TabModuleID, "CustomFields").Replace(" ", ""); var portalUserMapping = UserMappingsRepository.Instance.GetUserMapping("PortalId", settings.UseGlobalSettings ? -1 : PortalSettings.PortalId); + var graphClient = new GraphClient(settings.AADApplicationId, settings.AADApplicationKey, settings.TenantId, customAttributes, settings.B2cApplicationId, portalUserMapping); // Validate permissions - var user = graphClient.GetUser(parameters.user.ObjectId); + var user = graphClient.GetUser(parameters.user.Id); string portalUserMappingB2cCustomClaimName = portalUserMapping?.GetB2cCustomClaimName(); if (!UserInfo.IsSuperUser && portalUserMapping != null && !string.IsNullOrEmpty(portalUserMappingB2cCustomClaimName)) { @@ -314,28 +327,26 @@ public HttpResponseMessage UpdateUser(UpdateUserParameters parameters) if (user.UserPrincipalName.StartsWith("cpim_")) // Is a federated user? { // Can't modify this properties on federated users - user.UserIdentities = null; - user.SignInNames = null; + user.Identities = null; } else { if (bool.Parse(Utils.GetTabModuleSetting(ActiveModule.TabModuleID, "EnableAddUsersByUsername", "False")) - && !string.IsNullOrEmpty(parameters.user.Username)) + && !string.IsNullOrEmpty(parameters.user.UserPrincipalName)) { - AddSignInName(user, "userName", parameters.user.Username); + AddIdentity(user, $"{settings.TenantName}.onmicrosoft.com", "userName", parameters.user.UserPrincipalName); } if (bool.Parse(Utils.GetTabModuleSetting(ActiveModule.TabModuleID, "EnableAddUsersByUsername", "False")) && !string.IsNullOrEmpty(parameters.user.Mail)) { - AddSignInName(user, "emailAddress", parameters.user.Mail); + AddIdentity(user, $"{settings.TenantName}.onmicrosoft.com", "emailAddress", parameters.user.Mail); user.OtherMails = new string[] { parameters.user.Mail }; } } // Custom Attributes - var customAttributes = Utils.GetTabModuleSetting(ActiveModule.TabModuleID, "CustomFields").Replace(" ", ""); - if (!string.IsNullOrEmpty(customAttributes)) + if (!string.IsNullOrEmpty(customAttributes) && parameters.user.AdditionalData != null) { string[] attr = customAttributes.Split(','); foreach (var key in parameters.user.AdditionalData.Keys) @@ -356,33 +367,35 @@ public HttpResponseMessage UpdateUser(UpdateUserParameters parameters) } catch (Exception ex) { + _logger.Error(ex); return Request.CreateResponse(HttpStatusCode.InternalServerError, ex.Message); } } - private void AddSignInName(User user, string signInType, string signInValue) + private void AddIdentity(User user, string issuer, string signInType, string issuerAssignedId) { - var signInName = new SignInName() + var identity = new ObjectIdentity() { - Type = signInType, - Value = signInValue + Issuer = issuer, + SignInType = signInType, + IssuerAssignedId = issuerAssignedId }; - if (user.SignInNames == null) + if (user.Identities == null) { - user.AdditionalData.Add("signInNames", signInName); + user.Identities = new List(); + } + + var identities = user.Identities.ToList(); + var current = identities.FirstOrDefault(x => x.SignInType == signInType); + if (current == null) + { + identities.Add(identity); } else { - var current = user.SignInNames.FirstOrDefault(x => x.Type == signInType); - if (current == null) - { - user.SignInNames.Add(signInName); - } - else - { - current.Value = signInValue; - } + current.IssuerAssignedId = issuerAssignedId; } + user.Identities = identities; } public class ForceChangePasswordParameters @@ -401,11 +414,12 @@ public HttpResponseMessage ForceChangePassword(ForceChangePasswordParameters par } var settings = new AzureConfig(AzureConfig.ServiceName, PortalSettings.PortalId); - var graphClient = new GraphClient(settings.AADApplicationId, settings.AADApplicationKey, settings.TenantId); + var customAttributes = Utils.GetTabModuleSetting(ActiveModule.TabModuleID, "CustomFields").Replace(" ", ""); var portalUserMapping = UserMappingsRepository.Instance.GetUserMapping("PortalId", settings.UseGlobalSettings ? -1 : PortalSettings.PortalId); + var graphClient = new GraphClient(settings.AADApplicationId, settings.AADApplicationKey, settings.TenantId, customAttributes, settings.B2cApplicationId, portalUserMapping); // Validate permissions - var user = graphClient.GetUser(parameters.user.ObjectId); + var user = graphClient.GetUser(parameters.user.Id); // Check user is from current portal, if PortalId is an extension name string portalUserMappingB2cCustomClaimName = portalUserMapping?.GetB2cCustomClaimName(); if (!UserInfo.IsSuperUser && portalUserMapping != null && !string.IsNullOrEmpty(portalUserMappingB2cCustomClaimName)) @@ -426,6 +440,7 @@ public HttpResponseMessage ForceChangePassword(ForceChangePasswordParameters par } catch (Exception ex) { + _logger.Error(ex); return Request.CreateResponse(HttpStatusCode.InternalServerError, ex.Message); } } @@ -433,7 +448,7 @@ public HttpResponseMessage ForceChangePassword(ForceChangePasswordParameters par public class RemoveParameters { - public string objectId { get; set; } + public string id { get; set; } } [HttpPost] [DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.View)] @@ -448,11 +463,11 @@ public HttpResponseMessage Remove(RemoveParameters parameters) var settings = new AzureConfig(AzureConfig.ServiceName, PortalSettings.PortalId); var graphClient = new GraphClient(settings.AADApplicationId, settings.AADApplicationKey, settings.TenantId); - graphClient.DeleteUser(parameters.objectId); + graphClient.DeleteUser(parameters.id); // Delete user if exist locally - var usernamePrefix = settings.UsernamePrefixEnabled ? "AzureB2C-" : ""; - var userInfo = UserController.GetUserByName(PortalSettings.PortalId, $"{usernamePrefix}{parameters.objectId}"); + var usernamePrefix = settings.UsernamePrefixEnabled ? $"{AzureConfig.ServiceName}-" : ""; + var userInfo = UserController.GetUserByName(PortalSettings.PortalId, $"{usernamePrefix}{parameters.id}"); if (userInfo != null) { UserController.DeleteUser(ref userInfo, false, true); @@ -463,27 +478,14 @@ public HttpResponseMessage Remove(RemoveParameters parameters) } catch (Exception ex) { + _logger.Error(ex); return Request.CreateResponse(HttpStatusCode.InternalServerError, ex.Message); } } private static void UpdateGroupMemberShip(GraphClient graphClient, User user, List userGroups) { - var groups = graphClient.GetAllGroups(""); - foreach (var group in groups.Values) - { - var groupMembers = graphClient.GetGroupMembers(group.ObjectId); - if (groupMembers.Values.Any(u => u.ObjectId == user.ObjectId) - && !userGroups.Any(x => x.ObjectId == group.ObjectId)) - { - graphClient.RemoveGroupMember(group.ObjectId, user.ObjectId); - } - if (!groupMembers.Values.Any(u => u.ObjectId == user.ObjectId) - && userGroups.Any(x => x.ObjectId == group.ObjectId)) - { - graphClient.AddGroupMember(group.ObjectId, user.ObjectId); - } - } + graphClient.UpdateGroupMembers(user, userGroups); } private void SendWelcomeEmail(NewUser user) @@ -502,7 +504,7 @@ private string ReplaceTokens(string message, NewUser user) message = message.Replace("[Portal:URL]", Globals.AddHTTP(PortalSettings.DefaultPortalAlias)); message = message.Replace("[Portal:LogoURL]", $"{Globals.AddHTTP(PortalSettings.DefaultPortalAlias)}/Portals/{PortalSettings.PortalId}/{PortalSettings.LogoFile}"); message = message.Replace("[Portal:Copyright]", PortalSettings.FooterText.Replace("[year]", DateTime.Now.ToString("yyyy"))); - message = message.Replace("[User:UserName]", user.SignInNames.FirstOrDefault().Value); + message = message.Replace("[User:UserName]", user.Identities.FirstOrDefault().IssuerAssignedId); message = message.Replace("[User:DisplayName]", user.DisplayName); message = message.Replace("[User:FirstName]", user.GivenName); message = message.Replace("[User:LastName]", user.Surname); @@ -570,8 +572,9 @@ public HttpResponseMessage Impersonate(ImpersonateParams parameters) } var settings = new AzureConfig(AzureConfig.ServiceName, PortalSettings.PortalId); - var graphClient = new GraphClient(settings.AADApplicationId, settings.AADApplicationKey, settings.TenantId); + var customAttributes = Utils.GetTabModuleSetting(ActiveModule.TabModuleID, "CustomFields").Replace(" ", ""); var portalUserMapping = UserMappingsRepository.Instance.GetUserMapping("PortalId", settings.UseGlobalSettings ? -1 : PortalSettings.PortalId); + var graphClient = new GraphClient(settings.AADApplicationId, settings.AADApplicationKey, settings.TenantId, customAttributes, settings.B2cApplicationId, portalUserMapping); var idUserMapping = UserMappingsRepository.Instance.GetUserMapping("Id", settings.UseGlobalSettings ? -1 : PortalSettings.PortalId); if (string.IsNullOrEmpty(settings.ImpersonatePolicy)) @@ -598,7 +601,7 @@ public HttpResponseMessage Impersonate(ImpersonateParams parameters) user.AdditionalData.Add($"extension_{settings.B2cApplicationId.Replace("-", "")}_canImpersonate", true); // HACK: Avoid error "Property alternativeSecurityIds value is required but is empty or missing." when using // federated users - user.UserIdentities = null; + //user.UserIdentities = null; graphClient.UpdateUser(user); // Return the impersonation URL @@ -611,6 +614,7 @@ public HttpResponseMessage Impersonate(ImpersonateParams parameters) } catch (Exception ex) { + _logger.Error(ex); return Request.CreateResponse(HttpStatusCode.InternalServerError, ex.Message); } } @@ -625,11 +629,11 @@ private User GetGraphUserForImpersonation(AzureConfig settings, GraphClient grap } else if (idUserMapping.B2cClaimName.ToLowerInvariant() == "emails") { - user = graphClient.GetAllUsers($"$filter=signInNames/any(c:c/value eq '{usernameWithoutPrefix}')").Values.FirstOrDefault(); + user = graphClient.GetAllUsers($"identities/any(c:c/issuer eq '{settings.TenantName}.onmicrosoft.com' and c/issuerAssignedId eq '{usernameWithoutPrefix}')").FirstOrDefault(); } else { - user = graphClient.GetAllUsers($"$filter={idUserMapping.GetB2cCustomAttributeName(settings.PortalID)} eq '{usernameWithoutPrefix}'").Values.FirstOrDefault(); + user = graphClient.GetAllUsers($"{idUserMapping.GetB2cCustomAttributeName(settings.PortalID)} eq '{usernameWithoutPrefix}'").FirstOrDefault(); } return user; } @@ -645,11 +649,11 @@ public HttpResponseMessage Export(string search) return Request.CreateResponse(HttpStatusCode.Forbidden, "You are not allowed to export users"); } var settings = new AzureConfig(AzureConfig.ServiceName, PortalSettings.PortalId); - var graphClient = new GraphClient(settings.AADApplicationId, settings.AADApplicationKey, settings.TenantId); + var customAttributes = Utils.GetTabModuleSetting(ActiveModule.TabModuleID, "CustomFields").Replace(" ", ""); var portalUserMapping = UserMappingsRepository.Instance.GetUserMapping("PortalId", settings.UseGlobalSettings ? -1 : PortalSettings.PortalId); + var graphClient = new GraphClient(settings.AADApplicationId, settings.AADApplicationKey, settings.TenantId, customAttributes, settings.B2cApplicationId, portalUserMapping); var idUserMapping = UserMappingsRepository.Instance.GetUserMapping("Id", settings.UseGlobalSettings ? -1 : PortalSettings.PortalId); - var query = "$orderby=displayName"; var filter = ConfigurationManager.AppSettings["AzureADB2C.GetAllUsers.Filter"]; if (!string.IsNullOrEmpty(search)) { @@ -668,23 +672,17 @@ public HttpResponseMessage Export(string search) } filter += $"{userMapping.GetB2cCustomAttributeName(PortalSettings.PortalId)} eq {PortalSettings.PortalId}"; } - if (!string.IsNullOrEmpty(filter)) - { - query = $"$filter={filter}"; - } - - var customAttributes = Utils.GetTabModuleSetting(ActiveModule.TabModuleID, "CustomFields").Replace(" ", ""); var opId = Guid.NewGuid().ToString(); var filename = Path.Combine(Path.GetTempPath(), $"{opId}.tmp"); - File.AppendAllText(filename, $"userPrincipalName,displayName,surname,givenName,issuer,mail,objectId,userType,jobTitle,department,accountEnabled,usageLocation,streetAddress,state,country,physicalDeliveryOfficeName,city,postalCode,telephoneNumber,mobile,ageGroup,legalAgeGroupClassification{(!string.IsNullOrEmpty(customAttributes) ? "," + customAttributes : "")}\n", System.Text.Encoding.UTF8); - var users = graphClient.GetAllUsers(query); - while (users.Values.Count > 0) + System.IO.File.AppendAllText(filename, $"userPrincipalName,displayName,surname,givenName,issuer,mail,objectId,userType,jobTitle,department,accountEnabled,usageLocation,streetAddress,state,country,physicalDeliveryOfficeName,city,postalCode,telephoneNumber,mobile,ageGroup,legalAgeGroupClassification{(!string.IsNullOrEmpty(customAttributes) ? "," + customAttributes : "")}\n", System.Text.Encoding.UTF8); + var users = graphClient.GetAllUsers(filter); + while (users != null && users.Count > 0) { - foreach (var user in users.Values) + foreach (var user in users) { - var mail = user.Mail ?? user.OtherMails?.FirstOrDefault() ?? user.SignInNames?.FirstOrDefault()?.Value; - var userLine = $"{user.UserPrincipalName},{user.DisplayName},{user.Surname},{user.GivenName},{user.UserIdentities?.FirstOrDefault()?.Issuer},{mail},{user.ObjectId},{user.UserType},{user.JobTitle},{user.Department},{user.AccountEnabled},{user.UsageLocation},{user.StreetAddress},{user.State},{user.Country},\"{user.OfficeLocation}\",{user.City},{user.PostalCode},{user.BusinessPhones?.FirstOrDefault()},{user.MobilePhone},{user.AgeGroup},{user.LegalAgeGroupClassification}"; + var mail = user.Mail ?? user.OtherMails?.FirstOrDefault() ?? user.Identities?.FirstOrDefault()?.IssuerAssignedId; + var userLine = $"{user.UserPrincipalName},{user.DisplayName},{user.Surname},{user.GivenName},{user.Identities?.FirstOrDefault()?.Issuer},{mail},{user.Id},{user.UserType},{user.JobTitle},{user.Department},{user.AccountEnabled},{user.UsageLocation},{user.StreetAddress},{user.State},{user.Country},\"{user.OfficeLocation}\",{user.City},{user.PostalCode},{user.BusinessPhones?.FirstOrDefault()},{user.MobilePhone},{user.AgeGroup},{user.LegalAgeGroupClassification}"; foreach (string attr in customAttributes.Split(',')) { @@ -697,14 +695,12 @@ public HttpResponseMessage Export(string search) } userLine += "\n"; - File.AppendAllText(filename, userLine, System.Text.Encoding.UTF8); + System.IO.File.AppendAllText(filename, userLine, System.Text.Encoding.UTF8); } - if (string.IsNullOrEmpty(users.ODataNextLink)) - break; - users = graphClient.GetNextUsers(users.ODataNextLink); + users = users.NextPageRequest?.GetSync(); } - // Return the impersonation URL + // Return the download URL var url = Request.RequestUri.ToString().ToLowerInvariant(); url = url.Substring(0, url.IndexOf("/export")) + "/downloadusers?id=" + opId; return Request.CreateResponse(HttpStatusCode.OK, new @@ -714,6 +710,7 @@ public HttpResponseMessage Export(string search) } catch (Exception ex) { + _logger.Error(ex); return Request.CreateResponse(HttpStatusCode.InternalServerError, ex.Message); } } @@ -725,21 +722,16 @@ public HttpResponseMessage DownloadUsers(string id) { try { - var settings = new AzureConfig(AzureConfig.ServiceName, PortalSettings.PortalId); - var graphClient = new GraphClient(settings.AADApplicationId, settings.AADApplicationKey, settings.TenantId); - var portalUserMapping = UserMappingsRepository.Instance.GetUserMapping("PortalId", settings.UseGlobalSettings ? -1 : PortalSettings.PortalId); - var idUserMapping = UserMappingsRepository.Instance.GetUserMapping("Id", settings.UseGlobalSettings ? -1 : PortalSettings.PortalId); - if (string.IsNullOrEmpty(id)) { return Request.CreateResponse(HttpStatusCode.NotFound, "Operation not found"); } var filename = Path.Combine(Path.GetTempPath(), $"{id}.tmp"); - if (!File.Exists(filename) || !(File.GetCreationTimeUtc(filename) > DateTime.UtcNow.AddMinutes(-1))) + if (!System.IO.File.Exists(filename) || !(System.IO.File.GetCreationTimeUtc(filename) > DateTime.UtcNow.AddMinutes(-1))) { return Request.CreateResponse(HttpStatusCode.NotFound, "Operation not found"); } - var dataBytes = File.ReadAllBytes(filename); + var dataBytes = System.IO.File.ReadAllBytes(filename); var dataStream = new MemoryStream(dataBytes); var result = new HttpResponseMessage(HttpStatusCode.OK); @@ -753,6 +745,7 @@ public HttpResponseMessage DownloadUsers(string id) } catch (Exception ex) { + _logger.Error(ex); return Request.CreateResponse(HttpStatusCode.InternalServerError, ex.Message); } } diff --git a/DotNetNuke.Authentication.Azure.B2C/UserManagement.ascx b/DotNetNuke.Authentication.Azure.B2C/UserManagement.ascx index f0c114b..938bf31 100644 --- a/DotNetNuke.Authentication.Azure.B2C/UserManagement.ascx +++ b/DotNetNuke.Authentication.Azure.B2C/UserManagement.ascx @@ -57,10 +57,10 @@
- + <% if (EnableDelete) { %> - + <% = LocalizeString("Delete") %> <% } %> @@ -143,7 +143,7 @@
- +
@@ -218,7 +218,7 @@
- +
diff --git a/DotNetNuke.Authentication.Azure.B2C/admin/personaBar/scripts/bundles/bundle-en.js b/DotNetNuke.Authentication.Azure.B2C/admin/personaBar/scripts/bundles/bundle-en.js index 3487bf6..d787b1c 100644 --- a/DotNetNuke.Authentication.Azure.B2C/admin/personaBar/scripts/bundles/bundle-en.js +++ b/DotNetNuke.Authentication.Azure.B2C/admin/personaBar/scripts/bundles/bundle-en.js @@ -1,2 +1,2 @@ -!function(e){var t={};function n(i){if(t[i])return t[i].exports;var o=t[i]={i:i,l:!1,exports:{}};return e[i].call(o.exports,o,o.exports,n),o.l=!0,o.exports}n.m=e,n.c=t,n.d=function(e,t,i){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:i})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var i=Object.create(null);if(n.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(i,o,function(t){return e[t]}.bind(null,o));return i},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=47)}([function(e,t){e.exports=window.dnn.nodeModules.React},function(e,t){e.exports=window.dnn.nodeModules.CommonComponents},function(e,t,n){"use strict";var i={init:function(e){if(!e)throw new Error("Utilities is undefined.");this.utilities=e},utilities:null};t.a=i},function(e,t,n){"use strict";var i={SWITCH_TAB:"SWITCH_TAB",RETRIEVED_SETTINGS:"RETRIEVED_SETTINGS",UPDATED_SETTINGS:"UPDATED_SETTINGS",UPDATED_PROFILEMAPPING:"UPDATED_PROFILEMAPPING",SETTINGS_CLIENT_MODIFIED:"SETTINGS_CLIENT_MODIFIED",RETRIEVED_PROFILESETTINGS:"RETRIEVED_PROFILESETTINGS",RETRIEVED_PROFILEPROPERTIES:"RETRIEVED_PROFILEPROPERTIES",CANCELLED_PROFILEMAPPING_CLIENT_MODIFIED:"CANCELLED_PROFILEMAPPING_CLIENT_MODIFIED",PROFILEMAPPINGS_CLIENT_MODIFIED:"PROFILEMAPPINGS_CLIENT_MODIFIED",SWITCH_MAPPING_SUBTAB:"SWITCH_MAPPING_SUBTAB",RETRIEVED_ROLEMAPPINGSETTINGS:"RETRIEVED_ROLEMAPPINGSETTINGS",RETRIEVED_AVAILABLEROLES:"RETRIEVED_AVAILABLEROLES",ROLEMAPPINGS_CLIENT_MODIFIED:"ROLEMAPPINGS_CLIENT_MODIFIED",RETRIEVED_USERMAPPINGSETTINGS:"RETRIEVED_USERMAPPINGSETTINGS",USERMAPPINGS_CLIENT_MODIFIED:"USERMAPPINGS_CLIENT_MODIFIED"};n.d(t,"a",function(){return i})},function(e,t){e.exports=window.dnn.nodeModules.ReactRedux},function(e,t,n){e.exports=n(16)()},function(e,t,n){"use strict";e.exports=function(e){var t=[];return t.toString=function(){return this.map(function(t){var n=function(e,t){var n=e[1]||"",i=e[3];if(!i)return n;if(t&&"function"==typeof btoa){var o=(a=i,"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,"+btoa(unescape(encodeURIComponent(JSON.stringify(a))))+" */"),r=i.sources.map(function(e){return"/*# sourceURL="+i.sourceRoot+e+" */"});return[n].concat(r).concat([o]).join("\n")}var a;return[n].join("\n")}(t,e);return t[2]?"@media "+t[2]+"{"+n+"}":n}).join("")},t.i=function(e,n){"string"==typeof e&&(e=[[null,e,""]]);for(var i={},o=0;o=0&&c.splice(t,1)}function b(e){var t=document.createElement("style");if(void 0===e.attrs.type&&(e.attrs.type="text/css"),void 0===e.attrs.nonce){var i=function(){0;return n.nc}();i&&(e.attrs.nonce=i)}return h(t,e.attrs),g(e,t),t}function h(e,t){Object.keys(t).forEach(function(n){e.setAttribute(n,t[n])})}function y(e,t){var n,i,o,r;if(t.transform&&e.css){if(!(r="function"==typeof t.transform?t.transform(e.css):t.transform.default(e.css)))return function(){};e.css=r}if(t.singleton){var a=s++;n=p||(p=b(t)),i=S.bind(null,n,a,!1),o=S.bind(null,n,a,!0)}else e.sourceMap&&"function"==typeof URL&&"function"==typeof URL.createObjectURL&&"function"==typeof URL.revokeObjectURL&&"function"==typeof Blob&&"function"==typeof btoa?(n=function(e){var t=document.createElement("link");return void 0===e.attrs.type&&(e.attrs.type="text/css"),e.attrs.rel="stylesheet",h(t,e.attrs),g(e,t),t}(t),i=function(e,t,n){var i=n.css,o=n.sourceMap,r=void 0===t.convertToAbsoluteUrls&&o;(t.convertToAbsoluteUrls||r)&&(i=d(i));o&&(i+="\n/*# sourceMappingURL=data:application/json;base64,"+btoa(unescape(encodeURIComponent(JSON.stringify(o))))+" */");var a=new Blob([i],{type:"text/css"}),l=e.href;e.href=URL.createObjectURL(a),l&&URL.revokeObjectURL(l)}.bind(null,n,t),o=function(){m(n),n.href&&URL.revokeObjectURL(n.href)}):(n=b(t),i=function(e,t){var n=t.css,i=t.media;i&&e.setAttribute("media",i);if(e.styleSheet)e.styleSheet.cssText=n;else{for(;e.firstChild;)e.removeChild(e.firstChild);e.appendChild(document.createTextNode(n))}}.bind(null,n),o=function(){m(n)});return i(e),function(t){if(t){if(t.css===e.css&&t.media===e.media&&t.sourceMap===e.sourceMap)return;i(e=t)}else o()}}e.exports=function(e,t){if("undefined"!=typeof DEBUG&&DEBUG&&"object"!=typeof document)throw new Error("The style-loader cannot be used in a non-browser environment");(t=t||{}).attrs="object"==typeof t.attrs?t.attrs:{},t.singleton||"boolean"==typeof t.singleton||(t.singleton=a()),t.insertInto||(t.insertInto="head"),t.insertAt||(t.insertAt="bottom");var n=f(e,t);return u(n,t),function(e){for(var i=[],o=0;o div {\n border: solid 1px;\n}\n.dnn-azuread-b2c-syncSettings .warning-container .warning-icon > svg {\n width: 17px;\n float: left;\n height: 17px;\n margin: 0 10px 0 0;\n}\n.dnn-azuread-b2c-syncSettings .warning-container .warning-msg {\n margin-left: 30px;\n}\n.dnn-azuread-b2c-syncSettings h1.spacer {\n margin-top: 25px;\n}\n",""])},function(e,t,n){"use strict";n.r(t),t.default='\r\n\x3c!-- Generator: Adobe Illustrator 20.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --\x3e\r\n\r\n\r\n\r\n\r\n'},function(e,t,n){var i=n(27);"string"==typeof i&&(i=[[e.i,i,""]]);var o={hmr:!0,transform:void 0,insertInto:void 0};n(7)(i,o);i.locals&&(e.exports=i.locals)},function(e,t,n){(e.exports=n(6)(!1)).push([e.i,"/* START EVOQ COLOR PALETTE */\n/* END EVOQ COLOR PALETTE */\n/* START ATTENTION COLORS */\n/* END ATTENTION COLORS */\n/* SVG HOVER STATES */\nsvg {\n fill: #C8C8C8;\n}\nsvg:hover {\n fill: #6F7273;\n}\nsvg:active {\n fill: #1E88C3;\n}\n/* END SVG HOVER STATES */\n.collapsible-component-profile {\n display: block;\n float: left;\n width: 100%;\n cursor: auto;\n}\n.collapsible-component-profile:not(:last-child) {\n border-bottom: 1px solid #C8C8C8;\n}\n.collapsible-component-profile div.collapsible-profile {\n width: 100%;\n float: left;\n position: relative;\n padding: 15px 0 10px 0;\n box-sizing: border-box;\n cursor: auto;\n}\n.collapsible-component-profile div.collapsible-profile .row {\n float: left;\n width: 100%;\n}\n.collapsible-component-profile div.collapsible-profile .row .item-row-dnnprofile {\n width: 35%;\n float: left;\n padding-left: 15px;\n word-break: break-all;\n}\n.collapsible-component-profile div.collapsible-profile .row .item-row-b2cprofile {\n width: 20%;\n float: left;\n}\n.collapsible-component-profile div.collapsible-profile .row .item-row-b2cextension {\n width: 30%;\n float: left;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.collapsible-component-profile div.collapsible-profile .row .item-row-primary {\n width: 10%;\n float: left;\n text-align: center;\n}\n.collapsible-component-profile div.collapsible-profile .row .item-row-primary .checkMarkIcon {\n width: 16px;\n height: 16px;\n margin-left: auto;\n margin-right: auto;\n}\n.collapsible-component-profile div.collapsible-profile .row .item-row-primary .checkMarkIcon > svg {\n fill: #4B4E4F;\n}\n.collapsible-component-profile div.collapsible-profile .row .item-row-actionButtons {\n width: 8%;\n margin-right: 15px;\n float: right;\n}\n.collapsible-component-profile div.collapsible-profile .row .item-row-actionButtons:not(:last-child) {\n float: left;\n margin-right: 0px;\n}\n.collapsible-component-profile div.collapsible-profile .row .item-row-actionButtons .delete-icon,\n.collapsible-component-profile div.collapsible-profile .row .item-row-actionButtons .edit-icon {\n margin-left: 5px;\n float: right;\n display: block;\n cursor: pointer;\n}\n.collapsible-component-profile div.collapsible-profile .row .item-row-actionButtons .delete-icon > svg,\n.collapsible-component-profile div.collapsible-profile .row .item-row-actionButtons .edit-icon > svg {\n width: 16px;\n float: left;\n height: 16px;\n fill: #C8C8C8;\n}\n.collapsible-component-profile div.collapsible-profile .row .item-row-actionButtons .delete-icon > svg:hover,\n.collapsible-component-profile div.collapsible-profile .row .item-row-actionButtons .edit-icon > svg:hover {\n fill: #4B4E4F;\n}\n.collapsible-component-profile div.collapsible-profile .row .item-row-actionButtons .delete-icon-hidden {\n display: none;\n}\n.collapsible-component-profile div.collapsible-profile .row .item-row-actionButtons .edit-icon-active > svg {\n width: 16px;\n float: right;\n height: 16px;\n fill: #1E88C3;\n}\n.collapsible-component-profile div.collapsible-profile .row .item-row-wrapper {\n padding: 0 5px 0 5px;\n}\n",""])},function(e,t,n){var i=n(29);"string"==typeof i&&(i=[[e.i,i,""]]);var o={hmr:!0,transform:void 0,insertInto:void 0};n(7)(i,o);i.locals&&(e.exports=i.locals)},function(e,t,n){(e.exports=n(6)(!1)).push([e.i,"/* START EVOQ COLOR PALETTE */\n/* END EVOQ COLOR PALETTE */\n/* START ATTENTION COLORS */\n/* END ATTENTION COLORS */\n/* SVG HOVER STATES */\nsvg {\n fill: #C8C8C8;\n}\nsvg:hover {\n fill: #6F7273;\n}\nsvg:active {\n fill: #1E88C3;\n}\n/* END SVG HOVER STATES */\n.profilemapping-editor {\n float: left;\n margin: 20px 30px;\n}\n.profilemapping-editor .topMessage {\n border: 1px solid #C8C8C8;\n padding: 10px 20px;\n background-color: #E5E7E6;\n margin: 0 0 20px 0;\n}\n.profilemapping-editor .dnn-ui-common-input-group {\n padding: 0 0 15px 0;\n}\n.profilemapping-editor .dnn-ui-common-input-group label {\n font-weight: bolder;\n float: left;\n}\n.profilemapping-editor .dnn-ui-common-input-group .dnn-label {\n margin: 8px 0;\n}\n.profilemapping-editor .dnn-ui-common-input-group .dnn-dropdown,\n.profilemapping-editor .dnn-ui-common-input-group .dnn-dropdown-with-error {\n width: 100% !important;\n box-sizing: border-box;\n}\n.profilemapping-editor .dnn-ui-common-input-group .dnn-single-line-input-with-error {\n width: 100% !important;\n}\n.profilemapping-editor .dnn-grid-system .left-column {\n padding-right: 30px;\n border-right: 1px solid #C8C8C8;\n}\n.profilemapping-editor .dnn-grid-system .right-column {\n padding-left: 30px;\n border-left: 0 !important;\n}\n.profilemapping-editor .editor-buttons-box {\n width: 100%;\n text-align: center;\n float: left;\n margin: 30px 0 0 0;\n}\n.profilemapping-editor .editor-buttons-box .dnn-ui-common-button {\n margin: 5px;\n}\n.profilemapping-editor .editor-buttons-box .edit-icon {\n margin: 0px 10px 20px 10px;\n float: right;\n}\n.profilemapping-editor .editor-buttons-box .edit-icon svg {\n width: 16px;\n float: left;\n height: 16px;\n}\n",""])},function(e,t,n){var i=n(31);"string"==typeof i&&(i=[[e.i,i,""]]);var o={hmr:!0,transform:void 0,insertInto:void 0};n(7)(i,o);i.locals&&(e.exports=i.locals)},function(e,t,n){(e.exports=n(6)(!1)).push([e.i,"/* START EVOQ COLOR PALETTE */\n/* END EVOQ COLOR PALETTE */\n/* START ATTENTION COLORS */\n/* END ATTENTION COLORS */\n/* SVG HOVER STATES */\nsvg {\n fill: #C8C8C8;\n}\nsvg:hover {\n fill: #6F7273;\n}\nsvg:active {\n fill: #1E88C3;\n}\n/* END SVG HOVER STATES */\n.dnn-azuread-b2c-profileMappingSettings .profile-items {\n margin: 30px 30px;\n width: 738px;\n float: left;\n box-sizing: border-box;\n}\n.dnn-azuread-b2c-profileMappingSettings .profile-items .profile-items-grid {\n border: solid 1px #C8C8C8;\n float: left;\n width: 100%;\n}\n.dnn-azuread-b2c-profileMappingSettings .profile-items .header-row {\n border-bottom: 1px solid #C8C8C8;\n padding: 10px 0 10px 0;\n width: 100%;\n float: left;\n overflow: hidden;\n}\n.dnn-azuread-b2c-profileMappingSettings .profile-items .header-DnnProfileProperty {\n width: 35%;\n float: left;\n font-weight: bolder;\n padding-left: 15px;\n}\n.dnn-azuread-b2c-profileMappingSettings .profile-items .header-B2cClaim {\n width: 40%;\n float: left;\n font-weight: bolder;\n}\n.dnn-azuread-b2c-profileMappingSettings .profile-items .collapsible-component .collapsible-header {\n text-align: right;\n text-transform: none;\n padding-right: 40px;\n}\n.dnn-azuread-b2c-profileMappingSettings .profile-items .collapsible-component .collapsible-header .collapse-icon {\n display: none;\n}\n.dnn-azuread-b2c-profileMappingSettings .profile-items .collapsible-component .collapsible-header .collapse-icon.collapsed {\n display: none;\n}\n.dnn-azuread-b2c-profileMappingSettings .profile-items .AddItemRow {\n text-align: right;\n width: 100%;\n float: right;\n margin: 0 0 15px 0;\n font-weight: bolder;\n border-bottom: 1px solid #C8C8C8;\n overflow: hidden;\n height: 25px;\n}\n.dnn-azuread-b2c-profileMappingSettings .profile-items .AddItemRow .sectionTitle {\n font-weight: bolder;\n float: left;\n}\n.dnn-azuread-b2c-profileMappingSettings .profile-items .AddItemRow .AddItemBox {\n width: auto;\n float: right;\n color: #4B4E4F;\n cursor: pointer;\n}\n.dnn-azuread-b2c-profileMappingSettings .profile-items .AddItemRow .AddItemBox .add-icon {\n margin-left: 20px;\n margin-right: 5px;\n float: left;\n cursor: pointer;\n}\n.dnn-azuread-b2c-profileMappingSettings .profile-items .AddItemRow .AddItemBox .add-icon svg {\n width: 16px;\n float: left;\n height: 16px;\n fill: #4B4E4F;\n}\n.dnn-azuread-b2c-profileMappingSettings .profile-items .AddItemRow .AddItemBox-active {\n width: auto;\n float: right;\n color: #1E88C3;\n}\n.dnn-azuread-b2c-profileMappingSettings .profile-items .AddItemRow .AddItemBox-active .add-icon {\n margin-left: 20px;\n margin-right: 5px;\n float: left;\n}\n.dnn-azuread-b2c-profileMappingSettings .profile-items .AddItemRow .AddItemBox-active .add-icon svg {\n width: 16px;\n float: left;\n height: 16px;\n fill: #1E88C3;\n}\n.dnn-azuread-b2c-profileMappingSettings .profile-items .profile-item {\n color: #4B4E4F;\n}\n",""])},function(e,t,n){var i=n(33);"string"==typeof i&&(i=[[e.i,i,""]]);var o={hmr:!0,transform:void 0,insertInto:void 0};n(7)(i,o);i.locals&&(e.exports=i.locals)},function(e,t,n){(e.exports=n(6)(!1)).push([e.i,"/* START EVOQ COLOR PALETTE */\n/* END EVOQ COLOR PALETTE */\n/* START ATTENTION COLORS */\n/* END ATTENTION COLORS */\n/* SVG HOVER STATES */\nsvg {\n fill: #C8C8C8;\n}\nsvg:hover {\n fill: #6F7273;\n}\nsvg:active {\n fill: #1E88C3;\n}\n/* END SVG HOVER STATES */\n.collapsible-component-item {\n display: block;\n float: left;\n width: 100%;\n cursor: auto;\n}\n.collapsible-component-item:not(:last-child) {\n border-bottom: 1px solid #C8C8C8;\n}\n.collapsible-component-item div.collapsible-item {\n width: 100%;\n float: left;\n position: relative;\n padding: 15px 0 10px 0;\n box-sizing: border-box;\n cursor: auto;\n}\n.collapsible-component-item div.collapsible-item .row {\n float: left;\n width: 100%;\n}\n.collapsible-component-item div.collapsible-item .row .item-row-dnnproperty {\n width: 50%;\n float: left;\n padding-left: 15px;\n word-break: break-all;\n}\n.collapsible-component-item div.collapsible-item .row .item-row-b2cproperty {\n width: 37%;\n float: left;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.collapsible-component-item div.collapsible-item .row .item-row-primary {\n width: 10%;\n float: left;\n text-align: center;\n}\n.collapsible-component-item div.collapsible-item .row .item-row-primary .checkMarkIcon {\n width: 16px;\n height: 16px;\n margin-left: auto;\n margin-right: auto;\n}\n.collapsible-component-item div.collapsible-item .row .item-row-primary .checkMarkIcon > svg {\n fill: #4B4E4F;\n}\n.collapsible-component-item div.collapsible-item .row .item-row-actionButtons {\n width: 8%;\n margin-right: 15px;\n float: right;\n}\n.collapsible-component-item div.collapsible-item .row .item-row-actionButtons:not(:last-child) {\n float: left;\n margin-right: 0px;\n}\n.collapsible-component-item div.collapsible-item .row .item-row-actionButtons .delete-icon,\n.collapsible-component-item div.collapsible-item .row .item-row-actionButtons .edit-icon {\n margin-left: 5px;\n float: right;\n display: block;\n cursor: pointer;\n}\n.collapsible-component-item div.collapsible-item .row .item-row-actionButtons .delete-icon > svg,\n.collapsible-component-item div.collapsible-item .row .item-row-actionButtons .edit-icon > svg {\n width: 16px;\n float: left;\n height: 16px;\n fill: #C8C8C8;\n}\n.collapsible-component-item div.collapsible-item .row .item-row-actionButtons .delete-icon > svg:hover,\n.collapsible-component-item div.collapsible-item .row .item-row-actionButtons .edit-icon > svg:hover {\n fill: #4B4E4F;\n}\n.collapsible-component-item div.collapsible-item .row .item-row-actionButtons .delete-icon-hidden {\n display: none;\n}\n.collapsible-component-item div.collapsible-item .row .item-row-actionButtons .edit-icon-active > svg {\n width: 16px;\n float: right;\n height: 16px;\n fill: #1E88C3;\n}\n.collapsible-component-item div.collapsible-item .row .item-row-wrapper {\n padding: 0 5px 0 5px;\n}\n",""])},function(e,t,n){var i=n(35);"string"==typeof i&&(i=[[e.i,i,""]]);var o={hmr:!0,transform:void 0,insertInto:void 0};n(7)(i,o);i.locals&&(e.exports=i.locals)},function(e,t,n){(e.exports=n(6)(!1)).push([e.i,"/* START EVOQ COLOR PALETTE */\n/* END EVOQ COLOR PALETTE */\n/* START ATTENTION COLORS */\n/* END ATTENTION COLORS */\n/* SVG HOVER STATES */\nsvg {\n fill: #C8C8C8;\n}\nsvg:hover {\n fill: #6F7273;\n}\nsvg:active {\n fill: #1E88C3;\n}\n/* END SVG HOVER STATES */\n.usermapping-editor {\n float: left;\n margin: 20px 30px;\n}\n.usermapping-editor .topMessage {\n border: 1px solid #C8C8C8;\n padding: 10px 20px;\n background-color: #E5E7E6;\n margin: 0 0 20px 0;\n}\n.usermapping-editor .dnn-ui-common-input-group {\n padding: 0 0 15px 0;\n}\n.usermapping-editor .dnn-ui-common-input-group label {\n font-weight: bolder;\n float: left;\n}\n.usermapping-editor .dnn-ui-common-input-group .dnn-label {\n margin: 8px 0;\n}\n.usermapping-editor .dnn-ui-common-input-group .dnn-dropdown,\n.usermapping-editor .dnn-ui-common-input-group .dnn-dropdown-with-error {\n width: 100% !important;\n box-sizing: border-box;\n}\n.usermapping-editor .dnn-ui-common-input-group .dnn-single-line-input-with-error {\n width: 100% !important;\n}\n.usermapping-editor .dnn-grid-system .left-column {\n padding-right: 30px;\n border-right: 1px solid #C8C8C8;\n}\n.usermapping-editor .dnn-grid-system .right-column {\n padding-left: 30px;\n border-left: 0 !important;\n}\n.usermapping-editor .editor-buttons-box {\n width: 100%;\n text-align: center;\n float: left;\n margin: 30px 0 0 0;\n}\n.usermapping-editor .editor-buttons-box .dnn-ui-common-button {\n margin: 5px;\n}\n.usermapping-editor .editor-buttons-box .edit-icon {\n margin: 0px 10px 20px 10px;\n float: right;\n}\n.usermapping-editor .editor-buttons-box .edit-icon svg {\n width: 16px;\n float: left;\n height: 16px;\n}\n",""])},function(e,t,n){var i=n(37);"string"==typeof i&&(i=[[e.i,i,""]]);var o={hmr:!0,transform:void 0,insertInto:void 0};n(7)(i,o);i.locals&&(e.exports=i.locals)},function(e,t,n){(e.exports=n(6)(!1)).push([e.i,"/* START EVOQ COLOR PALETTE */\n/* END EVOQ COLOR PALETTE */\n/* START ATTENTION COLORS */\n/* END ATTENTION COLORS */\n/* SVG HOVER STATES */\nsvg {\n fill: #C8C8C8;\n}\nsvg:hover {\n fill: #6F7273;\n}\nsvg:active {\n fill: #1E88C3;\n}\n/* END SVG HOVER STATES */\n.dnn-azuread-b2c-userMappingSettings .items {\n margin: 30px 30px;\n width: 738px;\n float: left;\n box-sizing: border-box;\n}\n.dnn-azuread-b2c-userMappingSettings .items .items-grid {\n border: solid 1px #C8C8C8;\n float: left;\n width: 100%;\n}\n.dnn-azuread-b2c-userMappingSettings .items .header-row {\n border-bottom: 1px solid #C8C8C8;\n padding: 10px 0 10px 0;\n width: 100%;\n float: left;\n overflow: hidden;\n}\n.dnn-azuread-b2c-userMappingSettings .items .header-DnnProperty {\n width: 50%;\n float: left;\n font-weight: bolder;\n padding-left: 15px;\n}\n.dnn-azuread-b2c-userMappingSettings .items .header-B2cProperty {\n width: 20%;\n float: left;\n font-weight: bolder;\n}\n.dnn-azuread-b2c-userMappingSettings .items .collapsible-component .collapsible-header {\n text-align: right;\n text-transform: none;\n padding-right: 40px;\n}\n.dnn-azuread-b2c-userMappingSettings .items .collapsible-component .collapsible-header .collapse-icon {\n display: none;\n}\n.dnn-azuread-b2c-userMappingSettings .items .collapsible-component .collapsible-header .collapse-icon.collapsed {\n display: none;\n}\n.dnn-azuread-b2c-userMappingSettings .items .AddItemRow {\n text-align: right;\n width: 100%;\n float: right;\n margin: 0 0 15px 0;\n font-weight: bolder;\n border-bottom: 1px solid #C8C8C8;\n overflow: hidden;\n height: 25px;\n}\n.dnn-azuread-b2c-userMappingSettings .items .AddItemRow .sectionTitle {\n font-weight: bolder;\n float: left;\n}\n.dnn-azuread-b2c-userMappingSettings .items .AddItemRow .AddItemBox {\n width: auto;\n float: right;\n color: #4B4E4F;\n cursor: pointer;\n}\n.dnn-azuread-b2c-userMappingSettings .items .AddItemRow .AddItemBox .add-icon {\n margin-left: 20px;\n margin-right: 5px;\n float: left;\n cursor: pointer;\n}\n.dnn-azuread-b2c-userMappingSettings .items .AddItemRow .AddItemBox .add-icon svg {\n width: 16px;\n float: left;\n height: 16px;\n fill: #4B4E4F;\n}\n.dnn-azuread-b2c-userMappingSettings .items .AddItemRow .AddItemBox-active {\n width: auto;\n float: right;\n color: #1E88C3;\n}\n.dnn-azuread-b2c-userMappingSettings .items .AddItemRow .AddItemBox-active .add-icon {\n margin-left: 20px;\n margin-right: 5px;\n float: left;\n}\n.dnn-azuread-b2c-userMappingSettings .items .AddItemRow .AddItemBox-active .add-icon svg {\n width: 16px;\n float: left;\n height: 16px;\n fill: #1E88C3;\n}\n.dnn-azuread-b2c-userMappingSettings .items .role-item {\n color: #4B4E4F;\n}\n",""])},function(e,t,n){var i=n(39);"string"==typeof i&&(i=[[e.i,i,""]]);var o={hmr:!0,transform:void 0,insertInto:void 0};n(7)(i,o);i.locals&&(e.exports=i.locals)},function(e,t,n){(e.exports=n(6)(!1)).push([e.i,"/* START EVOQ COLOR PALETTE */\n/* END EVOQ COLOR PALETTE */\n/* START ATTENTION COLORS */\n/* END ATTENTION COLORS */\n/* SVG HOVER STATES */\nsvg {\n fill: #C8C8C8;\n}\nsvg:hover {\n fill: #6F7273;\n}\nsvg:active {\n fill: #1E88C3;\n}\n/* END SVG HOVER STATES */\n.collapsible-component-item {\n display: block;\n float: left;\n width: 100%;\n cursor: auto;\n}\n.collapsible-component-item:not(:last-child) {\n border-bottom: 1px solid #C8C8C8;\n}\n.collapsible-component-item div.collapsible-item {\n width: 100%;\n float: left;\n position: relative;\n padding: 15px 0 10px 0;\n box-sizing: border-box;\n cursor: auto;\n}\n.collapsible-component-item div.collapsible-item .row {\n float: left;\n width: 100%;\n}\n.collapsible-component-item div.collapsible-item .row .item-row-dnnrole {\n width: 50%;\n float: left;\n padding-left: 15px;\n word-break: break-all;\n}\n.collapsible-component-item div.collapsible-item .row .item-row-b2crole {\n width: 35%;\n float: left;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.collapsible-component-item div.collapsible-item .row .item-row-primary {\n width: 10%;\n float: left;\n text-align: center;\n}\n.collapsible-component-item div.collapsible-item .row .item-row-primary .checkMarkIcon {\n width: 16px;\n height: 16px;\n margin-left: auto;\n margin-right: auto;\n}\n.collapsible-component-item div.collapsible-item .row .item-row-primary .checkMarkIcon > svg {\n fill: #4B4E4F;\n}\n.collapsible-component-item div.collapsible-item .row .item-row-actionButtons {\n width: 8%;\n margin-right: 15px;\n float: right;\n}\n.collapsible-component-item div.collapsible-item .row .item-row-actionButtons:not(:last-child) {\n float: left;\n margin-right: 0px;\n}\n.collapsible-component-item div.collapsible-item .row .item-row-actionButtons .delete-icon,\n.collapsible-component-item div.collapsible-item .row .item-row-actionButtons .edit-icon {\n margin-left: 5px;\n float: right;\n display: block;\n cursor: pointer;\n}\n.collapsible-component-item div.collapsible-item .row .item-row-actionButtons .delete-icon > svg,\n.collapsible-component-item div.collapsible-item .row .item-row-actionButtons .edit-icon > svg {\n width: 16px;\n float: left;\n height: 16px;\n fill: #C8C8C8;\n}\n.collapsible-component-item div.collapsible-item .row .item-row-actionButtons .delete-icon > svg:hover,\n.collapsible-component-item div.collapsible-item .row .item-row-actionButtons .edit-icon > svg:hover {\n fill: #4B4E4F;\n}\n.collapsible-component-item div.collapsible-item .row .item-row-actionButtons .delete-icon-hidden {\n display: none;\n}\n.collapsible-component-item div.collapsible-item .row .item-row-actionButtons .edit-icon-active > svg {\n width: 16px;\n float: right;\n height: 16px;\n fill: #1E88C3;\n}\n.collapsible-component-item div.collapsible-item .row .item-row-wrapper {\n padding: 0 5px 0 5px;\n}\n",""])},function(e,t,n){var i=n(41);"string"==typeof i&&(i=[[e.i,i,""]]);var o={hmr:!0,transform:void 0,insertInto:void 0};n(7)(i,o);i.locals&&(e.exports=i.locals)},function(e,t,n){(e.exports=n(6)(!1)).push([e.i,"/* START EVOQ COLOR PALETTE */\n/* END EVOQ COLOR PALETTE */\n/* START ATTENTION COLORS */\n/* END ATTENTION COLORS */\n/* SVG HOVER STATES */\nsvg {\n fill: #C8C8C8;\n}\nsvg:hover {\n fill: #6F7273;\n}\nsvg:active {\n fill: #1E88C3;\n}\n/* END SVG HOVER STATES */\n.rolemapping-editor {\n float: left;\n margin: 20px 30px;\n}\n.rolemapping-editor .topMessage {\n border: 1px solid #C8C8C8;\n padding: 10px 20px;\n background-color: #E5E7E6;\n margin: 0 0 20px 0;\n}\n.rolemapping-editor .dnn-ui-common-input-group {\n padding: 0 0 15px 0;\n}\n.rolemapping-editor .dnn-ui-common-input-group label {\n font-weight: bolder;\n float: left;\n}\n.rolemapping-editor .dnn-ui-common-input-group .dnn-label {\n margin: 8px 0;\n}\n.rolemapping-editor .dnn-ui-common-input-group .dnn-dropdown,\n.rolemapping-editor .dnn-ui-common-input-group .dnn-dropdown-with-error {\n width: 100% !important;\n box-sizing: border-box;\n}\n.rolemapping-editor .dnn-ui-common-input-group .dnn-single-line-input-with-error {\n width: 100% !important;\n}\n.rolemapping-editor .dnn-grid-system .left-column {\n padding-right: 30px;\n border-right: 1px solid #C8C8C8;\n}\n.rolemapping-editor .dnn-grid-system .right-column {\n padding-left: 30px;\n border-left: 0 !important;\n}\n.rolemapping-editor .editor-buttons-box {\n width: 100%;\n text-align: center;\n float: left;\n margin: 30px 0 0 0;\n}\n.rolemapping-editor .editor-buttons-box .dnn-ui-common-button {\n margin: 5px;\n}\n.rolemapping-editor .editor-buttons-box .edit-icon {\n margin: 0px 10px 20px 10px;\n float: right;\n}\n.rolemapping-editor .editor-buttons-box .edit-icon svg {\n width: 16px;\n float: left;\n height: 16px;\n}\n",""])},function(e,t,n){var i=n(43);"string"==typeof i&&(i=[[e.i,i,""]]);var o={hmr:!0,transform:void 0,insertInto:void 0};n(7)(i,o);i.locals&&(e.exports=i.locals)},function(e,t,n){(e.exports=n(6)(!1)).push([e.i,"/* START EVOQ COLOR PALETTE */\n/* END EVOQ COLOR PALETTE */\n/* START ATTENTION COLORS */\n/* END ATTENTION COLORS */\n/* SVG HOVER STATES */\nsvg {\n fill: #C8C8C8;\n}\nsvg:hover {\n fill: #6F7273;\n}\nsvg:active {\n fill: #1E88C3;\n}\n/* END SVG HOVER STATES */\n.dnn-azuread-b2c-roleMappingSettings .items {\n margin: 30px 30px;\n width: 738px;\n float: left;\n box-sizing: border-box;\n}\n.dnn-azuread-b2c-roleMappingSettings .items .items-grid {\n border: solid 1px #C8C8C8;\n float: left;\n width: 100%;\n}\n.dnn-azuread-b2c-roleMappingSettings .items .header-row {\n border-bottom: 1px solid #C8C8C8;\n padding: 10px 0 10px 0;\n width: 100%;\n float: left;\n overflow: hidden;\n}\n.dnn-azuread-b2c-roleMappingSettings .items .header-DnnRole {\n width: 50%;\n float: left;\n font-weight: bolder;\n padding-left: 15px;\n}\n.dnn-azuread-b2c-roleMappingSettings .items .header-B2cRole {\n width: 20%;\n float: left;\n font-weight: bolder;\n}\n.dnn-azuread-b2c-roleMappingSettings .items .collapsible-component .collapsible-header {\n text-align: right;\n text-transform: none;\n padding-right: 40px;\n}\n.dnn-azuread-b2c-roleMappingSettings .items .collapsible-component .collapsible-header .collapse-icon {\n display: none;\n}\n.dnn-azuread-b2c-roleMappingSettings .items .collapsible-component .collapsible-header .collapse-icon.collapsed {\n display: none;\n}\n.dnn-azuread-b2c-roleMappingSettings .items .AddItemRow {\n text-align: right;\n width: 100%;\n float: right;\n margin: 0 0 15px 0;\n font-weight: bolder;\n border-bottom: 1px solid #C8C8C8;\n overflow: hidden;\n height: 25px;\n}\n.dnn-azuread-b2c-roleMappingSettings .items .AddItemRow .sectionTitle {\n font-weight: bolder;\n float: left;\n}\n.dnn-azuread-b2c-roleMappingSettings .items .AddItemRow .AddItemBox {\n width: auto;\n float: right;\n color: #4B4E4F;\n cursor: pointer;\n}\n.dnn-azuread-b2c-roleMappingSettings .items .AddItemRow .AddItemBox .add-icon {\n margin-left: 20px;\n margin-right: 5px;\n float: left;\n cursor: pointer;\n}\n.dnn-azuread-b2c-roleMappingSettings .items .AddItemRow .AddItemBox .add-icon svg {\n width: 16px;\n float: left;\n height: 16px;\n fill: #4B4E4F;\n}\n.dnn-azuread-b2c-roleMappingSettings .items .AddItemRow .AddItemBox-active {\n width: auto;\n float: right;\n color: #1E88C3;\n}\n.dnn-azuread-b2c-roleMappingSettings .items .AddItemRow .AddItemBox-active .add-icon {\n margin-left: 20px;\n margin-right: 5px;\n float: left;\n}\n.dnn-azuread-b2c-roleMappingSettings .items .AddItemRow .AddItemBox-active .add-icon svg {\n width: 16px;\n float: left;\n height: 16px;\n fill: #1E88C3;\n}\n.dnn-azuread-b2c-roleMappingSettings .items .role-item {\n color: #4B4E4F;\n}\n",""])},function(e,t,n){var i=n(45);"string"==typeof i&&(i=[[e.i,i,""]]);var o={hmr:!0,transform:void 0,insertInto:void 0};n(7)(i,o);i.locals&&(e.exports=i.locals)},function(e,t,n){(e.exports=n(6)(!1)).push([e.i,"#azureADB2C-container .dnn-persona-bar-page-body .persona-bar-page-body .dnn-switch-container .dnn-switch.place-left {\n margin-left: 0px;\n}\n#azureADB2C-container .dnn-persona-bar-page-body .persona-bar-page-body button.dnn-ui-common-button[role=primary] {\n margin-left: 10px;\n}\n",""])},function(e,t,n){"use strict";n.r(t);var i=n(0),o=n.n(i),r=(n(5),n(4)),a=n(1),l=n(3),p=n(2);function s(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:{selectedTab:0},t=arguments.length>1?arguments[1]:void 0;switch(t.type){case g.a.RETRIEVED_SETTINGS:case g.a.SETTINGS_CLIENT_MODIFIED:return m({},e,{enabled:t.data.enabled,useGlobalSettings:t.data.useGlobalSettings,autoRedirect:t.data.autoRedirect,autoAuthorize:t.data.autoAuthorize,apiKey:t.data.apiKey,apiSecret:t.data.apiSecret,redirectUri:t.data.redirectUri,onErrorUri:t.data.onErrorUri,tenantName:t.data.tenantName,tenantId:t.data.tenantId,signUpPolicy:t.data.signUpPolicy,profilePolicy:t.data.profilePolicy,passwordResetPolicy:t.data.passwordResetPolicy,aadAppClientId:t.data.aadAppClientId,aadAppSecret:t.data.aadAppSecret,jwtAudiences:t.data.jwtAudiences,roleSyncEnabled:t.data.roleSyncEnabled,profileSyncEnabled:t.data.profileSyncEnabled,jwtAuthEnabled:t.data.jwtAuthEnabled,apiResource:t.data.apiResource,scopes:t.data.scopes,clientModified:t.data.clientModified,usernamePrefixEnabled:t.data.usernamePrefixEnabled,groupNamePrefixEnabled:t.data.groupNamePrefixEnabled,ropcPolicy:t.data.ropcPolicy,impersonatePolicy:t.data.impersonatePolicy});case g.a.UPDATED_SETTINGS:return m({},e,{clientModified:t.data.clientModified});case g.a.RETRIEVED_PROFILESETTINGS:return m({},e,{profileMapping:t.data.profileMapping});case g.a.RETRIEVED_ROLEMAPPINGSETTINGS:return m({},e,{roleMapping:t.data.roleMapping});case g.a.RETRIEVED_AVAILABLEROLES:return m({},e,{roles:t.data.roles});case g.a.SWITCH_TAB:return m({},e,{selectedTab:t.payload});case g.a.SWITCH_MAPPING_SUBTAB:return m({},e,{selectedSubTab:t.payload});case g.a.CANCELLED_PROFILEMAPPING_CLIENT_MODIFIED:return m({},e,{profileMappingClientModified:t.data.profileMappingClientModified});case g.a.PROFILEMAPPINGS_CLIENT_MODIFIED:return m({},e,{profileMappingDetail:t.data.profileMappingDetail,profileMappingClientModified:t.data.profileMappingClientModified});case g.a.RETRIEVED_PROFILEPROPERTIES:return m({},e,{profileProperties:t.data.profileProperties});case g.a.ROLEMAPPINGS_CLIENT_MODIFIED:return m({},e,{roleProperties:t.data.roleProperties});case g.a.RETRIEVED_USERMAPPINGSETTINGS:return m({},e,{userMapping:t.data.userMapping});case g.a.USERMAPPINGS_CLIENT_MODIFIED:return m({},e,{userMappingDetail:t.data.userMappingDetail,userMappingClientModified:t.data.userMappingClientModified});default:return m({},e)}}}),y=n(12),E=n(13),v=n.n(E),S=n(14),w=n.n(S),A=Object(y.createDevTools)(o.a.createElement(w.a,{toggleVisibilityKey:"ctrl-h",changePositionKey:"ctrl-q",defaultIsVisible:!1},o.a.createElement(v.a,null)));var C,P=n(15),I=n.n(P),N=(C={enabled:!1,instrumentationKey:""},Object(s.createStore)(h,C,Object(s.compose)(Object(s.applyMiddleware)(d.a,f()()),A.instrument())));p.dispatch=N.dispatch;var O=document.getElementById("azureADB2C-container"),x=O.getAttribute("data-init-callback");p.init(x),Object(r.render)(o.a.createElement(a.Provider,{store:N},o.a.createElement(I.a,null)),O)}]); +!function(e){var t={};function n(i){if(t[i])return t[i].exports;var o=t[i]={i:i,l:!1,exports:{}};return e[i].call(o.exports,o,o.exports,n),o.l=!0,o.exports}n.m=e,n.c=t,n.d=function(e,t,i){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:i})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var i=Object.create(null);if(n.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(i,o,function(t){return e[t]}.bind(null,o));return i},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=47)}([function(e,t){e.exports=window.dnn.nodeModules.React},function(e,t){e.exports=window.dnn.nodeModules.CommonComponents},function(e,t,n){"use strict";var i={init:function(e){if(!e)throw new Error("Utilities is undefined.");this.utilities=e},utilities:null};t.a=i},function(e,t,n){"use strict";var i={SWITCH_TAB:"SWITCH_TAB",RETRIEVED_SETTINGS:"RETRIEVED_SETTINGS",UPDATED_SETTINGS:"UPDATED_SETTINGS",UPDATED_PROFILEMAPPING:"UPDATED_PROFILEMAPPING",SETTINGS_CLIENT_MODIFIED:"SETTINGS_CLIENT_MODIFIED",RETRIEVED_PROFILESETTINGS:"RETRIEVED_PROFILESETTINGS",RETRIEVED_PROFILEPROPERTIES:"RETRIEVED_PROFILEPROPERTIES",CANCELLED_PROFILEMAPPING_CLIENT_MODIFIED:"CANCELLED_PROFILEMAPPING_CLIENT_MODIFIED",PROFILEMAPPINGS_CLIENT_MODIFIED:"PROFILEMAPPINGS_CLIENT_MODIFIED",SWITCH_MAPPING_SUBTAB:"SWITCH_MAPPING_SUBTAB",RETRIEVED_ROLEMAPPINGSETTINGS:"RETRIEVED_ROLEMAPPINGSETTINGS",RETRIEVED_AVAILABLEROLES:"RETRIEVED_AVAILABLEROLES",ROLEMAPPINGS_CLIENT_MODIFIED:"ROLEMAPPINGS_CLIENT_MODIFIED",RETRIEVED_USERMAPPINGSETTINGS:"RETRIEVED_USERMAPPINGSETTINGS",USERMAPPINGS_CLIENT_MODIFIED:"USERMAPPINGS_CLIENT_MODIFIED"};n.d(t,"a",function(){return i})},function(e,t){e.exports=window.dnn.nodeModules.ReactRedux},function(e,t,n){e.exports=n(16)()},function(e,t,n){"use strict";e.exports=function(e){var t=[];return t.toString=function(){return this.map(function(t){var n=function(e,t){var n=e[1]||"",i=e[3];if(!i)return n;if(t&&"function"==typeof btoa){var o=(a=i,"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,"+btoa(unescape(encodeURIComponent(JSON.stringify(a))))+" */"),r=i.sources.map(function(e){return"/*# sourceURL="+i.sourceRoot+e+" */"});return[n].concat(r).concat([o]).join("\n")}var a;return[n].join("\n")}(t,e);return t[2]?"@media "+t[2]+"{"+n+"}":n}).join("")},t.i=function(e,n){"string"==typeof e&&(e=[[null,e,""]]);for(var i={},o=0;o=0&&c.splice(t,1)}function b(e){var t=document.createElement("style");if(void 0===e.attrs.type&&(e.attrs.type="text/css"),void 0===e.attrs.nonce){var i=function(){0;return n.nc}();i&&(e.attrs.nonce=i)}return h(t,e.attrs),m(e,t),t}function h(e,t){Object.keys(t).forEach(function(n){e.setAttribute(n,t[n])})}function y(e,t){var n,i,o,r;if(t.transform&&e.css){if(!(r="function"==typeof t.transform?t.transform(e.css):t.transform.default(e.css)))return function(){};e.css=r}if(t.singleton){var a=s++;n=p||(p=b(t)),i=S.bind(null,n,a,!1),o=S.bind(null,n,a,!0)}else e.sourceMap&&"function"==typeof URL&&"function"==typeof URL.createObjectURL&&"function"==typeof URL.revokeObjectURL&&"function"==typeof Blob&&"function"==typeof btoa?(n=function(e){var t=document.createElement("link");return void 0===e.attrs.type&&(e.attrs.type="text/css"),e.attrs.rel="stylesheet",h(t,e.attrs),m(e,t),t}(t),i=function(e,t,n){var i=n.css,o=n.sourceMap,r=void 0===t.convertToAbsoluteUrls&&o;(t.convertToAbsoluteUrls||r)&&(i=d(i));o&&(i+="\n/*# sourceMappingURL=data:application/json;base64,"+btoa(unescape(encodeURIComponent(JSON.stringify(o))))+" */");var a=new Blob([i],{type:"text/css"}),l=e.href;e.href=URL.createObjectURL(a),l&&URL.revokeObjectURL(l)}.bind(null,n,t),o=function(){g(n),n.href&&URL.revokeObjectURL(n.href)}):(n=b(t),i=function(e,t){var n=t.css,i=t.media;i&&e.setAttribute("media",i);if(e.styleSheet)e.styleSheet.cssText=n;else{for(;e.firstChild;)e.removeChild(e.firstChild);e.appendChild(document.createTextNode(n))}}.bind(null,n),o=function(){g(n)});return i(e),function(t){if(t){if(t.css===e.css&&t.media===e.media&&t.sourceMap===e.sourceMap)return;i(e=t)}else o()}}e.exports=function(e,t){if("undefined"!=typeof DEBUG&&DEBUG&&"object"!=typeof document)throw new Error("The style-loader cannot be used in a non-browser environment");(t=t||{}).attrs="object"==typeof t.attrs?t.attrs:{},t.singleton||"boolean"==typeof t.singleton||(t.singleton=a()),t.insertInto||(t.insertInto="head"),t.insertAt||(t.insertAt="bottom");var n=f(e,t);return u(n,t),function(e){for(var i=[],o=0;o div {\n border: solid 1px;\n}\n.dnn-azuread-b2c-syncSettings .warning-container .warning-icon > svg {\n width: 17px;\n float: left;\n height: 17px;\n margin: 0 10px 0 0;\n}\n.dnn-azuread-b2c-syncSettings .warning-container .warning-msg {\n margin-left: 30px;\n}\n.dnn-azuread-b2c-syncSettings h1.spacer {\n margin-top: 25px;\n}\n",""])},function(e,t,n){"use strict";n.r(t),t.default='\r\n\x3c!-- Generator: Adobe Illustrator 20.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --\x3e\r\n\r\n\r\n\r\n\r\n'},function(e,t,n){var i=n(27);"string"==typeof i&&(i=[[e.i,i,""]]);var o={hmr:!0,transform:void 0,insertInto:void 0};n(7)(i,o);i.locals&&(e.exports=i.locals)},function(e,t,n){(e.exports=n(6)(!1)).push([e.i,"/* START EVOQ COLOR PALETTE */\n/* END EVOQ COLOR PALETTE */\n/* START ATTENTION COLORS */\n/* END ATTENTION COLORS */\n/* SVG HOVER STATES */\nsvg {\n fill: #C8C8C8;\n}\nsvg:hover {\n fill: #6F7273;\n}\nsvg:active {\n fill: #1E88C3;\n}\n/* END SVG HOVER STATES */\n.collapsible-component-profile {\n display: block;\n float: left;\n width: 100%;\n cursor: auto;\n}\n.collapsible-component-profile:not(:last-child) {\n border-bottom: 1px solid #C8C8C8;\n}\n.collapsible-component-profile div.collapsible-profile {\n width: 100%;\n float: left;\n position: relative;\n padding: 15px 0 10px 0;\n box-sizing: border-box;\n cursor: auto;\n}\n.collapsible-component-profile div.collapsible-profile .row {\n float: left;\n width: 100%;\n}\n.collapsible-component-profile div.collapsible-profile .row .item-row-dnnprofile {\n width: 35%;\n float: left;\n padding-left: 15px;\n word-break: break-all;\n}\n.collapsible-component-profile div.collapsible-profile .row .item-row-b2cprofile {\n width: 20%;\n float: left;\n}\n.collapsible-component-profile div.collapsible-profile .row .item-row-b2cextension {\n width: 30%;\n float: left;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.collapsible-component-profile div.collapsible-profile .row .item-row-primary {\n width: 10%;\n float: left;\n text-align: center;\n}\n.collapsible-component-profile div.collapsible-profile .row .item-row-primary .checkMarkIcon {\n width: 16px;\n height: 16px;\n margin-left: auto;\n margin-right: auto;\n}\n.collapsible-component-profile div.collapsible-profile .row .item-row-primary .checkMarkIcon > svg {\n fill: #4B4E4F;\n}\n.collapsible-component-profile div.collapsible-profile .row .item-row-actionButtons {\n width: 8%;\n margin-right: 15px;\n float: right;\n}\n.collapsible-component-profile div.collapsible-profile .row .item-row-actionButtons:not(:last-child) {\n float: left;\n margin-right: 0px;\n}\n.collapsible-component-profile div.collapsible-profile .row .item-row-actionButtons .delete-icon,\n.collapsible-component-profile div.collapsible-profile .row .item-row-actionButtons .edit-icon {\n margin-left: 5px;\n float: right;\n display: block;\n cursor: pointer;\n}\n.collapsible-component-profile div.collapsible-profile .row .item-row-actionButtons .delete-icon > svg,\n.collapsible-component-profile div.collapsible-profile .row .item-row-actionButtons .edit-icon > svg {\n width: 16px;\n float: left;\n height: 16px;\n fill: #C8C8C8;\n}\n.collapsible-component-profile div.collapsible-profile .row .item-row-actionButtons .delete-icon > svg:hover,\n.collapsible-component-profile div.collapsible-profile .row .item-row-actionButtons .edit-icon > svg:hover {\n fill: #4B4E4F;\n}\n.collapsible-component-profile div.collapsible-profile .row .item-row-actionButtons .delete-icon-hidden {\n display: none;\n}\n.collapsible-component-profile div.collapsible-profile .row .item-row-actionButtons .edit-icon-active > svg {\n width: 16px;\n float: right;\n height: 16px;\n fill: #1E88C3;\n}\n.collapsible-component-profile div.collapsible-profile .row .item-row-wrapper {\n padding: 0 5px 0 5px;\n}\n",""])},function(e,t,n){var i=n(29);"string"==typeof i&&(i=[[e.i,i,""]]);var o={hmr:!0,transform:void 0,insertInto:void 0};n(7)(i,o);i.locals&&(e.exports=i.locals)},function(e,t,n){(e.exports=n(6)(!1)).push([e.i,"/* START EVOQ COLOR PALETTE */\n/* END EVOQ COLOR PALETTE */\n/* START ATTENTION COLORS */\n/* END ATTENTION COLORS */\n/* SVG HOVER STATES */\nsvg {\n fill: #C8C8C8;\n}\nsvg:hover {\n fill: #6F7273;\n}\nsvg:active {\n fill: #1E88C3;\n}\n/* END SVG HOVER STATES */\n.profilemapping-editor {\n float: left;\n margin: 20px 30px;\n}\n.profilemapping-editor .topMessage {\n border: 1px solid #C8C8C8;\n padding: 10px 20px;\n background-color: #E5E7E6;\n margin: 0 0 20px 0;\n}\n.profilemapping-editor .dnn-ui-common-input-group {\n padding: 0 0 15px 0;\n}\n.profilemapping-editor .dnn-ui-common-input-group label {\n font-weight: bolder;\n float: left;\n}\n.profilemapping-editor .dnn-ui-common-input-group .dnn-label {\n margin: 8px 0;\n}\n.profilemapping-editor .dnn-ui-common-input-group .dnn-dropdown,\n.profilemapping-editor .dnn-ui-common-input-group .dnn-dropdown-with-error {\n width: 100% !important;\n box-sizing: border-box;\n}\n.profilemapping-editor .dnn-ui-common-input-group .dnn-single-line-input-with-error {\n width: 100% !important;\n}\n.profilemapping-editor .dnn-grid-system .left-column {\n padding-right: 30px;\n border-right: 1px solid #C8C8C8;\n}\n.profilemapping-editor .dnn-grid-system .right-column {\n padding-left: 30px;\n border-left: 0 !important;\n}\n.profilemapping-editor .editor-buttons-box {\n width: 100%;\n text-align: center;\n float: left;\n margin: 30px 0 0 0;\n}\n.profilemapping-editor .editor-buttons-box .dnn-ui-common-button {\n margin: 5px;\n}\n.profilemapping-editor .editor-buttons-box .edit-icon {\n margin: 0px 10px 20px 10px;\n float: right;\n}\n.profilemapping-editor .editor-buttons-box .edit-icon svg {\n width: 16px;\n float: left;\n height: 16px;\n}\n",""])},function(e,t,n){var i=n(31);"string"==typeof i&&(i=[[e.i,i,""]]);var o={hmr:!0,transform:void 0,insertInto:void 0};n(7)(i,o);i.locals&&(e.exports=i.locals)},function(e,t,n){(e.exports=n(6)(!1)).push([e.i,"/* START EVOQ COLOR PALETTE */\n/* END EVOQ COLOR PALETTE */\n/* START ATTENTION COLORS */\n/* END ATTENTION COLORS */\n/* SVG HOVER STATES */\nsvg {\n fill: #C8C8C8;\n}\nsvg:hover {\n fill: #6F7273;\n}\nsvg:active {\n fill: #1E88C3;\n}\n/* END SVG HOVER STATES */\n.dnn-azuread-b2c-profileMappingSettings .profile-items {\n margin: 30px 30px;\n width: 738px;\n float: left;\n box-sizing: border-box;\n}\n.dnn-azuread-b2c-profileMappingSettings .profile-items .profile-items-grid {\n border: solid 1px #C8C8C8;\n float: left;\n width: 100%;\n}\n.dnn-azuread-b2c-profileMappingSettings .profile-items .header-row {\n border-bottom: 1px solid #C8C8C8;\n padding: 10px 0 10px 0;\n width: 100%;\n float: left;\n overflow: hidden;\n}\n.dnn-azuread-b2c-profileMappingSettings .profile-items .header-DnnProfileProperty {\n width: 35%;\n float: left;\n font-weight: bolder;\n padding-left: 15px;\n}\n.dnn-azuread-b2c-profileMappingSettings .profile-items .header-B2cClaim {\n width: 40%;\n float: left;\n font-weight: bolder;\n}\n.dnn-azuread-b2c-profileMappingSettings .profile-items .collapsible-component .collapsible-header {\n text-align: right;\n text-transform: none;\n padding-right: 40px;\n}\n.dnn-azuread-b2c-profileMappingSettings .profile-items .collapsible-component .collapsible-header .collapse-icon {\n display: none;\n}\n.dnn-azuread-b2c-profileMappingSettings .profile-items .collapsible-component .collapsible-header .collapse-icon.collapsed {\n display: none;\n}\n.dnn-azuread-b2c-profileMappingSettings .profile-items .AddItemRow {\n text-align: right;\n width: 100%;\n float: right;\n margin: 0 0 15px 0;\n font-weight: bolder;\n border-bottom: 1px solid #C8C8C8;\n overflow: hidden;\n height: 25px;\n}\n.dnn-azuread-b2c-profileMappingSettings .profile-items .AddItemRow .sectionTitle {\n font-weight: bolder;\n float: left;\n}\n.dnn-azuread-b2c-profileMappingSettings .profile-items .AddItemRow .AddItemBox {\n width: auto;\n float: right;\n color: #4B4E4F;\n cursor: pointer;\n}\n.dnn-azuread-b2c-profileMappingSettings .profile-items .AddItemRow .AddItemBox .add-icon {\n margin-left: 20px;\n margin-right: 5px;\n float: left;\n cursor: pointer;\n}\n.dnn-azuread-b2c-profileMappingSettings .profile-items .AddItemRow .AddItemBox .add-icon svg {\n width: 16px;\n float: left;\n height: 16px;\n fill: #4B4E4F;\n}\n.dnn-azuread-b2c-profileMappingSettings .profile-items .AddItemRow .AddItemBox-active {\n width: auto;\n float: right;\n color: #1E88C3;\n}\n.dnn-azuread-b2c-profileMappingSettings .profile-items .AddItemRow .AddItemBox-active .add-icon {\n margin-left: 20px;\n margin-right: 5px;\n float: left;\n}\n.dnn-azuread-b2c-profileMappingSettings .profile-items .AddItemRow .AddItemBox-active .add-icon svg {\n width: 16px;\n float: left;\n height: 16px;\n fill: #1E88C3;\n}\n.dnn-azuread-b2c-profileMappingSettings .profile-items .profile-item {\n color: #4B4E4F;\n}\n",""])},function(e,t,n){var i=n(33);"string"==typeof i&&(i=[[e.i,i,""]]);var o={hmr:!0,transform:void 0,insertInto:void 0};n(7)(i,o);i.locals&&(e.exports=i.locals)},function(e,t,n){(e.exports=n(6)(!1)).push([e.i,"/* START EVOQ COLOR PALETTE */\n/* END EVOQ COLOR PALETTE */\n/* START ATTENTION COLORS */\n/* END ATTENTION COLORS */\n/* SVG HOVER STATES */\nsvg {\n fill: #C8C8C8;\n}\nsvg:hover {\n fill: #6F7273;\n}\nsvg:active {\n fill: #1E88C3;\n}\n/* END SVG HOVER STATES */\n.collapsible-component-item {\n display: block;\n float: left;\n width: 100%;\n cursor: auto;\n}\n.collapsible-component-item:not(:last-child) {\n border-bottom: 1px solid #C8C8C8;\n}\n.collapsible-component-item div.collapsible-item {\n width: 100%;\n float: left;\n position: relative;\n padding: 15px 0 10px 0;\n box-sizing: border-box;\n cursor: auto;\n}\n.collapsible-component-item div.collapsible-item .row {\n float: left;\n width: 100%;\n}\n.collapsible-component-item div.collapsible-item .row .item-row-dnnproperty {\n width: 50%;\n float: left;\n padding-left: 15px;\n word-break: break-all;\n}\n.collapsible-component-item div.collapsible-item .row .item-row-b2cproperty {\n width: 37%;\n float: left;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.collapsible-component-item div.collapsible-item .row .item-row-primary {\n width: 10%;\n float: left;\n text-align: center;\n}\n.collapsible-component-item div.collapsible-item .row .item-row-primary .checkMarkIcon {\n width: 16px;\n height: 16px;\n margin-left: auto;\n margin-right: auto;\n}\n.collapsible-component-item div.collapsible-item .row .item-row-primary .checkMarkIcon > svg {\n fill: #4B4E4F;\n}\n.collapsible-component-item div.collapsible-item .row .item-row-actionButtons {\n width: 8%;\n margin-right: 15px;\n float: right;\n}\n.collapsible-component-item div.collapsible-item .row .item-row-actionButtons:not(:last-child) {\n float: left;\n margin-right: 0px;\n}\n.collapsible-component-item div.collapsible-item .row .item-row-actionButtons .delete-icon,\n.collapsible-component-item div.collapsible-item .row .item-row-actionButtons .edit-icon {\n margin-left: 5px;\n float: right;\n display: block;\n cursor: pointer;\n}\n.collapsible-component-item div.collapsible-item .row .item-row-actionButtons .delete-icon > svg,\n.collapsible-component-item div.collapsible-item .row .item-row-actionButtons .edit-icon > svg {\n width: 16px;\n float: left;\n height: 16px;\n fill: #C8C8C8;\n}\n.collapsible-component-item div.collapsible-item .row .item-row-actionButtons .delete-icon > svg:hover,\n.collapsible-component-item div.collapsible-item .row .item-row-actionButtons .edit-icon > svg:hover {\n fill: #4B4E4F;\n}\n.collapsible-component-item div.collapsible-item .row .item-row-actionButtons .delete-icon-hidden {\n display: none;\n}\n.collapsible-component-item div.collapsible-item .row .item-row-actionButtons .edit-icon-active > svg {\n width: 16px;\n float: right;\n height: 16px;\n fill: #1E88C3;\n}\n.collapsible-component-item div.collapsible-item .row .item-row-wrapper {\n padding: 0 5px 0 5px;\n}\n",""])},function(e,t,n){var i=n(35);"string"==typeof i&&(i=[[e.i,i,""]]);var o={hmr:!0,transform:void 0,insertInto:void 0};n(7)(i,o);i.locals&&(e.exports=i.locals)},function(e,t,n){(e.exports=n(6)(!1)).push([e.i,"/* START EVOQ COLOR PALETTE */\n/* END EVOQ COLOR PALETTE */\n/* START ATTENTION COLORS */\n/* END ATTENTION COLORS */\n/* SVG HOVER STATES */\nsvg {\n fill: #C8C8C8;\n}\nsvg:hover {\n fill: #6F7273;\n}\nsvg:active {\n fill: #1E88C3;\n}\n/* END SVG HOVER STATES */\n.usermapping-editor {\n float: left;\n margin: 20px 30px;\n}\n.usermapping-editor .topMessage {\n border: 1px solid #C8C8C8;\n padding: 10px 20px;\n background-color: #E5E7E6;\n margin: 0 0 20px 0;\n}\n.usermapping-editor .dnn-ui-common-input-group {\n padding: 0 0 15px 0;\n}\n.usermapping-editor .dnn-ui-common-input-group label {\n font-weight: bolder;\n float: left;\n}\n.usermapping-editor .dnn-ui-common-input-group .dnn-label {\n margin: 8px 0;\n}\n.usermapping-editor .dnn-ui-common-input-group .dnn-dropdown,\n.usermapping-editor .dnn-ui-common-input-group .dnn-dropdown-with-error {\n width: 100% !important;\n box-sizing: border-box;\n}\n.usermapping-editor .dnn-ui-common-input-group .dnn-single-line-input-with-error {\n width: 100% !important;\n}\n.usermapping-editor .dnn-grid-system .left-column {\n padding-right: 30px;\n border-right: 1px solid #C8C8C8;\n}\n.usermapping-editor .dnn-grid-system .right-column {\n padding-left: 30px;\n border-left: 0 !important;\n}\n.usermapping-editor .editor-buttons-box {\n width: 100%;\n text-align: center;\n float: left;\n margin: 30px 0 0 0;\n}\n.usermapping-editor .editor-buttons-box .dnn-ui-common-button {\n margin: 5px;\n}\n.usermapping-editor .editor-buttons-box .edit-icon {\n margin: 0px 10px 20px 10px;\n float: right;\n}\n.usermapping-editor .editor-buttons-box .edit-icon svg {\n width: 16px;\n float: left;\n height: 16px;\n}\n",""])},function(e,t,n){var i=n(37);"string"==typeof i&&(i=[[e.i,i,""]]);var o={hmr:!0,transform:void 0,insertInto:void 0};n(7)(i,o);i.locals&&(e.exports=i.locals)},function(e,t,n){(e.exports=n(6)(!1)).push([e.i,"/* START EVOQ COLOR PALETTE */\n/* END EVOQ COLOR PALETTE */\n/* START ATTENTION COLORS */\n/* END ATTENTION COLORS */\n/* SVG HOVER STATES */\nsvg {\n fill: #C8C8C8;\n}\nsvg:hover {\n fill: #6F7273;\n}\nsvg:active {\n fill: #1E88C3;\n}\n/* END SVG HOVER STATES */\n.dnn-azuread-b2c-userMappingSettings .items {\n margin: 30px 30px;\n width: 738px;\n float: left;\n box-sizing: border-box;\n}\n.dnn-azuread-b2c-userMappingSettings .items .items-grid {\n border: solid 1px #C8C8C8;\n float: left;\n width: 100%;\n}\n.dnn-azuread-b2c-userMappingSettings .items .header-row {\n border-bottom: 1px solid #C8C8C8;\n padding: 10px 0 10px 0;\n width: 100%;\n float: left;\n overflow: hidden;\n}\n.dnn-azuread-b2c-userMappingSettings .items .header-DnnProperty {\n width: 50%;\n float: left;\n font-weight: bolder;\n padding-left: 15px;\n}\n.dnn-azuread-b2c-userMappingSettings .items .header-B2cProperty {\n width: 20%;\n float: left;\n font-weight: bolder;\n}\n.dnn-azuread-b2c-userMappingSettings .items .collapsible-component .collapsible-header {\n text-align: right;\n text-transform: none;\n padding-right: 40px;\n}\n.dnn-azuread-b2c-userMappingSettings .items .collapsible-component .collapsible-header .collapse-icon {\n display: none;\n}\n.dnn-azuread-b2c-userMappingSettings .items .collapsible-component .collapsible-header .collapse-icon.collapsed {\n display: none;\n}\n.dnn-azuread-b2c-userMappingSettings .items .AddItemRow {\n text-align: right;\n width: 100%;\n float: right;\n margin: 0 0 15px 0;\n font-weight: bolder;\n border-bottom: 1px solid #C8C8C8;\n overflow: hidden;\n height: 25px;\n}\n.dnn-azuread-b2c-userMappingSettings .items .AddItemRow .sectionTitle {\n font-weight: bolder;\n float: left;\n}\n.dnn-azuread-b2c-userMappingSettings .items .AddItemRow .AddItemBox {\n width: auto;\n float: right;\n color: #4B4E4F;\n cursor: pointer;\n}\n.dnn-azuread-b2c-userMappingSettings .items .AddItemRow .AddItemBox .add-icon {\n margin-left: 20px;\n margin-right: 5px;\n float: left;\n cursor: pointer;\n}\n.dnn-azuread-b2c-userMappingSettings .items .AddItemRow .AddItemBox .add-icon svg {\n width: 16px;\n float: left;\n height: 16px;\n fill: #4B4E4F;\n}\n.dnn-azuread-b2c-userMappingSettings .items .AddItemRow .AddItemBox-active {\n width: auto;\n float: right;\n color: #1E88C3;\n}\n.dnn-azuread-b2c-userMappingSettings .items .AddItemRow .AddItemBox-active .add-icon {\n margin-left: 20px;\n margin-right: 5px;\n float: left;\n}\n.dnn-azuread-b2c-userMappingSettings .items .AddItemRow .AddItemBox-active .add-icon svg {\n width: 16px;\n float: left;\n height: 16px;\n fill: #1E88C3;\n}\n.dnn-azuread-b2c-userMappingSettings .items .role-item {\n color: #4B4E4F;\n}\n",""])},function(e,t,n){var i=n(39);"string"==typeof i&&(i=[[e.i,i,""]]);var o={hmr:!0,transform:void 0,insertInto:void 0};n(7)(i,o);i.locals&&(e.exports=i.locals)},function(e,t,n){(e.exports=n(6)(!1)).push([e.i,"/* START EVOQ COLOR PALETTE */\n/* END EVOQ COLOR PALETTE */\n/* START ATTENTION COLORS */\n/* END ATTENTION COLORS */\n/* SVG HOVER STATES */\nsvg {\n fill: #C8C8C8;\n}\nsvg:hover {\n fill: #6F7273;\n}\nsvg:active {\n fill: #1E88C3;\n}\n/* END SVG HOVER STATES */\n.collapsible-component-item {\n display: block;\n float: left;\n width: 100%;\n cursor: auto;\n}\n.collapsible-component-item:not(:last-child) {\n border-bottom: 1px solid #C8C8C8;\n}\n.collapsible-component-item div.collapsible-item {\n width: 100%;\n float: left;\n position: relative;\n padding: 15px 0 10px 0;\n box-sizing: border-box;\n cursor: auto;\n}\n.collapsible-component-item div.collapsible-item .row {\n float: left;\n width: 100%;\n}\n.collapsible-component-item div.collapsible-item .row .item-row-dnnrole {\n width: 50%;\n float: left;\n padding-left: 15px;\n word-break: break-all;\n}\n.collapsible-component-item div.collapsible-item .row .item-row-b2crole {\n width: 35%;\n float: left;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.collapsible-component-item div.collapsible-item .row .item-row-primary {\n width: 10%;\n float: left;\n text-align: center;\n}\n.collapsible-component-item div.collapsible-item .row .item-row-primary .checkMarkIcon {\n width: 16px;\n height: 16px;\n margin-left: auto;\n margin-right: auto;\n}\n.collapsible-component-item div.collapsible-item .row .item-row-primary .checkMarkIcon > svg {\n fill: #4B4E4F;\n}\n.collapsible-component-item div.collapsible-item .row .item-row-actionButtons {\n width: 8%;\n margin-right: 15px;\n float: right;\n}\n.collapsible-component-item div.collapsible-item .row .item-row-actionButtons:not(:last-child) {\n float: left;\n margin-right: 0px;\n}\n.collapsible-component-item div.collapsible-item .row .item-row-actionButtons .delete-icon,\n.collapsible-component-item div.collapsible-item .row .item-row-actionButtons .edit-icon {\n margin-left: 5px;\n float: right;\n display: block;\n cursor: pointer;\n}\n.collapsible-component-item div.collapsible-item .row .item-row-actionButtons .delete-icon > svg,\n.collapsible-component-item div.collapsible-item .row .item-row-actionButtons .edit-icon > svg {\n width: 16px;\n float: left;\n height: 16px;\n fill: #C8C8C8;\n}\n.collapsible-component-item div.collapsible-item .row .item-row-actionButtons .delete-icon > svg:hover,\n.collapsible-component-item div.collapsible-item .row .item-row-actionButtons .edit-icon > svg:hover {\n fill: #4B4E4F;\n}\n.collapsible-component-item div.collapsible-item .row .item-row-actionButtons .delete-icon-hidden {\n display: none;\n}\n.collapsible-component-item div.collapsible-item .row .item-row-actionButtons .edit-icon-active > svg {\n width: 16px;\n float: right;\n height: 16px;\n fill: #1E88C3;\n}\n.collapsible-component-item div.collapsible-item .row .item-row-wrapper {\n padding: 0 5px 0 5px;\n}\n",""])},function(e,t,n){var i=n(41);"string"==typeof i&&(i=[[e.i,i,""]]);var o={hmr:!0,transform:void 0,insertInto:void 0};n(7)(i,o);i.locals&&(e.exports=i.locals)},function(e,t,n){(e.exports=n(6)(!1)).push([e.i,"/* START EVOQ COLOR PALETTE */\n/* END EVOQ COLOR PALETTE */\n/* START ATTENTION COLORS */\n/* END ATTENTION COLORS */\n/* SVG HOVER STATES */\nsvg {\n fill: #C8C8C8;\n}\nsvg:hover {\n fill: #6F7273;\n}\nsvg:active {\n fill: #1E88C3;\n}\n/* END SVG HOVER STATES */\n.rolemapping-editor {\n float: left;\n margin: 20px 30px;\n}\n.rolemapping-editor .topMessage {\n border: 1px solid #C8C8C8;\n padding: 10px 20px;\n background-color: #E5E7E6;\n margin: 0 0 20px 0;\n}\n.rolemapping-editor .dnn-ui-common-input-group {\n padding: 0 0 15px 0;\n}\n.rolemapping-editor .dnn-ui-common-input-group label {\n font-weight: bolder;\n float: left;\n}\n.rolemapping-editor .dnn-ui-common-input-group .dnn-label {\n margin: 8px 0;\n}\n.rolemapping-editor .dnn-ui-common-input-group .dnn-dropdown,\n.rolemapping-editor .dnn-ui-common-input-group .dnn-dropdown-with-error {\n width: 100% !important;\n box-sizing: border-box;\n}\n.rolemapping-editor .dnn-ui-common-input-group .dnn-single-line-input-with-error {\n width: 100% !important;\n}\n.rolemapping-editor .dnn-grid-system .left-column {\n padding-right: 30px;\n border-right: 1px solid #C8C8C8;\n}\n.rolemapping-editor .dnn-grid-system .right-column {\n padding-left: 30px;\n border-left: 0 !important;\n}\n.rolemapping-editor .editor-buttons-box {\n width: 100%;\n text-align: center;\n float: left;\n margin: 30px 0 0 0;\n}\n.rolemapping-editor .editor-buttons-box .dnn-ui-common-button {\n margin: 5px;\n}\n.rolemapping-editor .editor-buttons-box .edit-icon {\n margin: 0px 10px 20px 10px;\n float: right;\n}\n.rolemapping-editor .editor-buttons-box .edit-icon svg {\n width: 16px;\n float: left;\n height: 16px;\n}\n",""])},function(e,t,n){var i=n(43);"string"==typeof i&&(i=[[e.i,i,""]]);var o={hmr:!0,transform:void 0,insertInto:void 0};n(7)(i,o);i.locals&&(e.exports=i.locals)},function(e,t,n){(e.exports=n(6)(!1)).push([e.i,"/* START EVOQ COLOR PALETTE */\n/* END EVOQ COLOR PALETTE */\n/* START ATTENTION COLORS */\n/* END ATTENTION COLORS */\n/* SVG HOVER STATES */\nsvg {\n fill: #C8C8C8;\n}\nsvg:hover {\n fill: #6F7273;\n}\nsvg:active {\n fill: #1E88C3;\n}\n/* END SVG HOVER STATES */\n.dnn-azuread-b2c-roleMappingSettings .items {\n margin: 30px 30px;\n width: 738px;\n float: left;\n box-sizing: border-box;\n}\n.dnn-azuread-b2c-roleMappingSettings .items .items-grid {\n border: solid 1px #C8C8C8;\n float: left;\n width: 100%;\n}\n.dnn-azuread-b2c-roleMappingSettings .items .header-row {\n border-bottom: 1px solid #C8C8C8;\n padding: 10px 0 10px 0;\n width: 100%;\n float: left;\n overflow: hidden;\n}\n.dnn-azuread-b2c-roleMappingSettings .items .header-DnnRole {\n width: 50%;\n float: left;\n font-weight: bolder;\n padding-left: 15px;\n}\n.dnn-azuread-b2c-roleMappingSettings .items .header-B2cRole {\n width: 20%;\n float: left;\n font-weight: bolder;\n}\n.dnn-azuread-b2c-roleMappingSettings .items .collapsible-component .collapsible-header {\n text-align: right;\n text-transform: none;\n padding-right: 40px;\n}\n.dnn-azuread-b2c-roleMappingSettings .items .collapsible-component .collapsible-header .collapse-icon {\n display: none;\n}\n.dnn-azuread-b2c-roleMappingSettings .items .collapsible-component .collapsible-header .collapse-icon.collapsed {\n display: none;\n}\n.dnn-azuread-b2c-roleMappingSettings .items .AddItemRow {\n text-align: right;\n width: 100%;\n float: right;\n margin: 0 0 15px 0;\n font-weight: bolder;\n border-bottom: 1px solid #C8C8C8;\n overflow: hidden;\n height: 25px;\n}\n.dnn-azuread-b2c-roleMappingSettings .items .AddItemRow .sectionTitle {\n font-weight: bolder;\n float: left;\n}\n.dnn-azuread-b2c-roleMappingSettings .items .AddItemRow .AddItemBox {\n width: auto;\n float: right;\n color: #4B4E4F;\n cursor: pointer;\n}\n.dnn-azuread-b2c-roleMappingSettings .items .AddItemRow .AddItemBox .add-icon {\n margin-left: 20px;\n margin-right: 5px;\n float: left;\n cursor: pointer;\n}\n.dnn-azuread-b2c-roleMappingSettings .items .AddItemRow .AddItemBox .add-icon svg {\n width: 16px;\n float: left;\n height: 16px;\n fill: #4B4E4F;\n}\n.dnn-azuread-b2c-roleMappingSettings .items .AddItemRow .AddItemBox-active {\n width: auto;\n float: right;\n color: #1E88C3;\n}\n.dnn-azuread-b2c-roleMappingSettings .items .AddItemRow .AddItemBox-active .add-icon {\n margin-left: 20px;\n margin-right: 5px;\n float: left;\n}\n.dnn-azuread-b2c-roleMappingSettings .items .AddItemRow .AddItemBox-active .add-icon svg {\n width: 16px;\n float: left;\n height: 16px;\n fill: #1E88C3;\n}\n.dnn-azuread-b2c-roleMappingSettings .items .role-item {\n color: #4B4E4F;\n}\n",""])},function(e,t,n){var i=n(45);"string"==typeof i&&(i=[[e.i,i,""]]);var o={hmr:!0,transform:void 0,insertInto:void 0};n(7)(i,o);i.locals&&(e.exports=i.locals)},function(e,t,n){(e.exports=n(6)(!1)).push([e.i,"#azureADB2C-container .dnn-persona-bar-page-body .persona-bar-page-body .dnn-switch-container .dnn-switch.place-left {\n margin-left: 0px;\n}\n#azureADB2C-container .dnn-persona-bar-page-body .persona-bar-page-body button.dnn-ui-common-button[role=primary] {\n margin-left: 10px;\n}\n",""])},function(e,t,n){"use strict";n.r(t);var i=n(0),o=n.n(i),r=(n(5),n(4)),a=n(1),l=n(3),p=n(2);function s(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:{selectedTab:0},t=arguments.length>1?arguments[1]:void 0;switch(t.type){case m.a.RETRIEVED_SETTINGS:case m.a.SETTINGS_CLIENT_MODIFIED:return g({},e,{enabled:t.data.enabled,useGlobalSettings:t.data.useGlobalSettings,autoRedirect:t.data.autoRedirect,autoAuthorize:t.data.autoAuthorize,apiKey:t.data.apiKey,apiSecret:t.data.apiSecret,redirectUri:t.data.redirectUri,onErrorUri:t.data.onErrorUri,tenantName:t.data.tenantName,tenantId:t.data.tenantId,signUpPolicy:t.data.signUpPolicy,profilePolicy:t.data.profilePolicy,passwordResetPolicy:t.data.passwordResetPolicy,aadAppClientId:t.data.aadAppClientId,aadAppSecret:t.data.aadAppSecret,jwtAudiences:t.data.jwtAudiences,roleSyncEnabled:t.data.roleSyncEnabled,profileSyncEnabled:t.data.profileSyncEnabled,jwtAuthEnabled:t.data.jwtAuthEnabled,apiResource:t.data.apiResource,scopes:t.data.scopes,clientModified:t.data.clientModified,usernamePrefixEnabled:t.data.usernamePrefixEnabled,groupNamePrefixEnabled:t.data.groupNamePrefixEnabled,ropcPolicy:t.data.ropcPolicy,impersonatePolicy:t.data.impersonatePolicy});case m.a.UPDATED_SETTINGS:return g({},e,{clientModified:t.data.clientModified});case m.a.RETRIEVED_PROFILESETTINGS:return g({},e,{profileMapping:t.data.profileMapping});case m.a.RETRIEVED_ROLEMAPPINGSETTINGS:return g({},e,{roleMapping:t.data.roleMapping});case m.a.RETRIEVED_AVAILABLEROLES:return g({},e,{roles:t.data.roles});case m.a.SWITCH_TAB:return g({},e,{selectedTab:t.payload});case m.a.SWITCH_MAPPING_SUBTAB:return g({},e,{selectedSubTab:t.payload});case m.a.CANCELLED_PROFILEMAPPING_CLIENT_MODIFIED:return g({},e,{profileMappingClientModified:t.data.profileMappingClientModified});case m.a.PROFILEMAPPINGS_CLIENT_MODIFIED:return g({},e,{profileMappingDetail:t.data.profileMappingDetail,profileMappingClientModified:t.data.profileMappingClientModified});case m.a.RETRIEVED_PROFILEPROPERTIES:return g({},e,{profileProperties:t.data.profileProperties});case m.a.ROLEMAPPINGS_CLIENT_MODIFIED:return g({},e,{roleProperties:t.data.roleProperties});case m.a.RETRIEVED_USERMAPPINGSETTINGS:return g({},e,{userMapping:t.data.userMapping});case m.a.USERMAPPINGS_CLIENT_MODIFIED:return g({},e,{userMappingDetail:t.data.userMappingDetail,userMappingClientModified:t.data.userMappingClientModified});default:return g({},e)}}}),y=n(12),v=n(13),E=n.n(v),S=n(14),w=n.n(S),P=Object(y.createDevTools)(o.a.createElement(w.a,{toggleVisibilityKey:"ctrl-h",changePositionKey:"ctrl-q",defaultIsVisible:!1},o.a.createElement(E.a,null)));var I,C=n(15),N=n.n(C),T=(I={enabled:!1,instrumentationKey:""},Object(s.createStore)(h,I,Object(s.compose)(Object(s.applyMiddleware)(d.a,f()()),P.instrument())));p.dispatch=T.dispatch;var O=document.getElementById("azureADB2C-container"),A=O.getAttribute("data-init-callback");p.init(A),Object(r.render)(o.a.createElement(a.Provider,{store:T},o.a.createElement(N.a,null)),O)}]); //# sourceMappingURL=bundle-en.js.map \ No newline at end of file diff --git a/DotNetNuke.Authentication.Azure.B2C/admin/personaBar/scripts/bundles/bundle-en.js.map b/DotNetNuke.Authentication.Azure.B2C/admin/personaBar/scripts/bundles/bundle-en.js.map index f099ae2..7cda05d 100644 --- a/DotNetNuke.Authentication.Azure.B2C/admin/personaBar/scripts/bundles/bundle-en.js.map +++ b/DotNetNuke.Authentication.Azure.B2C/admin/personaBar/scripts/bundles/bundle-en.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///external \"window.dnn.nodeModules.React\"","webpack:///external \"window.dnn.nodeModules.CommonComponents\"","webpack:///./src/utils/index.jsx","webpack:///./src/constants/actionTypes/settings.js","webpack:///./src/constants/actionTypes/index.js","webpack:///external \"window.dnn.nodeModules.ReactRedux\"","webpack:///./node_modules/prop-types/index.js","webpack:///./node_modules/css-loader/dist/runtime/api.js","webpack:///./node_modules/style-loader/lib/addStyles.js","webpack:///external \"window.dnn.nodeModules.Redux\"","webpack:///external \"window.dnn.nodeModules.ReactDOM\"","webpack:///external \"window.dnn.nodeModules.ReduxThunk\"","webpack:///external \"window.dnn.nodeModules.ReduxImmutableStateInvariant\"","webpack:///external \"window.dnn.nodeModules.ReduxDevTools\"","webpack:///external \"window.dnn.nodeModules.ReduxDevToolsLogMonitor\"","webpack:///external \"window.dnn.nodeModules.ReduxDevToolsDockMonitor\"","webpack:///./src/containers/Root.js","webpack:///./node_modules/prop-types/factoryWithThrowingShims.js","webpack:///./node_modules/prop-types/lib/ReactPropTypesSecret.js","webpack:///./src/components/general/generalSettings.less?a094","webpack:///./src/components/general/generalSettings.less","webpack:///./node_modules/css-loader/dist/runtime/url-escape.js","webpack:///./src/components/general/img/AADB2C.png","webpack:///./node_modules/style-loader/lib/urls.js","webpack:///./src/components/sync/syncSettings.less?2e00","webpack:///./src/components/sync/syncSettings.less","webpack:///./src/components/svg/error.svg","webpack:///./src/components/profileMappings/profileMappingRow/style.less?a8c9","webpack:///./src/components/profileMappings/profileMappingRow/style.less","webpack:///./src/components/profileMappings/profileMappingEditor/style.less?46d2","webpack:///./src/components/profileMappings/profileMappingEditor/style.less","webpack:///./src/components/profileMappings/style.less?b9db","webpack:///./src/components/profileMappings/style.less","webpack:///./src/components/userMappings/userMappingRow/style.less?94eb","webpack:///./src/components/userMappings/userMappingRow/style.less","webpack:///./src/components/userMappings/userMappingEditor/style.less?9fe1","webpack:///./src/components/userMappings/userMappingEditor/style.less","webpack:///./src/components/userMappings/style.less?5147","webpack:///./src/components/userMappings/style.less","webpack:///./src/components/roleMappings/roleMappingRow/style.less?b9df","webpack:///./src/components/roleMappings/roleMappingRow/style.less","webpack:///./src/components/roleMappings/roleMappingEditor/style.less?5a4a","webpack:///./src/components/roleMappings/roleMappingEditor/style.less","webpack:///./src/components/roleMappings/style.less?b107","webpack:///./src/components/roleMappings/style.less","webpack:///./src/components/style.less?07ae","webpack:///./src/components/style.less","webpack:///./src/services/applicationService.js","webpack:///./src/actions/settings.js","webpack:///./src/resources/index.jsx","webpack:///./src/components/general/generalSettings.jsx","webpack:///./src/components/general/index.jsx","webpack:///./src/components/sync/syncSettings.jsx","webpack:///./src/components/sync/index.jsx","webpack:///./src/components/profileMappings/profileMappingRow/index.jsx","webpack:///./src/components/profileMappings/profileMappingEditor/index.jsx","webpack:///./src/components/profileMappings/index.jsx","webpack:///./src/components/userMappings/userMappingRow/index.jsx","webpack:///./src/components/userMappings/userMappingEditor/index.jsx","webpack:///./src/components/userMappings/index.jsx","webpack:///./src/components/roleMappings/roleMappingRow/index.jsx","webpack:///./src/components/roleMappings/roleMappingEditor/index.jsx","webpack:///./src/components/roleMappings/index.jsx","webpack:///./src/components/App.jsx","webpack:///./src/containers/Root.prod.js","webpack:///./src/globals/application.js","webpack:///./src/reducers/rootReducer.js","webpack:///./src/reducers/settingsReducer.js","webpack:///./src/containers/DevTools.js","webpack:///./src/store/configureStore.js","webpack:///./src/main.jsx"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","window","dnn","nodeModules","React","CommonComponents","utils","init","utilities","Error","this","settingsActionTypes","SWITCH_TAB","RETRIEVED_SETTINGS","UPDATED_SETTINGS","UPDATED_PROFILEMAPPING","SETTINGS_CLIENT_MODIFIED","RETRIEVED_PROFILESETTINGS","RETRIEVED_PROFILEPROPERTIES","CANCELLED_PROFILEMAPPING_CLIENT_MODIFIED","PROFILEMAPPINGS_CLIENT_MODIFIED","SWITCH_MAPPING_SUBTAB","RETRIEVED_ROLEMAPPINGSETTINGS","RETRIEVED_AVAILABLEROLES","ROLEMAPPINGS_CLIENT_MODIFIED","RETRIEVED_USERMAPPINGSETTINGS","USERMAPPINGS_CLIENT_MODIFIED","__webpack_exports__","settings","ReactRedux","useSourceMap","list","toString","map","item","content","cssMapping","btoa","sourceMapping","sourceMap","unescape","encodeURIComponent","JSON","stringify","sourceURLs","sources","source","sourceRoot","concat","join","cssWithMappingToString","mediaQuery","alreadyImportedModules","length","id","push","fn","memo","stylesInDom","isOldIE","document","all","atob","apply","arguments","getElement","target","parent","styleTarget","querySelector","HTMLIFrameElement","contentDocument","head","e","singleton","singletonCounter","stylesInsertedAtTop","fixUrls","addStylesToDom","styles","options","domStyle","refs","j","parts","addStyle","listToStyles","newStyles","base","part","css","media","insertStyleElement","style","insertInto","lastStyleElementInsertedAtTop","insertAt","nextSibling","insertBefore","appendChild","firstChild","before","removeStyleElement","parentNode","removeChild","idx","indexOf","splice","createStyleElement","createElement","undefined","attrs","type","nonce","nc","getNonce","addAttrs","el","keys","forEach","setAttribute","obj","update","remove","result","transform","default","styleIndex","applyToSingletonTag","URL","createObjectURL","revokeObjectURL","Blob","link","rel","createLinkElement","autoFixUrls","convertToAbsoluteUrls","blob","oldSrc","href","styleSheet","cssText","createTextNode","newObj","DEBUG","newList","mayRemove","textStore","replaceText","index","replacement","filter","Boolean","cssNode","childNodes","Redux","ReactDOM","ReduxThunk","ReduxImmutableStateInvariant","ReduxDevTools","ReduxDevToolsLogMonitor","ReduxDevToolsDockMonitor","require","ReactPropTypesSecret","emptyFunction","emptyFunctionWithReset","resetWarningCache","shim","props","propName","componentName","location","propFullName","secret","err","getShim","isRequired","ReactPropTypes","array","bool","func","number","string","symbol","any","arrayOf","element","elementType","instanceOf","node","objectOf","oneOf","oneOfType","shape","exact","checkPropTypes","PropTypes","hmr","locals","___CSS_LOADER_URL___0___","urlEscape","url","needQuotes","test","slice","replace","baseUrl","protocol","host","currentDir","pathname","fullMatch","origUrl","newUrl","unquotedOrigUrl","trim","$1","applicationService","controller","sf","util","callback","getServiceFramework","payload","failureCallback","post","settingsActions","switchTab","dispatch","ActionTypes","switchMappingSubTab","getSettings","ApplicationService","data","enabled","useGlobalSettings","autoRedirect","autoAuthorize","apiKey","apiSecret","redirectUri","onErrorUri","tenantName","tenantId","signUpPolicy","profilePolicy","passwordResetPolicy","aadAppClientId","aadAppSecret","jwtAudiences","roleSyncEnabled","profileSyncEnabled","jwtAuthEnabled","apiResource","scopes","usernamePrefixEnabled","groupNamePrefixEnabled","clientModified","ropcPolicy","impersonatePolicy","updateGeneralSettings","updateAdvancedSettings","settingsClientModified","getProfileSettings","profileMapping","getProfileProperties","profileProperties","cancelProfileMappingClientModified","profileMappingClientModified","parameter","profileMappingDetail","updateProfileMapping","deleteProfileMapping","getRoleSettings","getRoleMappingSettings","roleMapping","getAvailableRoles","roles","roleMappingClientModified","roleMappingDetail","updateRoleMapping","deleteRoleMapping","getUserMappingSettings","userMapping","updateUserMapping","userMappingClientModified","userMappingDetail","resx","moduleName","getResx","GeneralSettings","_this","generalSettings_classCallCheck","_possibleConstructorReturn","_getPrototypeOf","state","error","appId","appSecret","Component","SettingsActions","nextProps","event","closePersonaBar","_this2","preventDefault","notify","setState","notifyError","external_window_dnn_nodeModules_React_default","a","className","external_window_dnn_nodeModules_CommonComponents_","columnSize","label","onText","offText","tooltipMessage","onChange","onSettingChange","withLabel","errorMessage","autoComplete","disabled","onClick","onClickCancel","onClickSave","connect","warningIcon","SyncSettings","syncSettings_classCallCheck","syncSettings_possibleConstructorReturn","syncSettings_getPrototypeOf","numberOfColumns","AadAppSecret","dangerouslySetInnerHTML","__html","ProfileMappingRow","opened","openId","Collapse","OpenCollapse","title","dnnProfilePropertyName","b2cClaimName","deletable","SvgIcons","TrashIcon","onDelete","editable","EditIcon","toggle","fixedHeight","keepContent","isOpened","float","width","overflow","children","defaultProps","collapsed","ProfileMappingEditor","profileMappingEditor_classCallCheck","profileMappingEditor_possibleConstructorReturn","profileMappingEditor_getPrototypeOf","DnnProfilePropertyName","B2cClaimName","triedToSubmit","profileMappingId","prevProps","_extends","onValidate","profileMappingEditor_typeof","availableProperties","onUpdate","confirm","columnOne","getProfilePropertyOptions","onSelect","columnTwo","inputStyle","margin","onCancel","onSave","ProfileMappings","profileMappings_classCallCheck","profileMappings_possibleConstructorReturn","profileMappings_getPrototypeOf","tableFields","newDnnProfilePropertyName","originalPropertyName","ProfileMappingId","split","find","originalDnnPropertyName","collapse","parse","responseText","Message","_this3","uncollapse","tableHeaders","field","_this4","profileMappingRow","closeOnClick","onDeleteProfileMapping","profileMappingEditor","onUpdateProfileMapping","onValidateProfileMapping","AddIcon","renderHeader","renderedProfileMappings","UserMappingRow","dnnPropertyName","UserMappingEditor","userMappingEditor_classCallCheck","userMappingEditor_possibleConstructorReturn","userMappingEditor_getPrototypeOf","mappingDetail","DnnPropertyName","mappingId","userMappingEditor_extends","userMappingEditor_typeof","mappingClientModified","cancelUserMappingClientModified","UserMappings","userMappings_classCallCheck","userMappings_possibleConstructorReturn","userMappings_getPrototypeOf","mapping","dnnMappingName","deleteUserMapping","userMappingRow","onDeleteMapping","userMappingEditor","onUpdateMapping","renderMappings","RoleMappingRow","dnnRoleName","b2cRoleName","RoleMappingEditor","roleMappingEditor_classCallCheck","roleMappingEditor_possibleConstructorReturn","roleMappingEditor_getPrototypeOf","DnnRoleName","B2cRoleName","roleMappingEditor_extends","roleMappingEditor_typeof","availableRoles","cancelRoleMappingClientModified","getRolePropertyOptions","RoleMappings","roleMappings_classCallCheck","roleMappings_possibleConstructorReturn","roleMappings_getPrototypeOf","newDnnRoleName","originalRoleName","MappingId","originalDnnRoleName","roleMappingRow","roleMappingEditor","onValidateMapping","App","App_classCallCheck","App_getPrototypeOf","onSelectTab","App_assertThisInitialized","onSelectSubTab","isOpen","titleCharLimit","selectedIndex","selectedTab","tabHeaders","general","sync","selectedMappingSubTab","userMappings","profileMappings","roleMappings","Root","components_App","boilerPlate","initAzureADB2C","utility","rootReducer","combineReducers","action","_objectSpread","selectedSubTab","roleProperties","createDevTools","external_window_dnn_nodeModules_ReduxDevToolsDockMonitor_default","toggleVisibilityKey","changePositionKey","defaultIsVisible","external_window_dnn_nodeModules_ReduxDevToolsLogMonitor_default","initialState","store","instrumentationKey","createStore","compose","applyMiddleware","thunkMiddleware","reduxImmutableStateInvariant","DevTools","instrument","application","appContainer","getElementById","initCallback","getAttribute","render","external_window_dnn_nodeModules_ReactRedux_","Root_default"],"mappings":"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","file":"bundle-en.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 47);\n","module.exports = window.dnn.nodeModules.React;","module.exports = window.dnn.nodeModules.CommonComponents;","const utils = {\r\n init(utilities) {\r\n if (!utilities) {\r\n throw new Error(\"Utilities is undefined.\");\r\n }\r\n this.utilities = utilities; \r\n },\r\n utilities: null\r\n};\r\nexport default utils;","const settingsActionTypes = { \r\n SWITCH_TAB: \"SWITCH_TAB\",\r\n RETRIEVED_SETTINGS: \"RETRIEVED_SETTINGS\",\r\n UPDATED_SETTINGS: \"UPDATED_SETTINGS\",\r\n UPDATED_PROFILEMAPPING: \"UPDATED_PROFILEMAPPING\",\r\n SETTINGS_CLIENT_MODIFIED: \"SETTINGS_CLIENT_MODIFIED\",\r\n RETRIEVED_PROFILESETTINGS: \"RETRIEVED_PROFILESETTINGS\",\r\n RETRIEVED_PROFILEPROPERTIES: \"RETRIEVED_PROFILEPROPERTIES\",\r\n CANCELLED_PROFILEMAPPING_CLIENT_MODIFIED: \"CANCELLED_PROFILEMAPPING_CLIENT_MODIFIED\",\r\n PROFILEMAPPINGS_CLIENT_MODIFIED: \"PROFILEMAPPINGS_CLIENT_MODIFIED\",\r\n SWITCH_MAPPING_SUBTAB: \"SWITCH_MAPPING_SUBTAB\",\r\n RETRIEVED_ROLEMAPPINGSETTINGS: \"RETRIEVED_ROLEMAPPINGSETTINGS\",\r\n RETRIEVED_AVAILABLEROLES: \"RETRIEVED_AVAILABLEROLES\",\r\n ROLEMAPPINGS_CLIENT_MODIFIED: \"ROLEMAPPINGS_CLIENT_MODIFIED\",\r\n RETRIEVED_USERMAPPINGSETTINGS: \"RETRIEVED_USERMAPPINGSETTINGS\",\r\n USERMAPPINGS_CLIENT_MODIFIED: \"USERMAPPINGS_CLIENT_MODIFIED\"\r\n};\r\nexport default settingsActionTypes;","import settings from \"./settings\";\r\n\r\nexport {\r\n settings\r\n};","module.exports = window.dnn.nodeModules.ReactRedux;","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nif (process.env.NODE_ENV !== 'production') {\n var ReactIs = require('react-is');\n\n // By explicitly using `prop-types` you are opting into new development behavior.\n // http://fb.me/prop-types-in-prod\n var throwOnDirectAccess = true;\n module.exports = require('./factoryWithTypeCheckers')(ReactIs.isElement, throwOnDirectAccess);\n} else {\n // By explicitly using `prop-types` you are opting into new production behavior.\n // http://fb.me/prop-types-in-prod\n module.exports = require('./factoryWithThrowingShims')();\n}\n","\"use strict\";\n\n/*\n MIT License http://www.opensource.org/licenses/mit-license.php\n Author Tobias Koppers @sokra\n*/\n// css base code, injected by the css-loader\nmodule.exports = function (useSourceMap) {\n var list = []; // return the list of modules as css string\n\n list.toString = function toString() {\n return this.map(function (item) {\n var content = cssWithMappingToString(item, useSourceMap);\n\n if (item[2]) {\n return '@media ' + item[2] + '{' + content + '}';\n } else {\n return content;\n }\n }).join('');\n }; // import a list of modules into the list\n\n\n list.i = function (modules, mediaQuery) {\n if (typeof modules === 'string') {\n modules = [[null, modules, '']];\n }\n\n var alreadyImportedModules = {};\n\n for (var i = 0; i < this.length; i++) {\n var id = this[i][0];\n\n if (id != null) {\n alreadyImportedModules[id] = true;\n }\n }\n\n for (i = 0; i < modules.length; i++) {\n var item = modules[i]; // skip already imported module\n // this implementation is not 100% perfect for weird media query combinations\n // when a module is imported multiple times with different media queries.\n // I hope this will never occur (Hey this way we have smaller bundles)\n\n if (item[0] == null || !alreadyImportedModules[item[0]]) {\n if (mediaQuery && !item[2]) {\n item[2] = mediaQuery;\n } else if (mediaQuery) {\n item[2] = '(' + item[2] + ') and (' + mediaQuery + ')';\n }\n\n list.push(item);\n }\n }\n };\n\n return list;\n};\n\nfunction cssWithMappingToString(item, useSourceMap) {\n var content = item[1] || '';\n var cssMapping = item[3];\n\n if (!cssMapping) {\n return content;\n }\n\n if (useSourceMap && typeof btoa === 'function') {\n var sourceMapping = toComment(cssMapping);\n var sourceURLs = cssMapping.sources.map(function (source) {\n return '/*# sourceURL=' + cssMapping.sourceRoot + source + ' */';\n });\n return [content].concat(sourceURLs).concat([sourceMapping]).join('\\n');\n }\n\n return [content].join('\\n');\n} // Adapted from convert-source-map (MIT)\n\n\nfunction toComment(sourceMap) {\n // eslint-disable-next-line no-undef\n var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap))));\n var data = 'sourceMappingURL=data:application/json;charset=utf-8;base64,' + base64;\n return '/*# ' + data + ' */';\n}","/*\n\tMIT License http://www.opensource.org/licenses/mit-license.php\n\tAuthor Tobias Koppers @sokra\n*/\n\nvar stylesInDom = {};\n\nvar\tmemoize = function (fn) {\n\tvar memo;\n\n\treturn function () {\n\t\tif (typeof memo === \"undefined\") memo = fn.apply(this, arguments);\n\t\treturn memo;\n\t};\n};\n\nvar isOldIE = memoize(function () {\n\t// Test for IE <= 9 as proposed by Browserhacks\n\t// @see http://browserhacks.com/#hack-e71d8692f65334173fee715c222cb805\n\t// Tests for existence of standard globals is to allow style-loader\n\t// to operate correctly into non-standard environments\n\t// @see https://github.com/webpack-contrib/style-loader/issues/177\n\treturn window && document && document.all && !window.atob;\n});\n\nvar getTarget = function (target, parent) {\n if (parent){\n return parent.querySelector(target);\n }\n return document.querySelector(target);\n};\n\nvar getElement = (function (fn) {\n\tvar memo = {};\n\n\treturn function(target, parent) {\n // If passing function in options, then use it for resolve \"head\" element.\n // Useful for Shadow Root style i.e\n // {\n // insertInto: function () { return document.querySelector(\"#foo\").shadowRoot }\n // }\n if (typeof target === 'function') {\n return target();\n }\n if (typeof memo[target] === \"undefined\") {\n\t\t\tvar styleTarget = getTarget.call(this, target, parent);\n\t\t\t// Special case to return head of iframe instead of iframe itself\n\t\t\tif (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) {\n\t\t\t\ttry {\n\t\t\t\t\t// This will throw an exception if access to iframe is blocked\n\t\t\t\t\t// due to cross-origin restrictions\n\t\t\t\t\tstyleTarget = styleTarget.contentDocument.head;\n\t\t\t\t} catch(e) {\n\t\t\t\t\tstyleTarget = null;\n\t\t\t\t}\n\t\t\t}\n\t\t\tmemo[target] = styleTarget;\n\t\t}\n\t\treturn memo[target]\n\t};\n})();\n\nvar singleton = null;\nvar\tsingletonCounter = 0;\nvar\tstylesInsertedAtTop = [];\n\nvar\tfixUrls = require(\"./urls\");\n\nmodule.exports = function(list, options) {\n\tif (typeof DEBUG !== \"undefined\" && DEBUG) {\n\t\tif (typeof document !== \"object\") throw new Error(\"The style-loader cannot be used in a non-browser environment\");\n\t}\n\n\toptions = options || {};\n\n\toptions.attrs = typeof options.attrs === \"object\" ? options.attrs : {};\n\n\t// Force single-tag solution on IE6-9, which has a hard limit on the # of \\r\\n\\r\\n\\r\\n\"","\nvar content = require(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/less-loader/dist/cjs.js!./style.less\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/less-loader/dist/cjs.js!./style.less\", function() {\n\t\tvar newContent = require(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/less-loader/dist/cjs.js!./style.less\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","exports = module.exports = require(\"../../../../node_modules/css-loader/dist/runtime/api.js\")(false);\n// Module\nexports.push([module.id, \"/* START EVOQ COLOR PALETTE */\\n/* END EVOQ COLOR PALETTE */\\n/* START ATTENTION COLORS */\\n/* END ATTENTION COLORS */\\n/* SVG HOVER STATES */\\nsvg {\\n fill: #C8C8C8;\\n}\\nsvg:hover {\\n fill: #6F7273;\\n}\\nsvg:active {\\n fill: #1E88C3;\\n}\\n/* END SVG HOVER STATES */\\n.collapsible-component-profile {\\n display: block;\\n float: left;\\n width: 100%;\\n cursor: auto;\\n}\\n.collapsible-component-profile:not(:last-child) {\\n border-bottom: 1px solid #C8C8C8;\\n}\\n.collapsible-component-profile div.collapsible-profile {\\n width: 100%;\\n float: left;\\n position: relative;\\n padding: 15px 0 10px 0;\\n box-sizing: border-box;\\n cursor: auto;\\n}\\n.collapsible-component-profile div.collapsible-profile .row {\\n float: left;\\n width: 100%;\\n}\\n.collapsible-component-profile div.collapsible-profile .row .item-row-dnnprofile {\\n width: 35%;\\n float: left;\\n padding-left: 15px;\\n word-break: break-all;\\n}\\n.collapsible-component-profile div.collapsible-profile .row .item-row-b2cprofile {\\n width: 20%;\\n float: left;\\n}\\n.collapsible-component-profile div.collapsible-profile .row .item-row-b2cextension {\\n width: 30%;\\n float: left;\\n white-space: nowrap;\\n overflow: hidden;\\n text-overflow: ellipsis;\\n}\\n.collapsible-component-profile div.collapsible-profile .row .item-row-primary {\\n width: 10%;\\n float: left;\\n text-align: center;\\n}\\n.collapsible-component-profile div.collapsible-profile .row .item-row-primary .checkMarkIcon {\\n width: 16px;\\n height: 16px;\\n margin-left: auto;\\n margin-right: auto;\\n}\\n.collapsible-component-profile div.collapsible-profile .row .item-row-primary .checkMarkIcon > svg {\\n fill: #4B4E4F;\\n}\\n.collapsible-component-profile div.collapsible-profile .row .item-row-actionButtons {\\n width: 8%;\\n margin-right: 15px;\\n float: right;\\n}\\n.collapsible-component-profile div.collapsible-profile .row .item-row-actionButtons:not(:last-child) {\\n float: left;\\n margin-right: 0px;\\n}\\n.collapsible-component-profile div.collapsible-profile .row .item-row-actionButtons .delete-icon,\\n.collapsible-component-profile div.collapsible-profile .row .item-row-actionButtons .edit-icon {\\n margin-left: 5px;\\n float: right;\\n display: block;\\n cursor: pointer;\\n}\\n.collapsible-component-profile div.collapsible-profile .row .item-row-actionButtons .delete-icon > svg,\\n.collapsible-component-profile div.collapsible-profile .row .item-row-actionButtons .edit-icon > svg {\\n width: 16px;\\n float: left;\\n height: 16px;\\n fill: #C8C8C8;\\n}\\n.collapsible-component-profile div.collapsible-profile .row .item-row-actionButtons .delete-icon > svg:hover,\\n.collapsible-component-profile div.collapsible-profile .row .item-row-actionButtons .edit-icon > svg:hover {\\n fill: #4B4E4F;\\n}\\n.collapsible-component-profile div.collapsible-profile .row .item-row-actionButtons .delete-icon-hidden {\\n display: none;\\n}\\n.collapsible-component-profile div.collapsible-profile .row .item-row-actionButtons .edit-icon-active > svg {\\n width: 16px;\\n float: right;\\n height: 16px;\\n fill: #1E88C3;\\n}\\n.collapsible-component-profile div.collapsible-profile .row .item-row-wrapper {\\n padding: 0 5px 0 5px;\\n}\\n\", \"\"]);\n\n","\nvar content = require(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/less-loader/dist/cjs.js!./style.less\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/less-loader/dist/cjs.js!./style.less\", function() {\n\t\tvar newContent = require(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/less-loader/dist/cjs.js!./style.less\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","exports = module.exports = require(\"../../../../node_modules/css-loader/dist/runtime/api.js\")(false);\n// Module\nexports.push([module.id, \"/* START EVOQ COLOR PALETTE */\\n/* END EVOQ COLOR PALETTE */\\n/* START ATTENTION COLORS */\\n/* END ATTENTION COLORS */\\n/* SVG HOVER STATES */\\nsvg {\\n fill: #C8C8C8;\\n}\\nsvg:hover {\\n fill: #6F7273;\\n}\\nsvg:active {\\n fill: #1E88C3;\\n}\\n/* END SVG HOVER STATES */\\n.profilemapping-editor {\\n float: left;\\n margin: 20px 30px;\\n}\\n.profilemapping-editor .topMessage {\\n border: 1px solid #C8C8C8;\\n padding: 10px 20px;\\n background-color: #E5E7E6;\\n margin: 0 0 20px 0;\\n}\\n.profilemapping-editor .dnn-ui-common-input-group {\\n padding: 0 0 15px 0;\\n}\\n.profilemapping-editor .dnn-ui-common-input-group label {\\n font-weight: bolder;\\n float: left;\\n}\\n.profilemapping-editor .dnn-ui-common-input-group .dnn-label {\\n margin: 8px 0;\\n}\\n.profilemapping-editor .dnn-ui-common-input-group .dnn-dropdown,\\n.profilemapping-editor .dnn-ui-common-input-group .dnn-dropdown-with-error {\\n width: 100% !important;\\n box-sizing: border-box;\\n}\\n.profilemapping-editor .dnn-ui-common-input-group .dnn-single-line-input-with-error {\\n width: 100% !important;\\n}\\n.profilemapping-editor .dnn-grid-system .left-column {\\n padding-right: 30px;\\n border-right: 1px solid #C8C8C8;\\n}\\n.profilemapping-editor .dnn-grid-system .right-column {\\n padding-left: 30px;\\n border-left: 0 !important;\\n}\\n.profilemapping-editor .editor-buttons-box {\\n width: 100%;\\n text-align: center;\\n float: left;\\n margin: 30px 0 0 0;\\n}\\n.profilemapping-editor .editor-buttons-box .dnn-ui-common-button {\\n margin: 5px;\\n}\\n.profilemapping-editor .editor-buttons-box .edit-icon {\\n margin: 0px 10px 20px 10px;\\n float: right;\\n}\\n.profilemapping-editor .editor-buttons-box .edit-icon svg {\\n width: 16px;\\n float: left;\\n height: 16px;\\n}\\n\", \"\"]);\n\n","\nvar content = require(\"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/less-loader/dist/cjs.js!./style.less\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/less-loader/dist/cjs.js!./style.less\", function() {\n\t\tvar newContent = require(\"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/less-loader/dist/cjs.js!./style.less\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","exports = module.exports = require(\"../../../node_modules/css-loader/dist/runtime/api.js\")(false);\n// Module\nexports.push([module.id, \"/* START EVOQ COLOR PALETTE */\\n/* END EVOQ COLOR PALETTE */\\n/* START ATTENTION COLORS */\\n/* END ATTENTION COLORS */\\n/* SVG HOVER STATES */\\nsvg {\\n fill: #C8C8C8;\\n}\\nsvg:hover {\\n fill: #6F7273;\\n}\\nsvg:active {\\n fill: #1E88C3;\\n}\\n/* END SVG HOVER STATES */\\n.dnn-azuread-b2c-profileMappingSettings .profile-items {\\n margin: 30px 30px;\\n width: 738px;\\n float: left;\\n box-sizing: border-box;\\n}\\n.dnn-azuread-b2c-profileMappingSettings .profile-items .profile-items-grid {\\n border: solid 1px #C8C8C8;\\n float: left;\\n width: 100%;\\n}\\n.dnn-azuread-b2c-profileMappingSettings .profile-items .header-row {\\n border-bottom: 1px solid #C8C8C8;\\n padding: 10px 0 10px 0;\\n width: 100%;\\n float: left;\\n overflow: hidden;\\n}\\n.dnn-azuread-b2c-profileMappingSettings .profile-items .header-DnnProfileProperty {\\n width: 35%;\\n float: left;\\n font-weight: bolder;\\n padding-left: 15px;\\n}\\n.dnn-azuread-b2c-profileMappingSettings .profile-items .header-B2cClaim {\\n width: 40%;\\n float: left;\\n font-weight: bolder;\\n}\\n.dnn-azuread-b2c-profileMappingSettings .profile-items .collapsible-component .collapsible-header {\\n text-align: right;\\n text-transform: none;\\n padding-right: 40px;\\n}\\n.dnn-azuread-b2c-profileMappingSettings .profile-items .collapsible-component .collapsible-header .collapse-icon {\\n display: none;\\n}\\n.dnn-azuread-b2c-profileMappingSettings .profile-items .collapsible-component .collapsible-header .collapse-icon.collapsed {\\n display: none;\\n}\\n.dnn-azuread-b2c-profileMappingSettings .profile-items .AddItemRow {\\n text-align: right;\\n width: 100%;\\n float: right;\\n margin: 0 0 15px 0;\\n font-weight: bolder;\\n border-bottom: 1px solid #C8C8C8;\\n overflow: hidden;\\n height: 25px;\\n}\\n.dnn-azuread-b2c-profileMappingSettings .profile-items .AddItemRow .sectionTitle {\\n font-weight: bolder;\\n float: left;\\n}\\n.dnn-azuread-b2c-profileMappingSettings .profile-items .AddItemRow .AddItemBox {\\n width: auto;\\n float: right;\\n color: #4B4E4F;\\n cursor: pointer;\\n}\\n.dnn-azuread-b2c-profileMappingSettings .profile-items .AddItemRow .AddItemBox .add-icon {\\n margin-left: 20px;\\n margin-right: 5px;\\n float: left;\\n cursor: pointer;\\n}\\n.dnn-azuread-b2c-profileMappingSettings .profile-items .AddItemRow .AddItemBox .add-icon svg {\\n width: 16px;\\n float: left;\\n height: 16px;\\n fill: #4B4E4F;\\n}\\n.dnn-azuread-b2c-profileMappingSettings .profile-items .AddItemRow .AddItemBox-active {\\n width: auto;\\n float: right;\\n color: #1E88C3;\\n}\\n.dnn-azuread-b2c-profileMappingSettings .profile-items .AddItemRow .AddItemBox-active .add-icon {\\n margin-left: 20px;\\n margin-right: 5px;\\n float: left;\\n}\\n.dnn-azuread-b2c-profileMappingSettings .profile-items .AddItemRow .AddItemBox-active .add-icon svg {\\n width: 16px;\\n float: left;\\n height: 16px;\\n fill: #1E88C3;\\n}\\n.dnn-azuread-b2c-profileMappingSettings .profile-items .profile-item {\\n color: #4B4E4F;\\n}\\n\", \"\"]);\n\n","\nvar content = require(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/less-loader/dist/cjs.js!./style.less\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/less-loader/dist/cjs.js!./style.less\", function() {\n\t\tvar newContent = require(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/less-loader/dist/cjs.js!./style.less\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","exports = module.exports = require(\"../../../../node_modules/css-loader/dist/runtime/api.js\")(false);\n// Module\nexports.push([module.id, \"/* START EVOQ COLOR PALETTE */\\n/* END EVOQ COLOR PALETTE */\\n/* START ATTENTION COLORS */\\n/* END ATTENTION COLORS */\\n/* SVG HOVER STATES */\\nsvg {\\n fill: #C8C8C8;\\n}\\nsvg:hover {\\n fill: #6F7273;\\n}\\nsvg:active {\\n fill: #1E88C3;\\n}\\n/* END SVG HOVER STATES */\\n.collapsible-component-item {\\n display: block;\\n float: left;\\n width: 100%;\\n cursor: auto;\\n}\\n.collapsible-component-item:not(:last-child) {\\n border-bottom: 1px solid #C8C8C8;\\n}\\n.collapsible-component-item div.collapsible-item {\\n width: 100%;\\n float: left;\\n position: relative;\\n padding: 15px 0 10px 0;\\n box-sizing: border-box;\\n cursor: auto;\\n}\\n.collapsible-component-item div.collapsible-item .row {\\n float: left;\\n width: 100%;\\n}\\n.collapsible-component-item div.collapsible-item .row .item-row-dnnproperty {\\n width: 50%;\\n float: left;\\n padding-left: 15px;\\n word-break: break-all;\\n}\\n.collapsible-component-item div.collapsible-item .row .item-row-b2cproperty {\\n width: 37%;\\n float: left;\\n white-space: nowrap;\\n overflow: hidden;\\n text-overflow: ellipsis;\\n}\\n.collapsible-component-item div.collapsible-item .row .item-row-primary {\\n width: 10%;\\n float: left;\\n text-align: center;\\n}\\n.collapsible-component-item div.collapsible-item .row .item-row-primary .checkMarkIcon {\\n width: 16px;\\n height: 16px;\\n margin-left: auto;\\n margin-right: auto;\\n}\\n.collapsible-component-item div.collapsible-item .row .item-row-primary .checkMarkIcon > svg {\\n fill: #4B4E4F;\\n}\\n.collapsible-component-item div.collapsible-item .row .item-row-actionButtons {\\n width: 8%;\\n margin-right: 15px;\\n float: right;\\n}\\n.collapsible-component-item div.collapsible-item .row .item-row-actionButtons:not(:last-child) {\\n float: left;\\n margin-right: 0px;\\n}\\n.collapsible-component-item div.collapsible-item .row .item-row-actionButtons .delete-icon,\\n.collapsible-component-item div.collapsible-item .row .item-row-actionButtons .edit-icon {\\n margin-left: 5px;\\n float: right;\\n display: block;\\n cursor: pointer;\\n}\\n.collapsible-component-item div.collapsible-item .row .item-row-actionButtons .delete-icon > svg,\\n.collapsible-component-item div.collapsible-item .row .item-row-actionButtons .edit-icon > svg {\\n width: 16px;\\n float: left;\\n height: 16px;\\n fill: #C8C8C8;\\n}\\n.collapsible-component-item div.collapsible-item .row .item-row-actionButtons .delete-icon > svg:hover,\\n.collapsible-component-item div.collapsible-item .row .item-row-actionButtons .edit-icon > svg:hover {\\n fill: #4B4E4F;\\n}\\n.collapsible-component-item div.collapsible-item .row .item-row-actionButtons .delete-icon-hidden {\\n display: none;\\n}\\n.collapsible-component-item div.collapsible-item .row .item-row-actionButtons .edit-icon-active > svg {\\n width: 16px;\\n float: right;\\n height: 16px;\\n fill: #1E88C3;\\n}\\n.collapsible-component-item div.collapsible-item .row .item-row-wrapper {\\n padding: 0 5px 0 5px;\\n}\\n\", \"\"]);\n\n","\nvar content = require(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/less-loader/dist/cjs.js!./style.less\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/less-loader/dist/cjs.js!./style.less\", function() {\n\t\tvar newContent = require(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/less-loader/dist/cjs.js!./style.less\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","exports = module.exports = require(\"../../../../node_modules/css-loader/dist/runtime/api.js\")(false);\n// Module\nexports.push([module.id, \"/* START EVOQ COLOR PALETTE */\\n/* END EVOQ COLOR PALETTE */\\n/* START ATTENTION COLORS */\\n/* END ATTENTION COLORS */\\n/* SVG HOVER STATES */\\nsvg {\\n fill: #C8C8C8;\\n}\\nsvg:hover {\\n fill: #6F7273;\\n}\\nsvg:active {\\n fill: #1E88C3;\\n}\\n/* END SVG HOVER STATES */\\n.usermapping-editor {\\n float: left;\\n margin: 20px 30px;\\n}\\n.usermapping-editor .topMessage {\\n border: 1px solid #C8C8C8;\\n padding: 10px 20px;\\n background-color: #E5E7E6;\\n margin: 0 0 20px 0;\\n}\\n.usermapping-editor .dnn-ui-common-input-group {\\n padding: 0 0 15px 0;\\n}\\n.usermapping-editor .dnn-ui-common-input-group label {\\n font-weight: bolder;\\n float: left;\\n}\\n.usermapping-editor .dnn-ui-common-input-group .dnn-label {\\n margin: 8px 0;\\n}\\n.usermapping-editor .dnn-ui-common-input-group .dnn-dropdown,\\n.usermapping-editor .dnn-ui-common-input-group .dnn-dropdown-with-error {\\n width: 100% !important;\\n box-sizing: border-box;\\n}\\n.usermapping-editor .dnn-ui-common-input-group .dnn-single-line-input-with-error {\\n width: 100% !important;\\n}\\n.usermapping-editor .dnn-grid-system .left-column {\\n padding-right: 30px;\\n border-right: 1px solid #C8C8C8;\\n}\\n.usermapping-editor .dnn-grid-system .right-column {\\n padding-left: 30px;\\n border-left: 0 !important;\\n}\\n.usermapping-editor .editor-buttons-box {\\n width: 100%;\\n text-align: center;\\n float: left;\\n margin: 30px 0 0 0;\\n}\\n.usermapping-editor .editor-buttons-box .dnn-ui-common-button {\\n margin: 5px;\\n}\\n.usermapping-editor .editor-buttons-box .edit-icon {\\n margin: 0px 10px 20px 10px;\\n float: right;\\n}\\n.usermapping-editor .editor-buttons-box .edit-icon svg {\\n width: 16px;\\n float: left;\\n height: 16px;\\n}\\n\", \"\"]);\n\n","\nvar content = require(\"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/less-loader/dist/cjs.js!./style.less\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/less-loader/dist/cjs.js!./style.less\", function() {\n\t\tvar newContent = require(\"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/less-loader/dist/cjs.js!./style.less\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","exports = module.exports = require(\"../../../node_modules/css-loader/dist/runtime/api.js\")(false);\n// Module\nexports.push([module.id, \"/* START EVOQ COLOR PALETTE */\\n/* END EVOQ COLOR PALETTE */\\n/* START ATTENTION COLORS */\\n/* END ATTENTION COLORS */\\n/* SVG HOVER STATES */\\nsvg {\\n fill: #C8C8C8;\\n}\\nsvg:hover {\\n fill: #6F7273;\\n}\\nsvg:active {\\n fill: #1E88C3;\\n}\\n/* END SVG HOVER STATES */\\n.dnn-azuread-b2c-userMappingSettings .items {\\n margin: 30px 30px;\\n width: 738px;\\n float: left;\\n box-sizing: border-box;\\n}\\n.dnn-azuread-b2c-userMappingSettings .items .items-grid {\\n border: solid 1px #C8C8C8;\\n float: left;\\n width: 100%;\\n}\\n.dnn-azuread-b2c-userMappingSettings .items .header-row {\\n border-bottom: 1px solid #C8C8C8;\\n padding: 10px 0 10px 0;\\n width: 100%;\\n float: left;\\n overflow: hidden;\\n}\\n.dnn-azuread-b2c-userMappingSettings .items .header-DnnProperty {\\n width: 50%;\\n float: left;\\n font-weight: bolder;\\n padding-left: 15px;\\n}\\n.dnn-azuread-b2c-userMappingSettings .items .header-B2cProperty {\\n width: 20%;\\n float: left;\\n font-weight: bolder;\\n}\\n.dnn-azuread-b2c-userMappingSettings .items .collapsible-component .collapsible-header {\\n text-align: right;\\n text-transform: none;\\n padding-right: 40px;\\n}\\n.dnn-azuread-b2c-userMappingSettings .items .collapsible-component .collapsible-header .collapse-icon {\\n display: none;\\n}\\n.dnn-azuread-b2c-userMappingSettings .items .collapsible-component .collapsible-header .collapse-icon.collapsed {\\n display: none;\\n}\\n.dnn-azuread-b2c-userMappingSettings .items .AddItemRow {\\n text-align: right;\\n width: 100%;\\n float: right;\\n margin: 0 0 15px 0;\\n font-weight: bolder;\\n border-bottom: 1px solid #C8C8C8;\\n overflow: hidden;\\n height: 25px;\\n}\\n.dnn-azuread-b2c-userMappingSettings .items .AddItemRow .sectionTitle {\\n font-weight: bolder;\\n float: left;\\n}\\n.dnn-azuread-b2c-userMappingSettings .items .AddItemRow .AddItemBox {\\n width: auto;\\n float: right;\\n color: #4B4E4F;\\n cursor: pointer;\\n}\\n.dnn-azuread-b2c-userMappingSettings .items .AddItemRow .AddItemBox .add-icon {\\n margin-left: 20px;\\n margin-right: 5px;\\n float: left;\\n cursor: pointer;\\n}\\n.dnn-azuread-b2c-userMappingSettings .items .AddItemRow .AddItemBox .add-icon svg {\\n width: 16px;\\n float: left;\\n height: 16px;\\n fill: #4B4E4F;\\n}\\n.dnn-azuread-b2c-userMappingSettings .items .AddItemRow .AddItemBox-active {\\n width: auto;\\n float: right;\\n color: #1E88C3;\\n}\\n.dnn-azuread-b2c-userMappingSettings .items .AddItemRow .AddItemBox-active .add-icon {\\n margin-left: 20px;\\n margin-right: 5px;\\n float: left;\\n}\\n.dnn-azuread-b2c-userMappingSettings .items .AddItemRow .AddItemBox-active .add-icon svg {\\n width: 16px;\\n float: left;\\n height: 16px;\\n fill: #1E88C3;\\n}\\n.dnn-azuread-b2c-userMappingSettings .items .role-item {\\n color: #4B4E4F;\\n}\\n\", \"\"]);\n\n","\nvar content = require(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/less-loader/dist/cjs.js!./style.less\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/less-loader/dist/cjs.js!./style.less\", function() {\n\t\tvar newContent = require(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/less-loader/dist/cjs.js!./style.less\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","exports = module.exports = require(\"../../../../node_modules/css-loader/dist/runtime/api.js\")(false);\n// Module\nexports.push([module.id, \"/* START EVOQ COLOR PALETTE */\\n/* END EVOQ COLOR PALETTE */\\n/* START ATTENTION COLORS */\\n/* END ATTENTION COLORS */\\n/* SVG HOVER STATES */\\nsvg {\\n fill: #C8C8C8;\\n}\\nsvg:hover {\\n fill: #6F7273;\\n}\\nsvg:active {\\n fill: #1E88C3;\\n}\\n/* END SVG HOVER STATES */\\n.collapsible-component-item {\\n display: block;\\n float: left;\\n width: 100%;\\n cursor: auto;\\n}\\n.collapsible-component-item:not(:last-child) {\\n border-bottom: 1px solid #C8C8C8;\\n}\\n.collapsible-component-item div.collapsible-item {\\n width: 100%;\\n float: left;\\n position: relative;\\n padding: 15px 0 10px 0;\\n box-sizing: border-box;\\n cursor: auto;\\n}\\n.collapsible-component-item div.collapsible-item .row {\\n float: left;\\n width: 100%;\\n}\\n.collapsible-component-item div.collapsible-item .row .item-row-dnnrole {\\n width: 50%;\\n float: left;\\n padding-left: 15px;\\n word-break: break-all;\\n}\\n.collapsible-component-item div.collapsible-item .row .item-row-b2crole {\\n width: 35%;\\n float: left;\\n white-space: nowrap;\\n overflow: hidden;\\n text-overflow: ellipsis;\\n}\\n.collapsible-component-item div.collapsible-item .row .item-row-primary {\\n width: 10%;\\n float: left;\\n text-align: center;\\n}\\n.collapsible-component-item div.collapsible-item .row .item-row-primary .checkMarkIcon {\\n width: 16px;\\n height: 16px;\\n margin-left: auto;\\n margin-right: auto;\\n}\\n.collapsible-component-item div.collapsible-item .row .item-row-primary .checkMarkIcon > svg {\\n fill: #4B4E4F;\\n}\\n.collapsible-component-item div.collapsible-item .row .item-row-actionButtons {\\n width: 8%;\\n margin-right: 15px;\\n float: right;\\n}\\n.collapsible-component-item div.collapsible-item .row .item-row-actionButtons:not(:last-child) {\\n float: left;\\n margin-right: 0px;\\n}\\n.collapsible-component-item div.collapsible-item .row .item-row-actionButtons .delete-icon,\\n.collapsible-component-item div.collapsible-item .row .item-row-actionButtons .edit-icon {\\n margin-left: 5px;\\n float: right;\\n display: block;\\n cursor: pointer;\\n}\\n.collapsible-component-item div.collapsible-item .row .item-row-actionButtons .delete-icon > svg,\\n.collapsible-component-item div.collapsible-item .row .item-row-actionButtons .edit-icon > svg {\\n width: 16px;\\n float: left;\\n height: 16px;\\n fill: #C8C8C8;\\n}\\n.collapsible-component-item div.collapsible-item .row .item-row-actionButtons .delete-icon > svg:hover,\\n.collapsible-component-item div.collapsible-item .row .item-row-actionButtons .edit-icon > svg:hover {\\n fill: #4B4E4F;\\n}\\n.collapsible-component-item div.collapsible-item .row .item-row-actionButtons .delete-icon-hidden {\\n display: none;\\n}\\n.collapsible-component-item div.collapsible-item .row .item-row-actionButtons .edit-icon-active > svg {\\n width: 16px;\\n float: right;\\n height: 16px;\\n fill: #1E88C3;\\n}\\n.collapsible-component-item div.collapsible-item .row .item-row-wrapper {\\n padding: 0 5px 0 5px;\\n}\\n\", \"\"]);\n\n","\nvar content = require(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/less-loader/dist/cjs.js!./style.less\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/less-loader/dist/cjs.js!./style.less\", function() {\n\t\tvar newContent = require(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/less-loader/dist/cjs.js!./style.less\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","exports = module.exports = require(\"../../../../node_modules/css-loader/dist/runtime/api.js\")(false);\n// Module\nexports.push([module.id, \"/* START EVOQ COLOR PALETTE */\\n/* END EVOQ COLOR PALETTE */\\n/* START ATTENTION COLORS */\\n/* END ATTENTION COLORS */\\n/* SVG HOVER STATES */\\nsvg {\\n fill: #C8C8C8;\\n}\\nsvg:hover {\\n fill: #6F7273;\\n}\\nsvg:active {\\n fill: #1E88C3;\\n}\\n/* END SVG HOVER STATES */\\n.rolemapping-editor {\\n float: left;\\n margin: 20px 30px;\\n}\\n.rolemapping-editor .topMessage {\\n border: 1px solid #C8C8C8;\\n padding: 10px 20px;\\n background-color: #E5E7E6;\\n margin: 0 0 20px 0;\\n}\\n.rolemapping-editor .dnn-ui-common-input-group {\\n padding: 0 0 15px 0;\\n}\\n.rolemapping-editor .dnn-ui-common-input-group label {\\n font-weight: bolder;\\n float: left;\\n}\\n.rolemapping-editor .dnn-ui-common-input-group .dnn-label {\\n margin: 8px 0;\\n}\\n.rolemapping-editor .dnn-ui-common-input-group .dnn-dropdown,\\n.rolemapping-editor .dnn-ui-common-input-group .dnn-dropdown-with-error {\\n width: 100% !important;\\n box-sizing: border-box;\\n}\\n.rolemapping-editor .dnn-ui-common-input-group .dnn-single-line-input-with-error {\\n width: 100% !important;\\n}\\n.rolemapping-editor .dnn-grid-system .left-column {\\n padding-right: 30px;\\n border-right: 1px solid #C8C8C8;\\n}\\n.rolemapping-editor .dnn-grid-system .right-column {\\n padding-left: 30px;\\n border-left: 0 !important;\\n}\\n.rolemapping-editor .editor-buttons-box {\\n width: 100%;\\n text-align: center;\\n float: left;\\n margin: 30px 0 0 0;\\n}\\n.rolemapping-editor .editor-buttons-box .dnn-ui-common-button {\\n margin: 5px;\\n}\\n.rolemapping-editor .editor-buttons-box .edit-icon {\\n margin: 0px 10px 20px 10px;\\n float: right;\\n}\\n.rolemapping-editor .editor-buttons-box .edit-icon svg {\\n width: 16px;\\n float: left;\\n height: 16px;\\n}\\n\", \"\"]);\n\n","\nvar content = require(\"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/less-loader/dist/cjs.js!./style.less\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/less-loader/dist/cjs.js!./style.less\", function() {\n\t\tvar newContent = require(\"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/less-loader/dist/cjs.js!./style.less\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","exports = module.exports = require(\"../../../node_modules/css-loader/dist/runtime/api.js\")(false);\n// Module\nexports.push([module.id, \"/* START EVOQ COLOR PALETTE */\\n/* END EVOQ COLOR PALETTE */\\n/* START ATTENTION COLORS */\\n/* END ATTENTION COLORS */\\n/* SVG HOVER STATES */\\nsvg {\\n fill: #C8C8C8;\\n}\\nsvg:hover {\\n fill: #6F7273;\\n}\\nsvg:active {\\n fill: #1E88C3;\\n}\\n/* END SVG HOVER STATES */\\n.dnn-azuread-b2c-roleMappingSettings .items {\\n margin: 30px 30px;\\n width: 738px;\\n float: left;\\n box-sizing: border-box;\\n}\\n.dnn-azuread-b2c-roleMappingSettings .items .items-grid {\\n border: solid 1px #C8C8C8;\\n float: left;\\n width: 100%;\\n}\\n.dnn-azuread-b2c-roleMappingSettings .items .header-row {\\n border-bottom: 1px solid #C8C8C8;\\n padding: 10px 0 10px 0;\\n width: 100%;\\n float: left;\\n overflow: hidden;\\n}\\n.dnn-azuread-b2c-roleMappingSettings .items .header-DnnRole {\\n width: 50%;\\n float: left;\\n font-weight: bolder;\\n padding-left: 15px;\\n}\\n.dnn-azuread-b2c-roleMappingSettings .items .header-B2cRole {\\n width: 20%;\\n float: left;\\n font-weight: bolder;\\n}\\n.dnn-azuread-b2c-roleMappingSettings .items .collapsible-component .collapsible-header {\\n text-align: right;\\n text-transform: none;\\n padding-right: 40px;\\n}\\n.dnn-azuread-b2c-roleMappingSettings .items .collapsible-component .collapsible-header .collapse-icon {\\n display: none;\\n}\\n.dnn-azuread-b2c-roleMappingSettings .items .collapsible-component .collapsible-header .collapse-icon.collapsed {\\n display: none;\\n}\\n.dnn-azuread-b2c-roleMappingSettings .items .AddItemRow {\\n text-align: right;\\n width: 100%;\\n float: right;\\n margin: 0 0 15px 0;\\n font-weight: bolder;\\n border-bottom: 1px solid #C8C8C8;\\n overflow: hidden;\\n height: 25px;\\n}\\n.dnn-azuread-b2c-roleMappingSettings .items .AddItemRow .sectionTitle {\\n font-weight: bolder;\\n float: left;\\n}\\n.dnn-azuread-b2c-roleMappingSettings .items .AddItemRow .AddItemBox {\\n width: auto;\\n float: right;\\n color: #4B4E4F;\\n cursor: pointer;\\n}\\n.dnn-azuread-b2c-roleMappingSettings .items .AddItemRow .AddItemBox .add-icon {\\n margin-left: 20px;\\n margin-right: 5px;\\n float: left;\\n cursor: pointer;\\n}\\n.dnn-azuread-b2c-roleMappingSettings .items .AddItemRow .AddItemBox .add-icon svg {\\n width: 16px;\\n float: left;\\n height: 16px;\\n fill: #4B4E4F;\\n}\\n.dnn-azuread-b2c-roleMappingSettings .items .AddItemRow .AddItemBox-active {\\n width: auto;\\n float: right;\\n color: #1E88C3;\\n}\\n.dnn-azuread-b2c-roleMappingSettings .items .AddItemRow .AddItemBox-active .add-icon {\\n margin-left: 20px;\\n margin-right: 5px;\\n float: left;\\n}\\n.dnn-azuread-b2c-roleMappingSettings .items .AddItemRow .AddItemBox-active .add-icon svg {\\n width: 16px;\\n float: left;\\n height: 16px;\\n fill: #1E88C3;\\n}\\n.dnn-azuread-b2c-roleMappingSettings .items .role-item {\\n color: #4B4E4F;\\n}\\n\", \"\"]);\n\n","\nvar content = require(\"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/less-loader/dist/cjs.js!./style.less\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/less-loader/dist/cjs.js!./style.less\", function() {\n\t\tvar newContent = require(\"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/less-loader/dist/cjs.js!./style.less\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","exports = module.exports = require(\"../../node_modules/css-loader/dist/runtime/api.js\")(false);\n// Module\nexports.push([module.id, \"#azureADB2C-container .dnn-persona-bar-page-body .persona-bar-page-body .dnn-switch-container .dnn-switch.place-left {\\n margin-left: 0px;\\n}\\n#azureADB2C-container .dnn-persona-bar-page-body .persona-bar-page-body button.dnn-ui-common-button[role=primary] {\\n margin-left: 10px;\\n}\\n\", \"\"]);\n\n","import util from \"../utils\";\r\nclass ApplicationService {\r\n getServiceFramework(controller) {\r\n let sf = util.utilities.sf;\r\n sf.controller = controller;\r\n return sf;\r\n }\r\n\r\n getSettings(callback) {\r\n const sf = this.getServiceFramework(\"AzureADB2C\"); \r\n sf.get(\"GetSettings\", {}, callback);\r\n }\r\n\r\n updateGeneralSettings(payload, callback, failureCallback) {\r\n const sf = this.getServiceFramework(\"AzureADB2C\"); \r\n sf.post(\"UpdateGeneralSettings\", payload, callback, failureCallback);\r\n } \r\n\r\n updateAdvancedSettings(payload, callback, failureCallback) {\r\n const sf = this.getServiceFramework(\"AzureADB2C\"); \r\n sf.post(\"UpdateAdvancedSettings\", payload, callback, failureCallback);\r\n }\r\n\r\n updateProfileMapping(payload, callback, failureCallback) {\r\n const sf = this.getServiceFramework(\"AzureADB2C\"); \r\n sf.post(\"UpdateProfileMapping\", payload, callback, failureCallback);\r\n }\r\n\r\n deleteProfileMapping(payload, callback, failureCallback) {\r\n const sf = this.getServiceFramework(\"AzureADB2C\"); \r\n sf.post(\"DeleteProfileMapping\", payload, callback, failureCallback);\r\n }\r\n getProfileSettings(callback) {\r\n const sf = this.getServiceFramework(\"AzureADB2C\"); \r\n sf.get(\"GetProfileSettings\", {}, callback);\r\n }\r\n\r\n getProfileProperties(callback) {\r\n const sf = this.getServiceFramework(\"AzureADB2C\"); \r\n sf.get(\"GetProfileProperties\", {}, callback);\r\n }\r\n\r\n getRoleMappingSettings(callback) {\r\n const sf = this.getServiceFramework(\"AzureADB2C\"); \r\n sf.get(\"GetRoleMappingSettings\", {}, callback);\r\n }\r\n\r\n getAvailableRoles(callback) {\r\n const sf = this.getServiceFramework(\"AzureADB2C\"); \r\n sf.get(\"GetAvailableRoles\", {}, callback);\r\n }\r\n\r\n updateRoleMapping(payload, callback, failureCallback) {\r\n const sf = this.getServiceFramework(\"AzureADB2C\"); \r\n sf.post(\"UpdateRoleMapping\", payload, callback, failureCallback);\r\n }\r\n\r\n deleteRoleMapping(payload, callback, failureCallback) {\r\n const sf = this.getServiceFramework(\"AzureADB2C\"); \r\n sf.post(\"DeleteRoleMapping\", payload, callback, failureCallback);\r\n }\r\n\r\n getUserMappingSettings(callback) {\r\n const sf = this.getServiceFramework(\"AzureADB2C\"); \r\n sf.get(\"GetUserMappingSettings\", {}, callback);\r\n }\r\n\r\n updateUserMapping(payload, callback, failureCallback) {\r\n const sf = this.getServiceFramework(\"AzureADB2C\"); \r\n sf.post(\"UpdateUserMapping\", payload, callback, failureCallback);\r\n }\r\n}\r\nconst applicationService = new ApplicationService();\r\nexport default applicationService;","import { settings as ActionTypes } from \"../constants/actionTypes\";\r\nimport ApplicationService from \"../services/applicationService\";\r\n\r\nconst settingsActions = {\r\n switchTab(index, callback) {\r\n return (dispatch) => {\r\n dispatch({\r\n type: ActionTypes.SWITCH_TAB,\r\n payload: index\r\n });\r\n if (callback) {\r\n callback();\r\n }\r\n };\r\n },\r\n switchMappingSubTab(index, callback) {\r\n return (dispatch) => {\r\n dispatch({\r\n type: ActionTypes.SWITCH_MAPPING_SUBTAB,\r\n payload: index\r\n });\r\n if (callback) {\r\n callback();\r\n }\r\n };\r\n }, \r\n getSettings(callback) {\r\n return (dispatch) => {\r\n ApplicationService.getSettings(data => {\r\n dispatch({\r\n type: ActionTypes.RETRIEVED_SETTINGS,\r\n data: {\r\n enabled: data.enabled,\r\n useGlobalSettings: data.useGlobalSettings,\r\n autoRedirect: data.autoRedirect,\r\n autoAuthorize: data.autoAuthorize,\r\n apiKey: data.apiKey,\r\n apiSecret: data.apiSecret,\r\n redirectUri: data.redirectUri,\r\n onErrorUri: data.onErrorUri,\r\n tenantName: data.tenantName,\r\n tenantId: data.tenantId,\r\n signUpPolicy: data.signUpPolicy,\r\n profilePolicy: data.profilePolicy,\r\n passwordResetPolicy: data.passwordResetPolicy,\r\n aadAppClientId: data.aadAppClientId, \r\n aadAppSecret: data.aadAppSecret,\r\n jwtAudiences: data.jwtAudiences,\r\n roleSyncEnabled: data.roleSyncEnabled,\r\n profileSyncEnabled: data.profileSyncEnabled,\r\n jwtAuthEnabled: data.jwtAuthEnabled,\r\n apiResource: data.apiResource,\r\n scopes: data.scopes,\r\n usernamePrefixEnabled: data.usernamePrefixEnabled,\r\n groupNamePrefixEnabled: data.groupNamePrefixEnabled,\r\n clientModified: false,\r\n ropcPolicy: data.ropcPolicy,\r\n impersonatePolicy: data.impersonatePolicy\r\n }\r\n });\r\n if (callback) {\r\n callback(data);\r\n }\r\n });\r\n };\r\n },\r\n updateGeneralSettings(payload, callback, failureCallback) {\r\n return (dispatch) => {\r\n ApplicationService.updateGeneralSettings(payload, data => {\r\n dispatch({\r\n type: ActionTypes.UPDATED_SETTINGS,\r\n data: {\r\n clientModified: false\r\n }\r\n });\r\n if (callback) {\r\n callback(data);\r\n }\r\n }, data => {\r\n if (failureCallback) {\r\n failureCallback(data);\r\n }\r\n });\r\n };\r\n },\r\n updateAdvancedSettings(payload, callback, failureCallback) {\r\n return (dispatch) => {\r\n ApplicationService.updateAdvancedSettings(payload, data => {\r\n dispatch({\r\n type: ActionTypes.UPDATED_SETTINGS,\r\n data: {\r\n clientModified: false\r\n }\r\n });\r\n if (callback) {\r\n callback(data);\r\n }\r\n }, data => {\r\n if (failureCallback) {\r\n failureCallback(data);\r\n }\r\n });\r\n };\r\n }, \r\n settingsClientModified(settings) {\r\n return (dispatch) => {\r\n dispatch({\r\n type: ActionTypes.SETTINGS_CLIENT_MODIFIED,\r\n data: {\r\n enabled: settings.enabled,\r\n useGlobalSettings: settings.useGlobalSettings,\r\n autoRedirect: settings.autoRedirect,\r\n autoAuthorize: settings.autoAuthorize,\r\n apiKey: settings.apiKey,\r\n apiSecret: settings.apiSecret,\r\n redirectUri: settings.redirectUri,\r\n onErrorUri: settings.onErrorUri,\r\n tenantName: settings.tenantName,\r\n tenantId: settings.tenantId,\r\n signUpPolicy: settings.signUpPolicy,\r\n profilePolicy: settings.profilePolicy,\r\n passwordResetPolicy: settings.passwordResetPolicy,\r\n aadAppClientId: settings.aadAppClientId,\r\n aadAppSecret: settings.aadAppSecret,\r\n jwtAudiences: settings.jwtAudiences,\r\n roleSyncEnabled: settings.roleSyncEnabled,\r\n profileSyncEnabled: settings.profileSyncEnabled,\r\n jwtAuthEnabled: settings.jwtAuthEnabled,\r\n apiResource: settings.apiResource,\r\n scopes: settings.scopes,\r\n usernamePrefixEnabled: settings.usernamePrefixEnabled,\r\n groupNamePrefixEnabled: settings.groupNamePrefixEnabled,\r\n clientModified: true,\r\n ropcPolicy: settings.ropcPolicy,\r\n impersonatePolicy: settings.impersonatePolicy\r\n }\r\n });\r\n };\r\n },\r\n getProfileSettings(callback) {\r\n return (dispatch) => {\r\n ApplicationService.getProfileSettings(data => {\r\n dispatch({\r\n type: ActionTypes.RETRIEVED_PROFILESETTINGS,\r\n data: {\r\n profileMapping: data\r\n }\r\n });\r\n if (callback) {\r\n callback(data);\r\n }\r\n });\r\n };\r\n },\r\n getProfileProperties(callback) {\r\n return (dispatch) => {\r\n ApplicationService.getProfileProperties(data => {\r\n dispatch({\r\n type: ActionTypes.RETRIEVED_PROFILEPROPERTIES,\r\n data: {\r\n profileProperties: data\r\n }\r\n });\r\n if (callback) {\r\n callback(data);\r\n }\r\n });\r\n };\r\n },\r\n cancelProfileMappingClientModified() {\r\n return (dispatch) => {\r\n dispatch({\r\n type: ActionTypes.CANCELLED_PROFILEMAPPING_CLIENT_MODIFIED,\r\n data: {\r\n profileMappingClientModified: false\r\n }\r\n });\r\n };\r\n },\r\n profileMappingClientModified(parameter) {\r\n return (dispatch) => {\r\n dispatch({\r\n type: ActionTypes.PROFILEMAPPINGS_CLIENT_MODIFIED,\r\n data: {\r\n profileMappingDetail: parameter,\r\n profileMappingClientModified: true\r\n }\r\n });\r\n };\r\n },\r\n updateProfileMapping(payload, callback, failureCallback) {\r\n return () => {\r\n ApplicationService.updateProfileMapping(payload, data => {\r\n if (callback) {\r\n callback(data);\r\n }\r\n }, data => {\r\n if (failureCallback) {\r\n failureCallback(data);\r\n }\r\n });\r\n };\r\n },\r\n deleteProfileMapping(payload, callback, failureCallback) {\r\n return () => {\r\n ApplicationService.deleteProfileMapping(payload, data => {\r\n if (callback) {\r\n callback(data);\r\n }\r\n }, data => {\r\n if (failureCallback) {\r\n failureCallback(data);\r\n }\r\n });\r\n };\r\n },\r\n getRoleSettings(callback) {\r\n return (dispatch) => {\r\n ApplicationService.getRoleMappingSettings(data => {\r\n dispatch({\r\n type: ActionTypes.RETRIEVED_ROLEMAPPINGSETTINGS,\r\n data: {\r\n roleMapping: data\r\n }\r\n });\r\n if (callback) {\r\n callback(data);\r\n }\r\n });\r\n };\r\n },\r\n getAvailableRoles(callback) {\r\n return (dispatch) => {\r\n ApplicationService.getAvailableRoles(data => {\r\n dispatch({\r\n type: ActionTypes.RETRIEVED_AVAILABLEROLES,\r\n data: {\r\n roles: data\r\n }\r\n });\r\n if (callback) {\r\n callback(data);\r\n }\r\n });\r\n };\r\n },\r\n roleMappingClientModified(parameter) {\r\n return (dispatch) => {\r\n dispatch({\r\n type: ActionTypes.ROLEMAPPINGS_CLIENT_MODIFIED,\r\n data: {\r\n roleMappingDetail: parameter,\r\n roleMappingClientModified: true\r\n }\r\n });\r\n };\r\n },\r\n updateRoleMapping(payload, callback, failureCallback) {\r\n return () => {\r\n ApplicationService.updateRoleMapping(payload, data => {\r\n if (callback) {\r\n callback(data);\r\n }\r\n }, data => {\r\n if (failureCallback) {\r\n failureCallback(data);\r\n }\r\n });\r\n };\r\n },\r\n deleteRoleMapping(payload, callback, failureCallback) {\r\n return () => {\r\n ApplicationService.deleteRoleMapping(payload, data => {\r\n if (callback) {\r\n callback(data);\r\n }\r\n }, data => {\r\n if (failureCallback) {\r\n failureCallback(data);\r\n }\r\n });\r\n };\r\n },\r\n getUserMappingSettings(callback) {\r\n return (dispatch) => {\r\n ApplicationService.getUserMappingSettings(data => {\r\n dispatch({\r\n type: ActionTypes.RETRIEVED_USERMAPPINGSETTINGS,\r\n data: {\r\n userMapping: data\r\n }\r\n });\r\n if (callback) {\r\n callback(data);\r\n }\r\n });\r\n };\r\n },\r\n updateUserMapping(payload, callback, failureCallback) {\r\n return () => {\r\n ApplicationService.updateUserMapping(payload, data => {\r\n if (callback) {\r\n callback(data);\r\n }\r\n }, data => {\r\n if (failureCallback) {\r\n failureCallback(data);\r\n }\r\n });\r\n };\r\n },\r\n userMappingClientModified(parameter) {\r\n return (dispatch) => {\r\n dispatch({\r\n type: ActionTypes.USERMAPPINGS_CLIENT_MODIFIED,\r\n data: {\r\n userMappingDetail: parameter,\r\n userMappingClientModified: true\r\n }\r\n });\r\n };\r\n },\r\n};\r\n\r\nexport default settingsActions;","import util from \"../utils\";\r\n\r\nconst resx = {\r\n get(key) {\r\n let moduleName = util.moduleName;\r\n return util.utilities.getResx(moduleName, key);\r\n }\r\n};\r\nexport default resx;","import React, {Component} from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport { connect } from \"react-redux\";\r\nimport { GridSystem, GridCell, Switch, SingleLineInputWithError, Button, InputGroup } from \"@dnnsoftware/dnn-react-common\";\r\nimport SettingsActions from \"../../actions/settings\";\r\nimport resx from \"../../resources\";\r\nimport \"./generalSettings.less\";\r\nimport utils from \"../../utils\";\r\n\r\nclass GeneralSettings extends Component {\r\n\r\n constructor() {\r\n super();\r\n\r\n this.state = {\r\n error: {\r\n appId: false,\r\n appSecret: false,\r\n tenantName: false,\r\n tenantId: false\r\n }\r\n };\r\n }\r\n UNSAFE_componentWillMount() {\r\n const {props} = this;\r\n\r\n props.dispatch(SettingsActions.getSettings());\r\n }\r\n\r\n UNSAFE_componentWillReceiveProps(nextProps) {\r\n const {state} = this;\r\n\r\n state.error[\"appId\"] = (nextProps.apiKey === \"\");\r\n state.error[\"appSecret\"] = (nextProps.apiSecret === \"\");\r\n state.error[\"tenantName\"] = (nextProps.tenantName === \"\");\r\n state.error[\"tenantId\"] = (nextProps.tenantId === \"\");\r\n state.error[\"signUpPolicy\"] = (nextProps.signUpPolicy === \"\");\r\n state.error[\"profilePolicy\"] = (nextProps.profilePolicy === \"\");\r\n state.error[\"passwordResetPolicy\"] = (nextProps.passwordResetPolicy === \"\");\r\n } \r\n\r\n onSettingChange(key, event) {\r\n let {props} = this;\r\n\r\n props.dispatch(SettingsActions.settingsClientModified({\r\n enabled: (key === \"AADB2CProviderEnabled\") ? !props.enabled : props.enabled,\r\n useGlobalSettings: (key === \"UseGlobalSettings\") ? !props.useGlobalSettings : props.useGlobalSettings,\r\n autoRedirect: (key === \"AutoRedirect\") ? !props.autoRedirect : props.autoRedirect,\r\n autoAuthorize: (key === \"AutoAuthorize\") ? !props.autoAuthorize : props.autoAuthorize,\r\n apiKey: (key === \"AppId\") ? event.target.value : props.apiKey,\r\n apiSecret: (key === \"AppSecret\") ? event.target.value : props.apiSecret,\r\n redirectUri: (key === \"RedirectUri\") ? event.target.value : props.redirectUri,\r\n onErrorUri: (key === \"OnErrorUri\") ? event.target.value : props.onErrorUri,\r\n tenantName: (key === \"TenantName\") ? event.target.value : props.tenantName,\r\n tenantId: (key === \"TenantId\") ? event.target.value : props.tenantId,\r\n signUpPolicy: (key === \"SignUpPolicy\") ? event.target.value : props.signUpPolicy,\r\n profilePolicy: (key === \"ProfilePolicy\") ? event.target.value : props.profilePolicy,\r\n passwordResetPolicy: (key === \"PasswordResetPolicy\") ? event.target.value : props.passwordResetPolicy,\r\n ropcPolicy: (key === \"RopcPolicy\") ? event.target.value : props.ropcPolicy,\r\n impersonatePolicy: (key === \"ImpersonatePolicy\") ? event.target.value : props.impersonatePolicy,\r\n }));\r\n }\r\n\r\n onClickCancel() {\r\n utils.utilities.closePersonaBar();\r\n }\r\n\r\n onClickSave() {\r\n event.preventDefault();\r\n let {props} = this;\r\n\r\n props.dispatch(SettingsActions.updateGeneralSettings({\r\n enabled: props.enabled,\r\n useGlobalSettings: props.useGlobalSettings,\r\n autoRedirect: props.autoRedirect,\r\n autoAuthorize: props.autoAuthorize,\r\n apiKey: props.apiKey,\r\n apiSecret: props.apiSecret,\r\n redirectUri: props.redirectUri,\r\n onErrorUri: props.onErrorUri,\r\n tenantName: props.tenantName,\r\n tenantId: props.tenantId,\r\n signUpPolicy: props.signUpPolicy,\r\n profilePolicy: props.profilePolicy,\r\n passwordResetPolicy: props.passwordResetPolicy,\r\n ropcPolicy: props.ropcPolicy,\r\n impersonatePolicy: props.impersonatePolicy\r\n }, () => {\r\n utils.utilities.notify(resx.get(\"SettingsUpdateSuccess\"));\r\n this.setState({\r\n clientModified: false\r\n }); \r\n }, () => {\r\n utils.utilities.notifyError(resx.get(\"SettingsError\"));\r\n }));\r\n }\r\n\r\n render() {\r\n return (\r\n
\r\n \r\n

{resx.get(\"lblTabDescription\")}

\r\n \r\n \r\n
\r\n \r\n
\r\n \r\n \r\n
\r\n \r\n \r\n

{resx.get(\"lblDirectory\")}

\r\n \r\n \r\n {/*

{resx.get(\"lblProviderCredentials\")}

*/}\r\n \r\n \r\n \r\n \r\n
\r\n \r\n

{resx.get(\"lblPolicies\")}

\r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n \r\n {resx.get(\"Cancel\")}\r\n \r\n \r\n {resx.get(\"SaveSettings\")}\r\n \r\n
\r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nGeneralSettings.propTypes = {\r\n dispatch: PropTypes.func.isRequired,\r\n enabled: PropTypes.bool,\r\n useGlobalSettings: PropTypes.bool,\r\n autoRedirect: PropTypes.bool,\r\n autoAuthorize: PropTypes.bool,\r\n apiKey: PropTypes.string,\r\n apiSecret: PropTypes.string,\r\n redirectUri: PropTypes.string,\r\n onErrorUri: PropTypes.string, \r\n tenantName: PropTypes.string,\r\n tenantId: PropTypes.string,\r\n signUpPolicy: PropTypes.string,\r\n profilePolicy: PropTypes.string,\r\n passwordResetPolicy: PropTypes.string,\r\n ropcPolicy: PropTypes.string,\r\n impersonatePolicy: PropTypes.string\r\n};\r\n\r\n\r\nfunction mapStateToProps(state) {\r\n return {\r\n enabled: state.settings.enabled,\r\n useGlobalSettings: state.settings.useGlobalSettings,\r\n autoRedirect: state.settings.autoRedirect,\r\n autoAuthorize: state.settings.autoAuthorize,\r\n apiKey: state.settings.apiKey,\r\n apiSecret: state.settings.apiSecret,\r\n redirectUri: state.settings.redirectUri,\r\n onErrorUri: state.settings.onErrorUri,\r\n tenantName: state.settings.tenantName,\r\n tenantId: state.settings.tenantId,\r\n signUpPolicy: state.settings.signUpPolicy,\r\n profilePolicy: state.settings.profilePolicy,\r\n passwordResetPolicy: state.settings.passwordResetPolicy,\r\n ropcPolicy: state.settings.ropcPolicy,\r\n impersonatePolicy: state.settings.impersonatePolicy\r\n };\r\n}\r\n\r\nexport default connect(mapStateToProps)(GeneralSettings);","import GeneralSettings from \"./generalSettings\";\r\n\r\nexport default GeneralSettings;","import React, {Component} from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport { connect } from \"react-redux\";\r\nimport { GridSystem, GridCell, Switch, SingleLineInputWithError, Button, InputGroup} from \"@dnnsoftware/dnn-react-common\";\r\nimport SettingsActions from \"../../actions/settings\";\r\nimport resx from \"../../resources\";\r\nimport \"./syncSettings.less\";\r\nimport utils from \"../../utils\";\r\n\r\n/*eslint-disable quotes*/\r\nconst warningIcon = require(`!raw-loader!./../svg/error.svg`).default;\r\n\r\nclass SyncSettings extends Component {\r\n\r\n constructor() {\r\n super();\r\n\r\n this.state = {\r\n error: {\r\n aadAppClientId: false,\r\n aadAppSecret: false\r\n }\r\n };\r\n }\r\n\r\n UNSAFE_componentWillMount() {\r\n const {props} = this;\r\n\r\n props.dispatch(SettingsActions.getSettings());\r\n }\r\n\r\n UNSAFE_componentWillReceiveProps(nextProps) {\r\n const {state} = this;\r\n\r\n state.error[\"aadAppClientId\"] = ((nextProps.roleSyncEnabled || nextProps.profileSyncEnabled) && nextProps.aadAppClientId === \"\");\r\n state.error[\"aadAppSecret\"] = ((nextProps.roleSyncEnabled || nextProps.profileSyncEnabled) && nextProps.aadAppSecret === \"\");\r\n } \r\n\r\n onSettingChange(key, event) {\r\n let {props} = this;\r\n\r\n props.dispatch(SettingsActions.settingsClientModified({\r\n aadAppClientId: (key === \"AadAppClientId\") ? event.target.value : props.aadAppClientId,\r\n aadAppSecret: (key === \"AadAppSecret\") ? event.target.value : props.aadAppSecret,\r\n jwtAudiences: (key === \"jwtAudiences\") ? event.target.value : props.jwtAudiences,\r\n roleSyncEnabled: (key === \"roleSyncEnabled\") ? !props.roleSyncEnabled : props.roleSyncEnabled,\r\n profileSyncEnabled: (key === \"profileSyncEnabled\") ? !props.profileSyncEnabled : props.profileSyncEnabled,\r\n jwtAuthEnabled: (key === \"jwtAuthEnabled\") ? !props.jwtAuthEnabled : props.jwtAuthEnabled,\r\n apiResource: (key === \"apiResource\") ? event.target.value : props.apiResource,\r\n scopes: (key === \"scopes\") ? event.target.value : props.scopes,\r\n usernamePrefixEnabled: (key === \"usernamePrefixEnabled\") ? !props.usernamePrefixEnabled : props.usernamePrefixEnabled,\r\n groupNamePrefixEnabled: (key === \"groupNamePrefixEnabled\") ? !props.groupNamePrefixEnabled : props.groupNamePrefixEnabled\r\n }));\r\n } \r\n\r\n onClickCancel() {\r\n utils.utilities.closePersonaBar();\r\n }\r\n \r\n onClickSave() {\r\n event.preventDefault();\r\n let {props} = this;\r\n\r\n props.dispatch(SettingsActions.updateAdvancedSettings({\r\n aadAppClientId: props.aadAppClientId,\r\n aadAppSecret: props.aadAppSecret,\r\n jwtAudiences: props.jwtAudiences,\r\n roleSyncEnabled: props.roleSyncEnabled,\r\n profileSyncEnabled: props.profileSyncEnabled,\r\n jwtAuthEnabled: props.jwtAuthEnabled,\r\n apiResource: props.apiResource,\r\n scopes: props.scopes,\r\n usernamePrefixEnabled: props.usernamePrefixEnabled,\r\n groupNamePrefixEnabled: props.groupNamePrefixEnabled\r\n }, () => {\r\n utils.utilities.notify(resx.get(\"SettingsUpdateSuccess\"));\r\n this.setState({\r\n clientModified: false\r\n }); \r\n }, () => {\r\n utils.utilities.notifyError(resx.get(\"SettingsError\"));\r\n }));\r\n }\r\n \r\n /* eslint-disable react/no-danger */\r\n render() {\r\n return (\r\n
\r\n \r\n \r\n \r\n

{resx.get(\"lblSynchronization\")}

\r\n

{resx.get(\"lblSynchronizationDesc\")}

\r\n \r\n \r\n
\r\n \r\n

{resx.get(\"lblAADSettings\")}

\r\n

{resx.get(\"lblGraphClient.Help\")}\r\n

\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n

{resx.get(\"lblNamePrefixes\")}

\r\n

{resx.get(\"lblNamePrefixes.Help\")}

\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
{resx.get(\"NamePrefixesWarningMessage\")}
\r\n
\r\n \r\n \r\n \r\n \r\n

{resx.get(\"lblTokenValidation\")}

\r\n

{resx.get(\"lblTokenValidation.Help\")}

\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n

{resx.get(\"lblAPIResource\")}

\r\n

{resx.get(\"lblAPIResourceDesc\")}

\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n
\r\n \r\n \r\n {resx.get(\"SaveSettings\")}\r\n \r\n
\r\n
\r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nSyncSettings.propTypes = {\r\n dispatch: PropTypes.func.isRequired,\r\n aadAppClientId: PropTypes.string,\r\n aadAppSecret: PropTypes.string,\r\n jwtAudiences: PropTypes.string,\r\n roleSyncEnabled: PropTypes.bool,\r\n profileSyncEnabled: PropTypes.bool,\r\n jwtAuthEnabled: PropTypes.bool,\r\n apiResource: PropTypes.string,\r\n scopes: PropTypes.string,\r\n usernamePrefixEnabled: PropTypes.bool,\r\n groupNamePrefixEnabled: PropTypes.bool\r\n};\r\n\r\n\r\nfunction mapStateToProps(state) {\r\n return {\r\n aadAppClientId: state.settings.aadAppClientId,\r\n aadAppSecret: state.settings.aadAppSecret,\r\n jwtAudiences: state.settings.jwtAudiences,\r\n roleSyncEnabled: state.settings.roleSyncEnabled,\r\n profileSyncEnabled: state.settings.profileSyncEnabled,\r\n jwtAuthEnabled: state.settings.jwtAuthEnabled,\r\n apiResource: state.settings.apiResource,\r\n scopes: state.settings.scopes,\r\n usernamePrefixEnabled: state.settings.usernamePrefixEnabled,\r\n groupNamePrefixEnabled: state.settings.groupNamePrefixEnabled\r\n };\r\n}\r\nexport default connect(mapStateToProps)(SyncSettings);","import SyncSettings from \"./syncSettings\";\r\n\r\nexport default SyncSettings;","import React, { Component } from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport { Collapsible, SvgIcons } from \"@dnnsoftware/dnn-react-common\";\r\nimport \"./style.less\";\r\n\r\nclass ProfileMappingRow extends Component {\r\n /* eslint-disable react/no-did-mount-set-state */\r\n componentDidMount() {\r\n let opened = (this.props.openId !== \"\" && this.props.id === this.props.openId);\r\n this.setState({\r\n opened\r\n });\r\n }\r\n\r\n toggle() {\r\n if ((this.props.openId !== \"\" && this.props.id === this.props.openId)) {\r\n this.props.Collapse();\r\n }\r\n else {\r\n this.props.OpenCollapse(this.props.id);\r\n }\r\n }\r\n\r\n /* eslint-disable react/no-danger */\r\n render() {\r\n const {props} = this;\r\n let opened = (this.props.openId !== \"\" && this.props.id === this.props.openId);\r\n return (\r\n
\r\n
\r\n
\r\n
\r\n {props.dnnProfilePropertyName}
\r\n
\r\n {props.b2cClaimName}
\r\n
\r\n {props.deletable &&\r\n
\r\n }\r\n {props.editable &&\r\n
\r\n }\r\n
\r\n
\r\n
\r\n {opened && props.children}\r\n
\r\n );\r\n }\r\n}\r\n\r\nProfileMappingRow.propTypes = {\r\n profileMappingId: PropTypes.string,\r\n dnnProfilePropertyName: PropTypes.string,\r\n b2cClaimName: PropTypes.string,\r\n deletable: PropTypes.bool,\r\n editable: PropTypes.bool,\r\n OpenCollapse: PropTypes.func,\r\n Collapse: PropTypes.func,\r\n onDelete: PropTypes.func,\r\n id: PropTypes.string,\r\n openId: PropTypes.string\r\n};\r\n\r\nProfileMappingRow.defaultProps = {\r\n collapsed: true,\r\n deletable: true,\r\n editable: true\r\n};\r\nexport default (ProfileMappingRow);\r\n","import React, { Component } from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport { connect } from \"react-redux\";\r\nimport \"./style.less\";\r\nimport { SingleLineInputWithError, GridSystem, Button, InputGroup, DropdownWithError } from \"@dnnsoftware/dnn-react-common\";\r\nimport SettingsActions from \"../../../actions/settings\";\r\nimport util from \"../../../utils\";\r\nimport resx from \"../../../resources\";\r\n\r\nclass ProfileMappingEditor extends Component {\r\n constructor() {\r\n super();\r\n\r\n this.state = {\r\n profileMappingDetail: {\r\n DnnProfilePropertyName: \"\",\r\n B2cClaimName: \"\"\r\n },\r\n error: {\r\n dnnProfilePropertyName: false,\r\n b2cClaimName: false\r\n },\r\n triedToSubmit: false\r\n };\r\n }\r\n \r\n componentWillMount() {\r\n const {props} = this;\r\n const {state} = this;\r\n\r\n state.profileMappingDetail[\"ProfileMappingId\"] = props.profileMappingId;\r\n state.profileMappingDetail[\"DnnProfilePropertyName\"] = props.dnnProfilePropertyName;\r\n state.profileMappingDetail[\"B2cClaimName\"] = props.b2cClaimName;\r\n\r\n state.error[\"dnnProfilePropertyName\"] = (props.dnnProfilePropertyName === null);\r\n state.error[\"b2cClaimName\"] = (props.b2cClaimName === null);\r\n }\r\n\r\n /* eslint-disable react/no-did-update-set-state */\r\n componentDidUpdate(prevProps) {\r\n const {props, state} = this;\r\n if ((props !== prevProps) && props.profileMappingDetail ) {\r\n if (props.profileMappingDetail[\"DnnProfilePropertyName\"] === undefined || props.profileMappingDetail[\"DnnProfilePropertyName\"] === \"\") {\r\n state.error[\"dnnProfilePropertyName\"] = true;\r\n }\r\n else if (props.profileMappingDetail[\"DnnProfilePropertyName\"] !== \"\" && props.profileMappingDetail[\"DnnProfilePropertyName\"] !== undefined) {\r\n state.error[\"dnnProfilePropertyName\"] = false;\r\n }\r\n \r\n this.setState({\r\n profileMappingDetail: Object.assign({}, props.profileMappingDetail),\r\n triedToSubmit: false,\r\n error: state.error\r\n });\r\n }\r\n }\r\n\r\n onSettingChange(key, event) {\r\n let {state, props} = this;\r\n let profileMappingDetail = Object.assign({}, state.profileMappingDetail);\r\n\r\n if (key === \"DnnProfilePropertyName\") {\r\n state.error[\"dnnProfilePropertyName\"] = !props.onValidate(profileMappingDetail, event.value);\r\n }\r\n\r\n if (profileMappingDetail[key] === \"\" && key === \"B2cClaimName\") {\r\n state.error[\"b2cClaimName\"] = true;\r\n }\r\n else if (profileMappingDetail[key] !== \"\" && key === \"B2cClaimName\") {\r\n state.error[\"b2cClaimName\"] = false;\r\n }\r\n\r\n if (key === \"DnnProfilePropertyName\") {\r\n profileMappingDetail[key] = event.value;\r\n }\r\n else {\r\n profileMappingDetail[key] = typeof (event) === \"object\" ? event.target.value : event;\r\n }\r\n\r\n this.setState({\r\n profileMappingDetail: profileMappingDetail,\r\n triedToSubmit: false,\r\n error: state.error\r\n });\r\n\r\n props.dispatch(SettingsActions.profileMappingClientModified(profileMappingDetail));\r\n }\r\n\r\n getProfilePropertyOptions() {\r\n let options = [];\r\n \r\n if (this.props.availableProperties !== undefined) {\r\n options = this.props.availableProperties.map((item) => {\r\n return { label: item, value: item };\r\n });\r\n }\r\n return options;\r\n }\r\n\r\n onSave() {\r\n const {props, state} = this;\r\n this.setState({\r\n triedToSubmit: true\r\n });\r\n if (state.error.dnnProfilePropertyName || state.error.b2cClaimName) {\r\n return;\r\n }\r\n\r\n props.onUpdate(state.profileMappingDetail);\r\n props.Collapse();\r\n }\r\n\r\n onCancel() {\r\n const {props} = this;\r\n\r\n if (props.profileMappingClientModified) {\r\n util.utilities.confirm(resx.get(\"SettingsRestoreWarning\"), resx.get(\"Yes\"), resx.get(\"No\"), () => {\r\n props.dispatch(SettingsActions.cancelProfileMappingClientModified());\r\n props.Collapse();\r\n });\r\n }\r\n else {\r\n props.Collapse();\r\n }\r\n }\r\n\r\n /* eslint-disable react/no-danger */\r\n render() {\r\n if (this.state.profileMappingDetail !== undefined || this.props.id === \"add\") {\r\n const columnOne =
\r\n \r\n \r\n \r\n
;\r\n const columnTwo =
\r\n \r\n \r\n \r\n
;\r\n\r\n return (\r\n
\r\n {[columnOne, columnTwo]}\r\n
\r\n \r\n {resx.get(\"Cancel\")}\r\n \r\n \r\n {resx.get(\"SaveSettings\")}\r\n \r\n
\r\n
\r\n );\r\n }\r\n else return
;\r\n }\r\n}\r\n\r\nProfileMappingEditor.propTypes = {\r\n dispatch: PropTypes.func.isRequired,\r\n profileMappingDetail: PropTypes.object,\r\n profileMappingId: PropTypes.string,\r\n dnnProfilePropertyName: PropTypes.string,\r\n b2cClaimName: PropTypes.string,\r\n Collapse: PropTypes.func,\r\n onUpdate: PropTypes.func,\r\n id: PropTypes.string,\r\n profileMappingClientModified: PropTypes.bool,\r\n availableProperties: PropTypes.array,\r\n onValidate: PropTypes.func\r\n};\r\n\r\nfunction mapStateToProps() {\r\n return {\r\n // profileMappingDetail: state.siteBehavior.aliasDetail,\r\n // profileMappingClientModified: state.siteBehavior.siteAliasClientModified\r\n };\r\n}\r\n\r\nexport default connect(mapStateToProps)(ProfileMappingEditor);","import React, {Component} from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport { connect } from \"react-redux\";\r\nimport SettingsActions from \"../../actions/settings\";\r\nimport ProfileMappingRow from \"./profileMappingRow\";\r\nimport ProfileMappingEditor from \"./profileMappingEditor\";\r\nimport { Collapsible } from \"@dnnsoftware/dnn-react-common\";\r\nimport \"./style.less\";\r\nimport { SvgIcons } from \"@dnnsoftware/dnn-react-common\";\r\nimport utils from \"../../utils\";\r\nimport resx from \"../../resources\";\r\n\r\nclass ProfileMappings extends Component {\r\n\r\n constructor() {\r\n super();\r\n\r\n this.state = {\r\n openId: \"\",\r\n tableFields: [],\r\n error: {\r\n profileMapping: false\r\n }\r\n };\r\n }\r\n UNSAFE_componentWillMount() {\r\n const {props} = this;\r\n\r\n props.dispatch(SettingsActions.getProfileSettings());\r\n props.dispatch(SettingsActions.getProfileProperties());\r\n }\r\n\r\n UNSAFE_componentWillReceiveProps(nextProps) {\r\n const {state} = this;\r\n\r\n state.error[\"profileMapping\"] = (nextProps.profileMapping === null);\r\n }\r\n\r\n onValidateProfileMapping(profileMappingDetail, newDnnProfilePropertyName) {\r\n let originalPropertyName = null;\r\n if (profileMappingDetail.ProfileMappingId) {\r\n originalPropertyName = profileMappingDetail.ProfileMappingId.split(\"-\")[0];\r\n }\r\n if (originalPropertyName !== newDnnProfilePropertyName) {\r\n // The PropertyName of this row has changed. Let's see if that property has already been mapped\r\n if (this.props.profileMapping.find(p => p.DnnProfilePropertyName === newDnnProfilePropertyName) !== undefined) {\r\n return false; // Not valid; it's already in the list\r\n }\r\n else {\r\n return true;\r\n }\r\n }\r\n else {\r\n return true;\r\n }\r\n }\r\n onUpdateProfileMapping(profileMappingDetail) {\r\n const {props} = this;\r\n\r\n let originalPropertyName = profileMappingDetail.ProfileMappingId ? profileMappingDetail.ProfileMappingId.split(\"-\")[0] : null;\r\n if (originalPropertyName !== profileMappingDetail.DnnProfilePropertyName) {\r\n // The PropertyName of this row has changed. Let's see if that property has already been mapped\r\n if (this.props.profileMapping.find(p => p.DnnProfilePropertyName === profileMappingDetail.DnnProfilePropertyName) !== undefined) {\r\n utils.utilities.notifyError(resx.get(\"ErrorProfileMappingDuplicated\"));\r\n return;\r\n }\r\n }\r\n\r\n let payload = {\r\n originalDnnPropertyName: originalPropertyName,\r\n profileMappingDetail: profileMappingDetail\r\n };\r\n props.dispatch(SettingsActions.updateProfileMapping(payload, () => {\r\n utils.utilities.notify(resx.get(\"MappingUpdateSuccess\"));\r\n this.collapse();\r\n props.dispatch(SettingsActions.getProfileSettings());\r\n }, (error) => {\r\n const errorMessage = JSON.parse(error.responseText);\r\n utils.utilities.notifyError(errorMessage.Message);\r\n }));\r\n }\r\n\r\n onDeleteProfileMapping(profileMappingId) {\r\n const {props} = this;\r\n utils.utilities.confirm(resx.get(\"ProfileMappingDeletedWarning\"), resx.get(\"Yes\"), resx.get(\"No\"), () => {\r\n let originalPropertyName = profileMappingId.split(\"-\")[0];\r\n \r\n let payload = {\r\n dnnProfilePropertyName: originalPropertyName\r\n };\r\n props.dispatch(SettingsActions.deleteProfileMapping(payload, () => {\r\n utils.utilities.notify(resx.get(\"MappingDeleteSuccess\"));\r\n this.collapse();\r\n props.dispatch(SettingsActions.getProfileSettings());\r\n }, (error) => {\r\n const errorMessage = JSON.parse(error.responseText);\r\n utils.utilities.notifyError(errorMessage.Message);\r\n }));\r\n });\r\n }\r\n\r\n onClickCancel() {\r\n utils.utilities.closePersonaBar();\r\n }\r\n\r\n /* eslint-disable react/no-did-update-set-state */\r\n componentDidUpdate(prevProps) {\r\n const {props} = this;\r\n if (props !== prevProps) {\r\n let tableFields = [];\r\n if (tableFields.length === 0) {\r\n tableFields.push({ \"name\": resx.get(\"DnnProfileProperty.Header\"), \"id\": \"DnnProfileProperty\" });\r\n tableFields.push({ \"name\": resx.get(\"B2cClaim.Header\"), \"id\": \"B2cClaim\" });\r\n }\r\n this.setState({tableFields});\r\n }\r\n }\r\n\r\n uncollapse(id) {\r\n this.setState({\r\n openId: id\r\n });\r\n }\r\n\r\n collapse() {\r\n if (this.state.openId !== \"\") {\r\n this.setState({\r\n openId: \"\"\r\n });\r\n }\r\n }\r\n\r\n toggle(openId) {\r\n if (openId !== \"\") {\r\n this.uncollapse(openId);\r\n }\r\n }\r\n\r\n renderHeader() {\r\n let tableHeaders = this.state.tableFields.map((field) => {\r\n let className = \"header-\" + field.id;\r\n return
\r\n {field.name}  \r\n
;\r\n });\r\n return
{tableHeaders}
;\r\n }\r\n\r\n renderedProfileMappings() {\r\n let i = 0;\r\n if (this.props.profileMapping) {\r\n return this.props.profileMapping.map((item, index) => {\r\n let id = \"row-\" + i++;\r\n let profileMappingId = item.DnnProfilePropertyName + \"-\" + item.B2cClaimName;\r\n return (\r\n \r\n \r\n \r\n );\r\n });\r\n }\r\n }\r\n\r\n /* eslint-disable react/no-danger */\r\n render() {\r\n let opened = (this.state.openId === \"add\");\r\n return (\r\n
\r\n
\r\n
\r\n
{resx.get(\"lblProfilePropertiesMapping\")}
\r\n
\r\n
\r\n
{resx.get(\"cmdAddProfileMapping\")}\r\n
\r\n
\r\n
\r\n {this.renderHeader()}\r\n \r\n \r\n \r\n \r\n \r\n {this.renderedProfileMappings()}\r\n
\r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nProfileMappings.propTypes = {\r\n profileMapping: PropTypes.array,\r\n profileProperties: PropTypes.array\r\n};\r\n\r\n\r\nfunction mapStateToProps(state) {\r\n return {\r\n profileMapping: state.settings.profileMapping,\r\n profileProperties: state.settings.profileProperties\r\n };\r\n}\r\n\r\nexport default connect(mapStateToProps)(ProfileMappings);","import React, { Component } from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport { Collapsible, SvgIcons } from \"@dnnsoftware/dnn-react-common\";\r\nimport \"./style.less\";\r\n\r\nclass UserMappingRow extends Component {\r\n /* eslint-disable react/no-did-mount-set-state */\r\n componentDidMount() {\r\n let opened = (this.props.openId !== \"\" && this.props.id === this.props.openId);\r\n this.setState({\r\n opened\r\n });\r\n }\r\n\r\n toggle() {\r\n if ((this.props.openId !== \"\" && this.props.id === this.props.openId)) {\r\n this.props.Collapse();\r\n }\r\n else {\r\n this.props.OpenCollapse(this.props.id);\r\n }\r\n }\r\n\r\n /* eslint-disable react/no-danger */\r\n render() {\r\n const {props} = this;\r\n let opened = (this.props.openId !== \"\" && this.props.id === this.props.openId);\r\n return (\r\n
\r\n
\r\n
\r\n
\r\n {props.dnnPropertyName}
\r\n
\r\n {props.b2cClaimName}
\r\n
\r\n {props.deletable &&\r\n
\r\n }\r\n {props.editable &&\r\n
\r\n }\r\n
\r\n
\r\n
\r\n {opened && props.children}\r\n
\r\n );\r\n }\r\n}\r\n\r\nUserMappingRow.propTypes = {\r\n mappingId: PropTypes.string,\r\n dnnPropertyName: PropTypes.string,\r\n b2cClaimName: PropTypes.string,\r\n deletable: PropTypes.bool,\r\n editable: PropTypes.bool,\r\n OpenCollapse: PropTypes.func,\r\n Collapse: PropTypes.func,\r\n onDelete: PropTypes.func,\r\n id: PropTypes.string,\r\n openId: PropTypes.string\r\n};\r\n\r\nUserMappingRow.defaultProps = {\r\n collapsed: true,\r\n deletable: false,\r\n editable: true\r\n};\r\nexport default (UserMappingRow);\r\n","import React, { Component } from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport { connect } from \"react-redux\";\r\nimport \"./style.less\";\r\nimport { SingleLineInputWithError, GridSystem, Button, InputGroup } from \"@dnnsoftware/dnn-react-common\";\r\nimport SettingsActions from \"../../../actions/settings\";\r\nimport util from \"../../../utils\";\r\nimport resx from \"../../../resources\";\r\n\r\nclass UserMappingEditor extends Component {\r\n constructor() {\r\n super();\r\n\r\n this.state = {\r\n mappingDetail: {\r\n DnnPropertyName: \"\",\r\n B2cClaimName: \"\"\r\n },\r\n error: {\r\n dnnPropertyName: false,\r\n b2cClaimName: false\r\n },\r\n triedToSubmit: false\r\n };\r\n }\r\n \r\n componentWillMount() {\r\n const {props} = this;\r\n const {state} = this;\r\n\r\n state.mappingDetail[\"MappingId\"] = props.mappingId;\r\n state.mappingDetail[\"DnnPropertyName\"] = props.dnnPropertyName;\r\n state.mappingDetail[\"B2cClaimName\"] = props.b2cClaimName;\r\n\r\n state.error[\"dnnPropertyName\"] = (props.dnnPropertyName === null);\r\n state.error[\"b2cClaimName\"] = (props.b2cClaimName === null);\r\n }\r\n\r\n /* eslint-disable react/no-did-update-set-state */\r\n componentDidUpdate(prevProps) {\r\n const {props, state} = this;\r\n if ((props !== prevProps) && props.mappingDetail ) {\r\n if (props.mappingDetail[\"DnnPropertyName\"] === undefined || props.mappingDetail[\"DnnPropertyName\"] === \"\") {\r\n state.error[\"dnnPropertyName\"] = true;\r\n }\r\n else if (props.mappingDetail[\"DnnPropertyName\"] !== \"\" && props.mappingDetail[\"DnnPropertyName\"] !== undefined) {\r\n state.error[\"dnnPropertyName\"] = false;\r\n }\r\n \r\n this.setState({\r\n mappingDetail: Object.assign({}, props.mappingDetail),\r\n triedToSubmit: false,\r\n error: state.error\r\n });\r\n }\r\n }\r\n\r\n onSettingChange(key, event) {\r\n let {state, props} = this;\r\n let mappingDetail = Object.assign({}, state.mappingDetail);\r\n\r\n if (key === \"DnnPropertyName\") {\r\n state.error[\"dnnPropertyName\"] = !props.onValidate(mappingDetail, event.value);\r\n }\r\n\r\n if (mappingDetail[key] === \"\" && key === \"B2cClaimName\" && props.dnnPropertyName !== \"PortalId\") {\r\n state.error[\"b2cClaimName\"] = true;\r\n }\r\n else if (mappingDetail[key] !== \"\" && key === \"B2cClaimName\") {\r\n state.error[\"b2cClaimName\"] = false;\r\n }\r\n\r\n mappingDetail[key] = typeof (event) === \"object\" ? event.target.value : event;\r\n\r\n this.setState({\r\n mappingDetail: mappingDetail,\r\n triedToSubmit: false,\r\n error: state.error\r\n });\r\n\r\n props.dispatch(SettingsActions.userMappingClientModified(mappingDetail));\r\n }\r\n\r\n onSave() {\r\n const {props, state} = this;\r\n this.setState({\r\n triedToSubmit: true\r\n });\r\n if (state.error.dnnPropertyName || state.error.b2cClaimName) {\r\n return;\r\n }\r\n\r\n props.onUpdate(state.mappingDetail);\r\n props.Collapse();\r\n }\r\n\r\n onCancel() {\r\n const {props} = this;\r\n\r\n if (props.mappingClientModified) {\r\n util.utilities.confirm(resx.get(\"SettingsRestoreWarning\"), resx.get(\"Yes\"), resx.get(\"No\"), () => {\r\n props.dispatch(SettingsActions.cancelUserMappingClientModified());\r\n props.Collapse();\r\n });\r\n }\r\n else {\r\n props.Collapse();\r\n }\r\n }\r\n\r\n /* eslint-disable react/no-danger */\r\n render() {\r\n if (this.state.mappingDetail !== undefined || this.props.id === \"add\") {\r\n const columnOne =
\r\n \r\n \r\n \r\n
;\r\n const columnTwo =
\r\n \r\n \r\n \r\n
;\r\n\r\n return (\r\n
\r\n {[columnOne, columnTwo]}\r\n
\r\n \r\n {resx.get(\"Cancel\")}\r\n \r\n \r\n {resx.get(\"SaveSettings\")}\r\n \r\n
\r\n
\r\n );\r\n }\r\n else return
;\r\n }\r\n}\r\n\r\nUserMappingEditor.propTypes = {\r\n dispatch: PropTypes.func.isRequired,\r\n mappingDetail: PropTypes.object,\r\n mappingId: PropTypes.string,\r\n dnnPropertyName: PropTypes.string,\r\n b2cClaimName: PropTypes.string,\r\n Collapse: PropTypes.func,\r\n onUpdate: PropTypes.func,\r\n id: PropTypes.string,\r\n mappingClientModified: PropTypes.bool,\r\n onValidate: PropTypes.func\r\n};\r\n\r\nfunction mapStateToProps() {\r\n return {\r\n };\r\n}\r\n\r\nexport default connect(mapStateToProps)(UserMappingEditor);","import React, {Component} from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport { connect } from \"react-redux\";\r\nimport SettingsActions from \"../../actions/settings\";\r\nimport UserMappingRow from \"./userMappingRow\";\r\nimport UserMappingEditor from \"./userMappingEditor\";\r\nimport \"./style.less\";\r\nimport utils from \"../../utils\";\r\nimport resx from \"../../resources\";\r\n\r\nclass UserMappings extends Component {\r\n\r\n constructor() {\r\n super();\r\n\r\n this.state = {\r\n openId: \"\",\r\n tableFields: [],\r\n error: {\r\n mapping: false\r\n }\r\n };\r\n }\r\n UNSAFE_componentWillMount() {\r\n const {props} = this;\r\n\r\n props.dispatch(SettingsActions.getUserMappingSettings());\r\n }\r\n\r\n UNSAFE_componentWillReceiveProps(nextProps) {\r\n const {state} = this;\r\n\r\n state.error[\"mapping\"] = (nextProps.mapping === null);\r\n }\r\n\r\n onUpdateMapping(mappingDetail) {\r\n const {props} = this;\r\n\r\n let payload = {\r\n DnnPropertyName: mappingDetail.DnnPropertyName,\r\n B2cClaimName: mappingDetail.B2cClaimName\r\n };\r\n props.dispatch(SettingsActions.updateUserMapping(payload, () => {\r\n utils.utilities.notify(resx.get(\"MappingUpdateSuccess\"));\r\n this.collapse();\r\n props.dispatch(SettingsActions.getUserMappingSettings());\r\n }, (error) => {\r\n const errorMessage = JSON.parse(error.responseText);\r\n utils.utilities.notifyError(errorMessage.Message);\r\n }));\r\n }\r\n\r\n onDeleteMapping(mappingId) {\r\n const {props} = this;\r\n utils.utilities.confirm(resx.get(\"MappingDeletedWarning\"), resx.get(\"Yes\"), resx.get(\"No\"), () => {\r\n let originalUserMappingName = mappingId.split(\"-\")[0];\r\n \r\n let payload = {\r\n dnnMappingName: originalUserMappingName\r\n };\r\n props.dispatch(SettingsActions.deleteUserMapping(payload, () => {\r\n utils.utilities.notify(resx.get(\"MappingDeleteSuccess\"));\r\n this.collapse();\r\n props.dispatch(SettingsActions.getUserMappingSettings());\r\n }, (error) => {\r\n const errorMessage = JSON.parse(error.responseText);\r\n utils.utilities.notifyError(errorMessage.Message);\r\n }));\r\n });\r\n }\r\n\r\n onClickCancel() {\r\n utils.utilities.closePersonaBar();\r\n }\r\n\r\n /* eslint-disable react/no-did-update-set-state */\r\n componentDidUpdate(prevProps) {\r\n const {props} = this;\r\n if (props !== prevProps) {\r\n let tableFields = [];\r\n if (tableFields.length === 0) {\r\n tableFields.push({ \"name\": resx.get(\"DnnProperty.Header\"), \"id\": \"DnnProperty\" });\r\n tableFields.push({ \"name\": resx.get(\"B2cProperty.Header\"), \"id\": \"B2cProperty\" });\r\n }\r\n this.setState({tableFields});\r\n }\r\n }\r\n\r\n uncollapse(id) {\r\n this.setState({\r\n openId: id\r\n });\r\n }\r\n\r\n collapse() {\r\n if (this.state.openId !== \"\") {\r\n this.setState({\r\n openId: \"\"\r\n });\r\n }\r\n }\r\n\r\n toggle(openId) {\r\n if (openId !== \"\") {\r\n this.uncollapse(openId);\r\n }\r\n }\r\n\r\n renderHeader() {\r\n let tableHeaders = this.state.tableFields.map((field) => {\r\n let className = \"header-\" + field.id;\r\n return
\r\n {field.name}  \r\n
;\r\n });\r\n return
{tableHeaders}
;\r\n }\r\n\r\n renderMappings() {\r\n let i = 0;\r\n if (this.props.mapping) {\r\n return this.props.mapping.map((item, index) => {\r\n let id = \"row-\" + i++;\r\n let mappingId = item.DnnPropertyName + \"-\" + item.B2cClaimName;\r\n return (\r\n \r\n \r\n \r\n );\r\n });\r\n }\r\n }\r\n\r\n /* eslint-disable react/no-danger */\r\n render() {\r\n return (\r\n
\r\n
\r\n
\r\n
{resx.get(\"lblUsersMapping\")}
\r\n
\r\n
\r\n {this.renderHeader()}\r\n {this.renderMappings()}\r\n
\r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nUserMappings.propTypes = {\r\n mapping: PropTypes.array\r\n};\r\n\r\n\r\nfunction mapStateToProps(state) {\r\n return {\r\n mapping: state.settings.userMapping\r\n };\r\n}\r\n\r\nexport default connect(mapStateToProps)(UserMappings);","import React, { Component } from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport { Collapsible, SvgIcons } from \"@dnnsoftware/dnn-react-common\";\r\nimport \"./style.less\";\r\n\r\nclass RoleMappingRow extends Component {\r\n /* eslint-disable react/no-did-mount-set-state */\r\n componentDidMount() {\r\n let opened = (this.props.openId !== \"\" && this.props.id === this.props.openId);\r\n this.setState({\r\n opened\r\n });\r\n }\r\n\r\n toggle() {\r\n if ((this.props.openId !== \"\" && this.props.id === this.props.openId)) {\r\n this.props.Collapse();\r\n }\r\n else {\r\n this.props.OpenCollapse(this.props.id);\r\n }\r\n }\r\n\r\n /* eslint-disable react/no-danger */\r\n render() {\r\n const {props} = this;\r\n let opened = (this.props.openId !== \"\" && this.props.id === this.props.openId);\r\n return (\r\n
\r\n
\r\n
\r\n
\r\n {props.dnnRoleName}
\r\n
\r\n {props.b2cRoleName}
\r\n
\r\n {props.deletable &&\r\n
\r\n }\r\n {props.editable &&\r\n
\r\n }\r\n
\r\n
\r\n
\r\n {opened && props.children}\r\n
\r\n );\r\n }\r\n}\r\n\r\nRoleMappingRow.propTypes = {\r\n mappingId: PropTypes.string,\r\n dnnRoleName: PropTypes.string,\r\n b2cRoleName: PropTypes.string,\r\n deletable: PropTypes.bool,\r\n editable: PropTypes.bool,\r\n OpenCollapse: PropTypes.func,\r\n Collapse: PropTypes.func,\r\n onDelete: PropTypes.func,\r\n id: PropTypes.string,\r\n openId: PropTypes.string\r\n};\r\n\r\nRoleMappingRow.defaultProps = {\r\n collapsed: true,\r\n deletable: true,\r\n editable: true\r\n};\r\nexport default (RoleMappingRow);\r\n","import React, { Component } from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport { connect } from \"react-redux\";\r\nimport \"./style.less\";\r\nimport { SingleLineInputWithError, GridSystem, Button, InputGroup, DropdownWithError } from \"@dnnsoftware/dnn-react-common\";\r\nimport SettingsActions from \"../../../actions/settings\";\r\nimport util from \"../../../utils\";\r\nimport resx from \"../../../resources\";\r\n\r\nclass RoleMappingEditor extends Component {\r\n constructor() {\r\n super();\r\n\r\n this.state = {\r\n mappingDetail: {\r\n DnnRoleName: \"\",\r\n B2cRoleName: \"\"\r\n },\r\n error: {\r\n dnnRoleName: false,\r\n b2cRoleName: false\r\n },\r\n triedToSubmit: false\r\n };\r\n }\r\n \r\n componentWillMount() {\r\n const {props} = this;\r\n const {state} = this;\r\n\r\n state.mappingDetail[\"MappingId\"] = props.mappingId;\r\n state.mappingDetail[\"DnnRoleName\"] = props.dnnRoleName;\r\n state.mappingDetail[\"B2cRoleName\"] = props.b2cRoleName;\r\n\r\n state.error[\"dnnRoleName\"] = (props.dnnRoleName === null);\r\n state.error[\"b2cRoleName\"] = (props.b2cRoleName === null);\r\n }\r\n\r\n /* eslint-disable react/no-did-update-set-state */\r\n componentDidUpdate(prevProps) {\r\n const {props, state} = this;\r\n if ((props !== prevProps) && props.mappingDetail ) {\r\n if (props.mappingDetail[\"DnnRoleName\"] === undefined || props.mappingDetail[\"DnnRoleName\"] === \"\") {\r\n state.error[\"dnnRoleName\"] = true;\r\n }\r\n else if (props.mappingDetail[\"DnnRoleName\"] !== \"\" && props.mappingDetail[\"DnnRoleName\"] !== undefined) {\r\n state.error[\"dnnRoleName\"] = false;\r\n }\r\n \r\n this.setState({\r\n mappingDetail: Object.assign({}, props.mappingDetail),\r\n triedToSubmit: false,\r\n error: state.error\r\n });\r\n }\r\n }\r\n\r\n onSettingChange(key, event) {\r\n let {state, props} = this;\r\n let mappingDetail = Object.assign({}, state.mappingDetail);\r\n\r\n if (key === \"DnnRoleName\") {\r\n state.error[\"dnnRoleName\"] = !props.onValidate(mappingDetail, event.value);\r\n }\r\n\r\n if (mappingDetail[key] === \"\" && key === \"B2cRoleName\") {\r\n state.error[\"b2cRoleName\"] = true;\r\n }\r\n else if (mappingDetail[key] !== \"\" && key === \"B2cRoleName\") {\r\n state.error[\"b2cRoleName\"] = false;\r\n }\r\n\r\n if (key === \"DnnRoleName\") {\r\n mappingDetail[key] = event.value;\r\n }\r\n else {\r\n mappingDetail[key] = typeof (event) === \"object\" ? event.target.value : event;\r\n }\r\n\r\n this.setState({\r\n mappingDetail: mappingDetail,\r\n triedToSubmit: false,\r\n error: state.error\r\n });\r\n\r\n props.dispatch(SettingsActions.roleMappingClientModified(mappingDetail));\r\n }\r\n\r\n getRolePropertyOptions() {\r\n let options = [];\r\n \r\n if (this.props.availableRoles !== undefined) {\r\n options = this.props.availableRoles.map((item) => {\r\n return { label: item, value: item };\r\n });\r\n }\r\n return options;\r\n }\r\n\r\n onSave() {\r\n const {props, state} = this;\r\n this.setState({\r\n triedToSubmit: true\r\n });\r\n if (state.error.dnnRoleName || state.error.b2cRoleName) {\r\n return;\r\n }\r\n\r\n props.onUpdate(state.mappingDetail);\r\n props.Collapse();\r\n }\r\n\r\n onCancel() {\r\n const {props} = this;\r\n\r\n if (props.mappingClientModified) {\r\n util.utilities.confirm(resx.get(\"SettingsRestoreWarning\"), resx.get(\"Yes\"), resx.get(\"No\"), () => {\r\n props.dispatch(SettingsActions.cancelRoleMappingClientModified());\r\n props.Collapse();\r\n });\r\n }\r\n else {\r\n props.Collapse();\r\n }\r\n }\r\n\r\n /* eslint-disable react/no-danger */\r\n render() {\r\n if (this.state.mappingDetail !== undefined || this.props.id === \"add\") {\r\n const columnOne =
\r\n \r\n \r\n \r\n
;\r\n const columnTwo =
\r\n \r\n \r\n \r\n
;\r\n\r\n return (\r\n
\r\n {[columnOne, columnTwo]}\r\n
\r\n \r\n {resx.get(\"Cancel\")}\r\n \r\n \r\n {resx.get(\"SaveSettings\")}\r\n \r\n
\r\n
\r\n );\r\n }\r\n else return
;\r\n }\r\n}\r\n\r\nRoleMappingEditor.propTypes = {\r\n dispatch: PropTypes.func.isRequired,\r\n mappingDetail: PropTypes.object,\r\n mappingId: PropTypes.string,\r\n dnnRoleName: PropTypes.string,\r\n b2cRoleName: PropTypes.string,\r\n Collapse: PropTypes.func,\r\n onUpdate: PropTypes.func,\r\n id: PropTypes.string,\r\n mappingClientModified: PropTypes.bool,\r\n availableRoles: PropTypes.array,\r\n onValidate: PropTypes.func\r\n};\r\n\r\nfunction mapStateToProps() {\r\n return {\r\n // profileMappingDetail: state.siteBehavior.aliasDetail,\r\n // profileMappingClientModified: state.siteBehavior.siteAliasClientModified\r\n };\r\n}\r\n\r\nexport default connect(mapStateToProps)(RoleMappingEditor);","import React, {Component} from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport { connect } from \"react-redux\";\r\nimport SettingsActions from \"../../actions/settings\";\r\nimport RoleMappingRow from \"./roleMappingRow\";\r\nimport RoleMappingEditor from \"./roleMappingEditor\";\r\nimport { Collapsible } from \"@dnnsoftware/dnn-react-common\";\r\nimport \"./style.less\";\r\nimport { SvgIcons } from \"@dnnsoftware/dnn-react-common\";\r\nimport utils from \"../../utils\";\r\nimport resx from \"../../resources\";\r\n\r\nclass RoleMappings extends Component {\r\n\r\n constructor() {\r\n super();\r\n\r\n this.state = {\r\n openId: \"\",\r\n tableFields: [],\r\n error: {\r\n mapping: false\r\n }\r\n };\r\n }\r\n UNSAFE_componentWillMount() {\r\n const {props} = this;\r\n\r\n props.dispatch(SettingsActions.getRoleSettings());\r\n props.dispatch(SettingsActions.getAvailableRoles());\r\n }\r\n\r\n UNSAFE_componentWillReceiveProps(nextProps) {\r\n const {state} = this;\r\n\r\n state.error[\"mapping\"] = (nextProps.mapping === null);\r\n }\r\n\r\n onValidateMapping(mappingDetail, newDnnRoleName) {\r\n let originalRoleName = null;\r\n if (mappingDetail.MappingId) {\r\n originalRoleName = mappingDetail.MappingId.split(\"-\")[0];\r\n }\r\n if (originalRoleName !== newDnnRoleName) {\r\n // The ItemName of this row has changed. Let's see if that property has already been mapped\r\n if (this.props.mapping.find(p => p.DnnRoleName === newDnnRoleName) !== undefined) {\r\n return false; // Not valid; it's already in the list\r\n }\r\n else {\r\n return true;\r\n }\r\n }\r\n else {\r\n return true;\r\n }\r\n }\r\n onUpdateMapping(mappingDetail) {\r\n const {props} = this;\r\n\r\n let originalRoleName = mappingDetail.MappingId ? mappingDetail.MappingId.split(\"|\")[0] : null;\r\n if (originalRoleName !== mappingDetail.DnnRoleName) {\r\n // The RoleName of this row has changed. Let's see if that property has already been mapped\r\n if (this.props.mapping.find(p => p.DnnRoleName === mappingDetail.DnnRoleName) !== undefined) {\r\n utils.utilities.notifyError(resx.get(\"ErrorMappingDuplicated\"));\r\n return;\r\n }\r\n }\r\n\r\n let payload = {\r\n originalDnnRoleName: originalRoleName,\r\n mappingDetail: mappingDetail\r\n };\r\n props.dispatch(SettingsActions.updateRoleMapping(payload, () => {\r\n utils.utilities.notify(resx.get(\"MappingUpdateSuccess\"));\r\n this.collapse();\r\n props.dispatch(SettingsActions.getRoleSettings());\r\n }, (error) => {\r\n const errorMessage = JSON.parse(error.responseText);\r\n utils.utilities.notifyError(errorMessage.Message);\r\n }));\r\n }\r\n\r\n onDeleteMapping(mappingId) {\r\n const {props} = this;\r\n utils.utilities.confirm(resx.get(\"MappingDeletedWarning\"), resx.get(\"Yes\"), resx.get(\"No\"), () => {\r\n let originalRoleName = mappingId.split(\"|\")[0];\r\n \r\n let payload = {\r\n dnnRoleName: originalRoleName\r\n };\r\n props.dispatch(SettingsActions.deleteRoleMapping(payload, () => {\r\n utils.utilities.notify(resx.get(\"MappingDeleteSuccess\"));\r\n this.collapse();\r\n props.dispatch(SettingsActions.getRoleSettings());\r\n }, (error) => {\r\n const errorMessage = JSON.parse(error.responseText);\r\n utils.utilities.notifyError(errorMessage.Message);\r\n }));\r\n });\r\n }\r\n\r\n onClickCancel() {\r\n utils.utilities.closePersonaBar();\r\n }\r\n\r\n /* eslint-disable react/no-did-update-set-state */\r\n componentDidUpdate(prevProps) {\r\n const {props} = this;\r\n if (props !== prevProps) {\r\n let tableFields = [];\r\n if (tableFields.length === 0) {\r\n tableFields.push({ \"name\": resx.get(\"DnnRole.Header\"), \"id\": \"DnnRole\" });\r\n tableFields.push({ \"name\": resx.get(\"B2cRole.Header\"), \"id\": \"B2cRole\" });\r\n }\r\n this.setState({tableFields});\r\n }\r\n }\r\n\r\n uncollapse(id) {\r\n this.setState({\r\n openId: id\r\n });\r\n }\r\n\r\n collapse() {\r\n if (this.state.openId !== \"\") {\r\n this.setState({\r\n openId: \"\"\r\n });\r\n }\r\n }\r\n\r\n toggle(openId) {\r\n if (openId !== \"\") {\r\n this.uncollapse(openId);\r\n }\r\n }\r\n\r\n renderHeader() {\r\n let tableHeaders = this.state.tableFields.map((field) => {\r\n let className = \"header-\" + field.id;\r\n return
\r\n {field.name}  \r\n
;\r\n });\r\n return
{tableHeaders}
;\r\n }\r\n\r\n renderMappings() {\r\n let i = 0;\r\n if (this.props.mapping) {\r\n return this.props.mapping.map((item, index) => {\r\n let id = \"row-\" + i++;\r\n let mappingId = item.DnnRoleName + \"|\" + item.B2cRoleName;\r\n return (\r\n \r\n \r\n \r\n );\r\n });\r\n }\r\n }\r\n\r\n /* eslint-disable react/no-danger */\r\n render() {\r\n let opened = (this.state.openId === \"add\");\r\n return (\r\n
\r\n
\r\n
\r\n
{resx.get(\"lblRolesMapping\")}
\r\n
\r\n
\r\n
{resx.get(\"cmdAddRoleMapping\")}\r\n
\r\n
\r\n
\r\n {this.renderHeader()}\r\n \r\n \r\n \r\n \r\n \r\n {this.renderMappings()}\r\n
\r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nRoleMappings.propTypes = {\r\n mapping: PropTypes.array,\r\n roles: PropTypes.array\r\n};\r\n\r\n\r\nfunction mapStateToProps(state) {\r\n return {\r\n mapping: state.settings.roleMapping,\r\n roles: state.settings.roles\r\n };\r\n}\r\n\r\nexport default connect(mapStateToProps)(RoleMappings);","import React, {Component} from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport { connect } from \"react-redux\";\r\nimport {PersonaBarPage, PersonaBarPageHeader, PersonaBarPageBody, DnnTabs as Tabs} from \"@dnnsoftware/dnn-react-common\";\r\nimport SettingsActions from \"../actions/settings\";\r\nimport GeneralSettings from \"./general\";\r\nimport SyncSettings from \"./sync\";\r\nimport ProfileMappings from \"./profileMappings\";\r\nimport UserMappings from \"./userMappings\";\r\nimport RoleMappings from \"./roleMappings\";\r\nimport resx from \"../resources\";\r\n\r\nimport \"./style.less\";\r\n\r\nclass App extends Component {\r\n\r\n constructor() {\r\n super();\r\n this.onSelectTab = this.onSelectTab.bind(this);\r\n this.onSelectSubTab = this.onSelectSubTab.bind(this);\r\n }\r\n onSelectTab(index) {\r\n this.props.dispatch(SettingsActions.switchTab(index));\r\n }\r\n onSelectSubTab(index) {\r\n this.props.dispatch(SettingsActions.switchMappingSubTab(index));\r\n }\r\n\r\n render() {\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ;\r\n \r\n \r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\nApp.propTypes = {\r\n dispatch: PropTypes.func.isRequired,\r\n selectedTab: PropTypes.number,\r\n selectedMappingSubTab: PropTypes.number\r\n};\r\n\r\n\r\nfunction mapStateToProps(state) {\r\n return {\r\n selectedTab: state.settings.selectedTab,\r\n selectedMappingSubTab: state.settings.selectedMappingSubTab\r\n };\r\n}\r\n\r\nexport default connect(mapStateToProps)(App);","import React, {Component} from \"react\";\r\nimport App from \"../components/App\";\r\n\r\nclass Root extends Component {\r\n render() {\r\n return (\r\n
\r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default Root;","import utilities from \"../utils\";\r\nconst boilerPlate = {\r\n init() {\r\n // This setting is required and define the public path \r\n // to allow the web application to download assets on demand \r\n // eslint-disable-next-line no-undef\r\n // __webpack_public_path__ = options.publicPath; \r\n let options = window.dnn.initAzureADB2C();\r\n\r\n utilities.init(options.utility);\r\n utilities.moduleName = options.moduleName;\r\n\r\n },\r\n dispatch() {\r\n throw new Error(\"dispatch method needs to be overwritten from the Redux store\");\r\n }\r\n};\r\n\r\n\r\nexport default boilerPlate;","import { combineReducers } from \"redux\";\r\nimport settings from \"./settingsReducer\";\r\n\r\nconst rootReducer = combineReducers({\r\n settings\r\n});\r\n\r\nexport default rootReducer;\r\n","import { settings as ActionTypes } from \"../constants/actionTypes\";\r\n\r\nexport default function settings(state = {\r\n selectedTab: 0\r\n}, action) {\r\n switch (action.type) {\r\n case ActionTypes.RETRIEVED_SETTINGS:\r\n return { ...state,\r\n enabled: action.data.enabled,\r\n useGlobalSettings: action.data.useGlobalSettings,\r\n autoRedirect: action.data.autoRedirect,\r\n autoAuthorize: action.data.autoAuthorize,\r\n apiKey: action.data.apiKey,\r\n apiSecret: action.data.apiSecret,\r\n redirectUri: action.data.redirectUri,\r\n onErrorUri: action.data.onErrorUri,\r\n tenantName: action.data.tenantName,\r\n tenantId: action.data.tenantId,\r\n signUpPolicy: action.data.signUpPolicy,\r\n profilePolicy: action.data.profilePolicy,\r\n passwordResetPolicy: action.data.passwordResetPolicy,\r\n aadAppClientId: action.data.aadAppClientId,\r\n aadAppSecret: action.data.aadAppSecret,\r\n jwtAudiences: action.data.jwtAudiences,\r\n roleSyncEnabled: action.data.roleSyncEnabled,\r\n profileSyncEnabled: action.data.profileSyncEnabled,\r\n jwtAuthEnabled: action.data.jwtAuthEnabled,\r\n apiResource: action.data.apiResource,\r\n scopes: action.data.scopes,\r\n clientModified: action.data.clientModified,\r\n usernamePrefixEnabled: action.data.usernamePrefixEnabled,\r\n groupNamePrefixEnabled: action.data.groupNamePrefixEnabled,\r\n ropcPolicy: action.data.ropcPolicy,\r\n impersonatePolicy: action.data.impersonatePolicy\r\n };\r\n case ActionTypes.SETTINGS_CLIENT_MODIFIED:\r\n return { ...state,\r\n enabled: action.data.enabled,\r\n useGlobalSettings: action.data.useGlobalSettings,\r\n autoRedirect: action.data.autoRedirect,\r\n autoAuthorize: action.data.autoAuthorize,\r\n apiKey: action.data.apiKey,\r\n apiSecret: action.data.apiSecret,\r\n redirectUri: action.data.redirectUri,\r\n onErrorUri: action.data.onErrorUri,\r\n tenantName: action.data.tenantName,\r\n tenantId: action.data.tenantId,\r\n signUpPolicy: action.data.signUpPolicy,\r\n profilePolicy: action.data.profilePolicy,\r\n passwordResetPolicy: action.data.passwordResetPolicy,\r\n aadAppClientId: action.data.aadAppClientId,\r\n aadAppSecret: action.data.aadAppSecret,\r\n jwtAudiences: action.data.jwtAudiences,\r\n roleSyncEnabled: action.data.roleSyncEnabled,\r\n profileSyncEnabled: action.data.profileSyncEnabled,\r\n jwtAuthEnabled: action.data.jwtAuthEnabled,\r\n apiResource: action.data.apiResource,\r\n scopes: action.data.scopes,\r\n clientModified: action.data.clientModified,\r\n usernamePrefixEnabled: action.data.usernamePrefixEnabled,\r\n groupNamePrefixEnabled: action.data.groupNamePrefixEnabled,\r\n ropcPolicy: action.data.ropcPolicy,\r\n impersonatePolicy: action.data.impersonatePolicy\r\n };\r\n case ActionTypes.UPDATED_SETTINGS:\r\n return { ...state,\r\n clientModified: action.data.clientModified\r\n }; \r\n case ActionTypes.RETRIEVED_PROFILESETTINGS:\r\n return { ...state,\r\n profileMapping: action.data.profileMapping\r\n };\r\n case ActionTypes.RETRIEVED_ROLEMAPPINGSETTINGS:\r\n return { ...state,\r\n roleMapping: action.data.roleMapping\r\n };\r\n case ActionTypes.RETRIEVED_AVAILABLEROLES:\r\n return { ...state,\r\n roles: action.data.roles\r\n }; \r\n case ActionTypes.SWITCH_TAB:\r\n return {\r\n ...state,\r\n selectedTab: action.payload\r\n };\r\n case ActionTypes.SWITCH_MAPPING_SUBTAB:\r\n return {\r\n ...state,\r\n selectedSubTab: action.payload\r\n }; \r\n case ActionTypes.CANCELLED_PROFILEMAPPING_CLIENT_MODIFIED:\r\n return { ...state,\r\n profileMappingClientModified: action.data.profileMappingClientModified\r\n };\r\n case ActionTypes.PROFILEMAPPINGS_CLIENT_MODIFIED:\r\n return { ...state,\r\n profileMappingDetail: action.data.profileMappingDetail,\r\n profileMappingClientModified: action.data.profileMappingClientModified\r\n };\r\n case ActionTypes.RETRIEVED_PROFILEPROPERTIES:\r\n return { ...state,\r\n profileProperties: action.data.profileProperties\r\n };\r\n case ActionTypes.ROLEMAPPINGS_CLIENT_MODIFIED:\r\n return { ...state,\r\n roleProperties: action.data.roleProperties\r\n }; \r\n case ActionTypes.RETRIEVED_USERMAPPINGSETTINGS:\r\n return { ...state,\r\n userMapping: action.data.userMapping\r\n };\r\n case ActionTypes.USERMAPPINGS_CLIENT_MODIFIED:\r\n return { ...state,\r\n userMappingDetail: action.data.userMappingDetail,\r\n userMappingClientModified: action.data.userMappingClientModified\r\n }; \r\n default:\r\n return { ...state\r\n };\r\n }\r\n}\r\n","import React from \"react\";\r\nimport { createDevTools } from \"redux-devtools\";\r\nimport LogMonitor from \"redux-devtools-log-monitor\";\r\nimport DockMonitor from \"redux-devtools-dock-monitor\";\r\n\r\nexport default createDevTools(\r\n \r\n \r\n \r\n);\r\n","import { createStore, applyMiddleware, compose } from \"redux\";\r\nimport thunkMiddleware from \"redux-thunk\";\r\nimport reduxImmutableStateInvariant from \"redux-immutable-state-invariant\";\r\nimport rootReducer from \"../reducers/rootReducer\";\r\nimport DevTools from \"../containers/DevTools\";\r\n\r\nexport default function configureStore(initialState) {\r\n const store = createStore(\r\n rootReducer,\r\n initialState,\r\n compose(\r\n applyMiddleware(thunkMiddleware,\r\n reduxImmutableStateInvariant()), \r\n // TODO: apply only for development \r\n DevTools.instrument()\r\n )\r\n );\r\n return store;\r\n}","import React from \"react\";\r\nimport { render } from \"react-dom\";\r\nimport { Provider } from \"react-redux\";\r\nimport application from \"./globals/application\";\r\nimport configureStore from \"./store/configureStore\";\r\nimport Root from \"./containers/Root\";\r\n\r\nlet store = configureStore({enabled: false, instrumentationKey: \"\"});\r\n\r\napplication.dispatch = store.dispatch;\r\n\r\nconst appContainer = document.getElementById(\"azureADB2C-container\");\r\nconst initCallback = appContainer.getAttribute(\"data-init-callback\");\r\napplication.init(initCallback);\r\n\r\nrender(\r\n \r\n \r\n ,\r\n appContainer\r\n); \r\n\r\n"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///external \"window.dnn.nodeModules.React\"","webpack:///external \"window.dnn.nodeModules.CommonComponents\"","webpack:///./src/utils/index.jsx","webpack:///./src/constants/actionTypes/settings.js","webpack:///./src/constants/actionTypes/index.js","webpack:///external \"window.dnn.nodeModules.ReactRedux\"","webpack:///./node_modules/prop-types/index.js","webpack:///./node_modules/css-loader/dist/runtime/api.js","webpack:///./node_modules/style-loader/lib/addStyles.js","webpack:///external \"window.dnn.nodeModules.Redux\"","webpack:///external \"window.dnn.nodeModules.ReactDOM\"","webpack:///external \"window.dnn.nodeModules.ReduxThunk\"","webpack:///external \"window.dnn.nodeModules.ReduxImmutableStateInvariant\"","webpack:///external \"window.dnn.nodeModules.ReduxDevTools\"","webpack:///external \"window.dnn.nodeModules.ReduxDevToolsLogMonitor\"","webpack:///external \"window.dnn.nodeModules.ReduxDevToolsDockMonitor\"","webpack:///./src/containers/Root.js","webpack:///./node_modules/prop-types/factoryWithThrowingShims.js","webpack:///./node_modules/prop-types/lib/ReactPropTypesSecret.js","webpack:///./src/components/general/generalSettings.less?a094","webpack:///./src/components/general/generalSettings.less","webpack:///./node_modules/css-loader/dist/runtime/url-escape.js","webpack:///./src/components/general/img/AADB2C.png","webpack:///./node_modules/style-loader/lib/urls.js","webpack:///./src/components/sync/syncSettings.less?2e00","webpack:///./src/components/sync/syncSettings.less","webpack:///./src/components/svg/error.svg","webpack:///./src/components/profileMappings/profileMappingRow/style.less?a8c9","webpack:///./src/components/profileMappings/profileMappingRow/style.less","webpack:///./src/components/profileMappings/profileMappingEditor/style.less?46d2","webpack:///./src/components/profileMappings/profileMappingEditor/style.less","webpack:///./src/components/profileMappings/style.less?b9db","webpack:///./src/components/profileMappings/style.less","webpack:///./src/components/userMappings/userMappingRow/style.less?94eb","webpack:///./src/components/userMappings/userMappingRow/style.less","webpack:///./src/components/userMappings/userMappingEditor/style.less?9fe1","webpack:///./src/components/userMappings/userMappingEditor/style.less","webpack:///./src/components/userMappings/style.less?5147","webpack:///./src/components/userMappings/style.less","webpack:///./src/components/roleMappings/roleMappingRow/style.less?b9df","webpack:///./src/components/roleMappings/roleMappingRow/style.less","webpack:///./src/components/roleMappings/roleMappingEditor/style.less?5a4a","webpack:///./src/components/roleMappings/roleMappingEditor/style.less","webpack:///./src/components/roleMappings/style.less?b107","webpack:///./src/components/roleMappings/style.less","webpack:///./src/components/style.less?07ae","webpack:///./src/components/style.less","webpack:///./src/services/applicationService.js","webpack:///./src/actions/settings.js","webpack:///./src/resources/index.jsx","webpack:///./src/components/general/generalSettings.jsx","webpack:///./src/components/general/index.jsx","webpack:///./src/components/sync/syncSettings.jsx","webpack:///./src/components/sync/index.jsx","webpack:///./src/components/profileMappings/profileMappingRow/index.jsx","webpack:///./src/components/profileMappings/profileMappingEditor/index.jsx","webpack:///./src/components/profileMappings/index.jsx","webpack:///./src/components/userMappings/userMappingRow/index.jsx","webpack:///./src/components/userMappings/userMappingEditor/index.jsx","webpack:///./src/components/userMappings/index.jsx","webpack:///./src/components/roleMappings/roleMappingRow/index.jsx","webpack:///./src/components/roleMappings/roleMappingEditor/index.jsx","webpack:///./src/components/roleMappings/index.jsx","webpack:///./src/components/App.jsx","webpack:///./src/containers/Root.prod.js","webpack:///./src/globals/application.js","webpack:///./src/reducers/rootReducer.js","webpack:///./src/reducers/settingsReducer.js","webpack:///./src/containers/DevTools.js","webpack:///./src/store/configureStore.js","webpack:///./src/main.jsx"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","window","dnn","nodeModules","React","CommonComponents","utils","init","utilities","Error","this","settingsActionTypes","SWITCH_TAB","RETRIEVED_SETTINGS","UPDATED_SETTINGS","UPDATED_PROFILEMAPPING","SETTINGS_CLIENT_MODIFIED","RETRIEVED_PROFILESETTINGS","RETRIEVED_PROFILEPROPERTIES","CANCELLED_PROFILEMAPPING_CLIENT_MODIFIED","PROFILEMAPPINGS_CLIENT_MODIFIED","SWITCH_MAPPING_SUBTAB","RETRIEVED_ROLEMAPPINGSETTINGS","RETRIEVED_AVAILABLEROLES","ROLEMAPPINGS_CLIENT_MODIFIED","RETRIEVED_USERMAPPINGSETTINGS","USERMAPPINGS_CLIENT_MODIFIED","__webpack_exports__","settings","ReactRedux","useSourceMap","list","toString","map","item","content","cssMapping","btoa","sourceMapping","sourceMap","unescape","encodeURIComponent","JSON","stringify","sourceURLs","sources","source","sourceRoot","concat","join","cssWithMappingToString","mediaQuery","alreadyImportedModules","length","id","push","fn","memo","stylesInDom","isOldIE","document","all","atob","apply","arguments","getElement","target","parent","styleTarget","querySelector","HTMLIFrameElement","contentDocument","head","e","singleton","singletonCounter","stylesInsertedAtTop","fixUrls","addStylesToDom","styles","options","domStyle","refs","j","parts","addStyle","listToStyles","newStyles","base","part","css","media","insertStyleElement","style","insertInto","lastStyleElementInsertedAtTop","insertAt","nextSibling","insertBefore","appendChild","firstChild","before","removeStyleElement","parentNode","removeChild","idx","indexOf","splice","createStyleElement","createElement","undefined","attrs","type","nonce","nc","getNonce","addAttrs","el","keys","forEach","setAttribute","obj","update","remove","result","transform","default","styleIndex","applyToSingletonTag","URL","createObjectURL","revokeObjectURL","Blob","link","rel","createLinkElement","autoFixUrls","convertToAbsoluteUrls","blob","oldSrc","href","styleSheet","cssText","createTextNode","newObj","DEBUG","newList","mayRemove","textStore","replaceText","index","replacement","filter","Boolean","cssNode","childNodes","Redux","ReactDOM","ReduxThunk","ReduxImmutableStateInvariant","ReduxDevTools","ReduxDevToolsLogMonitor","ReduxDevToolsDockMonitor","require","ReactPropTypesSecret","emptyFunction","emptyFunctionWithReset","resetWarningCache","shim","props","propName","componentName","location","propFullName","secret","err","getShim","isRequired","ReactPropTypes","array","bool","func","number","string","symbol","any","arrayOf","element","elementType","instanceOf","node","objectOf","oneOf","oneOfType","shape","exact","checkPropTypes","PropTypes","hmr","locals","___CSS_LOADER_URL___0___","urlEscape","url","needQuotes","test","slice","replace","baseUrl","protocol","host","currentDir","pathname","fullMatch","origUrl","newUrl","unquotedOrigUrl","trim","$1","applicationService","controller","sf","util","callback","getServiceFramework","payload","failureCallback","post","settingsActions","switchTab","dispatch","ActionTypes","switchMappingSubTab","getSettings","ApplicationService","data","enabled","useGlobalSettings","autoRedirect","autoAuthorize","apiKey","apiSecret","redirectUri","onErrorUri","tenantName","tenantId","signUpPolicy","profilePolicy","passwordResetPolicy","aadAppClientId","aadAppSecret","jwtAudiences","roleSyncEnabled","profileSyncEnabled","jwtAuthEnabled","apiResource","scopes","usernamePrefixEnabled","groupNamePrefixEnabled","clientModified","ropcPolicy","impersonatePolicy","updateGeneralSettings","updateAdvancedSettings","settingsClientModified","getProfileSettings","profileMapping","getProfileProperties","profileProperties","cancelProfileMappingClientModified","profileMappingClientModified","parameter","profileMappingDetail","updateProfileMapping","deleteProfileMapping","getRoleSettings","getRoleMappingSettings","roleMapping","getAvailableRoles","roles","roleMappingClientModified","roleMappingDetail","updateRoleMapping","deleteRoleMapping","getUserMappingSettings","userMapping","updateUserMapping","userMappingClientModified","userMappingDetail","resx","moduleName","getResx","GeneralSettings","_this","generalSettings_classCallCheck","_possibleConstructorReturn","_getPrototypeOf","state","error","appId","appSecret","Component","SettingsActions","nextProps","event","closePersonaBar","_this2","preventDefault","notify","setState","notifyError","external_window_dnn_nodeModules_React_default","a","className","external_window_dnn_nodeModules_CommonComponents_","columnSize","label","onText","offText","tooltipMessage","onChange","onSettingChange","withLabel","errorMessage","autoComplete","disabled","onClick","onClickCancel","onClickSave","connect","warningIcon","SyncSettings","syncSettings_classCallCheck","syncSettings_possibleConstructorReturn","syncSettings_getPrototypeOf","numberOfColumns","AadAppSecret","dangerouslySetInnerHTML","__html","ProfileMappingRow","opened","openId","Collapse","OpenCollapse","title","dnnProfilePropertyName","b2cClaimName","deletable","SvgIcons","TrashIcon","onDelete","editable","EditIcon","toggle","fixedHeight","keepContent","isOpened","float","width","overflow","children","defaultProps","collapsed","ProfileMappingEditor","profileMappingEditor_classCallCheck","profileMappingEditor_possibleConstructorReturn","profileMappingEditor_getPrototypeOf","DnnProfilePropertyName","B2cClaimName","triedToSubmit","profileMappingId","prevProps","_extends","onValidate","profileMappingEditor_typeof","availableProperties","onUpdate","confirm","columnOne","getProfilePropertyOptions","onSelect","columnTwo","inputStyle","margin","onCancel","onSave","ProfileMappings","profileMappings_classCallCheck","profileMappings_possibleConstructorReturn","profileMappings_getPrototypeOf","tableFields","newDnnProfilePropertyName","originalPropertyName","ProfileMappingId","split","find","originalDnnPropertyName","collapse","parse","responseText","Message","_this3","uncollapse","tableHeaders","field","_this4","profileMappingRow","closeOnClick","onDeleteProfileMapping","profileMappingEditor","onUpdateProfileMapping","onValidateProfileMapping","AddIcon","renderHeader","renderedProfileMappings","UserMappingRow","dnnPropertyName","UserMappingEditor","userMappingEditor_classCallCheck","userMappingEditor_possibleConstructorReturn","userMappingEditor_getPrototypeOf","mappingDetail","DnnPropertyName","mappingId","userMappingEditor_extends","userMappingEditor_typeof","mappingClientModified","cancelUserMappingClientModified","UserMappings","userMappings_classCallCheck","userMappings_possibleConstructorReturn","userMappings_getPrototypeOf","mapping","dnnMappingName","deleteUserMapping","userMappingRow","onDeleteMapping","userMappingEditor","onUpdateMapping","renderMappings","RoleMappingRow","dnnRoleName","b2cRoleName","RoleMappingEditor","roleMappingEditor_classCallCheck","roleMappingEditor_possibleConstructorReturn","roleMappingEditor_getPrototypeOf","DnnRoleName","B2cRoleName","roleMappingEditor_extends","roleMappingEditor_typeof","availableRoles","cancelRoleMappingClientModified","getRolePropertyOptions","RoleMappings","roleMappings_classCallCheck","roleMappings_possibleConstructorReturn","roleMappings_getPrototypeOf","newDnnRoleName","originalRoleName","MappingId","originalDnnRoleName","roleMappingRow","roleMappingEditor","onValidateMapping","App","App_classCallCheck","App_getPrototypeOf","onSelectTab","App_assertThisInitialized","onSelectSubTab","isOpen","titleCharLimit","selectedIndex","selectedTab","tabHeaders","general","sync","selectedMappingSubTab","userMappings","profileMappings","roleMappings","Root","components_App","boilerPlate","initAzureADB2C","utility","rootReducer","combineReducers","action","_objectSpread","selectedSubTab","roleProperties","createDevTools","external_window_dnn_nodeModules_ReduxDevToolsDockMonitor_default","toggleVisibilityKey","changePositionKey","defaultIsVisible","external_window_dnn_nodeModules_ReduxDevToolsLogMonitor_default","initialState","store","instrumentationKey","createStore","compose","applyMiddleware","thunkMiddleware","reduxImmutableStateInvariant","DevTools","instrument","application","appContainer","getElementById","initCallback","getAttribute","render","external_window_dnn_nodeModules_ReactRedux_","Root_default"],"mappings":"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","file":"bundle-en.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 47);\n","module.exports = window.dnn.nodeModules.React;","module.exports = window.dnn.nodeModules.CommonComponents;","const utils = {\r\n init(utilities) {\r\n if (!utilities) {\r\n throw new Error(\"Utilities is undefined.\");\r\n }\r\n this.utilities = utilities; \r\n },\r\n utilities: null\r\n};\r\nexport default utils;","const settingsActionTypes = { \r\n SWITCH_TAB: \"SWITCH_TAB\",\r\n RETRIEVED_SETTINGS: \"RETRIEVED_SETTINGS\",\r\n UPDATED_SETTINGS: \"UPDATED_SETTINGS\",\r\n UPDATED_PROFILEMAPPING: \"UPDATED_PROFILEMAPPING\",\r\n SETTINGS_CLIENT_MODIFIED: \"SETTINGS_CLIENT_MODIFIED\",\r\n RETRIEVED_PROFILESETTINGS: \"RETRIEVED_PROFILESETTINGS\",\r\n RETRIEVED_PROFILEPROPERTIES: \"RETRIEVED_PROFILEPROPERTIES\",\r\n CANCELLED_PROFILEMAPPING_CLIENT_MODIFIED: \"CANCELLED_PROFILEMAPPING_CLIENT_MODIFIED\",\r\n PROFILEMAPPINGS_CLIENT_MODIFIED: \"PROFILEMAPPINGS_CLIENT_MODIFIED\",\r\n SWITCH_MAPPING_SUBTAB: \"SWITCH_MAPPING_SUBTAB\",\r\n RETRIEVED_ROLEMAPPINGSETTINGS: \"RETRIEVED_ROLEMAPPINGSETTINGS\",\r\n RETRIEVED_AVAILABLEROLES: \"RETRIEVED_AVAILABLEROLES\",\r\n ROLEMAPPINGS_CLIENT_MODIFIED: \"ROLEMAPPINGS_CLIENT_MODIFIED\",\r\n RETRIEVED_USERMAPPINGSETTINGS: \"RETRIEVED_USERMAPPINGSETTINGS\",\r\n USERMAPPINGS_CLIENT_MODIFIED: \"USERMAPPINGS_CLIENT_MODIFIED\"\r\n};\r\nexport default settingsActionTypes;","import settings from \"./settings\";\r\n\r\nexport {\r\n settings\r\n};","module.exports = window.dnn.nodeModules.ReactRedux;","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nif (process.env.NODE_ENV !== 'production') {\n var ReactIs = require('react-is');\n\n // By explicitly using `prop-types` you are opting into new development behavior.\n // http://fb.me/prop-types-in-prod\n var throwOnDirectAccess = true;\n module.exports = require('./factoryWithTypeCheckers')(ReactIs.isElement, throwOnDirectAccess);\n} else {\n // By explicitly using `prop-types` you are opting into new production behavior.\n // http://fb.me/prop-types-in-prod\n module.exports = require('./factoryWithThrowingShims')();\n}\n","\"use strict\";\n\n/*\n MIT License http://www.opensource.org/licenses/mit-license.php\n Author Tobias Koppers @sokra\n*/\n// css base code, injected by the css-loader\nmodule.exports = function (useSourceMap) {\n var list = []; // return the list of modules as css string\n\n list.toString = function toString() {\n return this.map(function (item) {\n var content = cssWithMappingToString(item, useSourceMap);\n\n if (item[2]) {\n return '@media ' + item[2] + '{' + content + '}';\n } else {\n return content;\n }\n }).join('');\n }; // import a list of modules into the list\n\n\n list.i = function (modules, mediaQuery) {\n if (typeof modules === 'string') {\n modules = [[null, modules, '']];\n }\n\n var alreadyImportedModules = {};\n\n for (var i = 0; i < this.length; i++) {\n var id = this[i][0];\n\n if (id != null) {\n alreadyImportedModules[id] = true;\n }\n }\n\n for (i = 0; i < modules.length; i++) {\n var item = modules[i]; // skip already imported module\n // this implementation is not 100% perfect for weird media query combinations\n // when a module is imported multiple times with different media queries.\n // I hope this will never occur (Hey this way we have smaller bundles)\n\n if (item[0] == null || !alreadyImportedModules[item[0]]) {\n if (mediaQuery && !item[2]) {\n item[2] = mediaQuery;\n } else if (mediaQuery) {\n item[2] = '(' + item[2] + ') and (' + mediaQuery + ')';\n }\n\n list.push(item);\n }\n }\n };\n\n return list;\n};\n\nfunction cssWithMappingToString(item, useSourceMap) {\n var content = item[1] || '';\n var cssMapping = item[3];\n\n if (!cssMapping) {\n return content;\n }\n\n if (useSourceMap && typeof btoa === 'function') {\n var sourceMapping = toComment(cssMapping);\n var sourceURLs = cssMapping.sources.map(function (source) {\n return '/*# sourceURL=' + cssMapping.sourceRoot + source + ' */';\n });\n return [content].concat(sourceURLs).concat([sourceMapping]).join('\\n');\n }\n\n return [content].join('\\n');\n} // Adapted from convert-source-map (MIT)\n\n\nfunction toComment(sourceMap) {\n // eslint-disable-next-line no-undef\n var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap))));\n var data = 'sourceMappingURL=data:application/json;charset=utf-8;base64,' + base64;\n return '/*# ' + data + ' */';\n}","/*\n\tMIT License http://www.opensource.org/licenses/mit-license.php\n\tAuthor Tobias Koppers @sokra\n*/\n\nvar stylesInDom = {};\n\nvar\tmemoize = function (fn) {\n\tvar memo;\n\n\treturn function () {\n\t\tif (typeof memo === \"undefined\") memo = fn.apply(this, arguments);\n\t\treturn memo;\n\t};\n};\n\nvar isOldIE = memoize(function () {\n\t// Test for IE <= 9 as proposed by Browserhacks\n\t// @see http://browserhacks.com/#hack-e71d8692f65334173fee715c222cb805\n\t// Tests for existence of standard globals is to allow style-loader\n\t// to operate correctly into non-standard environments\n\t// @see https://github.com/webpack-contrib/style-loader/issues/177\n\treturn window && document && document.all && !window.atob;\n});\n\nvar getTarget = function (target, parent) {\n if (parent){\n return parent.querySelector(target);\n }\n return document.querySelector(target);\n};\n\nvar getElement = (function (fn) {\n\tvar memo = {};\n\n\treturn function(target, parent) {\n // If passing function in options, then use it for resolve \"head\" element.\n // Useful for Shadow Root style i.e\n // {\n // insertInto: function () { return document.querySelector(\"#foo\").shadowRoot }\n // }\n if (typeof target === 'function') {\n return target();\n }\n if (typeof memo[target] === \"undefined\") {\n\t\t\tvar styleTarget = getTarget.call(this, target, parent);\n\t\t\t// Special case to return head of iframe instead of iframe itself\n\t\t\tif (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) {\n\t\t\t\ttry {\n\t\t\t\t\t// This will throw an exception if access to iframe is blocked\n\t\t\t\t\t// due to cross-origin restrictions\n\t\t\t\t\tstyleTarget = styleTarget.contentDocument.head;\n\t\t\t\t} catch(e) {\n\t\t\t\t\tstyleTarget = null;\n\t\t\t\t}\n\t\t\t}\n\t\t\tmemo[target] = styleTarget;\n\t\t}\n\t\treturn memo[target]\n\t};\n})();\n\nvar singleton = null;\nvar\tsingletonCounter = 0;\nvar\tstylesInsertedAtTop = [];\n\nvar\tfixUrls = require(\"./urls\");\n\nmodule.exports = function(list, options) {\n\tif (typeof DEBUG !== \"undefined\" && DEBUG) {\n\t\tif (typeof document !== \"object\") throw new Error(\"The style-loader cannot be used in a non-browser environment\");\n\t}\n\n\toptions = options || {};\n\n\toptions.attrs = typeof options.attrs === \"object\" ? options.attrs : {};\n\n\t// Force single-tag solution on IE6-9, which has a hard limit on the # of \\r\\n\\r\\n\\r\\n\"","\nvar content = require(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/less-loader/dist/cjs.js!./style.less\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/less-loader/dist/cjs.js!./style.less\", function() {\n\t\tvar newContent = require(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/less-loader/dist/cjs.js!./style.less\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","exports = module.exports = require(\"../../../../node_modules/css-loader/dist/runtime/api.js\")(false);\n// Module\nexports.push([module.id, \"/* START EVOQ COLOR PALETTE */\\n/* END EVOQ COLOR PALETTE */\\n/* START ATTENTION COLORS */\\n/* END ATTENTION COLORS */\\n/* SVG HOVER STATES */\\nsvg {\\n fill: #C8C8C8;\\n}\\nsvg:hover {\\n fill: #6F7273;\\n}\\nsvg:active {\\n fill: #1E88C3;\\n}\\n/* END SVG HOVER STATES */\\n.collapsible-component-profile {\\n display: block;\\n float: left;\\n width: 100%;\\n cursor: auto;\\n}\\n.collapsible-component-profile:not(:last-child) {\\n border-bottom: 1px solid #C8C8C8;\\n}\\n.collapsible-component-profile div.collapsible-profile {\\n width: 100%;\\n float: left;\\n position: relative;\\n padding: 15px 0 10px 0;\\n box-sizing: border-box;\\n cursor: auto;\\n}\\n.collapsible-component-profile div.collapsible-profile .row {\\n float: left;\\n width: 100%;\\n}\\n.collapsible-component-profile div.collapsible-profile .row .item-row-dnnprofile {\\n width: 35%;\\n float: left;\\n padding-left: 15px;\\n word-break: break-all;\\n}\\n.collapsible-component-profile div.collapsible-profile .row .item-row-b2cprofile {\\n width: 20%;\\n float: left;\\n}\\n.collapsible-component-profile div.collapsible-profile .row .item-row-b2cextension {\\n width: 30%;\\n float: left;\\n white-space: nowrap;\\n overflow: hidden;\\n text-overflow: ellipsis;\\n}\\n.collapsible-component-profile div.collapsible-profile .row .item-row-primary {\\n width: 10%;\\n float: left;\\n text-align: center;\\n}\\n.collapsible-component-profile div.collapsible-profile .row .item-row-primary .checkMarkIcon {\\n width: 16px;\\n height: 16px;\\n margin-left: auto;\\n margin-right: auto;\\n}\\n.collapsible-component-profile div.collapsible-profile .row .item-row-primary .checkMarkIcon > svg {\\n fill: #4B4E4F;\\n}\\n.collapsible-component-profile div.collapsible-profile .row .item-row-actionButtons {\\n width: 8%;\\n margin-right: 15px;\\n float: right;\\n}\\n.collapsible-component-profile div.collapsible-profile .row .item-row-actionButtons:not(:last-child) {\\n float: left;\\n margin-right: 0px;\\n}\\n.collapsible-component-profile div.collapsible-profile .row .item-row-actionButtons .delete-icon,\\n.collapsible-component-profile div.collapsible-profile .row .item-row-actionButtons .edit-icon {\\n margin-left: 5px;\\n float: right;\\n display: block;\\n cursor: pointer;\\n}\\n.collapsible-component-profile div.collapsible-profile .row .item-row-actionButtons .delete-icon > svg,\\n.collapsible-component-profile div.collapsible-profile .row .item-row-actionButtons .edit-icon > svg {\\n width: 16px;\\n float: left;\\n height: 16px;\\n fill: #C8C8C8;\\n}\\n.collapsible-component-profile div.collapsible-profile .row .item-row-actionButtons .delete-icon > svg:hover,\\n.collapsible-component-profile div.collapsible-profile .row .item-row-actionButtons .edit-icon > svg:hover {\\n fill: #4B4E4F;\\n}\\n.collapsible-component-profile div.collapsible-profile .row .item-row-actionButtons .delete-icon-hidden {\\n display: none;\\n}\\n.collapsible-component-profile div.collapsible-profile .row .item-row-actionButtons .edit-icon-active > svg {\\n width: 16px;\\n float: right;\\n height: 16px;\\n fill: #1E88C3;\\n}\\n.collapsible-component-profile div.collapsible-profile .row .item-row-wrapper {\\n padding: 0 5px 0 5px;\\n}\\n\", \"\"]);\n\n","\nvar content = require(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/less-loader/dist/cjs.js!./style.less\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/less-loader/dist/cjs.js!./style.less\", function() {\n\t\tvar newContent = require(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/less-loader/dist/cjs.js!./style.less\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","exports = module.exports = require(\"../../../../node_modules/css-loader/dist/runtime/api.js\")(false);\n// Module\nexports.push([module.id, \"/* START EVOQ COLOR PALETTE */\\n/* END EVOQ COLOR PALETTE */\\n/* START ATTENTION COLORS */\\n/* END ATTENTION COLORS */\\n/* SVG HOVER STATES */\\nsvg {\\n fill: #C8C8C8;\\n}\\nsvg:hover {\\n fill: #6F7273;\\n}\\nsvg:active {\\n fill: #1E88C3;\\n}\\n/* END SVG HOVER STATES */\\n.profilemapping-editor {\\n float: left;\\n margin: 20px 30px;\\n}\\n.profilemapping-editor .topMessage {\\n border: 1px solid #C8C8C8;\\n padding: 10px 20px;\\n background-color: #E5E7E6;\\n margin: 0 0 20px 0;\\n}\\n.profilemapping-editor .dnn-ui-common-input-group {\\n padding: 0 0 15px 0;\\n}\\n.profilemapping-editor .dnn-ui-common-input-group label {\\n font-weight: bolder;\\n float: left;\\n}\\n.profilemapping-editor .dnn-ui-common-input-group .dnn-label {\\n margin: 8px 0;\\n}\\n.profilemapping-editor .dnn-ui-common-input-group .dnn-dropdown,\\n.profilemapping-editor .dnn-ui-common-input-group .dnn-dropdown-with-error {\\n width: 100% !important;\\n box-sizing: border-box;\\n}\\n.profilemapping-editor .dnn-ui-common-input-group .dnn-single-line-input-with-error {\\n width: 100% !important;\\n}\\n.profilemapping-editor .dnn-grid-system .left-column {\\n padding-right: 30px;\\n border-right: 1px solid #C8C8C8;\\n}\\n.profilemapping-editor .dnn-grid-system .right-column {\\n padding-left: 30px;\\n border-left: 0 !important;\\n}\\n.profilemapping-editor .editor-buttons-box {\\n width: 100%;\\n text-align: center;\\n float: left;\\n margin: 30px 0 0 0;\\n}\\n.profilemapping-editor .editor-buttons-box .dnn-ui-common-button {\\n margin: 5px;\\n}\\n.profilemapping-editor .editor-buttons-box .edit-icon {\\n margin: 0px 10px 20px 10px;\\n float: right;\\n}\\n.profilemapping-editor .editor-buttons-box .edit-icon svg {\\n width: 16px;\\n float: left;\\n height: 16px;\\n}\\n\", \"\"]);\n\n","\nvar content = require(\"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/less-loader/dist/cjs.js!./style.less\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/less-loader/dist/cjs.js!./style.less\", function() {\n\t\tvar newContent = require(\"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/less-loader/dist/cjs.js!./style.less\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","exports = module.exports = require(\"../../../node_modules/css-loader/dist/runtime/api.js\")(false);\n// Module\nexports.push([module.id, \"/* START EVOQ COLOR PALETTE */\\n/* END EVOQ COLOR PALETTE */\\n/* START ATTENTION COLORS */\\n/* END ATTENTION COLORS */\\n/* SVG HOVER STATES */\\nsvg {\\n fill: #C8C8C8;\\n}\\nsvg:hover {\\n fill: #6F7273;\\n}\\nsvg:active {\\n fill: #1E88C3;\\n}\\n/* END SVG HOVER STATES */\\n.dnn-azuread-b2c-profileMappingSettings .profile-items {\\n margin: 30px 30px;\\n width: 738px;\\n float: left;\\n box-sizing: border-box;\\n}\\n.dnn-azuread-b2c-profileMappingSettings .profile-items .profile-items-grid {\\n border: solid 1px #C8C8C8;\\n float: left;\\n width: 100%;\\n}\\n.dnn-azuread-b2c-profileMappingSettings .profile-items .header-row {\\n border-bottom: 1px solid #C8C8C8;\\n padding: 10px 0 10px 0;\\n width: 100%;\\n float: left;\\n overflow: hidden;\\n}\\n.dnn-azuread-b2c-profileMappingSettings .profile-items .header-DnnProfileProperty {\\n width: 35%;\\n float: left;\\n font-weight: bolder;\\n padding-left: 15px;\\n}\\n.dnn-azuread-b2c-profileMappingSettings .profile-items .header-B2cClaim {\\n width: 40%;\\n float: left;\\n font-weight: bolder;\\n}\\n.dnn-azuread-b2c-profileMappingSettings .profile-items .collapsible-component .collapsible-header {\\n text-align: right;\\n text-transform: none;\\n padding-right: 40px;\\n}\\n.dnn-azuread-b2c-profileMappingSettings .profile-items .collapsible-component .collapsible-header .collapse-icon {\\n display: none;\\n}\\n.dnn-azuread-b2c-profileMappingSettings .profile-items .collapsible-component .collapsible-header .collapse-icon.collapsed {\\n display: none;\\n}\\n.dnn-azuread-b2c-profileMappingSettings .profile-items .AddItemRow {\\n text-align: right;\\n width: 100%;\\n float: right;\\n margin: 0 0 15px 0;\\n font-weight: bolder;\\n border-bottom: 1px solid #C8C8C8;\\n overflow: hidden;\\n height: 25px;\\n}\\n.dnn-azuread-b2c-profileMappingSettings .profile-items .AddItemRow .sectionTitle {\\n font-weight: bolder;\\n float: left;\\n}\\n.dnn-azuread-b2c-profileMappingSettings .profile-items .AddItemRow .AddItemBox {\\n width: auto;\\n float: right;\\n color: #4B4E4F;\\n cursor: pointer;\\n}\\n.dnn-azuread-b2c-profileMappingSettings .profile-items .AddItemRow .AddItemBox .add-icon {\\n margin-left: 20px;\\n margin-right: 5px;\\n float: left;\\n cursor: pointer;\\n}\\n.dnn-azuread-b2c-profileMappingSettings .profile-items .AddItemRow .AddItemBox .add-icon svg {\\n width: 16px;\\n float: left;\\n height: 16px;\\n fill: #4B4E4F;\\n}\\n.dnn-azuread-b2c-profileMappingSettings .profile-items .AddItemRow .AddItemBox-active {\\n width: auto;\\n float: right;\\n color: #1E88C3;\\n}\\n.dnn-azuread-b2c-profileMappingSettings .profile-items .AddItemRow .AddItemBox-active .add-icon {\\n margin-left: 20px;\\n margin-right: 5px;\\n float: left;\\n}\\n.dnn-azuread-b2c-profileMappingSettings .profile-items .AddItemRow .AddItemBox-active .add-icon svg {\\n width: 16px;\\n float: left;\\n height: 16px;\\n fill: #1E88C3;\\n}\\n.dnn-azuread-b2c-profileMappingSettings .profile-items .profile-item {\\n color: #4B4E4F;\\n}\\n\", \"\"]);\n\n","\nvar content = require(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/less-loader/dist/cjs.js!./style.less\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/less-loader/dist/cjs.js!./style.less\", function() {\n\t\tvar newContent = require(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/less-loader/dist/cjs.js!./style.less\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","exports = module.exports = require(\"../../../../node_modules/css-loader/dist/runtime/api.js\")(false);\n// Module\nexports.push([module.id, \"/* START EVOQ COLOR PALETTE */\\n/* END EVOQ COLOR PALETTE */\\n/* START ATTENTION COLORS */\\n/* END ATTENTION COLORS */\\n/* SVG HOVER STATES */\\nsvg {\\n fill: #C8C8C8;\\n}\\nsvg:hover {\\n fill: #6F7273;\\n}\\nsvg:active {\\n fill: #1E88C3;\\n}\\n/* END SVG HOVER STATES */\\n.collapsible-component-item {\\n display: block;\\n float: left;\\n width: 100%;\\n cursor: auto;\\n}\\n.collapsible-component-item:not(:last-child) {\\n border-bottom: 1px solid #C8C8C8;\\n}\\n.collapsible-component-item div.collapsible-item {\\n width: 100%;\\n float: left;\\n position: relative;\\n padding: 15px 0 10px 0;\\n box-sizing: border-box;\\n cursor: auto;\\n}\\n.collapsible-component-item div.collapsible-item .row {\\n float: left;\\n width: 100%;\\n}\\n.collapsible-component-item div.collapsible-item .row .item-row-dnnproperty {\\n width: 50%;\\n float: left;\\n padding-left: 15px;\\n word-break: break-all;\\n}\\n.collapsible-component-item div.collapsible-item .row .item-row-b2cproperty {\\n width: 37%;\\n float: left;\\n white-space: nowrap;\\n overflow: hidden;\\n text-overflow: ellipsis;\\n}\\n.collapsible-component-item div.collapsible-item .row .item-row-primary {\\n width: 10%;\\n float: left;\\n text-align: center;\\n}\\n.collapsible-component-item div.collapsible-item .row .item-row-primary .checkMarkIcon {\\n width: 16px;\\n height: 16px;\\n margin-left: auto;\\n margin-right: auto;\\n}\\n.collapsible-component-item div.collapsible-item .row .item-row-primary .checkMarkIcon > svg {\\n fill: #4B4E4F;\\n}\\n.collapsible-component-item div.collapsible-item .row .item-row-actionButtons {\\n width: 8%;\\n margin-right: 15px;\\n float: right;\\n}\\n.collapsible-component-item div.collapsible-item .row .item-row-actionButtons:not(:last-child) {\\n float: left;\\n margin-right: 0px;\\n}\\n.collapsible-component-item div.collapsible-item .row .item-row-actionButtons .delete-icon,\\n.collapsible-component-item div.collapsible-item .row .item-row-actionButtons .edit-icon {\\n margin-left: 5px;\\n float: right;\\n display: block;\\n cursor: pointer;\\n}\\n.collapsible-component-item div.collapsible-item .row .item-row-actionButtons .delete-icon > svg,\\n.collapsible-component-item div.collapsible-item .row .item-row-actionButtons .edit-icon > svg {\\n width: 16px;\\n float: left;\\n height: 16px;\\n fill: #C8C8C8;\\n}\\n.collapsible-component-item div.collapsible-item .row .item-row-actionButtons .delete-icon > svg:hover,\\n.collapsible-component-item div.collapsible-item .row .item-row-actionButtons .edit-icon > svg:hover {\\n fill: #4B4E4F;\\n}\\n.collapsible-component-item div.collapsible-item .row .item-row-actionButtons .delete-icon-hidden {\\n display: none;\\n}\\n.collapsible-component-item div.collapsible-item .row .item-row-actionButtons .edit-icon-active > svg {\\n width: 16px;\\n float: right;\\n height: 16px;\\n fill: #1E88C3;\\n}\\n.collapsible-component-item div.collapsible-item .row .item-row-wrapper {\\n padding: 0 5px 0 5px;\\n}\\n\", \"\"]);\n\n","\nvar content = require(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/less-loader/dist/cjs.js!./style.less\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/less-loader/dist/cjs.js!./style.less\", function() {\n\t\tvar newContent = require(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/less-loader/dist/cjs.js!./style.less\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","exports = module.exports = require(\"../../../../node_modules/css-loader/dist/runtime/api.js\")(false);\n// Module\nexports.push([module.id, \"/* START EVOQ COLOR PALETTE */\\n/* END EVOQ COLOR PALETTE */\\n/* START ATTENTION COLORS */\\n/* END ATTENTION COLORS */\\n/* SVG HOVER STATES */\\nsvg {\\n fill: #C8C8C8;\\n}\\nsvg:hover {\\n fill: #6F7273;\\n}\\nsvg:active {\\n fill: #1E88C3;\\n}\\n/* END SVG HOVER STATES */\\n.usermapping-editor {\\n float: left;\\n margin: 20px 30px;\\n}\\n.usermapping-editor .topMessage {\\n border: 1px solid #C8C8C8;\\n padding: 10px 20px;\\n background-color: #E5E7E6;\\n margin: 0 0 20px 0;\\n}\\n.usermapping-editor .dnn-ui-common-input-group {\\n padding: 0 0 15px 0;\\n}\\n.usermapping-editor .dnn-ui-common-input-group label {\\n font-weight: bolder;\\n float: left;\\n}\\n.usermapping-editor .dnn-ui-common-input-group .dnn-label {\\n margin: 8px 0;\\n}\\n.usermapping-editor .dnn-ui-common-input-group .dnn-dropdown,\\n.usermapping-editor .dnn-ui-common-input-group .dnn-dropdown-with-error {\\n width: 100% !important;\\n box-sizing: border-box;\\n}\\n.usermapping-editor .dnn-ui-common-input-group .dnn-single-line-input-with-error {\\n width: 100% !important;\\n}\\n.usermapping-editor .dnn-grid-system .left-column {\\n padding-right: 30px;\\n border-right: 1px solid #C8C8C8;\\n}\\n.usermapping-editor .dnn-grid-system .right-column {\\n padding-left: 30px;\\n border-left: 0 !important;\\n}\\n.usermapping-editor .editor-buttons-box {\\n width: 100%;\\n text-align: center;\\n float: left;\\n margin: 30px 0 0 0;\\n}\\n.usermapping-editor .editor-buttons-box .dnn-ui-common-button {\\n margin: 5px;\\n}\\n.usermapping-editor .editor-buttons-box .edit-icon {\\n margin: 0px 10px 20px 10px;\\n float: right;\\n}\\n.usermapping-editor .editor-buttons-box .edit-icon svg {\\n width: 16px;\\n float: left;\\n height: 16px;\\n}\\n\", \"\"]);\n\n","\nvar content = require(\"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/less-loader/dist/cjs.js!./style.less\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/less-loader/dist/cjs.js!./style.less\", function() {\n\t\tvar newContent = require(\"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/less-loader/dist/cjs.js!./style.less\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","exports = module.exports = require(\"../../../node_modules/css-loader/dist/runtime/api.js\")(false);\n// Module\nexports.push([module.id, \"/* START EVOQ COLOR PALETTE */\\n/* END EVOQ COLOR PALETTE */\\n/* START ATTENTION COLORS */\\n/* END ATTENTION COLORS */\\n/* SVG HOVER STATES */\\nsvg {\\n fill: #C8C8C8;\\n}\\nsvg:hover {\\n fill: #6F7273;\\n}\\nsvg:active {\\n fill: #1E88C3;\\n}\\n/* END SVG HOVER STATES */\\n.dnn-azuread-b2c-userMappingSettings .items {\\n margin: 30px 30px;\\n width: 738px;\\n float: left;\\n box-sizing: border-box;\\n}\\n.dnn-azuread-b2c-userMappingSettings .items .items-grid {\\n border: solid 1px #C8C8C8;\\n float: left;\\n width: 100%;\\n}\\n.dnn-azuread-b2c-userMappingSettings .items .header-row {\\n border-bottom: 1px solid #C8C8C8;\\n padding: 10px 0 10px 0;\\n width: 100%;\\n float: left;\\n overflow: hidden;\\n}\\n.dnn-azuread-b2c-userMappingSettings .items .header-DnnProperty {\\n width: 50%;\\n float: left;\\n font-weight: bolder;\\n padding-left: 15px;\\n}\\n.dnn-azuread-b2c-userMappingSettings .items .header-B2cProperty {\\n width: 20%;\\n float: left;\\n font-weight: bolder;\\n}\\n.dnn-azuread-b2c-userMappingSettings .items .collapsible-component .collapsible-header {\\n text-align: right;\\n text-transform: none;\\n padding-right: 40px;\\n}\\n.dnn-azuread-b2c-userMappingSettings .items .collapsible-component .collapsible-header .collapse-icon {\\n display: none;\\n}\\n.dnn-azuread-b2c-userMappingSettings .items .collapsible-component .collapsible-header .collapse-icon.collapsed {\\n display: none;\\n}\\n.dnn-azuread-b2c-userMappingSettings .items .AddItemRow {\\n text-align: right;\\n width: 100%;\\n float: right;\\n margin: 0 0 15px 0;\\n font-weight: bolder;\\n border-bottom: 1px solid #C8C8C8;\\n overflow: hidden;\\n height: 25px;\\n}\\n.dnn-azuread-b2c-userMappingSettings .items .AddItemRow .sectionTitle {\\n font-weight: bolder;\\n float: left;\\n}\\n.dnn-azuread-b2c-userMappingSettings .items .AddItemRow .AddItemBox {\\n width: auto;\\n float: right;\\n color: #4B4E4F;\\n cursor: pointer;\\n}\\n.dnn-azuread-b2c-userMappingSettings .items .AddItemRow .AddItemBox .add-icon {\\n margin-left: 20px;\\n margin-right: 5px;\\n float: left;\\n cursor: pointer;\\n}\\n.dnn-azuread-b2c-userMappingSettings .items .AddItemRow .AddItemBox .add-icon svg {\\n width: 16px;\\n float: left;\\n height: 16px;\\n fill: #4B4E4F;\\n}\\n.dnn-azuread-b2c-userMappingSettings .items .AddItemRow .AddItemBox-active {\\n width: auto;\\n float: right;\\n color: #1E88C3;\\n}\\n.dnn-azuread-b2c-userMappingSettings .items .AddItemRow .AddItemBox-active .add-icon {\\n margin-left: 20px;\\n margin-right: 5px;\\n float: left;\\n}\\n.dnn-azuread-b2c-userMappingSettings .items .AddItemRow .AddItemBox-active .add-icon svg {\\n width: 16px;\\n float: left;\\n height: 16px;\\n fill: #1E88C3;\\n}\\n.dnn-azuread-b2c-userMappingSettings .items .role-item {\\n color: #4B4E4F;\\n}\\n\", \"\"]);\n\n","\nvar content = require(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/less-loader/dist/cjs.js!./style.less\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/less-loader/dist/cjs.js!./style.less\", function() {\n\t\tvar newContent = require(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/less-loader/dist/cjs.js!./style.less\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","exports = module.exports = require(\"../../../../node_modules/css-loader/dist/runtime/api.js\")(false);\n// Module\nexports.push([module.id, \"/* START EVOQ COLOR PALETTE */\\n/* END EVOQ COLOR PALETTE */\\n/* START ATTENTION COLORS */\\n/* END ATTENTION COLORS */\\n/* SVG HOVER STATES */\\nsvg {\\n fill: #C8C8C8;\\n}\\nsvg:hover {\\n fill: #6F7273;\\n}\\nsvg:active {\\n fill: #1E88C3;\\n}\\n/* END SVG HOVER STATES */\\n.collapsible-component-item {\\n display: block;\\n float: left;\\n width: 100%;\\n cursor: auto;\\n}\\n.collapsible-component-item:not(:last-child) {\\n border-bottom: 1px solid #C8C8C8;\\n}\\n.collapsible-component-item div.collapsible-item {\\n width: 100%;\\n float: left;\\n position: relative;\\n padding: 15px 0 10px 0;\\n box-sizing: border-box;\\n cursor: auto;\\n}\\n.collapsible-component-item div.collapsible-item .row {\\n float: left;\\n width: 100%;\\n}\\n.collapsible-component-item div.collapsible-item .row .item-row-dnnrole {\\n width: 50%;\\n float: left;\\n padding-left: 15px;\\n word-break: break-all;\\n}\\n.collapsible-component-item div.collapsible-item .row .item-row-b2crole {\\n width: 35%;\\n float: left;\\n white-space: nowrap;\\n overflow: hidden;\\n text-overflow: ellipsis;\\n}\\n.collapsible-component-item div.collapsible-item .row .item-row-primary {\\n width: 10%;\\n float: left;\\n text-align: center;\\n}\\n.collapsible-component-item div.collapsible-item .row .item-row-primary .checkMarkIcon {\\n width: 16px;\\n height: 16px;\\n margin-left: auto;\\n margin-right: auto;\\n}\\n.collapsible-component-item div.collapsible-item .row .item-row-primary .checkMarkIcon > svg {\\n fill: #4B4E4F;\\n}\\n.collapsible-component-item div.collapsible-item .row .item-row-actionButtons {\\n width: 8%;\\n margin-right: 15px;\\n float: right;\\n}\\n.collapsible-component-item div.collapsible-item .row .item-row-actionButtons:not(:last-child) {\\n float: left;\\n margin-right: 0px;\\n}\\n.collapsible-component-item div.collapsible-item .row .item-row-actionButtons .delete-icon,\\n.collapsible-component-item div.collapsible-item .row .item-row-actionButtons .edit-icon {\\n margin-left: 5px;\\n float: right;\\n display: block;\\n cursor: pointer;\\n}\\n.collapsible-component-item div.collapsible-item .row .item-row-actionButtons .delete-icon > svg,\\n.collapsible-component-item div.collapsible-item .row .item-row-actionButtons .edit-icon > svg {\\n width: 16px;\\n float: left;\\n height: 16px;\\n fill: #C8C8C8;\\n}\\n.collapsible-component-item div.collapsible-item .row .item-row-actionButtons .delete-icon > svg:hover,\\n.collapsible-component-item div.collapsible-item .row .item-row-actionButtons .edit-icon > svg:hover {\\n fill: #4B4E4F;\\n}\\n.collapsible-component-item div.collapsible-item .row .item-row-actionButtons .delete-icon-hidden {\\n display: none;\\n}\\n.collapsible-component-item div.collapsible-item .row .item-row-actionButtons .edit-icon-active > svg {\\n width: 16px;\\n float: right;\\n height: 16px;\\n fill: #1E88C3;\\n}\\n.collapsible-component-item div.collapsible-item .row .item-row-wrapper {\\n padding: 0 5px 0 5px;\\n}\\n\", \"\"]);\n\n","\nvar content = require(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/less-loader/dist/cjs.js!./style.less\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/less-loader/dist/cjs.js!./style.less\", function() {\n\t\tvar newContent = require(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/less-loader/dist/cjs.js!./style.less\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","exports = module.exports = require(\"../../../../node_modules/css-loader/dist/runtime/api.js\")(false);\n// Module\nexports.push([module.id, \"/* START EVOQ COLOR PALETTE */\\n/* END EVOQ COLOR PALETTE */\\n/* START ATTENTION COLORS */\\n/* END ATTENTION COLORS */\\n/* SVG HOVER STATES */\\nsvg {\\n fill: #C8C8C8;\\n}\\nsvg:hover {\\n fill: #6F7273;\\n}\\nsvg:active {\\n fill: #1E88C3;\\n}\\n/* END SVG HOVER STATES */\\n.rolemapping-editor {\\n float: left;\\n margin: 20px 30px;\\n}\\n.rolemapping-editor .topMessage {\\n border: 1px solid #C8C8C8;\\n padding: 10px 20px;\\n background-color: #E5E7E6;\\n margin: 0 0 20px 0;\\n}\\n.rolemapping-editor .dnn-ui-common-input-group {\\n padding: 0 0 15px 0;\\n}\\n.rolemapping-editor .dnn-ui-common-input-group label {\\n font-weight: bolder;\\n float: left;\\n}\\n.rolemapping-editor .dnn-ui-common-input-group .dnn-label {\\n margin: 8px 0;\\n}\\n.rolemapping-editor .dnn-ui-common-input-group .dnn-dropdown,\\n.rolemapping-editor .dnn-ui-common-input-group .dnn-dropdown-with-error {\\n width: 100% !important;\\n box-sizing: border-box;\\n}\\n.rolemapping-editor .dnn-ui-common-input-group .dnn-single-line-input-with-error {\\n width: 100% !important;\\n}\\n.rolemapping-editor .dnn-grid-system .left-column {\\n padding-right: 30px;\\n border-right: 1px solid #C8C8C8;\\n}\\n.rolemapping-editor .dnn-grid-system .right-column {\\n padding-left: 30px;\\n border-left: 0 !important;\\n}\\n.rolemapping-editor .editor-buttons-box {\\n width: 100%;\\n text-align: center;\\n float: left;\\n margin: 30px 0 0 0;\\n}\\n.rolemapping-editor .editor-buttons-box .dnn-ui-common-button {\\n margin: 5px;\\n}\\n.rolemapping-editor .editor-buttons-box .edit-icon {\\n margin: 0px 10px 20px 10px;\\n float: right;\\n}\\n.rolemapping-editor .editor-buttons-box .edit-icon svg {\\n width: 16px;\\n float: left;\\n height: 16px;\\n}\\n\", \"\"]);\n\n","\nvar content = require(\"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/less-loader/dist/cjs.js!./style.less\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/less-loader/dist/cjs.js!./style.less\", function() {\n\t\tvar newContent = require(\"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/less-loader/dist/cjs.js!./style.less\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","exports = module.exports = require(\"../../../node_modules/css-loader/dist/runtime/api.js\")(false);\n// Module\nexports.push([module.id, \"/* START EVOQ COLOR PALETTE */\\n/* END EVOQ COLOR PALETTE */\\n/* START ATTENTION COLORS */\\n/* END ATTENTION COLORS */\\n/* SVG HOVER STATES */\\nsvg {\\n fill: #C8C8C8;\\n}\\nsvg:hover {\\n fill: #6F7273;\\n}\\nsvg:active {\\n fill: #1E88C3;\\n}\\n/* END SVG HOVER STATES */\\n.dnn-azuread-b2c-roleMappingSettings .items {\\n margin: 30px 30px;\\n width: 738px;\\n float: left;\\n box-sizing: border-box;\\n}\\n.dnn-azuread-b2c-roleMappingSettings .items .items-grid {\\n border: solid 1px #C8C8C8;\\n float: left;\\n width: 100%;\\n}\\n.dnn-azuread-b2c-roleMappingSettings .items .header-row {\\n border-bottom: 1px solid #C8C8C8;\\n padding: 10px 0 10px 0;\\n width: 100%;\\n float: left;\\n overflow: hidden;\\n}\\n.dnn-azuread-b2c-roleMappingSettings .items .header-DnnRole {\\n width: 50%;\\n float: left;\\n font-weight: bolder;\\n padding-left: 15px;\\n}\\n.dnn-azuread-b2c-roleMappingSettings .items .header-B2cRole {\\n width: 20%;\\n float: left;\\n font-weight: bolder;\\n}\\n.dnn-azuread-b2c-roleMappingSettings .items .collapsible-component .collapsible-header {\\n text-align: right;\\n text-transform: none;\\n padding-right: 40px;\\n}\\n.dnn-azuread-b2c-roleMappingSettings .items .collapsible-component .collapsible-header .collapse-icon {\\n display: none;\\n}\\n.dnn-azuread-b2c-roleMappingSettings .items .collapsible-component .collapsible-header .collapse-icon.collapsed {\\n display: none;\\n}\\n.dnn-azuread-b2c-roleMappingSettings .items .AddItemRow {\\n text-align: right;\\n width: 100%;\\n float: right;\\n margin: 0 0 15px 0;\\n font-weight: bolder;\\n border-bottom: 1px solid #C8C8C8;\\n overflow: hidden;\\n height: 25px;\\n}\\n.dnn-azuread-b2c-roleMappingSettings .items .AddItemRow .sectionTitle {\\n font-weight: bolder;\\n float: left;\\n}\\n.dnn-azuread-b2c-roleMappingSettings .items .AddItemRow .AddItemBox {\\n width: auto;\\n float: right;\\n color: #4B4E4F;\\n cursor: pointer;\\n}\\n.dnn-azuread-b2c-roleMappingSettings .items .AddItemRow .AddItemBox .add-icon {\\n margin-left: 20px;\\n margin-right: 5px;\\n float: left;\\n cursor: pointer;\\n}\\n.dnn-azuread-b2c-roleMappingSettings .items .AddItemRow .AddItemBox .add-icon svg {\\n width: 16px;\\n float: left;\\n height: 16px;\\n fill: #4B4E4F;\\n}\\n.dnn-azuread-b2c-roleMappingSettings .items .AddItemRow .AddItemBox-active {\\n width: auto;\\n float: right;\\n color: #1E88C3;\\n}\\n.dnn-azuread-b2c-roleMappingSettings .items .AddItemRow .AddItemBox-active .add-icon {\\n margin-left: 20px;\\n margin-right: 5px;\\n float: left;\\n}\\n.dnn-azuread-b2c-roleMappingSettings .items .AddItemRow .AddItemBox-active .add-icon svg {\\n width: 16px;\\n float: left;\\n height: 16px;\\n fill: #1E88C3;\\n}\\n.dnn-azuread-b2c-roleMappingSettings .items .role-item {\\n color: #4B4E4F;\\n}\\n\", \"\"]);\n\n","\nvar content = require(\"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/less-loader/dist/cjs.js!./style.less\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/less-loader/dist/cjs.js!./style.less\", function() {\n\t\tvar newContent = require(\"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/less-loader/dist/cjs.js!./style.less\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","exports = module.exports = require(\"../../node_modules/css-loader/dist/runtime/api.js\")(false);\n// Module\nexports.push([module.id, \"#azureADB2C-container .dnn-persona-bar-page-body .persona-bar-page-body .dnn-switch-container .dnn-switch.place-left {\\n margin-left: 0px;\\n}\\n#azureADB2C-container .dnn-persona-bar-page-body .persona-bar-page-body button.dnn-ui-common-button[role=primary] {\\n margin-left: 10px;\\n}\\n\", \"\"]);\n\n","import util from \"../utils\";\r\nclass ApplicationService {\r\n getServiceFramework(controller) {\r\n let sf = util.utilities.sf;\r\n sf.controller = controller;\r\n return sf;\r\n }\r\n\r\n getSettings(callback) {\r\n const sf = this.getServiceFramework(\"AzureADB2C\"); \r\n sf.get(\"GetSettings\", {}, callback);\r\n }\r\n\r\n updateGeneralSettings(payload, callback, failureCallback) {\r\n const sf = this.getServiceFramework(\"AzureADB2C\"); \r\n sf.post(\"UpdateGeneralSettings\", payload, callback, failureCallback);\r\n } \r\n\r\n updateAdvancedSettings(payload, callback, failureCallback) {\r\n const sf = this.getServiceFramework(\"AzureADB2C\"); \r\n sf.post(\"UpdateAdvancedSettings\", payload, callback, failureCallback);\r\n }\r\n\r\n updateProfileMapping(payload, callback, failureCallback) {\r\n const sf = this.getServiceFramework(\"AzureADB2C\"); \r\n sf.post(\"UpdateProfileMapping\", payload, callback, failureCallback);\r\n }\r\n\r\n deleteProfileMapping(payload, callback, failureCallback) {\r\n const sf = this.getServiceFramework(\"AzureADB2C\"); \r\n sf.post(\"DeleteProfileMapping\", payload, callback, failureCallback);\r\n }\r\n getProfileSettings(callback) {\r\n const sf = this.getServiceFramework(\"AzureADB2C\"); \r\n sf.get(\"GetProfileSettings\", {}, callback);\r\n }\r\n\r\n getProfileProperties(callback) {\r\n const sf = this.getServiceFramework(\"AzureADB2C\"); \r\n sf.get(\"GetProfileProperties\", {}, callback);\r\n }\r\n\r\n getRoleMappingSettings(callback) {\r\n const sf = this.getServiceFramework(\"AzureADB2C\"); \r\n sf.get(\"GetRoleMappingSettings\", {}, callback);\r\n }\r\n\r\n getAvailableRoles(callback) {\r\n const sf = this.getServiceFramework(\"AzureADB2C\"); \r\n sf.get(\"GetAvailableRoles\", {}, callback);\r\n }\r\n\r\n updateRoleMapping(payload, callback, failureCallback) {\r\n const sf = this.getServiceFramework(\"AzureADB2C\"); \r\n sf.post(\"UpdateRoleMapping\", payload, callback, failureCallback);\r\n }\r\n\r\n deleteRoleMapping(payload, callback, failureCallback) {\r\n const sf = this.getServiceFramework(\"AzureADB2C\"); \r\n sf.post(\"DeleteRoleMapping\", payload, callback, failureCallback);\r\n }\r\n\r\n getUserMappingSettings(callback) {\r\n const sf = this.getServiceFramework(\"AzureADB2C\"); \r\n sf.get(\"GetUserMappingSettings\", {}, callback);\r\n }\r\n\r\n updateUserMapping(payload, callback, failureCallback) {\r\n const sf = this.getServiceFramework(\"AzureADB2C\"); \r\n sf.post(\"UpdateUserMapping\", payload, callback, failureCallback);\r\n }\r\n}\r\nconst applicationService = new ApplicationService();\r\nexport default applicationService;","import { settings as ActionTypes } from \"../constants/actionTypes\";\r\nimport ApplicationService from \"../services/applicationService\";\r\n\r\nconst settingsActions = {\r\n switchTab(index, callback) {\r\n return (dispatch) => {\r\n dispatch({\r\n type: ActionTypes.SWITCH_TAB,\r\n payload: index\r\n });\r\n if (callback) {\r\n callback();\r\n }\r\n };\r\n },\r\n switchMappingSubTab(index, callback) {\r\n return (dispatch) => {\r\n dispatch({\r\n type: ActionTypes.SWITCH_MAPPING_SUBTAB,\r\n payload: index\r\n });\r\n if (callback) {\r\n callback();\r\n }\r\n };\r\n }, \r\n getSettings(callback) {\r\n return (dispatch) => {\r\n ApplicationService.getSettings(data => {\r\n dispatch({\r\n type: ActionTypes.RETRIEVED_SETTINGS,\r\n data: {\r\n enabled: data.enabled,\r\n useGlobalSettings: data.useGlobalSettings,\r\n autoRedirect: data.autoRedirect,\r\n autoAuthorize: data.autoAuthorize,\r\n apiKey: data.apiKey,\r\n apiSecret: data.apiSecret,\r\n redirectUri: data.redirectUri,\r\n onErrorUri: data.onErrorUri,\r\n tenantName: data.tenantName,\r\n tenantId: data.tenantId,\r\n signUpPolicy: data.signUpPolicy,\r\n profilePolicy: data.profilePolicy,\r\n passwordResetPolicy: data.passwordResetPolicy,\r\n aadAppClientId: data.aadAppClientId, \r\n aadAppSecret: data.aadAppSecret,\r\n jwtAudiences: data.jwtAudiences,\r\n roleSyncEnabled: data.roleSyncEnabled,\r\n profileSyncEnabled: data.profileSyncEnabled,\r\n jwtAuthEnabled: data.jwtAuthEnabled,\r\n apiResource: data.apiResource,\r\n scopes: data.scopes,\r\n usernamePrefixEnabled: data.usernamePrefixEnabled,\r\n groupNamePrefixEnabled: data.groupNamePrefixEnabled,\r\n clientModified: false,\r\n ropcPolicy: data.ropcPolicy,\r\n impersonatePolicy: data.impersonatePolicy\r\n }\r\n });\r\n if (callback) {\r\n callback(data);\r\n }\r\n });\r\n };\r\n },\r\n updateGeneralSettings(payload, callback, failureCallback) {\r\n return (dispatch) => {\r\n ApplicationService.updateGeneralSettings(payload, data => {\r\n dispatch({\r\n type: ActionTypes.UPDATED_SETTINGS,\r\n data: {\r\n clientModified: false\r\n }\r\n });\r\n if (callback) {\r\n callback(data);\r\n }\r\n }, data => {\r\n if (failureCallback) {\r\n failureCallback(data);\r\n }\r\n });\r\n };\r\n },\r\n updateAdvancedSettings(payload, callback, failureCallback) {\r\n return (dispatch) => {\r\n ApplicationService.updateAdvancedSettings(payload, data => {\r\n dispatch({\r\n type: ActionTypes.UPDATED_SETTINGS,\r\n data: {\r\n clientModified: false\r\n }\r\n });\r\n if (callback) {\r\n callback(data);\r\n }\r\n }, data => {\r\n if (failureCallback) {\r\n failureCallback(data);\r\n }\r\n });\r\n };\r\n }, \r\n settingsClientModified(settings) {\r\n return (dispatch) => {\r\n dispatch({\r\n type: ActionTypes.SETTINGS_CLIENT_MODIFIED,\r\n data: {\r\n enabled: settings.enabled,\r\n useGlobalSettings: settings.useGlobalSettings,\r\n autoRedirect: settings.autoRedirect,\r\n autoAuthorize: settings.autoAuthorize,\r\n apiKey: settings.apiKey,\r\n apiSecret: settings.apiSecret,\r\n redirectUri: settings.redirectUri,\r\n onErrorUri: settings.onErrorUri,\r\n tenantName: settings.tenantName,\r\n tenantId: settings.tenantId,\r\n signUpPolicy: settings.signUpPolicy,\r\n profilePolicy: settings.profilePolicy,\r\n passwordResetPolicy: settings.passwordResetPolicy,\r\n aadAppClientId: settings.aadAppClientId,\r\n aadAppSecret: settings.aadAppSecret,\r\n jwtAudiences: settings.jwtAudiences,\r\n roleSyncEnabled: settings.roleSyncEnabled,\r\n profileSyncEnabled: settings.profileSyncEnabled,\r\n jwtAuthEnabled: settings.jwtAuthEnabled,\r\n apiResource: settings.apiResource,\r\n scopes: settings.scopes,\r\n usernamePrefixEnabled: settings.usernamePrefixEnabled,\r\n groupNamePrefixEnabled: settings.groupNamePrefixEnabled,\r\n clientModified: true,\r\n ropcPolicy: settings.ropcPolicy,\r\n impersonatePolicy: settings.impersonatePolicy\r\n }\r\n });\r\n };\r\n },\r\n getProfileSettings(callback) {\r\n return (dispatch) => {\r\n ApplicationService.getProfileSettings(data => {\r\n dispatch({\r\n type: ActionTypes.RETRIEVED_PROFILESETTINGS,\r\n data: {\r\n profileMapping: data\r\n }\r\n });\r\n if (callback) {\r\n callback(data);\r\n }\r\n });\r\n };\r\n },\r\n getProfileProperties(callback) {\r\n return (dispatch) => {\r\n ApplicationService.getProfileProperties(data => {\r\n dispatch({\r\n type: ActionTypes.RETRIEVED_PROFILEPROPERTIES,\r\n data: {\r\n profileProperties: data\r\n }\r\n });\r\n if (callback) {\r\n callback(data);\r\n }\r\n });\r\n };\r\n },\r\n cancelProfileMappingClientModified() {\r\n return (dispatch) => {\r\n dispatch({\r\n type: ActionTypes.CANCELLED_PROFILEMAPPING_CLIENT_MODIFIED,\r\n data: {\r\n profileMappingClientModified: false\r\n }\r\n });\r\n };\r\n },\r\n profileMappingClientModified(parameter) {\r\n return (dispatch) => {\r\n dispatch({\r\n type: ActionTypes.PROFILEMAPPINGS_CLIENT_MODIFIED,\r\n data: {\r\n profileMappingDetail: parameter,\r\n profileMappingClientModified: true\r\n }\r\n });\r\n };\r\n },\r\n updateProfileMapping(payload, callback, failureCallback) {\r\n return () => {\r\n ApplicationService.updateProfileMapping(payload, data => {\r\n if (callback) {\r\n callback(data);\r\n }\r\n }, data => {\r\n if (failureCallback) {\r\n failureCallback(data);\r\n }\r\n });\r\n };\r\n },\r\n deleteProfileMapping(payload, callback, failureCallback) {\r\n return () => {\r\n ApplicationService.deleteProfileMapping(payload, data => {\r\n if (callback) {\r\n callback(data);\r\n }\r\n }, data => {\r\n if (failureCallback) {\r\n failureCallback(data);\r\n }\r\n });\r\n };\r\n },\r\n getRoleSettings(callback) {\r\n return (dispatch) => {\r\n ApplicationService.getRoleMappingSettings(data => {\r\n dispatch({\r\n type: ActionTypes.RETRIEVED_ROLEMAPPINGSETTINGS,\r\n data: {\r\n roleMapping: data\r\n }\r\n });\r\n if (callback) {\r\n callback(data);\r\n }\r\n });\r\n };\r\n },\r\n getAvailableRoles(callback) {\r\n return (dispatch) => {\r\n ApplicationService.getAvailableRoles(data => {\r\n dispatch({\r\n type: ActionTypes.RETRIEVED_AVAILABLEROLES,\r\n data: {\r\n roles: data\r\n }\r\n });\r\n if (callback) {\r\n callback(data);\r\n }\r\n });\r\n };\r\n },\r\n roleMappingClientModified(parameter) {\r\n return (dispatch) => {\r\n dispatch({\r\n type: ActionTypes.ROLEMAPPINGS_CLIENT_MODIFIED,\r\n data: {\r\n roleMappingDetail: parameter,\r\n roleMappingClientModified: true\r\n }\r\n });\r\n };\r\n },\r\n updateRoleMapping(payload, callback, failureCallback) {\r\n return () => {\r\n ApplicationService.updateRoleMapping(payload, data => {\r\n if (callback) {\r\n callback(data);\r\n }\r\n }, data => {\r\n if (failureCallback) {\r\n failureCallback(data);\r\n }\r\n });\r\n };\r\n },\r\n deleteRoleMapping(payload, callback, failureCallback) {\r\n return () => {\r\n ApplicationService.deleteRoleMapping(payload, data => {\r\n if (callback) {\r\n callback(data);\r\n }\r\n }, data => {\r\n if (failureCallback) {\r\n failureCallback(data);\r\n }\r\n });\r\n };\r\n },\r\n getUserMappingSettings(callback) {\r\n return (dispatch) => {\r\n ApplicationService.getUserMappingSettings(data => {\r\n dispatch({\r\n type: ActionTypes.RETRIEVED_USERMAPPINGSETTINGS,\r\n data: {\r\n userMapping: data\r\n }\r\n });\r\n if (callback) {\r\n callback(data);\r\n }\r\n });\r\n };\r\n },\r\n updateUserMapping(payload, callback, failureCallback) {\r\n return () => {\r\n ApplicationService.updateUserMapping(payload, data => {\r\n if (callback) {\r\n callback(data);\r\n }\r\n }, data => {\r\n if (failureCallback) {\r\n failureCallback(data);\r\n }\r\n });\r\n };\r\n },\r\n userMappingClientModified(parameter) {\r\n return (dispatch) => {\r\n dispatch({\r\n type: ActionTypes.USERMAPPINGS_CLIENT_MODIFIED,\r\n data: {\r\n userMappingDetail: parameter,\r\n userMappingClientModified: true\r\n }\r\n });\r\n };\r\n },\r\n};\r\n\r\nexport default settingsActions;","import util from \"../utils\";\r\n\r\nconst resx = {\r\n get(key) {\r\n let moduleName = util.moduleName;\r\n return util.utilities.getResx(moduleName, key);\r\n }\r\n};\r\nexport default resx;","import React, {Component} from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport { connect } from \"react-redux\";\r\nimport { GridSystem, GridCell, Switch, SingleLineInputWithError, Button, InputGroup } from \"@dnnsoftware/dnn-react-common\";\r\nimport SettingsActions from \"../../actions/settings\";\r\nimport resx from \"../../resources\";\r\nimport \"./generalSettings.less\";\r\nimport utils from \"../../utils\";\r\n\r\nclass GeneralSettings extends Component {\r\n\r\n constructor() {\r\n super();\r\n\r\n this.state = {\r\n error: {\r\n appId: false,\r\n appSecret: false,\r\n tenantName: false,\r\n tenantId: false\r\n }\r\n };\r\n }\r\n UNSAFE_componentWillMount() {\r\n const {props} = this;\r\n\r\n props.dispatch(SettingsActions.getSettings());\r\n }\r\n\r\n UNSAFE_componentWillReceiveProps(nextProps) {\r\n const {state} = this;\r\n\r\n state.error[\"appId\"] = (nextProps.apiKey === \"\");\r\n state.error[\"appSecret\"] = (nextProps.apiSecret === \"\");\r\n state.error[\"tenantName\"] = (nextProps.tenantName === \"\");\r\n state.error[\"tenantId\"] = (nextProps.tenantId === \"\");\r\n state.error[\"signUpPolicy\"] = (nextProps.signUpPolicy === \"\");\r\n state.error[\"profilePolicy\"] = (nextProps.profilePolicy === \"\");\r\n state.error[\"passwordResetPolicy\"] = (nextProps.passwordResetPolicy === \"\");\r\n } \r\n\r\n onSettingChange(key, event) {\r\n let {props} = this;\r\n\r\n props.dispatch(SettingsActions.settingsClientModified({\r\n enabled: (key === \"AADB2CProviderEnabled\") ? !props.enabled : props.enabled,\r\n useGlobalSettings: (key === \"UseGlobalSettings\") ? !props.useGlobalSettings : props.useGlobalSettings,\r\n autoRedirect: (key === \"AutoRedirect\") ? !props.autoRedirect : props.autoRedirect,\r\n autoAuthorize: (key === \"AutoAuthorize\") ? !props.autoAuthorize : props.autoAuthorize,\r\n apiKey: (key === \"AppId\") ? event.target.value : props.apiKey,\r\n apiSecret: (key === \"AppSecret\") ? event.target.value : props.apiSecret,\r\n redirectUri: (key === \"RedirectUri\") ? event.target.value : props.redirectUri,\r\n onErrorUri: (key === \"OnErrorUri\") ? event.target.value : props.onErrorUri,\r\n tenantName: (key === \"TenantName\") ? event.target.value : props.tenantName,\r\n tenantId: (key === \"TenantId\") ? event.target.value : props.tenantId,\r\n signUpPolicy: (key === \"SignUpPolicy\") ? event.target.value : props.signUpPolicy,\r\n profilePolicy: (key === \"ProfilePolicy\") ? event.target.value : props.profilePolicy,\r\n passwordResetPolicy: (key === \"PasswordResetPolicy\") ? event.target.value : props.passwordResetPolicy,\r\n ropcPolicy: (key === \"RopcPolicy\") ? event.target.value : props.ropcPolicy,\r\n impersonatePolicy: (key === \"ImpersonatePolicy\") ? event.target.value : props.impersonatePolicy,\r\n }));\r\n }\r\n\r\n onClickCancel() {\r\n utils.utilities.closePersonaBar();\r\n }\r\n\r\n onClickSave() {\r\n event.preventDefault();\r\n let {props} = this;\r\n\r\n props.dispatch(SettingsActions.updateGeneralSettings({\r\n enabled: props.enabled,\r\n useGlobalSettings: props.useGlobalSettings,\r\n autoRedirect: props.autoRedirect,\r\n autoAuthorize: props.autoAuthorize,\r\n apiKey: props.apiKey,\r\n apiSecret: props.apiSecret,\r\n redirectUri: props.redirectUri,\r\n onErrorUri: props.onErrorUri,\r\n tenantName: props.tenantName,\r\n tenantId: props.tenantId,\r\n signUpPolicy: props.signUpPolicy,\r\n profilePolicy: props.profilePolicy,\r\n passwordResetPolicy: props.passwordResetPolicy,\r\n ropcPolicy: props.ropcPolicy,\r\n impersonatePolicy: props.impersonatePolicy\r\n }, () => {\r\n utils.utilities.notify(resx.get(\"SettingsUpdateSuccess\"));\r\n this.setState({\r\n clientModified: false\r\n }); \r\n }, () => {\r\n utils.utilities.notifyError(resx.get(\"SettingsError\"));\r\n }));\r\n }\r\n\r\n render() {\r\n return (\r\n
\r\n \r\n

{resx.get(\"lblTabDescription\")}

\r\n \r\n \r\n
\r\n \r\n
\r\n \r\n \r\n
\r\n \r\n \r\n

{resx.get(\"lblDirectory\")}

\r\n \r\n \r\n {/*

{resx.get(\"lblProviderCredentials\")}

*/}\r\n \r\n \r\n \r\n \r\n
\r\n \r\n

{resx.get(\"lblPolicies\")}

\r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n \r\n {resx.get(\"Cancel\")}\r\n \r\n \r\n {resx.get(\"SaveSettings\")}\r\n \r\n
\r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nGeneralSettings.propTypes = {\r\n dispatch: PropTypes.func.isRequired,\r\n enabled: PropTypes.bool,\r\n useGlobalSettings: PropTypes.bool,\r\n autoRedirect: PropTypes.bool,\r\n autoAuthorize: PropTypes.bool,\r\n apiKey: PropTypes.string,\r\n apiSecret: PropTypes.string,\r\n redirectUri: PropTypes.string,\r\n onErrorUri: PropTypes.string, \r\n tenantName: PropTypes.string,\r\n tenantId: PropTypes.string,\r\n signUpPolicy: PropTypes.string,\r\n profilePolicy: PropTypes.string,\r\n passwordResetPolicy: PropTypes.string,\r\n ropcPolicy: PropTypes.string,\r\n impersonatePolicy: PropTypes.string\r\n};\r\n\r\n\r\nfunction mapStateToProps(state) {\r\n return {\r\n enabled: state.settings.enabled,\r\n useGlobalSettings: state.settings.useGlobalSettings,\r\n autoRedirect: state.settings.autoRedirect,\r\n autoAuthorize: state.settings.autoAuthorize,\r\n apiKey: state.settings.apiKey,\r\n apiSecret: state.settings.apiSecret,\r\n redirectUri: state.settings.redirectUri,\r\n onErrorUri: state.settings.onErrorUri,\r\n tenantName: state.settings.tenantName,\r\n tenantId: state.settings.tenantId,\r\n signUpPolicy: state.settings.signUpPolicy,\r\n profilePolicy: state.settings.profilePolicy,\r\n passwordResetPolicy: state.settings.passwordResetPolicy,\r\n ropcPolicy: state.settings.ropcPolicy,\r\n impersonatePolicy: state.settings.impersonatePolicy\r\n };\r\n}\r\n\r\nexport default connect(mapStateToProps)(GeneralSettings);","import GeneralSettings from \"./generalSettings\";\r\n\r\nexport default GeneralSettings;","import React, {Component} from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport { connect } from \"react-redux\";\r\nimport { GridSystem, GridCell, Switch, SingleLineInputWithError, Button, InputGroup} from \"@dnnsoftware/dnn-react-common\";\r\nimport SettingsActions from \"../../actions/settings\";\r\nimport resx from \"../../resources\";\r\nimport \"./syncSettings.less\";\r\nimport utils from \"../../utils\";\r\n\r\n/*eslint-disable quotes*/\r\nconst warningIcon = require(`!raw-loader!./../svg/error.svg`).default;\r\n\r\nclass SyncSettings extends Component {\r\n\r\n constructor() {\r\n super();\r\n\r\n this.state = {\r\n error: {\r\n aadAppClientId: false,\r\n aadAppSecret: false\r\n }\r\n };\r\n }\r\n\r\n UNSAFE_componentWillMount() {\r\n const {props} = this;\r\n\r\n props.dispatch(SettingsActions.getSettings());\r\n }\r\n\r\n UNSAFE_componentWillReceiveProps(nextProps) {\r\n const {state} = this;\r\n\r\n state.error[\"aadAppClientId\"] = ((nextProps.roleSyncEnabled || nextProps.profileSyncEnabled) && nextProps.aadAppClientId === \"\");\r\n state.error[\"aadAppSecret\"] = ((nextProps.roleSyncEnabled || nextProps.profileSyncEnabled) && nextProps.aadAppSecret === \"\");\r\n } \r\n\r\n onSettingChange(key, event) {\r\n let {props} = this;\r\n\r\n props.dispatch(SettingsActions.settingsClientModified({\r\n aadAppClientId: (key === \"AadAppClientId\") ? event.target.value : props.aadAppClientId,\r\n aadAppSecret: (key === \"AadAppSecret\") ? event.target.value : props.aadAppSecret,\r\n jwtAudiences: (key === \"jwtAudiences\") ? event.target.value : props.jwtAudiences,\r\n roleSyncEnabled: (key === \"roleSyncEnabled\") ? !props.roleSyncEnabled : props.roleSyncEnabled,\r\n profileSyncEnabled: (key === \"profileSyncEnabled\") ? !props.profileSyncEnabled : props.profileSyncEnabled,\r\n jwtAuthEnabled: (key === \"jwtAuthEnabled\") ? !props.jwtAuthEnabled : props.jwtAuthEnabled,\r\n apiResource: (key === \"apiResource\") ? event.target.value : props.apiResource,\r\n scopes: (key === \"scopes\") ? event.target.value : props.scopes,\r\n usernamePrefixEnabled: (key === \"usernamePrefixEnabled\") ? !props.usernamePrefixEnabled : props.usernamePrefixEnabled,\r\n groupNamePrefixEnabled: (key === \"groupNamePrefixEnabled\") ? !props.groupNamePrefixEnabled : props.groupNamePrefixEnabled\r\n }));\r\n } \r\n\r\n onClickCancel() {\r\n utils.utilities.closePersonaBar();\r\n }\r\n \r\n onClickSave() {\r\n event.preventDefault();\r\n let {props} = this;\r\n\r\n props.dispatch(SettingsActions.updateAdvancedSettings({\r\n aadAppClientId: props.aadAppClientId,\r\n aadAppSecret: props.aadAppSecret,\r\n jwtAudiences: props.jwtAudiences,\r\n roleSyncEnabled: props.roleSyncEnabled,\r\n profileSyncEnabled: props.profileSyncEnabled,\r\n jwtAuthEnabled: props.jwtAuthEnabled,\r\n apiResource: props.apiResource,\r\n scopes: props.scopes,\r\n usernamePrefixEnabled: props.usernamePrefixEnabled,\r\n groupNamePrefixEnabled: props.groupNamePrefixEnabled\r\n }, () => {\r\n utils.utilities.notify(resx.get(\"SettingsUpdateSuccess\"));\r\n this.setState({\r\n clientModified: false\r\n }); \r\n }, () => {\r\n utils.utilities.notifyError(resx.get(\"SettingsError\"));\r\n }));\r\n }\r\n \r\n /* eslint-disable react/no-danger */\r\n render() {\r\n return (\r\n
\r\n \r\n \r\n \r\n

{resx.get(\"lblSynchronization\")}

\r\n

{resx.get(\"lblSynchronizationDesc\")}

\r\n \r\n \r\n
\r\n \r\n

{resx.get(\"lblAADSettings\")}

\r\n

{resx.get(\"lblGraphClient.Help\")}\r\n

\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n

{resx.get(\"lblNamePrefixes\")}

\r\n

{resx.get(\"lblNamePrefixes.Help\")}

\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
{resx.get(\"NamePrefixesWarningMessage\")}
\r\n
\r\n \r\n \r\n \r\n \r\n

{resx.get(\"lblTokenValidation\")}

\r\n

{resx.get(\"lblTokenValidation.Help\")}

\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n

{resx.get(\"lblAPIResource\")}

\r\n

{resx.get(\"lblAPIResourceDesc\")}

\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n
\r\n \r\n \r\n {resx.get(\"SaveSettings\")}\r\n \r\n
\r\n
\r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nSyncSettings.propTypes = {\r\n dispatch: PropTypes.func.isRequired,\r\n aadAppClientId: PropTypes.string,\r\n aadAppSecret: PropTypes.string,\r\n jwtAudiences: PropTypes.string,\r\n roleSyncEnabled: PropTypes.bool,\r\n profileSyncEnabled: PropTypes.bool,\r\n jwtAuthEnabled: PropTypes.bool,\r\n apiResource: PropTypes.string,\r\n scopes: PropTypes.string,\r\n usernamePrefixEnabled: PropTypes.bool,\r\n groupNamePrefixEnabled: PropTypes.bool\r\n};\r\n\r\n\r\nfunction mapStateToProps(state) {\r\n return {\r\n aadAppClientId: state.settings.aadAppClientId,\r\n aadAppSecret: state.settings.aadAppSecret,\r\n jwtAudiences: state.settings.jwtAudiences,\r\n roleSyncEnabled: state.settings.roleSyncEnabled,\r\n profileSyncEnabled: state.settings.profileSyncEnabled,\r\n jwtAuthEnabled: state.settings.jwtAuthEnabled,\r\n apiResource: state.settings.apiResource,\r\n scopes: state.settings.scopes,\r\n usernamePrefixEnabled: state.settings.usernamePrefixEnabled,\r\n groupNamePrefixEnabled: state.settings.groupNamePrefixEnabled\r\n };\r\n}\r\nexport default connect(mapStateToProps)(SyncSettings);","import SyncSettings from \"./syncSettings\";\r\n\r\nexport default SyncSettings;","import React, { Component } from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport { Collapsible, SvgIcons } from \"@dnnsoftware/dnn-react-common\";\r\nimport \"./style.less\";\r\n\r\nclass ProfileMappingRow extends Component {\r\n /* eslint-disable react/no-did-mount-set-state */\r\n componentDidMount() {\r\n let opened = (this.props.openId !== \"\" && this.props.id === this.props.openId);\r\n this.setState({\r\n opened\r\n });\r\n }\r\n\r\n toggle() {\r\n if ((this.props.openId !== \"\" && this.props.id === this.props.openId)) {\r\n this.props.Collapse();\r\n }\r\n else {\r\n this.props.OpenCollapse(this.props.id);\r\n }\r\n }\r\n\r\n /* eslint-disable react/no-danger */\r\n render() {\r\n const {props} = this;\r\n let opened = (this.props.openId !== \"\" && this.props.id === this.props.openId);\r\n return (\r\n
\r\n
\r\n
\r\n
\r\n {props.dnnProfilePropertyName}
\r\n
\r\n {props.b2cClaimName}
\r\n
\r\n {props.deletable &&\r\n
\r\n }\r\n {props.editable &&\r\n
\r\n }\r\n
\r\n
\r\n
\r\n {opened && props.children}\r\n
\r\n );\r\n }\r\n}\r\n\r\nProfileMappingRow.propTypes = {\r\n profileMappingId: PropTypes.string,\r\n dnnProfilePropertyName: PropTypes.string,\r\n b2cClaimName: PropTypes.string,\r\n deletable: PropTypes.bool,\r\n editable: PropTypes.bool,\r\n OpenCollapse: PropTypes.func,\r\n Collapse: PropTypes.func,\r\n onDelete: PropTypes.func,\r\n id: PropTypes.string,\r\n openId: PropTypes.string\r\n};\r\n\r\nProfileMappingRow.defaultProps = {\r\n collapsed: true,\r\n deletable: true,\r\n editable: true\r\n};\r\nexport default (ProfileMappingRow);\r\n","import React, { Component } from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport { connect } from \"react-redux\";\r\nimport \"./style.less\";\r\nimport { SingleLineInputWithError, GridSystem, Button, InputGroup, DropdownWithError } from \"@dnnsoftware/dnn-react-common\";\r\nimport SettingsActions from \"../../../actions/settings\";\r\nimport util from \"../../../utils\";\r\nimport resx from \"../../../resources\";\r\n\r\nclass ProfileMappingEditor extends Component {\r\n constructor() {\r\n super();\r\n\r\n this.state = {\r\n profileMappingDetail: {\r\n DnnProfilePropertyName: \"\",\r\n B2cClaimName: \"\"\r\n },\r\n error: {\r\n dnnProfilePropertyName: false,\r\n b2cClaimName: false\r\n },\r\n triedToSubmit: false\r\n };\r\n }\r\n \r\n componentWillMount() {\r\n const {props} = this;\r\n const {state} = this;\r\n\r\n state.profileMappingDetail[\"ProfileMappingId\"] = props.profileMappingId;\r\n state.profileMappingDetail[\"DnnProfilePropertyName\"] = props.dnnProfilePropertyName;\r\n state.profileMappingDetail[\"B2cClaimName\"] = props.b2cClaimName;\r\n\r\n state.error[\"dnnProfilePropertyName\"] = (props.dnnProfilePropertyName === null);\r\n state.error[\"b2cClaimName\"] = (props.b2cClaimName === null);\r\n }\r\n\r\n /* eslint-disable react/no-did-update-set-state */\r\n componentDidUpdate(prevProps) {\r\n const {props, state} = this;\r\n if ((props !== prevProps) && props.profileMappingDetail ) {\r\n if (props.profileMappingDetail[\"DnnProfilePropertyName\"] === undefined || props.profileMappingDetail[\"DnnProfilePropertyName\"] === \"\") {\r\n state.error[\"dnnProfilePropertyName\"] = true;\r\n }\r\n else if (props.profileMappingDetail[\"DnnProfilePropertyName\"] !== \"\" && props.profileMappingDetail[\"DnnProfilePropertyName\"] !== undefined) {\r\n state.error[\"dnnProfilePropertyName\"] = false;\r\n }\r\n \r\n this.setState({\r\n profileMappingDetail: Object.assign({}, props.profileMappingDetail),\r\n triedToSubmit: false,\r\n error: state.error\r\n });\r\n }\r\n }\r\n\r\n onSettingChange(key, event) {\r\n let {state, props} = this;\r\n let profileMappingDetail = Object.assign({}, state.profileMappingDetail);\r\n\r\n if (key === \"DnnProfilePropertyName\") {\r\n state.error[\"dnnProfilePropertyName\"] = !props.onValidate(profileMappingDetail, event.value);\r\n }\r\n\r\n if (profileMappingDetail[key] === \"\" && key === \"B2cClaimName\") {\r\n state.error[\"b2cClaimName\"] = true;\r\n }\r\n else if (profileMappingDetail[key] !== \"\" && key === \"B2cClaimName\") {\r\n state.error[\"b2cClaimName\"] = false;\r\n }\r\n\r\n if (key === \"DnnProfilePropertyName\") {\r\n profileMappingDetail[key] = event.value;\r\n }\r\n else {\r\n profileMappingDetail[key] = typeof (event) === \"object\" ? event.target.value : event;\r\n }\r\n\r\n this.setState({\r\n profileMappingDetail: profileMappingDetail,\r\n triedToSubmit: false,\r\n error: state.error\r\n });\r\n\r\n props.dispatch(SettingsActions.profileMappingClientModified(profileMappingDetail));\r\n }\r\n\r\n getProfilePropertyOptions() {\r\n let options = [];\r\n \r\n if (this.props.availableProperties !== undefined) {\r\n options = this.props.availableProperties.map((item) => {\r\n return { label: item, value: item };\r\n });\r\n }\r\n return options;\r\n }\r\n\r\n onSave() {\r\n const {props, state} = this;\r\n this.setState({\r\n triedToSubmit: true\r\n });\r\n if (state.error.dnnProfilePropertyName || state.error.b2cClaimName) {\r\n return;\r\n }\r\n\r\n props.onUpdate(state.profileMappingDetail);\r\n props.Collapse();\r\n }\r\n\r\n onCancel() {\r\n const {props} = this;\r\n\r\n if (props.profileMappingClientModified) {\r\n util.utilities.confirm(resx.get(\"SettingsRestoreWarning\"), resx.get(\"Yes\"), resx.get(\"No\"), () => {\r\n props.dispatch(SettingsActions.cancelProfileMappingClientModified());\r\n props.Collapse();\r\n });\r\n }\r\n else {\r\n props.Collapse();\r\n }\r\n }\r\n\r\n /* eslint-disable react/no-danger */\r\n render() {\r\n if (this.state.profileMappingDetail !== undefined || this.props.id === \"add\") {\r\n const columnOne =
\r\n \r\n \r\n \r\n
;\r\n const columnTwo =
\r\n \r\n \r\n \r\n
;\r\n\r\n return (\r\n
\r\n {[columnOne, columnTwo]}\r\n
\r\n \r\n {resx.get(\"Cancel\")}\r\n \r\n \r\n {resx.get(\"SaveSettings\")}\r\n \r\n
\r\n
\r\n );\r\n }\r\n else return
;\r\n }\r\n}\r\n\r\nProfileMappingEditor.propTypes = {\r\n dispatch: PropTypes.func.isRequired,\r\n profileMappingDetail: PropTypes.object,\r\n profileMappingId: PropTypes.string,\r\n dnnProfilePropertyName: PropTypes.string,\r\n b2cClaimName: PropTypes.string,\r\n Collapse: PropTypes.func,\r\n onUpdate: PropTypes.func,\r\n id: PropTypes.string,\r\n profileMappingClientModified: PropTypes.bool,\r\n availableProperties: PropTypes.array,\r\n onValidate: PropTypes.func\r\n};\r\n\r\nfunction mapStateToProps() {\r\n return {\r\n // profileMappingDetail: state.siteBehavior.aliasDetail,\r\n // profileMappingClientModified: state.siteBehavior.siteAliasClientModified\r\n };\r\n}\r\n\r\nexport default connect(mapStateToProps)(ProfileMappingEditor);","import React, {Component} from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport { connect } from \"react-redux\";\r\nimport SettingsActions from \"../../actions/settings\";\r\nimport ProfileMappingRow from \"./profileMappingRow\";\r\nimport ProfileMappingEditor from \"./profileMappingEditor\";\r\nimport { Collapsible } from \"@dnnsoftware/dnn-react-common\";\r\nimport \"./style.less\";\r\nimport { SvgIcons } from \"@dnnsoftware/dnn-react-common\";\r\nimport utils from \"../../utils\";\r\nimport resx from \"../../resources\";\r\n\r\nclass ProfileMappings extends Component {\r\n\r\n constructor() {\r\n super();\r\n\r\n this.state = {\r\n openId: \"\",\r\n tableFields: [],\r\n error: {\r\n profileMapping: false\r\n }\r\n };\r\n }\r\n UNSAFE_componentWillMount() {\r\n const {props} = this;\r\n\r\n props.dispatch(SettingsActions.getProfileSettings());\r\n props.dispatch(SettingsActions.getProfileProperties());\r\n }\r\n\r\n UNSAFE_componentWillReceiveProps(nextProps) {\r\n const {state} = this;\r\n\r\n state.error[\"profileMapping\"] = (nextProps.profileMapping === null);\r\n }\r\n\r\n onValidateProfileMapping(profileMappingDetail, newDnnProfilePropertyName) {\r\n let originalPropertyName = null;\r\n if (profileMappingDetail.ProfileMappingId) {\r\n originalPropertyName = profileMappingDetail.ProfileMappingId.split(\"-\")[0];\r\n }\r\n if (originalPropertyName !== newDnnProfilePropertyName) {\r\n // The PropertyName of this row has changed. Let's see if that property has already been mapped\r\n if (this.props.profileMapping.find(p => p.DnnProfilePropertyName === newDnnProfilePropertyName) !== undefined) {\r\n return false; // Not valid; it's already in the list\r\n }\r\n else {\r\n return true;\r\n }\r\n }\r\n else {\r\n return true;\r\n }\r\n }\r\n onUpdateProfileMapping(profileMappingDetail) {\r\n const {props} = this;\r\n\r\n let originalPropertyName = profileMappingDetail.ProfileMappingId ? profileMappingDetail.ProfileMappingId.split(\"-\")[0] : null;\r\n if (originalPropertyName !== profileMappingDetail.DnnProfilePropertyName) {\r\n // The PropertyName of this row has changed. Let's see if that property has already been mapped\r\n if (this.props.profileMapping.find(p => p.DnnProfilePropertyName === profileMappingDetail.DnnProfilePropertyName) !== undefined) {\r\n utils.utilities.notifyError(resx.get(\"ErrorProfileMappingDuplicated\"));\r\n return;\r\n }\r\n }\r\n\r\n let payload = {\r\n originalDnnPropertyName: originalPropertyName,\r\n profileMappingDetail: profileMappingDetail\r\n };\r\n props.dispatch(SettingsActions.updateProfileMapping(payload, () => {\r\n utils.utilities.notify(resx.get(\"MappingUpdateSuccess\"));\r\n this.collapse();\r\n props.dispatch(SettingsActions.getProfileSettings());\r\n }, (error) => {\r\n const errorMessage = JSON.parse(error.responseText);\r\n utils.utilities.notifyError(errorMessage.Message);\r\n }));\r\n }\r\n\r\n onDeleteProfileMapping(profileMappingId) {\r\n const {props} = this;\r\n utils.utilities.confirm(resx.get(\"ProfileMappingDeletedWarning\"), resx.get(\"Yes\"), resx.get(\"No\"), () => {\r\n let originalPropertyName = profileMappingId.split(\"-\")[0];\r\n \r\n let payload = {\r\n dnnProfilePropertyName: originalPropertyName\r\n };\r\n props.dispatch(SettingsActions.deleteProfileMapping(payload, () => {\r\n utils.utilities.notify(resx.get(\"MappingDeleteSuccess\"));\r\n this.collapse();\r\n props.dispatch(SettingsActions.getProfileSettings());\r\n }, (error) => {\r\n const errorMessage = JSON.parse(error.responseText);\r\n utils.utilities.notifyError(errorMessage.Message);\r\n }));\r\n });\r\n }\r\n\r\n onClickCancel() {\r\n utils.utilities.closePersonaBar();\r\n }\r\n\r\n /* eslint-disable react/no-did-update-set-state */\r\n componentDidUpdate(prevProps) {\r\n const {props} = this;\r\n if (props !== prevProps) {\r\n let tableFields = [];\r\n if (tableFields.length === 0) {\r\n tableFields.push({ \"name\": resx.get(\"DnnProfileProperty.Header\"), \"id\": \"DnnProfileProperty\" });\r\n tableFields.push({ \"name\": resx.get(\"B2cClaim.Header\"), \"id\": \"B2cClaim\" });\r\n }\r\n this.setState({tableFields});\r\n }\r\n }\r\n\r\n uncollapse(id) {\r\n this.setState({\r\n openId: id\r\n });\r\n }\r\n\r\n collapse() {\r\n if (this.state.openId !== \"\") {\r\n this.setState({\r\n openId: \"\"\r\n });\r\n }\r\n }\r\n\r\n toggle(openId) {\r\n if (openId !== \"\") {\r\n this.uncollapse(openId);\r\n }\r\n }\r\n\r\n renderHeader() {\r\n let tableHeaders = this.state.tableFields.map((field) => {\r\n let className = \"header-\" + field.id;\r\n return
\r\n {field.name}  \r\n
;\r\n });\r\n return
{tableHeaders}
;\r\n }\r\n\r\n renderedProfileMappings() {\r\n let i = 0;\r\n if (this.props.profileMapping) {\r\n return this.props.profileMapping.map((item, index) => {\r\n let id = \"row-\" + i++;\r\n let profileMappingId = item.DnnProfilePropertyName + \"-\" + item.B2cClaimName;\r\n return (\r\n \r\n \r\n \r\n );\r\n });\r\n }\r\n }\r\n\r\n /* eslint-disable react/no-danger */\r\n render() {\r\n let opened = (this.state.openId === \"add\");\r\n return (\r\n
\r\n
\r\n
\r\n
{resx.get(\"lblProfilePropertiesMapping\")}
\r\n
\r\n
\r\n
{resx.get(\"cmdAddProfileMapping\")}\r\n
\r\n
\r\n
\r\n {this.renderHeader()}\r\n \r\n \r\n \r\n \r\n \r\n {this.renderedProfileMappings()}\r\n
\r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nProfileMappings.propTypes = {\r\n profileMapping: PropTypes.array,\r\n profileProperties: PropTypes.array\r\n};\r\n\r\n\r\nfunction mapStateToProps(state) {\r\n return {\r\n profileMapping: state.settings.profileMapping,\r\n profileProperties: state.settings.profileProperties\r\n };\r\n}\r\n\r\nexport default connect(mapStateToProps)(ProfileMappings);","import React, { Component } from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport { Collapsible, SvgIcons } from \"@dnnsoftware/dnn-react-common\";\r\nimport \"./style.less\";\r\n\r\nclass UserMappingRow extends Component {\r\n /* eslint-disable react/no-did-mount-set-state */\r\n componentDidMount() {\r\n let opened = (this.props.openId !== \"\" && this.props.id === this.props.openId);\r\n this.setState({\r\n opened\r\n });\r\n }\r\n\r\n toggle() {\r\n if ((this.props.openId !== \"\" && this.props.id === this.props.openId)) {\r\n this.props.Collapse();\r\n }\r\n else {\r\n this.props.OpenCollapse(this.props.id);\r\n }\r\n }\r\n\r\n /* eslint-disable react/no-danger */\r\n render() {\r\n const {props} = this;\r\n let opened = (this.props.openId !== \"\" && this.props.id === this.props.openId);\r\n return (\r\n
\r\n
\r\n
\r\n
\r\n {props.dnnPropertyName}
\r\n
\r\n {props.b2cClaimName}
\r\n
\r\n {props.deletable &&\r\n
\r\n }\r\n {props.editable &&\r\n
\r\n }\r\n
\r\n
\r\n
\r\n {opened && props.children}\r\n
\r\n );\r\n }\r\n}\r\n\r\nUserMappingRow.propTypes = {\r\n mappingId: PropTypes.string,\r\n dnnPropertyName: PropTypes.string,\r\n b2cClaimName: PropTypes.string,\r\n deletable: PropTypes.bool,\r\n editable: PropTypes.bool,\r\n OpenCollapse: PropTypes.func,\r\n Collapse: PropTypes.func,\r\n onDelete: PropTypes.func,\r\n id: PropTypes.string,\r\n openId: PropTypes.string\r\n};\r\n\r\nUserMappingRow.defaultProps = {\r\n collapsed: true,\r\n deletable: false,\r\n editable: true\r\n};\r\nexport default (UserMappingRow);\r\n","import React, { Component } from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport { connect } from \"react-redux\";\r\nimport \"./style.less\";\r\nimport { SingleLineInputWithError, GridSystem, Button, InputGroup } from \"@dnnsoftware/dnn-react-common\";\r\nimport SettingsActions from \"../../../actions/settings\";\r\nimport util from \"../../../utils\";\r\nimport resx from \"../../../resources\";\r\n\r\nclass UserMappingEditor extends Component {\r\n constructor() {\r\n super();\r\n\r\n this.state = {\r\n mappingDetail: {\r\n DnnPropertyName: \"\",\r\n B2cClaimName: \"\"\r\n },\r\n error: {\r\n dnnPropertyName: false,\r\n b2cClaimName: false\r\n },\r\n triedToSubmit: false\r\n };\r\n }\r\n \r\n componentWillMount() {\r\n const {props} = this;\r\n const {state} = this;\r\n\r\n state.mappingDetail[\"MappingId\"] = props.mappingId;\r\n state.mappingDetail[\"DnnPropertyName\"] = props.dnnPropertyName;\r\n state.mappingDetail[\"B2cClaimName\"] = props.b2cClaimName;\r\n\r\n state.error[\"dnnPropertyName\"] = (props.dnnPropertyName === null);\r\n state.error[\"b2cClaimName\"] = (props.b2cClaimName === null);\r\n }\r\n\r\n /* eslint-disable react/no-did-update-set-state */\r\n componentDidUpdate(prevProps) {\r\n const {props, state} = this;\r\n if ((props !== prevProps) && props.mappingDetail ) {\r\n if (props.mappingDetail[\"DnnPropertyName\"] === undefined || props.mappingDetail[\"DnnPropertyName\"] === \"\") {\r\n state.error[\"dnnPropertyName\"] = true;\r\n }\r\n else if (props.mappingDetail[\"DnnPropertyName\"] !== \"\" && props.mappingDetail[\"DnnPropertyName\"] !== undefined) {\r\n state.error[\"dnnPropertyName\"] = false;\r\n }\r\n \r\n this.setState({\r\n mappingDetail: Object.assign({}, props.mappingDetail),\r\n triedToSubmit: false,\r\n error: state.error\r\n });\r\n }\r\n }\r\n\r\n onSettingChange(key, event) {\r\n let {state, props} = this;\r\n let mappingDetail = Object.assign({}, state.mappingDetail);\r\n\r\n if (key === \"DnnPropertyName\") {\r\n state.error[\"dnnPropertyName\"] = !props.onValidate(mappingDetail, event.value);\r\n }\r\n\r\n if (mappingDetail[key] === \"\" && key === \"B2cClaimName\" && props.dnnPropertyName !== \"PortalId\") {\r\n state.error[\"b2cClaimName\"] = true;\r\n }\r\n else if (mappingDetail[key] !== \"\" && key === \"B2cClaimName\") {\r\n state.error[\"b2cClaimName\"] = false;\r\n }\r\n\r\n mappingDetail[key] = typeof (event) === \"object\" ? event.target.value : event;\r\n\r\n this.setState({\r\n mappingDetail: mappingDetail,\r\n triedToSubmit: false,\r\n error: state.error\r\n });\r\n\r\n props.dispatch(SettingsActions.userMappingClientModified(mappingDetail));\r\n }\r\n\r\n onSave() {\r\n const {props, state} = this;\r\n this.setState({\r\n triedToSubmit: true\r\n });\r\n if (state.error.dnnPropertyName || state.error.b2cClaimName) {\r\n return;\r\n }\r\n\r\n props.onUpdate(state.mappingDetail);\r\n props.Collapse();\r\n }\r\n\r\n onCancel() {\r\n const {props} = this;\r\n\r\n if (props.mappingClientModified) {\r\n util.utilities.confirm(resx.get(\"SettingsRestoreWarning\"), resx.get(\"Yes\"), resx.get(\"No\"), () => {\r\n props.dispatch(SettingsActions.cancelUserMappingClientModified());\r\n props.Collapse();\r\n });\r\n }\r\n else {\r\n props.Collapse();\r\n }\r\n }\r\n\r\n /* eslint-disable react/no-danger */\r\n render() {\r\n if (this.state.mappingDetail !== undefined || this.props.id === \"add\") {\r\n const columnOne =
\r\n \r\n \r\n \r\n
;\r\n const columnTwo =
\r\n \r\n \r\n \r\n
;\r\n\r\n return (\r\n
\r\n {[columnOne, columnTwo]}\r\n
\r\n \r\n {resx.get(\"Cancel\")}\r\n \r\n \r\n {resx.get(\"SaveSettings\")}\r\n \r\n
\r\n
\r\n );\r\n }\r\n else return
;\r\n }\r\n}\r\n\r\nUserMappingEditor.propTypes = {\r\n dispatch: PropTypes.func.isRequired,\r\n mappingDetail: PropTypes.object,\r\n mappingId: PropTypes.string,\r\n dnnPropertyName: PropTypes.string,\r\n b2cClaimName: PropTypes.string,\r\n Collapse: PropTypes.func,\r\n onUpdate: PropTypes.func,\r\n id: PropTypes.string,\r\n mappingClientModified: PropTypes.bool,\r\n onValidate: PropTypes.func\r\n};\r\n\r\nfunction mapStateToProps() {\r\n return {\r\n };\r\n}\r\n\r\nexport default connect(mapStateToProps)(UserMappingEditor);","import React, {Component} from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport { connect } from \"react-redux\";\r\nimport SettingsActions from \"../../actions/settings\";\r\nimport UserMappingRow from \"./userMappingRow\";\r\nimport UserMappingEditor from \"./userMappingEditor\";\r\nimport \"./style.less\";\r\nimport utils from \"../../utils\";\r\nimport resx from \"../../resources\";\r\n\r\nclass UserMappings extends Component {\r\n\r\n constructor() {\r\n super();\r\n\r\n this.state = {\r\n openId: \"\",\r\n tableFields: [],\r\n error: {\r\n mapping: false\r\n }\r\n };\r\n }\r\n UNSAFE_componentWillMount() {\r\n const {props} = this;\r\n\r\n props.dispatch(SettingsActions.getUserMappingSettings());\r\n }\r\n\r\n UNSAFE_componentWillReceiveProps(nextProps) {\r\n const {state} = this;\r\n\r\n state.error[\"mapping\"] = (nextProps.mapping === null);\r\n }\r\n\r\n onUpdateMapping(mappingDetail) {\r\n const {props} = this;\r\n\r\n let payload = {\r\n DnnPropertyName: mappingDetail.DnnPropertyName,\r\n B2cClaimName: mappingDetail.B2cClaimName\r\n };\r\n props.dispatch(SettingsActions.updateUserMapping(payload, () => {\r\n utils.utilities.notify(resx.get(\"MappingUpdateSuccess\"));\r\n this.collapse();\r\n props.dispatch(SettingsActions.getUserMappingSettings());\r\n }, (error) => {\r\n const errorMessage = JSON.parse(error.responseText);\r\n utils.utilities.notifyError(errorMessage.Message);\r\n }));\r\n }\r\n\r\n onDeleteMapping(mappingId) {\r\n const {props} = this;\r\n utils.utilities.confirm(resx.get(\"MappingDeletedWarning\"), resx.get(\"Yes\"), resx.get(\"No\"), () => {\r\n let originalUserMappingName = mappingId.split(\"-\")[0];\r\n \r\n let payload = {\r\n dnnMappingName: originalUserMappingName\r\n };\r\n props.dispatch(SettingsActions.deleteUserMapping(payload, () => {\r\n utils.utilities.notify(resx.get(\"MappingDeleteSuccess\"));\r\n this.collapse();\r\n props.dispatch(SettingsActions.getUserMappingSettings());\r\n }, (error) => {\r\n const errorMessage = JSON.parse(error.responseText);\r\n utils.utilities.notifyError(errorMessage.Message);\r\n }));\r\n });\r\n }\r\n\r\n onClickCancel() {\r\n utils.utilities.closePersonaBar();\r\n }\r\n\r\n /* eslint-disable react/no-did-update-set-state */\r\n componentDidUpdate(prevProps) {\r\n const {props} = this;\r\n if (props !== prevProps) {\r\n let tableFields = [];\r\n if (tableFields.length === 0) {\r\n tableFields.push({ \"name\": resx.get(\"DnnProperty.Header\"), \"id\": \"DnnProperty\" });\r\n tableFields.push({ \"name\": resx.get(\"B2cProperty.Header\"), \"id\": \"B2cProperty\" });\r\n }\r\n this.setState({tableFields});\r\n }\r\n }\r\n\r\n uncollapse(id) {\r\n this.setState({\r\n openId: id\r\n });\r\n }\r\n\r\n collapse() {\r\n if (this.state.openId !== \"\") {\r\n this.setState({\r\n openId: \"\"\r\n });\r\n }\r\n }\r\n\r\n toggle(openId) {\r\n if (openId !== \"\") {\r\n this.uncollapse(openId);\r\n }\r\n }\r\n\r\n renderHeader() {\r\n let tableHeaders = this.state.tableFields.map((field) => {\r\n let className = \"header-\" + field.id;\r\n return
\r\n {field.name}  \r\n
;\r\n });\r\n return
{tableHeaders}
;\r\n }\r\n\r\n renderMappings() {\r\n let i = 0;\r\n if (this.props.mapping) {\r\n return this.props.mapping.map((item, index) => {\r\n let id = \"row-\" + i++;\r\n let mappingId = item.DnnPropertyName + \"-\" + item.B2cClaimName;\r\n return (\r\n \r\n \r\n \r\n );\r\n });\r\n }\r\n }\r\n\r\n /* eslint-disable react/no-danger */\r\n render() {\r\n return (\r\n
\r\n
\r\n
\r\n
{resx.get(\"lblUsersMapping\")}
\r\n
\r\n
\r\n {this.renderHeader()}\r\n {this.renderMappings()}\r\n
\r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nUserMappings.propTypes = {\r\n mapping: PropTypes.array\r\n};\r\n\r\n\r\nfunction mapStateToProps(state) {\r\n return {\r\n mapping: state.settings.userMapping\r\n };\r\n}\r\n\r\nexport default connect(mapStateToProps)(UserMappings);","import React, { Component } from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport { Collapsible, SvgIcons } from \"@dnnsoftware/dnn-react-common\";\r\nimport \"./style.less\";\r\n\r\nclass RoleMappingRow extends Component {\r\n /* eslint-disable react/no-did-mount-set-state */\r\n componentDidMount() {\r\n let opened = (this.props.openId !== \"\" && this.props.id === this.props.openId);\r\n this.setState({\r\n opened\r\n });\r\n }\r\n\r\n toggle() {\r\n if ((this.props.openId !== \"\" && this.props.id === this.props.openId)) {\r\n this.props.Collapse();\r\n }\r\n else {\r\n this.props.OpenCollapse(this.props.id);\r\n }\r\n }\r\n\r\n /* eslint-disable react/no-danger */\r\n render() {\r\n const {props} = this;\r\n let opened = (this.props.openId !== \"\" && this.props.id === this.props.openId);\r\n return (\r\n
\r\n
\r\n
\r\n
\r\n {props.dnnRoleName}
\r\n
\r\n {props.b2cRoleName}
\r\n
\r\n {props.deletable &&\r\n
\r\n }\r\n {props.editable &&\r\n
\r\n }\r\n
\r\n
\r\n
\r\n {opened && props.children}\r\n
\r\n );\r\n }\r\n}\r\n\r\nRoleMappingRow.propTypes = {\r\n mappingId: PropTypes.string,\r\n dnnRoleName: PropTypes.string,\r\n b2cRoleName: PropTypes.string,\r\n deletable: PropTypes.bool,\r\n editable: PropTypes.bool,\r\n OpenCollapse: PropTypes.func,\r\n Collapse: PropTypes.func,\r\n onDelete: PropTypes.func,\r\n id: PropTypes.string,\r\n openId: PropTypes.string\r\n};\r\n\r\nRoleMappingRow.defaultProps = {\r\n collapsed: true,\r\n deletable: true,\r\n editable: true\r\n};\r\nexport default (RoleMappingRow);\r\n","import React, { Component } from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport { connect } from \"react-redux\";\r\nimport \"./style.less\";\r\nimport { SingleLineInputWithError, GridSystem, Button, InputGroup, DropdownWithError } from \"@dnnsoftware/dnn-react-common\";\r\nimport SettingsActions from \"../../../actions/settings\";\r\nimport util from \"../../../utils\";\r\nimport resx from \"../../../resources\";\r\n\r\nclass RoleMappingEditor extends Component {\r\n constructor() {\r\n super();\r\n\r\n this.state = {\r\n mappingDetail: {\r\n DnnRoleName: \"\",\r\n B2cRoleName: \"\"\r\n },\r\n error: {\r\n dnnRoleName: false,\r\n b2cRoleName: false\r\n },\r\n triedToSubmit: false\r\n };\r\n }\r\n \r\n componentWillMount() {\r\n const {props} = this;\r\n const {state} = this;\r\n\r\n state.mappingDetail[\"MappingId\"] = props.mappingId;\r\n state.mappingDetail[\"DnnRoleName\"] = props.dnnRoleName;\r\n state.mappingDetail[\"B2cRoleName\"] = props.b2cRoleName;\r\n\r\n state.error[\"dnnRoleName\"] = (props.dnnRoleName === null);\r\n state.error[\"b2cRoleName\"] = (props.b2cRoleName === null);\r\n }\r\n\r\n /* eslint-disable react/no-did-update-set-state */\r\n componentDidUpdate(prevProps) {\r\n const {props, state} = this;\r\n if ((props !== prevProps) && props.mappingDetail ) {\r\n if (props.mappingDetail[\"DnnRoleName\"] === undefined || props.mappingDetail[\"DnnRoleName\"] === \"\") {\r\n state.error[\"dnnRoleName\"] = true;\r\n }\r\n else if (props.mappingDetail[\"DnnRoleName\"] !== \"\" && props.mappingDetail[\"DnnRoleName\"] !== undefined) {\r\n state.error[\"dnnRoleName\"] = false;\r\n }\r\n \r\n this.setState({\r\n mappingDetail: Object.assign({}, props.mappingDetail),\r\n triedToSubmit: false,\r\n error: state.error\r\n });\r\n }\r\n }\r\n\r\n onSettingChange(key, event) {\r\n let {state, props} = this;\r\n let mappingDetail = Object.assign({}, state.mappingDetail);\r\n\r\n if (key === \"DnnRoleName\") {\r\n state.error[\"dnnRoleName\"] = !props.onValidate(mappingDetail, event.value);\r\n }\r\n\r\n if (mappingDetail[key] === \"\" && key === \"B2cRoleName\") {\r\n state.error[\"b2cRoleName\"] = true;\r\n }\r\n else if (mappingDetail[key] !== \"\" && key === \"B2cRoleName\") {\r\n state.error[\"b2cRoleName\"] = false;\r\n }\r\n\r\n if (key === \"DnnRoleName\") {\r\n mappingDetail[key] = event.value;\r\n }\r\n else {\r\n mappingDetail[key] = typeof (event) === \"object\" ? event.target.value : event;\r\n }\r\n\r\n this.setState({\r\n mappingDetail: mappingDetail,\r\n triedToSubmit: false,\r\n error: state.error\r\n });\r\n\r\n props.dispatch(SettingsActions.roleMappingClientModified(mappingDetail));\r\n }\r\n\r\n getRolePropertyOptions() {\r\n let options = [];\r\n \r\n if (this.props.availableRoles !== undefined) {\r\n options = this.props.availableRoles.map((item) => {\r\n return { label: item, value: item };\r\n });\r\n }\r\n return options;\r\n }\r\n\r\n onSave() {\r\n const {props, state} = this;\r\n this.setState({\r\n triedToSubmit: true\r\n });\r\n if (state.error.dnnRoleName || state.error.b2cRoleName) {\r\n return;\r\n }\r\n\r\n props.onUpdate(state.mappingDetail);\r\n props.Collapse();\r\n }\r\n\r\n onCancel() {\r\n const {props} = this;\r\n\r\n if (props.mappingClientModified) {\r\n util.utilities.confirm(resx.get(\"SettingsRestoreWarning\"), resx.get(\"Yes\"), resx.get(\"No\"), () => {\r\n props.dispatch(SettingsActions.cancelRoleMappingClientModified());\r\n props.Collapse();\r\n });\r\n }\r\n else {\r\n props.Collapse();\r\n }\r\n }\r\n\r\n /* eslint-disable react/no-danger */\r\n render() {\r\n if (this.state.mappingDetail !== undefined || this.props.id === \"add\") {\r\n const columnOne =
\r\n \r\n \r\n \r\n
;\r\n const columnTwo =
\r\n \r\n \r\n \r\n
;\r\n\r\n return (\r\n
\r\n {[columnOne, columnTwo]}\r\n
\r\n \r\n {resx.get(\"Cancel\")}\r\n \r\n \r\n {resx.get(\"SaveSettings\")}\r\n \r\n
\r\n
\r\n );\r\n }\r\n else return
;\r\n }\r\n}\r\n\r\nRoleMappingEditor.propTypes = {\r\n dispatch: PropTypes.func.isRequired,\r\n mappingDetail: PropTypes.object,\r\n mappingId: PropTypes.string,\r\n dnnRoleName: PropTypes.string,\r\n b2cRoleName: PropTypes.string,\r\n Collapse: PropTypes.func,\r\n onUpdate: PropTypes.func,\r\n id: PropTypes.string,\r\n mappingClientModified: PropTypes.bool,\r\n availableRoles: PropTypes.array,\r\n onValidate: PropTypes.func\r\n};\r\n\r\nfunction mapStateToProps() {\r\n return {\r\n // profileMappingDetail: state.siteBehavior.aliasDetail,\r\n // profileMappingClientModified: state.siteBehavior.siteAliasClientModified\r\n };\r\n}\r\n\r\nexport default connect(mapStateToProps)(RoleMappingEditor);","import React, {Component} from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport { connect } from \"react-redux\";\r\nimport SettingsActions from \"../../actions/settings\";\r\nimport RoleMappingRow from \"./roleMappingRow\";\r\nimport RoleMappingEditor from \"./roleMappingEditor\";\r\nimport { Collapsible } from \"@dnnsoftware/dnn-react-common\";\r\nimport \"./style.less\";\r\nimport { SvgIcons } from \"@dnnsoftware/dnn-react-common\";\r\nimport utils from \"../../utils\";\r\nimport resx from \"../../resources\";\r\n\r\nclass RoleMappings extends Component {\r\n\r\n constructor() {\r\n super();\r\n\r\n this.state = {\r\n openId: \"\",\r\n tableFields: [],\r\n error: {\r\n mapping: false\r\n }\r\n };\r\n }\r\n UNSAFE_componentWillMount() {\r\n const {props} = this;\r\n\r\n props.dispatch(SettingsActions.getRoleSettings());\r\n props.dispatch(SettingsActions.getAvailableRoles());\r\n }\r\n\r\n UNSAFE_componentWillReceiveProps(nextProps) {\r\n const {state} = this;\r\n\r\n state.error[\"mapping\"] = (nextProps.mapping === null);\r\n }\r\n\r\n onValidateMapping(mappingDetail, newDnnRoleName) {\r\n let originalRoleName = null;\r\n if (mappingDetail.MappingId) {\r\n originalRoleName = mappingDetail.MappingId.split(\"-\")[0];\r\n }\r\n if (originalRoleName !== newDnnRoleName) {\r\n // The ItemName of this row has changed. Let's see if that property has already been mapped\r\n if (this.props.mapping.find(p => p.DnnRoleName === newDnnRoleName) !== undefined) {\r\n return false; // Not valid; it's already in the list\r\n }\r\n else {\r\n return true;\r\n }\r\n }\r\n else {\r\n return true;\r\n }\r\n }\r\n onUpdateMapping(mappingDetail) {\r\n const {props} = this;\r\n\r\n let originalRoleName = mappingDetail.MappingId ? mappingDetail.MappingId.split(\"|\")[0] : null;\r\n if (originalRoleName !== mappingDetail.DnnRoleName) {\r\n // The RoleName of this row has changed. Let's see if that property has already been mapped\r\n if (this.props.mapping.find(p => p.DnnRoleName === mappingDetail.DnnRoleName) !== undefined) {\r\n utils.utilities.notifyError(resx.get(\"ErrorMappingDuplicated\"));\r\n return;\r\n }\r\n }\r\n\r\n let payload = {\r\n originalDnnRoleName: originalRoleName,\r\n mappingDetail: mappingDetail\r\n };\r\n props.dispatch(SettingsActions.updateRoleMapping(payload, () => {\r\n utils.utilities.notify(resx.get(\"MappingUpdateSuccess\"));\r\n this.collapse();\r\n props.dispatch(SettingsActions.getRoleSettings());\r\n }, (error) => {\r\n const errorMessage = JSON.parse(error.responseText);\r\n utils.utilities.notifyError(errorMessage.Message);\r\n }));\r\n }\r\n\r\n onDeleteMapping(mappingId) {\r\n const {props} = this;\r\n utils.utilities.confirm(resx.get(\"MappingDeletedWarning\"), resx.get(\"Yes\"), resx.get(\"No\"), () => {\r\n let originalRoleName = mappingId.split(\"|\")[0];\r\n \r\n let payload = {\r\n dnnRoleName: originalRoleName\r\n };\r\n props.dispatch(SettingsActions.deleteRoleMapping(payload, () => {\r\n utils.utilities.notify(resx.get(\"MappingDeleteSuccess\"));\r\n this.collapse();\r\n props.dispatch(SettingsActions.getRoleSettings());\r\n }, (error) => {\r\n const errorMessage = JSON.parse(error.responseText);\r\n utils.utilities.notifyError(errorMessage.Message);\r\n }));\r\n });\r\n }\r\n\r\n onClickCancel() {\r\n utils.utilities.closePersonaBar();\r\n }\r\n\r\n /* eslint-disable react/no-did-update-set-state */\r\n componentDidUpdate(prevProps) {\r\n const {props} = this;\r\n if (props !== prevProps) {\r\n let tableFields = [];\r\n if (tableFields.length === 0) {\r\n tableFields.push({ \"name\": resx.get(\"DnnRole.Header\"), \"id\": \"DnnRole\" });\r\n tableFields.push({ \"name\": resx.get(\"B2cRole.Header\"), \"id\": \"B2cRole\" });\r\n }\r\n this.setState({tableFields});\r\n }\r\n }\r\n\r\n uncollapse(id) {\r\n this.setState({\r\n openId: id\r\n });\r\n }\r\n\r\n collapse() {\r\n if (this.state.openId !== \"\") {\r\n this.setState({\r\n openId: \"\"\r\n });\r\n }\r\n }\r\n\r\n toggle(openId) {\r\n if (openId !== \"\") {\r\n this.uncollapse(openId);\r\n }\r\n }\r\n\r\n renderHeader() {\r\n let tableHeaders = this.state.tableFields.map((field) => {\r\n let className = \"header-\" + field.id;\r\n return
\r\n {field.name}  \r\n
;\r\n });\r\n return
{tableHeaders}
;\r\n }\r\n\r\n renderMappings() {\r\n let i = 0;\r\n if (this.props.mapping) {\r\n return this.props.mapping.map((item, index) => {\r\n let id = \"row-\" + i++;\r\n let mappingId = item.DnnRoleName + \"|\" + item.B2cRoleName;\r\n return (\r\n \r\n \r\n \r\n );\r\n });\r\n }\r\n }\r\n\r\n /* eslint-disable react/no-danger */\r\n render() {\r\n let opened = (this.state.openId === \"add\");\r\n return (\r\n
\r\n
\r\n
\r\n
{resx.get(\"lblRolesMapping\")}
\r\n
\r\n
\r\n
{resx.get(\"cmdAddRoleMapping\")}\r\n
\r\n
\r\n
\r\n {this.renderHeader()}\r\n \r\n \r\n \r\n \r\n \r\n {this.renderMappings()}\r\n
\r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nRoleMappings.propTypes = {\r\n mapping: PropTypes.array,\r\n roles: PropTypes.array\r\n};\r\n\r\n\r\nfunction mapStateToProps(state) {\r\n return {\r\n mapping: state.settings.roleMapping,\r\n roles: state.settings.roles\r\n };\r\n}\r\n\r\nexport default connect(mapStateToProps)(RoleMappings);","import React, {Component} from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport { connect } from \"react-redux\";\r\nimport {PersonaBarPage, PersonaBarPageHeader, PersonaBarPageBody, DnnTabs as Tabs} from \"@dnnsoftware/dnn-react-common\";\r\nimport SettingsActions from \"../actions/settings\";\r\nimport GeneralSettings from \"./general\";\r\nimport SyncSettings from \"./sync\";\r\nimport ProfileMappings from \"./profileMappings\";\r\nimport UserMappings from \"./userMappings\";\r\nimport RoleMappings from \"./roleMappings\";\r\nimport resx from \"../resources\";\r\n\r\nimport \"./style.less\";\r\n\r\nclass App extends Component {\r\n\r\n constructor() {\r\n super();\r\n this.onSelectTab = this.onSelectTab.bind(this);\r\n this.onSelectSubTab = this.onSelectSubTab.bind(this);\r\n }\r\n onSelectTab(index) {\r\n this.props.dispatch(SettingsActions.switchTab(index));\r\n }\r\n onSelectSubTab(index) {\r\n this.props.dispatch(SettingsActions.switchMappingSubTab(index));\r\n }\r\n\r\n render() {\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ;\r\n \r\n \r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\nApp.propTypes = {\r\n dispatch: PropTypes.func.isRequired,\r\n selectedTab: PropTypes.number,\r\n selectedMappingSubTab: PropTypes.number\r\n};\r\n\r\n\r\nfunction mapStateToProps(state) {\r\n return {\r\n selectedTab: state.settings.selectedTab,\r\n selectedMappingSubTab: state.settings.selectedMappingSubTab\r\n };\r\n}\r\n\r\nexport default connect(mapStateToProps)(App);","import React, {Component} from \"react\";\r\nimport App from \"../components/App\";\r\n\r\nclass Root extends Component {\r\n render() {\r\n return (\r\n
\r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default Root;","import utilities from \"../utils\";\r\nconst boilerPlate = {\r\n init() {\r\n // This setting is required and define the public path \r\n // to allow the web application to download assets on demand \r\n // eslint-disable-next-line no-undef\r\n // __webpack_public_path__ = options.publicPath; \r\n let options = window.dnn.initAzureADB2C();\r\n\r\n utilities.init(options.utility);\r\n utilities.moduleName = options.moduleName;\r\n\r\n },\r\n dispatch() {\r\n throw new Error(\"dispatch method needs to be overwritten from the Redux store\");\r\n }\r\n};\r\n\r\n\r\nexport default boilerPlate;","import { combineReducers } from \"redux\";\r\nimport settings from \"./settingsReducer\";\r\n\r\nconst rootReducer = combineReducers({\r\n settings\r\n});\r\n\r\nexport default rootReducer;\r\n","import { settings as ActionTypes } from \"../constants/actionTypes\";\r\n\r\nexport default function settings(state = {\r\n selectedTab: 0\r\n}, action) {\r\n switch (action.type) {\r\n case ActionTypes.RETRIEVED_SETTINGS:\r\n return { ...state,\r\n enabled: action.data.enabled,\r\n useGlobalSettings: action.data.useGlobalSettings,\r\n autoRedirect: action.data.autoRedirect,\r\n autoAuthorize: action.data.autoAuthorize,\r\n apiKey: action.data.apiKey,\r\n apiSecret: action.data.apiSecret,\r\n redirectUri: action.data.redirectUri,\r\n onErrorUri: action.data.onErrorUri,\r\n tenantName: action.data.tenantName,\r\n tenantId: action.data.tenantId,\r\n signUpPolicy: action.data.signUpPolicy,\r\n profilePolicy: action.data.profilePolicy,\r\n passwordResetPolicy: action.data.passwordResetPolicy,\r\n aadAppClientId: action.data.aadAppClientId,\r\n aadAppSecret: action.data.aadAppSecret,\r\n jwtAudiences: action.data.jwtAudiences,\r\n roleSyncEnabled: action.data.roleSyncEnabled,\r\n profileSyncEnabled: action.data.profileSyncEnabled,\r\n jwtAuthEnabled: action.data.jwtAuthEnabled,\r\n apiResource: action.data.apiResource,\r\n scopes: action.data.scopes,\r\n clientModified: action.data.clientModified,\r\n usernamePrefixEnabled: action.data.usernamePrefixEnabled,\r\n groupNamePrefixEnabled: action.data.groupNamePrefixEnabled,\r\n ropcPolicy: action.data.ropcPolicy,\r\n impersonatePolicy: action.data.impersonatePolicy\r\n };\r\n case ActionTypes.SETTINGS_CLIENT_MODIFIED:\r\n return { ...state,\r\n enabled: action.data.enabled,\r\n useGlobalSettings: action.data.useGlobalSettings,\r\n autoRedirect: action.data.autoRedirect,\r\n autoAuthorize: action.data.autoAuthorize,\r\n apiKey: action.data.apiKey,\r\n apiSecret: action.data.apiSecret,\r\n redirectUri: action.data.redirectUri,\r\n onErrorUri: action.data.onErrorUri,\r\n tenantName: action.data.tenantName,\r\n tenantId: action.data.tenantId,\r\n signUpPolicy: action.data.signUpPolicy,\r\n profilePolicy: action.data.profilePolicy,\r\n passwordResetPolicy: action.data.passwordResetPolicy,\r\n aadAppClientId: action.data.aadAppClientId,\r\n aadAppSecret: action.data.aadAppSecret,\r\n jwtAudiences: action.data.jwtAudiences,\r\n roleSyncEnabled: action.data.roleSyncEnabled,\r\n profileSyncEnabled: action.data.profileSyncEnabled,\r\n jwtAuthEnabled: action.data.jwtAuthEnabled,\r\n apiResource: action.data.apiResource,\r\n scopes: action.data.scopes,\r\n clientModified: action.data.clientModified,\r\n usernamePrefixEnabled: action.data.usernamePrefixEnabled,\r\n groupNamePrefixEnabled: action.data.groupNamePrefixEnabled,\r\n ropcPolicy: action.data.ropcPolicy,\r\n impersonatePolicy: action.data.impersonatePolicy\r\n };\r\n case ActionTypes.UPDATED_SETTINGS:\r\n return { ...state,\r\n clientModified: action.data.clientModified\r\n }; \r\n case ActionTypes.RETRIEVED_PROFILESETTINGS:\r\n return { ...state,\r\n profileMapping: action.data.profileMapping\r\n };\r\n case ActionTypes.RETRIEVED_ROLEMAPPINGSETTINGS:\r\n return { ...state,\r\n roleMapping: action.data.roleMapping\r\n };\r\n case ActionTypes.RETRIEVED_AVAILABLEROLES:\r\n return { ...state,\r\n roles: action.data.roles\r\n }; \r\n case ActionTypes.SWITCH_TAB:\r\n return {\r\n ...state,\r\n selectedTab: action.payload\r\n };\r\n case ActionTypes.SWITCH_MAPPING_SUBTAB:\r\n return {\r\n ...state,\r\n selectedSubTab: action.payload\r\n }; \r\n case ActionTypes.CANCELLED_PROFILEMAPPING_CLIENT_MODIFIED:\r\n return { ...state,\r\n profileMappingClientModified: action.data.profileMappingClientModified\r\n };\r\n case ActionTypes.PROFILEMAPPINGS_CLIENT_MODIFIED:\r\n return { ...state,\r\n profileMappingDetail: action.data.profileMappingDetail,\r\n profileMappingClientModified: action.data.profileMappingClientModified\r\n };\r\n case ActionTypes.RETRIEVED_PROFILEPROPERTIES:\r\n return { ...state,\r\n profileProperties: action.data.profileProperties\r\n };\r\n case ActionTypes.ROLEMAPPINGS_CLIENT_MODIFIED:\r\n return { ...state,\r\n roleProperties: action.data.roleProperties\r\n }; \r\n case ActionTypes.RETRIEVED_USERMAPPINGSETTINGS:\r\n return { ...state,\r\n userMapping: action.data.userMapping\r\n };\r\n case ActionTypes.USERMAPPINGS_CLIENT_MODIFIED:\r\n return { ...state,\r\n userMappingDetail: action.data.userMappingDetail,\r\n userMappingClientModified: action.data.userMappingClientModified\r\n }; \r\n default:\r\n return { ...state\r\n };\r\n }\r\n}\r\n","import React from \"react\";\r\nimport { createDevTools } from \"redux-devtools\";\r\nimport LogMonitor from \"redux-devtools-log-monitor\";\r\nimport DockMonitor from \"redux-devtools-dock-monitor\";\r\n\r\nexport default createDevTools(\r\n \r\n \r\n \r\n);\r\n","import { createStore, applyMiddleware, compose } from \"redux\";\r\nimport thunkMiddleware from \"redux-thunk\";\r\nimport reduxImmutableStateInvariant from \"redux-immutable-state-invariant\";\r\nimport rootReducer from \"../reducers/rootReducer\";\r\nimport DevTools from \"../containers/DevTools\";\r\n\r\nexport default function configureStore(initialState) {\r\n const store = createStore(\r\n rootReducer,\r\n initialState,\r\n compose(\r\n applyMiddleware(thunkMiddleware,\r\n reduxImmutableStateInvariant()), \r\n // TODO: apply only for development \r\n DevTools.instrument()\r\n )\r\n );\r\n return store;\r\n}","import React from \"react\";\r\nimport { render } from \"react-dom\";\r\nimport { Provider } from \"react-redux\";\r\nimport application from \"./globals/application\";\r\nimport configureStore from \"./store/configureStore\";\r\nimport Root from \"./containers/Root\";\r\n\r\nlet store = configureStore({enabled: false, instrumentationKey: \"\"});\r\n\r\napplication.dispatch = store.dispatch;\r\n\r\nconst appContainer = document.getElementById(\"azureADB2C-container\");\r\nconst initCallback = appContainer.getAttribute(\"data-init-callback\");\r\napplication.init(initCallback);\r\n\r\nrender(\r\n \r\n \r\n ,\r\n appContainer\r\n); \r\n\r\n"],"sourceRoot":""} \ No newline at end of file diff --git a/DotNetNuke.Authentication.Azure.B2C/app.config b/DotNetNuke.Authentication.Azure.B2C/app.config index 939cf03..2027902 100644 --- a/DotNetNuke.Authentication.Azure.B2C/app.config +++ b/DotNetNuke.Authentication.Azure.B2C/app.config @@ -6,6 +6,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/DotNetNuke.Authentication.Azure.B2C/js/azureadb2c.js b/DotNetNuke.Authentication.Azure.B2C/js/azureadb2c.js index 2ec43d5..6f7dba2 100644 --- a/DotNetNuke.Authentication.Azure.B2C/js/azureadb2c.js +++ b/DotNetNuke.Authentication.Azure.B2C/js/azureadb2c.js @@ -8,85 +8,89 @@ dnn.extend(dnn.adb2c.UserManagement, model = {}; this.userManagement = userManagement; - this.objectId = ko.observable(model.objectId || ""); - this.displayName = ko.observable(model.displayName || ""); - this.objectType = ko.observable(model.objectType || ""); + this.id = ko.observable(model.Id || ""); + this.displayName = ko.observable(model.DisplayName || ""); + this.objectType = ko.observable(model.ObjectType || ""); //this.odataType = ko.observable(model["odata.type"] || ""); this.toSimple = function () { return { - objectId: that.objectId(), - displayName: that.displayName, - objectType: that.objectType + id: that.id(), + displayName: that.displayName(), + objectType: that.objectType() }; }; }, - UserModel: function (userManagement, model) { + UserModel: function (userManagement, model, addByUsername) { var that = this; if (!model) model = {}; this.userManagement = userManagement; + this.isAddingByUsername = ko.observable(addByUsername || false); + this.identities = ko.observable(model.Identities || null); + this.identityIsUsername = ko.computed(function () { + return that.identities() && that.identities().length > 0 && that.identities()[0].SignInType === "userName"; + }); - this.accountEnabled = ko.observable(model.accountEnabled || true); - this.username = ko.observable((model.signInNames && model.signInNames.filter(x => x.type === "userName").length > 0 ? - model.signInNames.filter(x => x.type === "userName")[0].value : "") || ""); - this.displayName = ko.observable(model.displayName || ""); - this.givenName = ko.observable(model.givenName || ""); - this.mail = ko.observable(model.mail - || (model.otherMails && model.otherMails.length > 0 ? model.otherMails[0] : "") - || (model.signInNames && model.signInNames.filter(x => x.type === "emailAddress").length > 0 ? - model.signInNames.filter(x => x.type === "emailAddress")[0].value : "")); - this.mailNickname = ko.observable(model.mailNickname || ""); - this.otherMails = ko.observableArray(model.otherMails || []); - this.proxyAddresses = ko.observableArray(model.proxyAddresses || []); - this.showInAddressList = ko.observable(model.showInAddressList || false); - this.surname = ko.observable(model.surname || ""); - this.userPrincipalName = ko.observable(model.userPrincipalName || ""); - this.userType = ko.observable(model.userType || ""); - this.objectId = ko.observable(model.objectId || ""); + this.accountEnabled = ko.observable(model.AccountEnabled || true); + this.displayName = ko.observable(model.DisplayName || ""); + this.givenName = ko.observable(model.GivenName || ""); + this.mail = ko.observable(model.Mail + || (model.OtherMails && model.OtherMails.length > 0 ? model.OtherMails[0] : "") + || (model.Identities && model.Identities.length > 0 && model.Identities[0].IssuerAssignedId ? model.Identities[0].IssuerAssignedId : "")); + this.username = ko.observable(model.Identities && model.Identities.length > 0 && model.Identities[0].IssuerAssignedId ? model.Identities[0].IssuerAssignedId : ""); + + this.mailNickname = ko.observable(model.MailNickname || ""); + this.otherMails = ko.observableArray(model.OtherMails || []); + this.proxyAddresses = ko.observableArray(model.ProxyAddresses || []); + this.showInAddressList = ko.observable(model.ShowInAddressList || false); + this.surname = ko.observable(model.Surname || ""); + this.userPrincipalName = ko.observable(model.UserPrincipalName || ""); + this.userType = ko.observable(model.UserType || ""); + this.id = ko.observable(model.Id || ""); //this.odataType = ko.observable(model.@odata.type || ""); - this.assignedLicenses = ko.observable(model.assignedLicenses || null); - this.assignedPlans = ko.observable(model.assignedPlans || null); - this.objectType = ko.observable(model.objectType || ""); - this.deletionTimestamp = ko.observable(model.deletionTimestamp || null); - this.ageGroup = ko.observable(model.ageGroup || null); - this.city = ko.observable(model.city || null); - this.companyName = ko.observable(model.companyName || null); - this.consentProvidedForMinor = ko.observable(model.consentProvidedForMinor || null); - this.country = ko.observable(model.country || null); - this.createdDateTime = ko.observable(model.createdDateTime || null); - this.creationType = ko.observable(model.creationType || null); - this.department = ko.observable(model.department || null); - this.dirSyncEnabled = ko.observable(model.dirSyncEnabled || null); - this.employeeId = ko.observable(model.employeeId || null); - this.facsimileTelephoneNumber = ko.observable(model.facsimileTelephoneNumber || null); - this.immutableId = ko.observable(model.immutableId || null); - this.isCompromised = ko.observable(model.isCompromised || null); - this.jobTitle = ko.observable(model.jobTitle || null); - this.lastDirSyncTime = ko.observable(model.lastDirSyncTime || null); - this.legalAgeGroupClassification = ko.observable(model.legalAgeGroupClassification || null); - this.mobile = ko.observable(model.mobile || null); - this.onPremisesDistinguishedName = ko.observable(model.onPremisesDistinguishedName || null); - this.onPremisesSecurityIdentifier = ko.observable(model.onPremisesSecurityIdentifier || null); - this.passwordPolicies = ko.observable(model.passwordPolicies || null); - this.passwordProfile = ko.observable(model.passwordProfile || null); - this.physicalDeliveryOfficeName = ko.observable(model.physicalDeliveryOfficeName || null); - this.postalCode = ko.observable(model.postalCode || null); - this.preferredLanguage = ko.observable(model.preferredLanguage || "en"); - this.provisionedPlans = ko.observable(model.provisionedPlans || null); - this.provisionedErrors = ko.observable(model.provisionedErrors || null); - this.refreshTokensValidFromDateTime = ko.observable(model.refreshTokensValidFromDateTime || null); - this.signInNames = ko.observable(model.signInNames || null); - this.sipProxyAddress = ko.observable(model.sipProxyAddress || null); - this.telephoneNumber = ko.observable(model.telephoneNumber || null); - this.thumbnailPhoto = ko.observable(model.thumbnailPhoto || null); - this.usageLocation = ko.observable(model.usageLocation || null); - this.userIdentities = ko.observable(model.userIdentities || null); - this.userState = ko.observable(model.userState || null); - this.userStateChangedOn = ko.observable(model.userStateChangedOn || null); + this.assignedLicenses = ko.observable(model.AssignedLicenses || null); + this.assignedPlans = ko.observable(model.AssignedPlans || null); + this.objectType = ko.observable(model.ObjectType || ""); + this.deletionTimestamp = ko.observable(model.DeletionTimestamp || null); + this.ageGroup = ko.observable(model.AgeGroup || null); + this.city = ko.observable(model.City || null); + this.companyName = ko.observable(model.CompanyName || null); + this.consentProvidedForMinor = ko.observable(model.ConsentProvidedForMinor || null); + this.country = ko.observable(model.Country || null); + this.createdDateTime = ko.observable(model.CreatedDateTime || null); + this.creationType = ko.observable(model.CreationType || null); + this.department = ko.observable(model.Department || null); + this.dirSyncEnabled = ko.observable(model.DirSyncEnabled || null); + this.employeeId = ko.observable(model.EmployeeId || null); + this.facsimileTelephoneNumber = ko.observable(model.FacsimileTelephoneNumber || null); + this.immutableId = ko.observable(model.ImmutableId || null); + this.isCompromised = ko.observable(model.IsCompromised || null); + this.jobTitle = ko.observable(model.JobTitle || null); + this.lastDirSyncTime = ko.observable(model.LastDirSyncTime || null); + this.legalAgeGroupClassification = ko.observable(model.LegalAgeGroupClassification || null); + this.mobile = ko.observable(model.Mobile || null); + this.onPremisesDistinguishedName = ko.observable(model.OnPremisesDistinguishedName || null); + this.onPremisesSecurityIdentifier = ko.observable(model.OnPremisesSecurityIdentifier || null); + this.passwordPolicies = ko.observable(model.PasswordPolicies || null); + this.passwordProfile = ko.observable(model.PasswordProfile || null); + this.physicalDeliveryOfficeName = ko.observable(model.PhysicalDeliveryOfficeName || null); + this.postalCode = ko.observable(model.PostalCode || null); + this.preferredLanguage = ko.observable(model.PreferredLanguage || "en"); + this.provisionedPlans = ko.observable(model.ProvisionedPlans || null); + this.provisionedErrors = ko.observable(model.ProvisionedErrors || null); + this.refreshTokensValidFromDateTime = ko.observable(model.RefreshTokensValidFromDateTime || null); + this.signInNames = ko.observable(model.SignInNames || null); + this.sipProxyAddress = ko.observable(model.SipProxyAddress || null); + this.telephoneNumber = ko.observable(model.TelephoneNumber || null); + this.thumbnailPhoto = ko.observable(model.ThumbnailPhoto || null); + this.usageLocation = ko.observable(model.UsageLocation || null); + this.userIdentities = ko.observable(model.UserIdentities || null); + this.userState = ko.observable(model.UserState || null); + this.userStateChangedOn = ko.observable(model.UserStateChangedOn || null); this.passwordType = ko.observable("auto"); this.password = ko.observable(""); @@ -94,10 +98,10 @@ dnn.extend(dnn.adb2c.UserManagement, // User custom attributes if (userManagement.customAttributes && userManagement.customAttributes !== "") { - $.each(userManagement.customAttributes.split(","), + $.each(userManagement.customAttributes.split(","), function (index, customAttribute) { var p = userManagement.customAttributesPrefix + customAttribute.replace(" ", ""); - that[customAttribute.replace(" ", "")] = ko.observable(model[p] || ""); + that[customAttribute.replace(" ", "")] = ko.observable((model && model.AdditionalData) ? model.AdditionalData[p] || "" : ""); }); } @@ -120,11 +124,11 @@ dnn.extend(dnn.adb2c.UserManagement, else if (that.userPrincipalName().startsWith("cpim_")) { sub = " (Federated)"; } - if (that.signInNames() && that.signInNames().length > 0 && that.signInNames()[0].type === "userName") { - return that.signInNames()[0].value + sub; + if (that.identities() && that.identities().length > 0 && that.identities()[0].SignInType === "userName") { + return that.identities()[0].IssuerAssignedId + sub; } - else if (that.signInNames() && that.signInNames().length > 0 && that.signInNames()[0].type === "emailAddress") { - return that.signInNames()[0].value + sub; + else if (that.identities() && that.identities().length > 0 && that.identities()[0].SignInType === "emailAddress") { + return that.identities()[0].IssuerAssignedId + sub; } if (that.mail() !== "") { return that.mail() + sub; @@ -137,47 +141,65 @@ dnn.extend(dnn.adb2c.UserManagement, that.displayName(that.givenName() + " " + that.surname()); }; this.identityIssuer = ko.computed(function () { - if (that.userIdentities() && that.userIdentities().length > 0) { - return that.userIdentities()[0].issuer.replace('.', ''); + if (that.identities() && that.identities().length > 0) { + return that.identities()[0].Issuer.replace('.', ''); } return ""; }); this.addGroup = function () { if (that.userManagement.selectedGroup() && (that.groups().length === 0 || !that.groups().find(function (data) { - return data.objectId() === that.userManagement.selectedGroup().objectId(); + return data.id() === that.userManagement.selectedGroup().id(); }))) { var group = new dnn.adb2c.UserManagement.GroupModel(that); group.displayName(that.userManagement.selectedGroup().displayName()); - group.objectId(that.userManagement.selectedGroup().objectId()); + group.id(that.userManagement.selectedGroup().id()); that.groups.push(group); + that.groups.valueHasMutated(); } }; this.removeGroup = function (g,t) { that.groups.remove(function (group) { - return group.objectId() === t.target.attributes["data-oid"].value; + return group.id() === t.target.attributes["data-oid"].value; }); }; this.addUser = function () { + var g = that.groupsSimple(); + that.userManagement.loading(true); + + var identity = that.isAddingByUsername() ? + { + "@odata.type": "microsoft.graph.objectIdentity", + issuerAssignedId: that.username(), + signInType: "userName" + } : + { + "@odata.type": "microsoft.graph.objectIdentity", + issuerAssignedId: that.mail(), + signInType: "emailAddress" + }; + + var u = { + displayName: that.displayName(), + givenName: that.givenName(), + surname: that.surname(), + mail: that.mail(), + identities: [identity] + }; + that.userManagement.ajax("AddUser", { - user: { - username: that.username(), - displayName: that.displayName(), - givenName: that.givenName(), - surname: that.surname(), - mail: that.mail(), - preferredLanguage: that.preferredLanguage() - }, + user: u, passwordType: that.passwordType(), password: that.password(), sendEmail: that.sendEmail(), - groups: that.groupsSimple() + groups: g }, function (data) { that.userManagement.users.push(new dnn.adb2c.UserManagement.UserModel(that.userManagement, data)); + that.userManagement.users.valueHasMutated(); that.userManagement.hideTab(); that.userManagement.loading(false); toastr.success("User '" + that.displayName() + "' successfully added"); @@ -192,7 +214,7 @@ dnn.extend(dnn.adb2c.UserManagement, that.userManagement.loading(true); that.userManagement.ajax("ForceChangePassword", { user: { - objectId: that.objectId() + id: that.id() } }, function (data) { @@ -206,10 +228,22 @@ dnn.extend(dnn.adb2c.UserManagement, }; this.update = function () { + var g = that.groupsSimple(); + that.userManagement.loading(true); var u = { - objectId: that.objectId(), + id: that.id(), + displayName: that.displayName(), + givenName: that.givenName(), + surname: that.surname(), + mail: that.mail(), + identities: that.identities(), + accountEnabled: that.accountEnabled() + }; + + var u = { + id: that.id(), username: that.username(), displayName: that.displayName(), givenName: that.givenName(), @@ -218,16 +252,17 @@ dnn.extend(dnn.adb2c.UserManagement, preferredLanguage: that.preferredLanguage() }; + u["additionalData"] = {}; if (userManagement.customAttributes && userManagement.customAttributes !== "") { $.each(userManagement.customAttributes.split(","), function (index, customAttribute) { var p = userManagement.customAttributesPrefix + customAttribute.replace(" ", ""); - u[p] = that[customAttribute.replace(" ", "")](); + u.additionalData[p] = that[customAttribute.replace(" ", "")](); }); } that.userManagement.ajax("UpdateUser", { user: u, - groups: that.groupsSimple() + groups: g }, function (data) { that.userManagement.hideTab(); @@ -244,13 +279,14 @@ dnn.extend(dnn.adb2c.UserManagement, that.userManagement.loading(true); that.userManagement.ajax("ChangePassword", { user: { - objectId: that.objectId() + id: that.id() }, passwordType: that.passwordType(), password: that.password(), sendEmail: that.sendEmail() }, function (data) { + toastr.success(dnn.getVar("UserPasswordUpdatedMessage")); that.userManagement.hideTab(); that.userManagement.loading(false); }, @@ -274,7 +310,7 @@ dnn.extend(dnn.adb2c.UserManagement, }, function () { that.userManagement.loading(true); that.userManagement.ajax("Remove", { - objectId: that.objectId() + id: that.id() }, function (data) { that.userManagement.refresh(); @@ -387,13 +423,16 @@ dnn.extend(dnn.adb2c.UserManagement, $.each(data, function (index, group) { that.groups.push(new dnn.adb2c.UserManagement.GroupModel(that, group)); + that.groups.valueHasMutated(); }); ajax("GetAllUsers?search=" + that.searchText(), null, function (data) { that.users.removeAll(); + that.users.valueHasMutated(); $.each(data, function (index, user) { that.users.push(new dnn.adb2c.UserManagement.UserModel(that, user)); + that.users.valueHasMutated(); }); that.loading(false); }, @@ -419,6 +458,7 @@ dnn.extend(dnn.adb2c.UserManagement, $.each(data, function (index, user) { that.users.push(new dnn.adb2c.UserManagement.UserModel(that, user)); + that.users.valueHasMutated() }); that.loading(false); }, @@ -440,13 +480,13 @@ dnn.extend(dnn.adb2c.UserManagement, }; this.addUser = function (evt) { that.selectedUser(null); - that.newUser(new dnn.adb2c.UserManagement.UserModel(that)); + that.newUser(new dnn.adb2c.UserManagement.UserModel(that, undefined, false)); that.showTab(); }; this.updateUser = function (evt) { that.newUser(null); that.changingPassword(false); - ajax("GetUserGroups?objectId=" + evt.objectId(), null, + ajax("GetUserGroups?objectId=" + evt.id(), null, function (data) { evt.groups.removeAll(); $.each(data, @@ -471,6 +511,12 @@ dnn.extend(dnn.adb2c.UserManagement, that.changingPassword(true); }; + window.onkeydown = function keyPress(e) { + if (e.key === "Escape" && $(".b2c-overlay").css("display") === "block") { + that.hideTab(); + } + }; + this.refresh(); } }); \ No newline at end of file diff --git a/DotNetNuke.Authentication.Azure.B2C/packages.config b/DotNetNuke.Authentication.Azure.B2C/packages.config index e5dc63a..e318262 100644 --- a/DotNetNuke.Authentication.Azure.B2C/packages.config +++ b/DotNetNuke.Authentication.Azure.B2C/packages.config @@ -1,5 +1,6 @@  + @@ -10,16 +11,30 @@ + + + + - - - - - + + + + + - + + + + + + + + + + + \ No newline at end of file diff --git a/docs/images/BadgeRelease.svg b/docs/images/BadgeRelease.svg index 8311ba7..b9dd60a 100644 --- a/docs/images/BadgeRelease.svg +++ b/docs/images/BadgeRelease.svg @@ -12,7 +12,7 @@ release release - v1.4.7 - v1.4.7 + v1.5.0 + v1.5.0