Beispiel #1
0
        /// <summary>
        ///     Delete user anccounts from Azure AD by SignInName (email address)
        /// </summary>
        public async Task DeleteAADUserBySignInNames(string signInName)
        {
            // First step, get the user account ID
            var JSON = await SearcUserBySignInNames(signInName);

            var users = GraphUsersModel.Parse(JSON);

            // If the user account Id return successfully, iterate through all accounts
            if (users != null && users.value != null && users.value.Count > 0)
            {
                foreach (var item in users.value)
                {
                    // Send delete request to Graph API
                    await SendGraphRequest("/users/" + item.objectId, null, null, HttpMethod.Delete);
                }
            }
        }
Beispiel #2
0
        /// <summary>
        ///     Update consumer user account's password
        /// </summary>
        /// <returns></returns>
        public async Task UpdateUserPassword(string signInName, string password)
        {
            var JSON = await SearcUserBySignInNames(signInName);

            var users = GraphUsersModel.Parse(JSON);

            // If user exists
            if (users != null && users.value != null && users.value.Count == 1)
            {
                // Generate JSON containing the password and password policy
                var graphPasswordModel = new GraphUserSetPasswordModel(password);
                var json = JsonConvert.SerializeObject(graphPasswordModel);

                // Send the request to Graph API
                await SendGraphRequest("/users/" + users.value[0].objectId, null, json, new HttpMethod("PATCH"));
            }
        }
        public async Task <IActionResult> SendUsernameToEmail([FromBody] SendUsernameInputModel inputClaims)
        {
            if (inputClaims == null)
            {
                return(StatusCode(StatusCodes.Status400BadRequest,
                                  new B2CResponseContent("Can not deserialize input claims", HttpStatusCode.BadRequest)));
            }

            try
            {
                var b2CGraphClient = new B2CGraphClientService(graphSettingsModel.Tenant, graphSettingsModel.ClientId,
                                                               graphSettingsModel.ClientSecret, graphSettingsModel.ExtensionAppId);
                var JSON = await b2CGraphClient.SearchUserByAccountNumber(inputClaims.AccountNumber);

                JSON = JSON.Replace($"extension_{graphSettingsModel.ExtensionAppId}_PhoneNumber", "phoneNumber");
                var result = GraphUsersModel.Parse(JSON);

                var users = result.value
                            .Where(x => !string.IsNullOrEmpty(x.phoneNumber) && x.phoneNumber.ToLower() == inputClaims.PhoneNumber.ToLower() &&
                                   x.signInNames.Any(y => y.type == "userName") && x.otherMails.Any()).Select(x =>
                                                                                                              new { UserName = x.signInNames.First(y => y.type == "userName"), Email = x.otherMails.First() }).GroupBy(x => x.Email).ToList();

                foreach (var user in users)
                {
                    var userNames = user.Select(x => x.UserName.value).ToList();

                    //var htmlContent = "<p>Hi,</p><p>Please find the {usernameplural} associated with the account number '{accountNumber}' <br/><br/> {userNameList}</p><p>Regards,</p><p>The WoodGrove Groceries Team</p>";

                    var customLanguage = industryManager.GetIndustry(inputClaims.Culture)
                                         ?.GetLocalizedEmailString(LocalizedEmailUse.SendUsernames, inputClaims.Culture);

                    if (customLanguage == null)
                    {
                        return(StatusCode(StatusCodes.Status400BadRequest,
                                          new B2CResponseContent("Unable to find the localization language", HttpStatusCode.BadRequest)));
                    }

                    var replacements = new Dictionary <string, string>();
                    replacements.Add("{usernameplural}", "username" + (userNames.Count == 1 ? string.Empty : "s"));
                    replacements.Add("{accountNumber}", inputClaims.AccountNumber);
                    replacements.Add("{userNameList}", string.Join(" < br/>", user.Select(x => x.UserName.value).ToList()));

                    foreach (var kvp in replacements)
                    {
                        customLanguage.EmailCodeHtmlContent = customLanguage.EmailCodeHtmlContent.Replace(kvp.Key, kvp.Value);
                    }

                    //var subject = "Welcome to WoodGrove Groceries";
                    var subject          = customLanguage.EmailCodeSubject;
                    var client           = new SendGridClient(Config["SendGrid:ApiKey"]);
                    var from             = new EmailAddress(inputClaims.FromAddress);
                    var to               = new EmailAddress(user.Key);
                    var plainTextContent = Regex.Replace(customLanguage.EmailCodeHtmlContent, "<[^>]*>", "");
                    var msg              = MailHelper.CreateSingleEmail(from, to, subject, plainTextContent, customLanguage.EmailCodeHtmlContent);
                    //var plainTextContent = Regex.Replace(htmlContent, "<[^>]*>", "");
                    //var msg = MailHelper.CreateSingleEmail(from, to, subject, plainTextContent, htmlContent);

                    try
                    {
                        var response = await client.SendEmailAsync(msg);
                    }
                    catch
                    {
                        return(StatusCode(StatusCodes.Status500InternalServerError,
                                          new B2CResponseContent("Failed to send email", HttpStatusCode.InternalServerError)));
                    }
                }

                return(Ok(new B2CResponseContent("Success", HttpStatusCode.OK)));
            }
            catch (Exception)
            {
                return(StatusCode(StatusCodes.Status500InternalServerError,
                                  new B2CResponseContent("Failed to send email", HttpStatusCode.InternalServerError)));
            }
        }