public HttpResponseMessage AddUser(AddUserParameters parameters)
        {
            try
            {
                if (!bool.Parse(Utils.GetTabModuleSetting(ActiveModule.TabModuleID, "EnableAdd", "True")))
                {
                    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 newUser = new NewUser(parameters.user);
                if (bool.Parse(Utils.GetTabModuleSetting(ActiveModule.TabModuleID, "EnableAddUsersByUsername", "False")) &&
                    !string.IsNullOrEmpty(newUser.Username))
                {
                    AddSignInName(newUser, "userName", newUser.Username);
                }
                if (bool.Parse(Utils.GetTabModuleSetting(ActiveModule.TabModuleID, "EnableAddUsersByEmail", "True")) &&
                    !string.IsNullOrEmpty(newUser.Mail))
                {
                    AddSignInName(newUser, "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);
                    if (!string.IsNullOrEmpty(b2cExtensionName))
                    {
                        newUser.AdditionalData.Add(b2cExtensionName, PortalSettings.PortalId);
                    }
                }

                var user = graphClient.AddUser(newUser);

                // Update group membership
                UpdateGroupMemberShip(graphClient, user, parameters.groups);

                // Send welcome email with password
                if (parameters.sendEmail && !string.IsNullOrEmpty(newUser.Mail))
                {
                    SendWelcomeEmail(newUser);
                }

                return(Request.CreateResponse(HttpStatusCode.OK, user));
            }
            catch (Exception ex)
            {
                return(Request.CreateResponse(HttpStatusCode.InternalServerError, ex.Message));
            }
        }