/// <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); } } }
/// <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))); } }