public async Task <IActionResult> OnPostSendVerificationEmailAsync() { if (!ModelState.IsValid) { return(Page()); } var user = await _userManager.GetUserAsync(User); if (user == null) { return(NotFound("Erro ao encontrar a sua conta não foi encontrada.")); } var userId = await _userManager.GetUserIdAsync(user); var email = await _userManager.GetEmailAsync(user); var code = await _userManager.GenerateEmailConfirmationTokenAsync(user); var callbackUrl = Url.Action("ConfirmEmail", "Users", values: new { userId = user.Id, code = code }, protocol: Request.Scheme); _email.Send( email, "Confirmar o e-mail", $"Por favor confirme a sua conta: <a href='{HtmlEncoder.Default.Encode(callbackUrl)}'>clique aqui</a>."); StatusMessage = "E-mail de confirmação enviado. Verfique o seu e-mail."; return(RedirectToPage()); }
public async Task <IActionResult> OnPostAsync() { if (ModelState.IsValid) { var user = await _userManager.FindByEmailAsync(Input.Email); if (user == null) { // Don't reveal that the user does not exist or is not confirmed return(RedirectToPage("./ForgotPasswordConfirmation")); } // For more information on how to enable account confirmation and password reset please // visit https://go.microsoft.com/fwlink/?LinkID=532713 var code = await _userManager.GeneratePasswordResetTokenAsync(user); var callbackUrl = Url.Page( "/Account/ResetPassword", pageHandler: null, values: new { code }, protocol: Request.Scheme); _email.Send( Input.Email, "Repor de password", $"Por favor reponha a password: <a href='{HtmlEncoder.Default.Encode(callbackUrl)}'>clique aqui</a>."); return(RedirectToPage("./ForgotPasswordConfirmation")); } return(Page()); }
public IActionResult Send([Bind("Email,Title,Body")] EmailSendViewModel toSend) { if (ModelState.IsValid) { // Adicionar paragrafos no corpo, caso existam if (!String.IsNullOrEmpty(toSend.Body)) { toSend.Body = toSend.Body.Replace("\n", "<br/>"); } bool success = _email.Send(toSend.Email, toSend.Title, toSend.Body); return(Json(new { success })); } return(PartialView("PartialViews/_SendForm", toSend)); }
/// <summary> /// Atualiza as informações sobre o espaço ocupado na conta Onedrive. /// </summary> /// <param name="conta">Conta Onedrive.</param> /// <returns></returns> public async Task <bool> UpdateDriveQuotaAsync(ContaOnedrive conta) { if (await RefreshTokenAsync(conta, 3400)) // Refrescar token { try { // Faz o pedido HTTP.GET para pedir as informações da Onedrive // Para que estas possam ser associadas ao objeto 'conta' JObject driveInfo = await GetDriveInfoAsync(conta.AccessToken); // Transformar o array num array de objetos JObject[] values = driveInfo["value"].Select(s => (JObject)s).ToArray(); JObject quota = (JObject)values[0]["quota"]; string quota_Total = (string)quota["total"]; string quota_Used = (string)quota["used"]; string quota_Remaining = (string)quota["remaining"]; // Atualizar a conta com as informações recolhidas da API da Onedrive conta.Quota_Remaining = quota_Remaining; conta.Quota_Total = quota_Total; conta.Quota_Used = quota_Used; // Quando a conta só tiver 50 gb, envia email ao admins para notificar if (Int64.Parse(quota_Remaining) < 53687091200) { _emailAPI.Send(_appSettings.AdminEmails, "Conta Onedrive com pouco espaço", $"A conta onedrive {conta.Username} já só tem menos de 50 Gb."); } } catch (Exception e) { await _logger.LogError( descricao : "Erro ao interpretar o JSON da resposta.", classe : "OneDriveAPI", metodo : "UpdateDriveQuotaAsync", erro : e.Message ); return(false); } try { _context.Update(conta); await _context.SaveChangesAsync(); return(true); } catch (Exception e) { await _logger.LogError( descricao : "Erro ao dar update à conta Onedrive localmente.", classe : "OneDriveAPI", metodo : "UpdateDriveQuotaAsync", erro : e.Message ); } } return(false); }
public async Task <IActionResult> Create([Bind("Email,Password,ConfirmPassword,Role")] UserCreateViewModel user) { string role = "Lab"; // Caso quem crie a conta seja administrador e o campo do Role tenha sido preenchido, deixa este escolher o role do novo user if (User.IsInRole("Admin") && !String.IsNullOrEmpty(user.Role)) { role = user.Role; } if (ModelState.IsValid) { var newUser = new IdentityUser { UserName = user.Email, Email = user.Email }; var result = await _userManager.CreateAsync(newUser, user.Password); if (result.Succeeded) { try { await _userManager.AddToRoleAsync(newUser, role); } catch (Exception) { // Ao chegar aqui é porque alguem alterou o html do select. Adiciona o utilizador como user normal await _userManager.AddToRoleAsync(newUser, "Lab"); } var code = await _userManager.GenerateEmailConfirmationTokenAsync(newUser); var callbackUrl = Url.Action("ConfirmEmail", "Users", values: new { userId = newUser.Id, code = code }, protocol: Request.Scheme); _email.Send(user.Email, "Confirme o seu e-mail", $"Por favor confirme o seu e-mail: <a href='{HtmlEncoder.Default.Encode(callbackUrl)}'>clique aqui</a>."); // Feeback ao utilizador - Vai ser redirecionado para o Index TempData["Feedback"] = "Utilizador criado com sucesso."; TempData["Type"] = "success"; return(RedirectToAction("Index")); } foreach (var error in result.Errors) { ModelState.AddModelError(string.Empty, error.Description); } } var roles = _context.Roles.Select(r => new SelectListItem { Text = r.Name, Value = r.Name, Selected = false }).ToList(); var response = new UsersCreateViewModel { User = user, Roles = roles, IsAdmin = User.IsInRole("Admin") }; // If we got this far, something failed, redisplay form return(View(response)); }