diff --git a/cicm_web/Areas/Admin/Controllers/BrowserTestsController.cs b/cicm_web/Areas/Admin/Controllers/BrowserTestsController.cs index 6d2b1917..1ac9d6b8 100644 --- a/cicm_web/Areas/Admin/Controllers/BrowserTestsController.cs +++ b/cicm_web/Areas/Admin/Controllers/BrowserTestsController.cs @@ -31,6 +31,7 @@ using System.Linq; using System.Threading.Tasks; using Cicm.Database.Models; +using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; diff --git a/cicm_web/Areas/Admin/Controllers/CompaniesController.cs b/cicm_web/Areas/Admin/Controllers/CompaniesController.cs index 5f997792..2b4c69ef 100644 --- a/cicm_web/Areas/Admin/Controllers/CompaniesController.cs +++ b/cicm_web/Areas/Admin/Controllers/CompaniesController.cs @@ -31,6 +31,7 @@ using System.Linq; using System.Threading.Tasks; using Cicm.Database.Models; +using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.Rendering; using Microsoft.EntityFrameworkCore; @@ -39,6 +40,7 @@ using Microsoft.EntityFrameworkCore.Query; namespace cicm_web.Areas.Admin.Controllers { [Area("Admin")] + [Authorize] public class CompaniesController : Controller { readonly cicmContext _context; diff --git a/cicm_web/Areas/Identity/IdentityHostingStartup.cs b/cicm_web/Areas/Identity/IdentityHostingStartup.cs index 9911c64e..97a65285 100644 --- a/cicm_web/Areas/Identity/IdentityHostingStartup.cs +++ b/cicm_web/Areas/Identity/IdentityHostingStartup.cs @@ -32,7 +32,6 @@ using Cicm.Database.Models; using cicm_web.Areas.Identity; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Identity; -using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.DependencyInjection; [assembly: HostingStartup(typeof(IdentityHostingStartup))] @@ -45,11 +44,7 @@ namespace cicm_web.Areas.Identity { builder.ConfigureServices((context, services) => { - services.AddDbContext(options => options - .UseLazyLoadingProxies() - .UseMySql("server=localhost;port=3306;user=cicm;password=cicmpass;database=cicm")); - - services.AddDefaultIdentity().AddRoles() + services.AddDefaultIdentity() .AddEntityFrameworkStores(); }); } diff --git a/cicm_web/Areas/Identity/Pages/Account/AccessDenied.cshtml b/cicm_web/Areas/Identity/Pages/Account/AccessDenied.cshtml deleted file mode 100644 index 27b60c7b..00000000 --- a/cicm_web/Areas/Identity/Pages/Account/AccessDenied.cshtml +++ /dev/null @@ -1,41 +0,0 @@ -@{ -/****************************************************************************** -// Canary Islands Computer Museum Website -// ---------------------------------------------------------------------------- -// -// Filename : AccessDenied.cshtml -// Author(s) : Natalia Portillo -// -// --[ Description ] ---------------------------------------------------------- -// -// ASP.NET Identify management -// -// --[ License ] -------------------------------------------------------------- -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . -// -// ---------------------------------------------------------------------------- -// Copyright © 2003-2018 Natalia Portillo -*******************************************************************************/ -} -@page -@model AccessDeniedModel -@{ - ViewData["Title"] = "Access denied"; -} - -
-

@ViewData["Title"]

-

You do not have access to this resource.

-
\ No newline at end of file diff --git a/cicm_web/Areas/Identity/Pages/Account/AccessDenied.cshtml.cs b/cicm_web/Areas/Identity/Pages/Account/AccessDenied.cshtml.cs deleted file mode 100644 index b54fec02..00000000 --- a/cicm_web/Areas/Identity/Pages/Account/AccessDenied.cshtml.cs +++ /dev/null @@ -1,39 +0,0 @@ -/****************************************************************************** -// Canary Islands Computer Museum Website -// ---------------------------------------------------------------------------- -// -// Filename : AccessDenied.cshtml.cs -// Author(s) : Natalia Portillo -// -// --[ Description ] ---------------------------------------------------------- -// -// ASP.NET Identify management -// -// --[ License ] -------------------------------------------------------------- -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . -// -// ---------------------------------------------------------------------------- -// Copyright © 2003-2018 Natalia Portillo -*******************************************************************************/ - -using Microsoft.AspNetCore.Mvc.RazorPages; - -namespace cicm_web.Areas.Identity.Pages.Account -{ - public class AccessDeniedModel : PageModel - { - public void OnGet() { } - } -} \ No newline at end of file diff --git a/cicm_web/Areas/Identity/Pages/Account/ConfirmEmail.cshtml b/cicm_web/Areas/Identity/Pages/Account/ConfirmEmail.cshtml deleted file mode 100644 index bd58c3ee..00000000 --- a/cicm_web/Areas/Identity/Pages/Account/ConfirmEmail.cshtml +++ /dev/null @@ -1,43 +0,0 @@ -@{ -/****************************************************************************** -// Canary Islands Computer Museum Website -// ---------------------------------------------------------------------------- -// -// Filename : ConfirmEmail.cshtml -// Author(s) : Natalia Portillo -// -// --[ Description ] ---------------------------------------------------------- -// -// ASP.NET Identify management -// -// --[ License ] -------------------------------------------------------------- -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . -// -// ---------------------------------------------------------------------------- -// Copyright © 2003-2018 Natalia Portillo -*******************************************************************************/ -} -@page -@model ConfirmEmailModel -@{ - ViewData["Title"] = "Confirm email"; -} - -

@ViewData["Title"]

-
-

- Thank you for confirming your email. -

-
\ No newline at end of file diff --git a/cicm_web/Areas/Identity/Pages/Account/ConfirmEmail.cshtml.cs b/cicm_web/Areas/Identity/Pages/Account/ConfirmEmail.cshtml.cs deleted file mode 100644 index f0642021..00000000 --- a/cicm_web/Areas/Identity/Pages/Account/ConfirmEmail.cshtml.cs +++ /dev/null @@ -1,64 +0,0 @@ -/****************************************************************************** -// Canary Islands Computer Museum Website -// ---------------------------------------------------------------------------- -// -// Filename : ConfirmEmail.cshtml.cs -// Author(s) : Natalia Portillo -// -// --[ Description ] ---------------------------------------------------------- -// -// ASP.NET Identify management -// -// --[ License ] -------------------------------------------------------------- -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . -// -// ---------------------------------------------------------------------------- -// Copyright © 2003-2018 Natalia Portillo -*******************************************************************************/ - -using System; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Authorization; -using Microsoft.AspNetCore.Identity; -using Microsoft.AspNetCore.Mvc; -using Microsoft.AspNetCore.Mvc.RazorPages; - -namespace cicm_web.Areas.Identity.Pages.Account -{ - [AllowAnonymous] - public class ConfirmEmailModel : PageModel - { - readonly UserManager _userManager; - - public ConfirmEmailModel(UserManager userManager) - { - _userManager = userManager; - } - - public async Task OnGetAsync(string userId, string code) - { - if(userId == null || code == null) return RedirectToPage("/Index"); - - IdentityUser user = await _userManager.FindByIdAsync(userId); - if(user == null) return NotFound($"Unable to load user with ID '{userId}'."); - - IdentityResult result = await _userManager.ConfirmEmailAsync(user, code); - if(!result.Succeeded) - throw new InvalidOperationException($"Error confirming email for user with ID '{userId}':"); - - return Page(); - } - } -} \ No newline at end of file diff --git a/cicm_web/Areas/Identity/Pages/Account/ExternalLogin.cshtml b/cicm_web/Areas/Identity/Pages/Account/ExternalLogin.cshtml deleted file mode 100644 index 03b471c3..00000000 --- a/cicm_web/Areas/Identity/Pages/Account/ExternalLogin.cshtml +++ /dev/null @@ -1,74 +0,0 @@ -@{ -/****************************************************************************** -// Canary Islands Computer Museum Website -// ---------------------------------------------------------------------------- -// -// Filename : ExternalLogin.cshtml -// Author(s) : Natalia Portillo -// -// --[ Description ] ---------------------------------------------------------- -// -// ASP.NET Identify management -// -// --[ License ] -------------------------------------------------------------- -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . -// -// ---------------------------------------------------------------------------- -// Copyright © 2003-2018 Natalia Portillo -*******************************************************************************/ -} -@page -@model ExternalLoginModel -@{ - ViewData["Title"] = "Register"; -} - -

@ViewData["Title"]

-

Associate your @Model.LoginProvider account.

-
- -

- You've successfully authenticated with @Model.LoginProvider. - Please enter an email address for this site below and click the Register button to finish - logging in. -

- -
-
-
-
-
-
- - - - -
- -
-
-
- -@section Scripts { - -} \ No newline at end of file diff --git a/cicm_web/Areas/Identity/Pages/Account/ExternalLogin.cshtml.cs b/cicm_web/Areas/Identity/Pages/Account/ExternalLogin.cshtml.cs deleted file mode 100644 index 4652f6f1..00000000 --- a/cicm_web/Areas/Identity/Pages/Account/ExternalLogin.cshtml.cs +++ /dev/null @@ -1,157 +0,0 @@ -/****************************************************************************** -// Canary Islands Computer Museum Website -// ---------------------------------------------------------------------------- -// -// Filename : ExternalLogin.cshtml.cs -// Author(s) : Natalia Portillo -// -// --[ Description ] ---------------------------------------------------------- -// -// ASP.NET Identify management -// -// --[ License ] -------------------------------------------------------------- -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . -// -// ---------------------------------------------------------------------------- -// Copyright © 2003-2018 Natalia Portillo -*******************************************************************************/ - -using System.ComponentModel.DataAnnotations; -using System.Security.Claims; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Authentication; -using Microsoft.AspNetCore.Authorization; -using Microsoft.AspNetCore.Identity; -using Microsoft.AspNetCore.Mvc; -using Microsoft.AspNetCore.Mvc.RazorPages; -using Microsoft.Extensions.Logging; -using SignInResult = Microsoft.AspNetCore.Identity.SignInResult; - -namespace cicm_web.Areas.Identity.Pages.Account -{ - [AllowAnonymous] - public class ExternalLoginModel : PageModel - { - readonly ILogger _logger; - readonly SignInManager _signInManager; - readonly UserManager _userManager; - - public ExternalLoginModel(SignInManager signInManager, UserManager userManager, - ILogger logger) - { - _signInManager = signInManager; - _userManager = userManager; - _logger = logger; - } - - [BindProperty] - public InputModel Input { get; set; } - - public string LoginProvider { get; set; } - - public string ReturnUrl { get; set; } - - [TempData] - public string ErrorMessage { get; set; } - - public IActionResult OnGetAsync() => RedirectToPage("./Login"); - - public IActionResult OnPost(string provider, string returnUrl = null) - { - // Request a redirect to the external login provider. - string redirectUrl = Url.Page("./ExternalLogin", "Callback", new {returnUrl}); - AuthenticationProperties properties = - _signInManager.ConfigureExternalAuthenticationProperties(provider, redirectUrl); - return new ChallengeResult(provider, properties); - } - - public async Task OnGetCallbackAsync(string returnUrl = null, string remoteError = null) - { - returnUrl = returnUrl ?? Url.Content("~/"); - if(remoteError != null) - { - ErrorMessage = $"Error from external provider: {remoteError}"; - return RedirectToPage("./Login", new {ReturnUrl = returnUrl}); - } - - ExternalLoginInfo info = await _signInManager.GetExternalLoginInfoAsync(); - if(info == null) - { - ErrorMessage = "Error loading external login information."; - return RedirectToPage("./Login", new {ReturnUrl = returnUrl}); - } - - // Sign in the user with this external login provider if the user already has a login. - SignInResult result = - await _signInManager.ExternalLoginSignInAsync(info.LoginProvider, info.ProviderKey, false, true); - if(result.Succeeded) - { - _logger.LogInformation("{Name} logged in with {LoginProvider} provider.", info.Principal.Identity.Name, - info.LoginProvider); - return LocalRedirect(returnUrl); - } - - if(result.IsLockedOut) return RedirectToPage("./Lockout"); - - // If the user does not have an account, then ask the user to create an account. - ReturnUrl = returnUrl; - LoginProvider = info.LoginProvider; - if(info.Principal.HasClaim(c => c.Type == ClaimTypes.Email)) - Input = new InputModel {Email = info.Principal.FindFirstValue(ClaimTypes.Email)}; - return Page(); - } - - public async Task OnPostConfirmationAsync(string returnUrl = null) - { - returnUrl = returnUrl ?? Url.Content("~/"); - // Get the information about the user from the external login provider - ExternalLoginInfo info = await _signInManager.GetExternalLoginInfoAsync(); - if(info == null) - { - ErrorMessage = "Error loading external login information during confirmation."; - return RedirectToPage("./Login", new {ReturnUrl = returnUrl}); - } - - if(ModelState.IsValid) - { - IdentityUser user = new IdentityUser {UserName = Input.Email, Email = Input.Email}; - IdentityResult result = await _userManager.CreateAsync(user); - if(result.Succeeded) - { - result = await _userManager.AddLoginAsync(user, info); - if(result.Succeeded) - { - await _signInManager.SignInAsync(user, false); - _logger.LogInformation("User created an account using {Name} provider.", info.LoginProvider); - return LocalRedirect(returnUrl); - } - } - - foreach(IdentityError error in result.Errors) ModelState.AddModelError(string.Empty, error.Description); - } - - LoginProvider = info.LoginProvider; - ReturnUrl = returnUrl; - return Page(); - } - - public class InputModel - { - [Required] - [EmailAddress] - public string Email { get; set; } - } - } -} \ No newline at end of file diff --git a/cicm_web/Areas/Identity/Pages/Account/ForgotPassword.cshtml b/cicm_web/Areas/Identity/Pages/Account/ForgotPassword.cshtml deleted file mode 100644 index 121bedf8..00000000 --- a/cicm_web/Areas/Identity/Pages/Account/ForgotPassword.cshtml +++ /dev/null @@ -1,65 +0,0 @@ -@{ -/****************************************************************************** -// Canary Islands Computer Museum Website -// ---------------------------------------------------------------------------- -// -// Filename : ForgotPassword.cshtml -// Author(s) : Natalia Portillo -// -// --[ Description ] ---------------------------------------------------------- -// -// ASP.NET Identify management -// -// --[ License ] -------------------------------------------------------------- -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . -// -// ---------------------------------------------------------------------------- -// Copyright © 2003-2018 Natalia Portillo -*******************************************************************************/ -} -@page -@model ForgotPasswordModel -@{ - ViewData["Title"] = "Forgot your password?"; -} - -

@ViewData["Title"]

-

Enter your email.

-
-
-
-
-
-
-
- - - - -
- -
-
-
- -@section Scripts { - -} \ No newline at end of file diff --git a/cicm_web/Areas/Identity/Pages/Account/ForgotPassword.cshtml.cs b/cicm_web/Areas/Identity/Pages/Account/ForgotPassword.cshtml.cs deleted file mode 100644 index 593c752a..00000000 --- a/cicm_web/Areas/Identity/Pages/Account/ForgotPassword.cshtml.cs +++ /dev/null @@ -1,84 +0,0 @@ -/****************************************************************************** -// Canary Islands Computer Museum Website -// ---------------------------------------------------------------------------- -// -// Filename : ForgotPassword.cshtml.cs -// Author(s) : Natalia Portillo -// -// --[ Description ] ---------------------------------------------------------- -// -// ASP.NET Identify management -// -// --[ License ] -------------------------------------------------------------- -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . -// -// ---------------------------------------------------------------------------- -// Copyright © 2003-2018 Natalia Portillo -*******************************************************************************/ - -using System.ComponentModel.DataAnnotations; -using System.Text.Encodings.Web; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Authorization; -using Microsoft.AspNetCore.Identity; -using Microsoft.AspNetCore.Identity.UI.Services; -using Microsoft.AspNetCore.Mvc; -using Microsoft.AspNetCore.Mvc.RazorPages; - -namespace cicm_web.Areas.Identity.Pages.Account -{ - [AllowAnonymous] - public class ForgotPasswordModel : PageModel - { - readonly IEmailSender _emailSender; - readonly UserManager _userManager; - - public ForgotPasswordModel(UserManager userManager, IEmailSender emailSender) - { - _userManager = userManager; - _emailSender = emailSender; - } - - [BindProperty] - public InputModel Input { get; set; } - - public async Task OnPostAsync() - { - if(!ModelState.IsValid) return Page(); - - IdentityUser user = await _userManager.FindByEmailAsync(Input.Email); - if(user == null || !await _userManager.IsEmailConfirmedAsync(user)) - // 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 - string code = await _userManager.GeneratePasswordResetTokenAsync(user); - string callbackUrl = Url.Page("/Account/ResetPassword", null, new {code}, Request.Scheme); - - await _emailSender.SendEmailAsync(Input.Email, "Reset Password", - $"Please reset your password by clicking here."); - - return RedirectToPage("./ForgotPasswordConfirmation"); - } - - public class InputModel - { - [Required] - [EmailAddress] - public string Email { get; set; } - } - } -} \ No newline at end of file diff --git a/cicm_web/Areas/Identity/Pages/Account/ForgotPasswordConfirmation.cshtml b/cicm_web/Areas/Identity/Pages/Account/ForgotPasswordConfirmation.cshtml deleted file mode 100644 index 7287b29e..00000000 --- a/cicm_web/Areas/Identity/Pages/Account/ForgotPasswordConfirmation.cshtml +++ /dev/null @@ -1,41 +0,0 @@ -@{ -/****************************************************************************** -// Canary Islands Computer Museum Website -// ---------------------------------------------------------------------------- -// -// Filename : ForgotPasswordConfirmation.cshtml -// Author(s) : Natalia Portillo -// -// --[ Description ] ---------------------------------------------------------- -// -// ASP.NET Identify management -// -// --[ License ] -------------------------------------------------------------- -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . -// -// ---------------------------------------------------------------------------- -// Copyright © 2003-2018 Natalia Portillo -*******************************************************************************/ -} -@page -@model ForgotPasswordConfirmation -@{ - ViewData["Title"] = "Forgot password confirmation"; -} - -

@ViewData["Title"]

-

- Please check your email to reset your password. -

\ No newline at end of file diff --git a/cicm_web/Areas/Identity/Pages/Account/ForgotPasswordConfirmation.cshtml.cs b/cicm_web/Areas/Identity/Pages/Account/ForgotPasswordConfirmation.cshtml.cs deleted file mode 100644 index b684fdd5..00000000 --- a/cicm_web/Areas/Identity/Pages/Account/ForgotPasswordConfirmation.cshtml.cs +++ /dev/null @@ -1,41 +0,0 @@ -/****************************************************************************** -// Canary Islands Computer Museum Website -// ---------------------------------------------------------------------------- -// -// Filename : ForgotPasswordConfirmation.cshtml.cs -// Author(s) : Natalia Portillo -// -// --[ Description ] ---------------------------------------------------------- -// -// ASP.NET Identify management -// -// --[ License ] -------------------------------------------------------------- -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . -// -// ---------------------------------------------------------------------------- -// Copyright © 2003-2018 Natalia Portillo -*******************************************************************************/ - -using Microsoft.AspNetCore.Authorization; -using Microsoft.AspNetCore.Mvc.RazorPages; - -namespace cicm_web.Areas.Identity.Pages.Account -{ - [AllowAnonymous] - public class ForgotPasswordConfirmation : PageModel - { - public void OnGet() { } - } -} \ No newline at end of file diff --git a/cicm_web/Areas/Identity/Pages/Account/Lockout.cshtml b/cicm_web/Areas/Identity/Pages/Account/Lockout.cshtml deleted file mode 100644 index c49b50ca..00000000 --- a/cicm_web/Areas/Identity/Pages/Account/Lockout.cshtml +++ /dev/null @@ -1,41 +0,0 @@ -@{ -/****************************************************************************** -// Canary Islands Computer Museum Website -// ---------------------------------------------------------------------------- -// -// Filename : Lockout.cshtml -// Author(s) : Natalia Portillo -// -// --[ Description ] ---------------------------------------------------------- -// -// ASP.NET Identify management -// -// --[ License ] -------------------------------------------------------------- -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . -// -// ---------------------------------------------------------------------------- -// Copyright © 2003-2018 Natalia Portillo -*******************************************************************************/ -} -@page -@model LockoutModel -@{ - ViewData["Title"] = "Locked out"; -} - -
-

@ViewData["Title"]

-

This account has been locked out, please try again later.

-
\ No newline at end of file diff --git a/cicm_web/Areas/Identity/Pages/Account/Lockout.cshtml.cs b/cicm_web/Areas/Identity/Pages/Account/Lockout.cshtml.cs deleted file mode 100644 index 74374a3e..00000000 --- a/cicm_web/Areas/Identity/Pages/Account/Lockout.cshtml.cs +++ /dev/null @@ -1,41 +0,0 @@ -/****************************************************************************** -// Canary Islands Computer Museum Website -// ---------------------------------------------------------------------------- -// -// Filename : Lockout.cshtml.cs -// Author(s) : Natalia Portillo -// -// --[ Description ] ---------------------------------------------------------- -// -// ASP.NET Identify management -// -// --[ License ] -------------------------------------------------------------- -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . -// -// ---------------------------------------------------------------------------- -// Copyright © 2003-2018 Natalia Portillo -*******************************************************************************/ - -using Microsoft.AspNetCore.Authorization; -using Microsoft.AspNetCore.Mvc.RazorPages; - -namespace cicm_web.Areas.Identity.Pages.Account -{ - [AllowAnonymous] - public class LockoutModel : PageModel - { - public void OnGet() { } - } -} \ No newline at end of file diff --git a/cicm_web/Areas/Identity/Pages/Account/Login.cshtml b/cicm_web/Areas/Identity/Pages/Account/Login.cshtml deleted file mode 100644 index 9fa347d6..00000000 --- a/cicm_web/Areas/Identity/Pages/Account/Login.cshtml +++ /dev/null @@ -1,141 +0,0 @@ -@{ -/****************************************************************************** -// Canary Islands Computer Museum Website -// ---------------------------------------------------------------------------- -// -// Filename : Login.cshtml -// Author(s) : Natalia Portillo -// -// --[ Description ] ---------------------------------------------------------- -// -// ASP.NET Identify management -// -// --[ License ] -------------------------------------------------------------- -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . -// -// ---------------------------------------------------------------------------- -// Copyright © 2003-2018 Natalia Portillo -*******************************************************************************/ -} -@page -@using Microsoft.AspNetCore.Authentication -@model LoginModel - -@{ - ViewData["Title"] = "Log in"; -} - -

@ViewData["Title"]

-
-
-
-
-

Use a local account to log in.

-
-
-
-
- - - - -
-
- - - - -
-
-
- -
-
-
- -
- -
-
-
-
-
-

Use another service to log in.

-
- @{ - if((Model.ExternalLogins?.Count ?? 0) == 0) - { -
-

- There are no external authentication services configured. See this article - for details on setting up this ASP.NET application to support logging in via external services. -

-
- } - else - { -
-
-

- @foreach(AuthenticationScheme provider in Model.ExternalLogins) - { - - } -

-
-
- } - } -
-
-
- -@section Scripts { - -} \ No newline at end of file diff --git a/cicm_web/Areas/Identity/Pages/Account/Login.cshtml.cs b/cicm_web/Areas/Identity/Pages/Account/Login.cshtml.cs deleted file mode 100644 index 318bdcb2..00000000 --- a/cicm_web/Areas/Identity/Pages/Account/Login.cshtml.cs +++ /dev/null @@ -1,128 +0,0 @@ -/****************************************************************************** -// Canary Islands Computer Museum Website -// ---------------------------------------------------------------------------- -// -// Filename : Login.cshtml.cs -// Author(s) : Natalia Portillo -// -// --[ Description ] ---------------------------------------------------------- -// -// ASP.NET Identify management -// -// --[ License ] -------------------------------------------------------------- -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . -// -// ---------------------------------------------------------------------------- -// Copyright © 2003-2018 Natalia Portillo -*******************************************************************************/ - -using System.Collections.Generic; -using System.ComponentModel.DataAnnotations; -using System.Linq; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Authentication; -using Microsoft.AspNetCore.Authorization; -using Microsoft.AspNetCore.Identity; -using Microsoft.AspNetCore.Mvc; -using Microsoft.AspNetCore.Mvc.RazorPages; -using Microsoft.Extensions.Logging; -using SignInResult = Microsoft.AspNetCore.Identity.SignInResult; - -namespace cicm_web.Areas.Identity.Pages.Account -{ - [AllowAnonymous] - public class LoginModel : PageModel - { - readonly ILogger _logger; - readonly SignInManager _signInManager; - - public LoginModel(SignInManager signInManager, ILogger logger) - { - _signInManager = signInManager; - _logger = logger; - } - - [BindProperty] - public InputModel Input { get; set; } - - public IList ExternalLogins { get; set; } - - public string ReturnUrl { get; set; } - - [TempData] - public string ErrorMessage { get; set; } - - public async Task OnGetAsync(string returnUrl = null) - { - if(!string.IsNullOrEmpty(ErrorMessage)) ModelState.AddModelError(string.Empty, ErrorMessage); - - returnUrl = returnUrl ?? Url.Content("~/"); - - // Clear the existing external cookie to ensure a clean login process - await HttpContext.SignOutAsync(IdentityConstants.ExternalScheme); - - ExternalLogins = (await _signInManager.GetExternalAuthenticationSchemesAsync()).ToList(); - - ReturnUrl = returnUrl; - } - - public async Task OnPostAsync(string returnUrl = null) - { - returnUrl = returnUrl ?? Url.Content("~/"); - - if(ModelState.IsValid) - { - // This doesn't count login failures towards account lockout - // To enable password failures to trigger account lockout, set lockoutOnFailure: true - SignInResult result = - await _signInManager.PasswordSignInAsync(Input.Email, Input.Password, Input.RememberMe, true); - if(result.Succeeded) - { - _logger.LogInformation("User logged in."); - return LocalRedirect(returnUrl); - } - - if(result.RequiresTwoFactor) - return RedirectToPage("./LoginWith2fa", new {ReturnUrl = returnUrl, Input.RememberMe}); - - if(result.IsLockedOut) - { - _logger.LogWarning("User account locked out."); - return RedirectToPage("./Lockout"); - } - - ModelState.AddModelError(string.Empty, "Invalid login attempt."); - return Page(); - } - - // If we got this far, something failed, redisplay form - return Page(); - } - - public class InputModel - { - [Required] - [EmailAddress] - public string Email { get; set; } - - [Required] - [DataType(DataType.Password)] - public string Password { get; set; } - - [Display(Name = "Remember me?")] - public bool RememberMe { get; set; } - } - } -} \ No newline at end of file diff --git a/cicm_web/Areas/Identity/Pages/Account/LoginWith2fa.cshtml b/cicm_web/Areas/Identity/Pages/Account/LoginWith2fa.cshtml deleted file mode 100644 index ee3227e5..00000000 --- a/cicm_web/Areas/Identity/Pages/Account/LoginWith2fa.cshtml +++ /dev/null @@ -1,87 +0,0 @@ -@{ -/****************************************************************************** -// Canary Islands Computer Museum Website -// ---------------------------------------------------------------------------- -// -// Filename : LoginWith2fa.cshtml -// Author(s) : Natalia Portillo -// -// --[ Description ] ---------------------------------------------------------- -// -// ASP.NET Identify management -// -// --[ License ] -------------------------------------------------------------- -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . -// -// ---------------------------------------------------------------------------- -// Copyright © 2003-2018 Natalia Portillo -*******************************************************************************/ -} -@page -@model LoginWith2faModel -@{ - ViewData["Title"] = "Two-factor authentication"; -} - -

@ViewData["Title"]

-
-

Your login is protected with an authenticator app. Enter your authenticator code below.

-
-
-
- -
-
-
- - - - -
-
-
- -
-
-
- -
-
-
-
-

- Don't have access to your authenticator device? You can - - log in with a recovery code - . -

- -@section Scripts { - -} \ No newline at end of file diff --git a/cicm_web/Areas/Identity/Pages/Account/LoginWith2fa.cshtml.cs b/cicm_web/Areas/Identity/Pages/Account/LoginWith2fa.cshtml.cs deleted file mode 100644 index de69bce0..00000000 --- a/cicm_web/Areas/Identity/Pages/Account/LoginWith2fa.cshtml.cs +++ /dev/null @@ -1,120 +0,0 @@ -/****************************************************************************** -// Canary Islands Computer Museum Website -// ---------------------------------------------------------------------------- -// -// Filename : LoginWith2fa.cshtml.cs -// Author(s) : Natalia Portillo -// -// --[ Description ] ---------------------------------------------------------- -// -// ASP.NET Identify management -// -// --[ License ] -------------------------------------------------------------- -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . -// -// ---------------------------------------------------------------------------- -// Copyright © 2003-2018 Natalia Portillo -*******************************************************************************/ - -using System; -using System.ComponentModel.DataAnnotations; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Authorization; -using Microsoft.AspNetCore.Identity; -using Microsoft.AspNetCore.Mvc; -using Microsoft.AspNetCore.Mvc.RazorPages; -using Microsoft.Extensions.Logging; -using SignInResult = Microsoft.AspNetCore.Identity.SignInResult; - -namespace cicm_web.Areas.Identity.Pages.Account -{ - [AllowAnonymous] - public class LoginWith2faModel : PageModel - { - readonly ILogger _logger; - readonly SignInManager _signInManager; - - public LoginWith2faModel(SignInManager signInManager, ILogger logger) - { - _signInManager = signInManager; - _logger = logger; - } - - [BindProperty] - public InputModel Input { get; set; } - - public bool RememberMe { get; set; } - - public string ReturnUrl { get; set; } - - public async Task OnGetAsync(bool rememberMe, string returnUrl = null) - { - // Ensure the user has gone through the username & password screen first - IdentityUser user = await _signInManager.GetTwoFactorAuthenticationUserAsync(); - - if(user == null) throw new InvalidOperationException("Unable to load two-factor authentication user."); - - ReturnUrl = returnUrl; - RememberMe = rememberMe; - - return Page(); - } - - public async Task OnPostAsync(bool rememberMe, string returnUrl = null) - { - if(!ModelState.IsValid) return Page(); - - returnUrl = returnUrl ?? Url.Content("~/"); - - IdentityUser user = await _signInManager.GetTwoFactorAuthenticationUserAsync(); - if(user == null) throw new InvalidOperationException("Unable to load two-factor authentication user."); - - string authenticatorCode = Input.TwoFactorCode.Replace(" ", string.Empty).Replace("-", string.Empty); - - SignInResult result = - await _signInManager.TwoFactorAuthenticatorSignInAsync(authenticatorCode, rememberMe, - Input.RememberMachine); - - if(result.Succeeded) - { - _logger.LogInformation("User with ID '{UserId}' logged in with 2fa.", user.Id); - return LocalRedirect(returnUrl); - } - - if(result.IsLockedOut) - { - _logger.LogWarning("User with ID '{UserId}' account locked out.", user.Id); - return RedirectToPage("./Lockout"); - } - - _logger.LogWarning("Invalid authenticator code entered for user with ID '{UserId}'.", user.Id); - ModelState.AddModelError(string.Empty, "Invalid authenticator code."); - return Page(); - } - - public class InputModel - { - [Required] - [StringLength(7, ErrorMessage = "The {0} must be at least {2} and at max {1} characters long.", - MinimumLength = 6)] - [DataType(DataType.Text)] - [Display(Name = "Authenticator code")] - public string TwoFactorCode { get; set; } - - [Display(Name = "Remember this machine")] - public bool RememberMachine { get; set; } - } - } -} \ No newline at end of file diff --git a/cicm_web/Areas/Identity/Pages/Account/LoginWithRecoveryCode.cshtml b/cicm_web/Areas/Identity/Pages/Account/LoginWithRecoveryCode.cshtml deleted file mode 100644 index 7cd4d3fa..00000000 --- a/cicm_web/Areas/Identity/Pages/Account/LoginWithRecoveryCode.cshtml +++ /dev/null @@ -1,69 +0,0 @@ -@{ -/****************************************************************************** -// Canary Islands Computer Museum Website -// ---------------------------------------------------------------------------- -// -// Filename : LoginWithRecoveryCode.cshtml -// Author(s) : Natalia Portillo -// -// --[ Description ] ---------------------------------------------------------- -// -// ASP.NET Identify management -// -// --[ License ] -------------------------------------------------------------- -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . -// -// ---------------------------------------------------------------------------- -// Copyright © 2003-2018 Natalia Portillo -*******************************************************************************/ -} -@page -@model LoginWithRecoveryCodeModel -@{ - ViewData["Title"] = "Recovery code verification"; -} - -

@ViewData["Title"]

-
-

- You have requested to log in with a recovery code. This login will not be remembered until you provide - an authenticator app code at log in or disable 2FA and log in again. -

-
-
-
-
-
-
- - - - -
- -
-
-
- -@section Scripts { - -} \ No newline at end of file diff --git a/cicm_web/Areas/Identity/Pages/Account/LoginWithRecoveryCode.cshtml.cs b/cicm_web/Areas/Identity/Pages/Account/LoginWithRecoveryCode.cshtml.cs deleted file mode 100644 index 01908d25..00000000 --- a/cicm_web/Areas/Identity/Pages/Account/LoginWithRecoveryCode.cshtml.cs +++ /dev/null @@ -1,109 +0,0 @@ -/****************************************************************************** -// Canary Islands Computer Museum Website -// ---------------------------------------------------------------------------- -// -// Filename : LoginWithRecoveryCode.cshtml.cs -// Author(s) : Natalia Portillo -// -// --[ Description ] ---------------------------------------------------------- -// -// ASP.NET Identify management -// -// --[ License ] -------------------------------------------------------------- -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . -// -// ---------------------------------------------------------------------------- -// Copyright © 2003-2018 Natalia Portillo -*******************************************************************************/ - -using System; -using System.ComponentModel.DataAnnotations; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Authorization; -using Microsoft.AspNetCore.Identity; -using Microsoft.AspNetCore.Mvc; -using Microsoft.AspNetCore.Mvc.RazorPages; -using Microsoft.Extensions.Logging; -using SignInResult = Microsoft.AspNetCore.Identity.SignInResult; - -namespace cicm_web.Areas.Identity.Pages.Account -{ - [AllowAnonymous] - public class LoginWithRecoveryCodeModel : PageModel - { - readonly ILogger _logger; - readonly SignInManager _signInManager; - - public LoginWithRecoveryCodeModel(SignInManager signInManager, - ILogger logger) - { - _signInManager = signInManager; - _logger = logger; - } - - [BindProperty] - public InputModel Input { get; set; } - - public string ReturnUrl { get; set; } - - public async Task OnGetAsync(string returnUrl = null) - { - // Ensure the user has gone through the username & password screen first - IdentityUser user = await _signInManager.GetTwoFactorAuthenticationUserAsync(); - if(user == null) throw new InvalidOperationException("Unable to load two-factor authentication user."); - - ReturnUrl = returnUrl; - - return Page(); - } - - public async Task OnPostAsync(string returnUrl = null) - { - if(!ModelState.IsValid) return Page(); - - IdentityUser user = await _signInManager.GetTwoFactorAuthenticationUserAsync(); - if(user == null) throw new InvalidOperationException("Unable to load two-factor authentication user."); - - string recoveryCode = Input.RecoveryCode.Replace(" ", string.Empty); - - SignInResult result = await _signInManager.TwoFactorRecoveryCodeSignInAsync(recoveryCode); - - if(result.Succeeded) - { - _logger.LogInformation("User with ID '{UserId}' logged in with a recovery code.", user.Id); - return LocalRedirect(returnUrl ?? Url.Content("~/")); - } - - if(result.IsLockedOut) - { - _logger.LogWarning("User with ID '{UserId}' account locked out.", user.Id); - return RedirectToPage("./Lockout"); - } - - _logger.LogWarning("Invalid recovery code entered for user with ID '{UserId}' ", user.Id); - ModelState.AddModelError(string.Empty, "Invalid recovery code entered."); - return Page(); - } - - public class InputModel - { - [BindProperty] - [Required] - [DataType(DataType.Text)] - [Display(Name = "Recovery Code")] - public string RecoveryCode { get; set; } - } - } -} \ No newline at end of file diff --git a/cicm_web/Areas/Identity/Pages/Account/Logout.cshtml b/cicm_web/Areas/Identity/Pages/Account/Logout.cshtml deleted file mode 100644 index 0d2dfd99..00000000 --- a/cicm_web/Areas/Identity/Pages/Account/Logout.cshtml +++ /dev/null @@ -1,41 +0,0 @@ -@{ -/****************************************************************************** -// Canary Islands Computer Museum Website -// ---------------------------------------------------------------------------- -// -// Filename : Logout.cshtml -// Author(s) : Natalia Portillo -// -// --[ Description ] ---------------------------------------------------------- -// -// ASP.NET Identify management -// -// --[ License ] -------------------------------------------------------------- -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . -// -// ---------------------------------------------------------------------------- -// Copyright © 2003-2018 Natalia Portillo -*******************************************************************************/ -} -@page -@model LogoutModel -@{ - ViewData["Title"] = "Log out"; -} - -
-

@ViewData["Title"]

-

You have successfully logged out of the application.

-
\ No newline at end of file diff --git a/cicm_web/Areas/Identity/Pages/Account/Logout.cshtml.cs b/cicm_web/Areas/Identity/Pages/Account/Logout.cshtml.cs deleted file mode 100644 index 39bb3e76..00000000 --- a/cicm_web/Areas/Identity/Pages/Account/Logout.cshtml.cs +++ /dev/null @@ -1,63 +0,0 @@ -/****************************************************************************** -// Canary Islands Computer Museum Website -// ---------------------------------------------------------------------------- -// -// Filename : Logout.cshtml.cs -// Author(s) : Natalia Portillo -// -// --[ Description ] ---------------------------------------------------------- -// -// ASP.NET Identify management -// -// --[ License ] -------------------------------------------------------------- -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . -// -// ---------------------------------------------------------------------------- -// Copyright © 2003-2018 Natalia Portillo -*******************************************************************************/ - -using System.Threading.Tasks; -using Microsoft.AspNetCore.Authorization; -using Microsoft.AspNetCore.Identity; -using Microsoft.AspNetCore.Mvc; -using Microsoft.AspNetCore.Mvc.RazorPages; -using Microsoft.Extensions.Logging; - -namespace cicm_web.Areas.Identity.Pages.Account -{ - [AllowAnonymous] - public class LogoutModel : PageModel - { - readonly ILogger _logger; - readonly SignInManager _signInManager; - - public LogoutModel(SignInManager signInManager, ILogger logger) - { - _signInManager = signInManager; - _logger = logger; - } - - public void OnGet() { } - - public async Task OnPost(string returnUrl = null) - { - await _signInManager.SignOutAsync(); - _logger.LogInformation("User logged out."); - if(returnUrl != null) return LocalRedirect(returnUrl); - - return Page(); - } - } -} \ No newline at end of file diff --git a/cicm_web/Areas/Identity/Pages/Account/Manage/ChangePassword.cshtml b/cicm_web/Areas/Identity/Pages/Account/Manage/ChangePassword.cshtml deleted file mode 100644 index 479f4107..00000000 --- a/cicm_web/Areas/Identity/Pages/Account/Manage/ChangePassword.cshtml +++ /dev/null @@ -1,83 +0,0 @@ -@{ -/****************************************************************************** -// Canary Islands Computer Museum Website -// ---------------------------------------------------------------------------- -// -// Filename : ChangePassword.cshtml -// Author(s) : Natalia Portillo -// -// --[ Description ] ---------------------------------------------------------- -// -// ASP.NET Identify management -// -// --[ License ] -------------------------------------------------------------- -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . -// -// ---------------------------------------------------------------------------- -// Copyright © 2003-2018 Natalia Portillo -*******************************************************************************/ -} -@page -@model ChangePasswordModel -@{ - ViewData["Title"] = "Change password"; - ViewData["ActivePage"] = ManageNavPages.ChangePassword; -} - -

@ViewData["Title"]

- -
-
-
-
-
-
- - - - -
-
- - - - -
-
- - - - -
- -
-
-
- -@section Scripts { - -} \ No newline at end of file diff --git a/cicm_web/Areas/Identity/Pages/Account/Manage/ChangePassword.cshtml.cs b/cicm_web/Areas/Identity/Pages/Account/Manage/ChangePassword.cshtml.cs deleted file mode 100644 index 5175213c..00000000 --- a/cicm_web/Areas/Identity/Pages/Account/Manage/ChangePassword.cshtml.cs +++ /dev/null @@ -1,114 +0,0 @@ -/****************************************************************************** -// Canary Islands Computer Museum Website -// ---------------------------------------------------------------------------- -// -// Filename : ChangePassword.cshtml.cs -// Author(s) : Natalia Portillo -// -// --[ Description ] ---------------------------------------------------------- -// -// ASP.NET Identify management -// -// --[ License ] -------------------------------------------------------------- -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . -// -// ---------------------------------------------------------------------------- -// Copyright © 2003-2018 Natalia Portillo -*******************************************************************************/ - -using System.ComponentModel.DataAnnotations; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Identity; -using Microsoft.AspNetCore.Mvc; -using Microsoft.AspNetCore.Mvc.RazorPages; -using Microsoft.Extensions.Logging; - -namespace cicm_web.Areas.Identity.Pages.Account.Manage -{ - public class ChangePasswordModel : PageModel - { - readonly ILogger _logger; - readonly SignInManager _signInManager; - readonly UserManager _userManager; - - public ChangePasswordModel(UserManager userManager, SignInManager signInManager, - ILogger logger) - { - _userManager = userManager; - _signInManager = signInManager; - _logger = logger; - } - - [BindProperty] - public InputModel Input { get; set; } - - [TempData] - public string StatusMessage { get; set; } - - public async Task OnGetAsync() - { - IdentityUser user = await _userManager.GetUserAsync(User); - if(user == null) return NotFound($"Unable to load user with ID '{_userManager.GetUserId(User)}'."); - - bool hasPassword = await _userManager.HasPasswordAsync(user); - if(!hasPassword) return RedirectToPage("./SetPassword"); - - return Page(); - } - - public async Task OnPostAsync() - { - if(!ModelState.IsValid) return Page(); - - IdentityUser user = await _userManager.GetUserAsync(User); - if(user == null) return NotFound($"Unable to load user with ID '{_userManager.GetUserId(User)}'."); - - IdentityResult changePasswordResult = - await _userManager.ChangePasswordAsync(user, Input.OldPassword, Input.NewPassword); - if(!changePasswordResult.Succeeded) - { - foreach(IdentityError error in changePasswordResult.Errors) - ModelState.AddModelError(string.Empty, error.Description); - return Page(); - } - - await _signInManager.RefreshSignInAsync(user); - _logger.LogInformation("User changed their password successfully."); - StatusMessage = "Your password has been changed."; - - return RedirectToPage(); - } - - public class InputModel - { - [Required] - [DataType(DataType.Password)] - [Display(Name = "Current password")] - public string OldPassword { get; set; } - - [Required] - [StringLength(100, ErrorMessage = "The {0} must be at least {2} and at max {1} characters long.", - MinimumLength = 6)] - [DataType(DataType.Password)] - [Display(Name = "New password")] - public string NewPassword { get; set; } - - [DataType(DataType.Password)] - [Display(Name = "Confirm new password")] - [Compare("NewPassword", ErrorMessage = "The new password and confirmation password do not match.")] - public string ConfirmPassword { get; set; } - } - } -} \ No newline at end of file diff --git a/cicm_web/Areas/Identity/Pages/Account/Manage/DeletePersonalData.cshtml b/cicm_web/Areas/Identity/Pages/Account/Manage/DeletePersonalData.cshtml deleted file mode 100644 index c1fc7e41..00000000 --- a/cicm_web/Areas/Identity/Pages/Account/Manage/DeletePersonalData.cshtml +++ /dev/null @@ -1,76 +0,0 @@ -@{ -/****************************************************************************** -// Canary Islands Computer Museum Website -// ---------------------------------------------------------------------------- -// -// Filename : DeletePersonalData.cshtml -// Author(s) : Natalia Portillo -// -// --[ Description ] ---------------------------------------------------------- -// -// ASP.NET Identify management -// -// --[ License ] -------------------------------------------------------------- -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . -// -// ---------------------------------------------------------------------------- -// Copyright © 2003-2018 Natalia Portillo -*******************************************************************************/ -} -@page -@model DeletePersonalDataModel -@{ - ViewData["Title"] = "Delete Personal Data"; - ViewData["ActivePage"] = ManageNavPages.PersonalData; -} - -

@ViewData["Title"]

- - - -
-
-
-
- @if(Model.RequirePassword) - { -
- - - - -
- } - -
-
- -@section Scripts { - -} \ No newline at end of file diff --git a/cicm_web/Areas/Identity/Pages/Account/Manage/DeletePersonalData.cshtml.cs b/cicm_web/Areas/Identity/Pages/Account/Manage/DeletePersonalData.cshtml.cs deleted file mode 100644 index 8cf36c33..00000000 --- a/cicm_web/Areas/Identity/Pages/Account/Manage/DeletePersonalData.cshtml.cs +++ /dev/null @@ -1,102 +0,0 @@ -/****************************************************************************** -// Canary Islands Computer Museum Website -// ---------------------------------------------------------------------------- -// -// Filename : DeletePersonalData.cshtml.cs -// Author(s) : Natalia Portillo -// -// --[ Description ] ---------------------------------------------------------- -// -// ASP.NET Identify management -// -// --[ License ] -------------------------------------------------------------- -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . -// -// ---------------------------------------------------------------------------- -// Copyright © 2003-2018 Natalia Portillo -*******************************************************************************/ - -using System; -using System.ComponentModel.DataAnnotations; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Identity; -using Microsoft.AspNetCore.Mvc; -using Microsoft.AspNetCore.Mvc.RazorPages; -using Microsoft.Extensions.Logging; - -namespace cicm_web.Areas.Identity.Pages.Account.Manage -{ - public class DeletePersonalDataModel : PageModel - { - readonly ILogger _logger; - readonly SignInManager _signInManager; - readonly UserManager _userManager; - - public DeletePersonalDataModel(UserManager userManager, - SignInManager signInManager, - ILogger logger) - { - _userManager = userManager; - _signInManager = signInManager; - _logger = logger; - } - - [BindProperty] - public InputModel Input { get; set; } - - public bool RequirePassword { get; set; } - - public async Task OnGet() - { - IdentityUser user = await _userManager.GetUserAsync(User); - if(user == null) return NotFound($"Unable to load user with ID '{_userManager.GetUserId(User)}'."); - - RequirePassword = await _userManager.HasPasswordAsync(user); - return Page(); - } - - public async Task OnPostAsync() - { - IdentityUser user = await _userManager.GetUserAsync(User); - if(user == null) return NotFound($"Unable to load user with ID '{_userManager.GetUserId(User)}'."); - - RequirePassword = await _userManager.HasPasswordAsync(user); - if(RequirePassword) - if(!await _userManager.CheckPasswordAsync(user, Input.Password)) - { - ModelState.AddModelError(string.Empty, "Password not correct."); - return Page(); - } - - IdentityResult result = await _userManager.DeleteAsync(user); - string userId = await _userManager.GetUserIdAsync(user); - if(!result.Succeeded) - throw new InvalidOperationException($"Unexpected error occurred deleteing user with ID '{userId}'."); - - await _signInManager.SignOutAsync(); - - _logger.LogInformation("User with ID '{UserId}' deleted themselves.", userId); - - return Redirect("~/"); - } - - public class InputModel - { - [Required] - [DataType(DataType.Password)] - public string Password { get; set; } - } - } -} \ No newline at end of file diff --git a/cicm_web/Areas/Identity/Pages/Account/Manage/Disable2fa.cshtml b/cicm_web/Areas/Identity/Pages/Account/Manage/Disable2fa.cshtml deleted file mode 100644 index c055dc5f..00000000 --- a/cicm_web/Areas/Identity/Pages/Account/Manage/Disable2fa.cshtml +++ /dev/null @@ -1,63 +0,0 @@ -@{ -/****************************************************************************** -// Canary Islands Computer Museum Website -// ---------------------------------------------------------------------------- -// -// Filename : Disable2fa.cshtml -// Author(s) : Natalia Portillo -// -// --[ Description ] ---------------------------------------------------------- -// -// ASP.NET Identify management -// -// --[ License ] -------------------------------------------------------------- -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . -// -// ---------------------------------------------------------------------------- -// Copyright © 2003-2018 Natalia Portillo -*******************************************************************************/ -} -@page -@model Disable2faModel -@{ - ViewData["Title"] = "Disable two-factor authentication (2FA)"; - ViewData["ActivePage"] = ManageNavPages.TwoFactorAuthentication; -} - - -

@ViewData["Title"]

- - - -
-
- -
-
\ No newline at end of file diff --git a/cicm_web/Areas/Identity/Pages/Account/Manage/Disable2fa.cshtml.cs b/cicm_web/Areas/Identity/Pages/Account/Manage/Disable2fa.cshtml.cs deleted file mode 100644 index 4ef10973..00000000 --- a/cicm_web/Areas/Identity/Pages/Account/Manage/Disable2fa.cshtml.cs +++ /dev/null @@ -1,81 +0,0 @@ -/****************************************************************************** -// Canary Islands Computer Museum Website -// ---------------------------------------------------------------------------- -// -// Filename : Disable2fa.cshtml.cs -// Author(s) : Natalia Portillo -// -// --[ Description ] ---------------------------------------------------------- -// -// ASP.NET Identify management -// -// --[ License ] -------------------------------------------------------------- -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . -// -// ---------------------------------------------------------------------------- -// Copyright © 2003-2018 Natalia Portillo -*******************************************************************************/ - -using System; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Identity; -using Microsoft.AspNetCore.Mvc; -using Microsoft.AspNetCore.Mvc.RazorPages; -using Microsoft.Extensions.Logging; - -namespace cicm_web.Areas.Identity.Pages.Account.Manage -{ - public class Disable2faModel : PageModel - { - readonly ILogger _logger; - readonly UserManager _userManager; - - public Disable2faModel(UserManager userManager, ILogger logger) - { - _userManager = userManager; - _logger = logger; - } - - [TempData] - public string StatusMessage { get; set; } - - public async Task OnGet() - { - IdentityUser user = await _userManager.GetUserAsync(User); - if(user == null) return NotFound($"Unable to load user with ID '{_userManager.GetUserId(User)}'."); - - if(!await _userManager.GetTwoFactorEnabledAsync(user)) - throw new - InvalidOperationException($"Cannot disable 2FA for user with ID '{_userManager.GetUserId(User)}' as it's not currently enabled."); - - return Page(); - } - - public async Task OnPostAsync() - { - IdentityUser user = await _userManager.GetUserAsync(User); - if(user == null) return NotFound($"Unable to load user with ID '{_userManager.GetUserId(User)}'."); - - IdentityResult disable2faResult = await _userManager.SetTwoFactorEnabledAsync(user, false); - if(!disable2faResult.Succeeded) - throw new - InvalidOperationException($"Unexpected error occurred disabling 2FA for user with ID '{_userManager.GetUserId(User)}'."); - - _logger.LogInformation("User with ID '{UserId}' has disabled 2fa.", _userManager.GetUserId(User)); - StatusMessage = "2fa has been disabled. You can reenable 2fa when you setup an authenticator app"; - return RedirectToPage("./TwoFactorAuthentication"); - } - } -} \ No newline at end of file diff --git a/cicm_web/Areas/Identity/Pages/Account/Manage/DownloadPersonalData.cshtml b/cicm_web/Areas/Identity/Pages/Account/Manage/DownloadPersonalData.cshtml deleted file mode 100644 index add4c359..00000000 --- a/cicm_web/Areas/Identity/Pages/Account/Manage/DownloadPersonalData.cshtml +++ /dev/null @@ -1,43 +0,0 @@ -@{ -/****************************************************************************** -// Canary Islands Computer Museum Website -// ---------------------------------------------------------------------------- -// -// Filename : DownloadPersonalData.cshtml -// Author(s) : Natalia Portillo -// -// --[ Description ] ---------------------------------------------------------- -// -// ASP.NET Identify management -// -// --[ License ] -------------------------------------------------------------- -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . -// -// ---------------------------------------------------------------------------- -// Copyright © 2003-2018 Natalia Portillo -*******************************************************************************/ -} -@page -@model DownloadPersonalDataModel -@{ - ViewData["Title"] = "Download Your Data"; - ViewData["ActivePage"] = ManageNavPages.PersonalData; -} - -

@ViewData["Title"]

- -@section Scripts { - -} \ No newline at end of file diff --git a/cicm_web/Areas/Identity/Pages/Account/Manage/DownloadPersonalData.cshtml.cs b/cicm_web/Areas/Identity/Pages/Account/Manage/DownloadPersonalData.cshtml.cs deleted file mode 100644 index 90841c15..00000000 --- a/cicm_web/Areas/Identity/Pages/Account/Manage/DownloadPersonalData.cshtml.cs +++ /dev/null @@ -1,80 +0,0 @@ -/****************************************************************************** -// Canary Islands Computer Museum Website -// ---------------------------------------------------------------------------- -// -// Filename : DownloadPersonalData.cshtml.cs -// Author(s) : Natalia Portillo -// -// --[ Description ] ---------------------------------------------------------- -// -// ASP.NET Identify management -// -// --[ License ] -------------------------------------------------------------- -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . -// -// ---------------------------------------------------------------------------- -// Copyright © 2003-2018 Natalia Portillo -*******************************************************************************/ - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Reflection; -using System.Text; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Identity; -using Microsoft.AspNetCore.Mvc; -using Microsoft.AspNetCore.Mvc.RazorPages; -using Microsoft.Extensions.Logging; -using Newtonsoft.Json; - -namespace cicm_web.Areas.Identity.Pages.Account.Manage -{ - public class DownloadPersonalDataModel : PageModel - { - readonly ILogger _logger; - readonly UserManager _userManager; - - public DownloadPersonalDataModel(UserManager userManager, - ILogger logger) - { - _userManager = userManager; - _logger = logger; - } - - public async Task OnPostAsync() - { - IdentityUser user = await _userManager.GetUserAsync(User); - if(user == null) return NotFound($"Unable to load user with ID '{_userManager.GetUserId(User)}'."); - - _logger.LogInformation("User with ID '{UserId}' asked for their personal data.", - _userManager.GetUserId(User)); - - // Only include personal data for download - Dictionary personalData = new Dictionary(); - IEnumerable personalDataProps = typeof(IdentityUser) - .GetProperties() - .Where(prop => - Attribute.IsDefined(prop, - typeof(PersonalDataAttribute))); - foreach(PropertyInfo p in personalDataProps) - personalData.Add(p.Name, p.GetValue(user)?.ToString() ?? "null"); - - Response.Headers.Add("Content-Disposition", "attachment; filename=PersonalData.json"); - return new FileContentResult(Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(personalData)), - "text/json"); - } - } -} \ No newline at end of file diff --git a/cicm_web/Areas/Identity/Pages/Account/Manage/EnableAuthenticator.cshtml b/cicm_web/Areas/Identity/Pages/Account/Manage/EnableAuthenticator.cshtml deleted file mode 100644 index 4584d986..00000000 --- a/cicm_web/Areas/Identity/Pages/Account/Manage/EnableAuthenticator.cshtml +++ /dev/null @@ -1,101 +0,0 @@ -@{ -/****************************************************************************** -// Canary Islands Computer Museum Website -// ---------------------------------------------------------------------------- -// -// Filename : EnableAuthenticator.cshtml -// Author(s) : Natalia Portillo -// -// --[ Description ] ---------------------------------------------------------- -// -// ASP.NET Identify management -// -// --[ License ] -------------------------------------------------------------- -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . -// -// ---------------------------------------------------------------------------- -// Copyright © 2003-2018 Natalia Portillo -*******************************************************************************/ -} -@page -@model EnableAuthenticatorModel -@{ - ViewData["Title"] = "Configure authenticator app"; - ViewData["ActivePage"] = ManageNavPages.TwoFactorAuthentication; -} - - -

@ViewData["Title"]

-
-

To use an authenticator app go through the following steps:

-
    -
  1. -

    - Download a two-factor authenticator app like Microsoft Authenticator for - Windows Phone, - Android and - iOS or - Google Authenticator for - Android and - iOS. -

    -
  2. -
  3. -

    Scan the QR Code or enter this key @Model.SharedKey into your two factor authenticator app. Spaces and casing do not matter.

    -
    To enable QR code generation please read our documentation.
    -
    -
    -
    -
  4. -
  5. -

    - Once you have scanned the QR code or input the key above, your two factor authentication app will provide you - with a unique code. Enter the code in the confirmation box below. -

    -
    -
    -
    -
    - - - - -
    - -
    -
    -
    -
    -
    -
  6. -
-
- -@section Scripts { - -} \ No newline at end of file diff --git a/cicm_web/Areas/Identity/Pages/Account/Manage/EnableAuthenticator.cshtml.cs b/cicm_web/Areas/Identity/Pages/Account/Manage/EnableAuthenticator.cshtml.cs deleted file mode 100644 index b315c473..00000000 --- a/cicm_web/Areas/Identity/Pages/Account/Manage/EnableAuthenticator.cshtml.cs +++ /dev/null @@ -1,170 +0,0 @@ -/****************************************************************************** -// Canary Islands Computer Museum Website -// ---------------------------------------------------------------------------- -// -// Filename : EnableAuthenticator.cshtml.cs -// Author(s) : Natalia Portillo -// -// --[ Description ] ---------------------------------------------------------- -// -// ASP.NET Identify management -// -// --[ License ] -------------------------------------------------------------- -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . -// -// ---------------------------------------------------------------------------- -// Copyright © 2003-2018 Natalia Portillo -*******************************************************************************/ - -using System.Collections.Generic; -using System.ComponentModel.DataAnnotations; -using System.Linq; -using System.Text; -using System.Text.Encodings.Web; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Identity; -using Microsoft.AspNetCore.Mvc; -using Microsoft.AspNetCore.Mvc.RazorPages; -using Microsoft.Extensions.Logging; - -namespace cicm_web.Areas.Identity.Pages.Account.Manage -{ - public class EnableAuthenticatorModel : PageModel - { - const string AuthenticatorUriFormat = - "otpauth://totp/{0}:{1}?secret={2}&issuer={0}&digits=6"; - readonly ILogger _logger; - readonly UrlEncoder _urlEncoder; - readonly UserManager _userManager; - - public EnableAuthenticatorModel(UserManager userManager, ILogger logger, - UrlEncoder urlEncoder) - { - _userManager = userManager; - _logger = logger; - _urlEncoder = urlEncoder; - } - - public string SharedKey { get; set; } - - public string AuthenticatorUri { get; set; } - - [TempData] - public string[] RecoveryCodes { get; set; } - - [TempData] - public string StatusMessage { get; set; } - - [BindProperty] - public InputModel Input { get; set; } - - public async Task OnGetAsync() - { - IdentityUser user = await _userManager.GetUserAsync(User); - if(user == null) return NotFound($"Unable to load user with ID '{_userManager.GetUserId(User)}'."); - - await LoadSharedKeyAndQrCodeUriAsync(user); - - return Page(); - } - - public async Task OnPostAsync() - { - IdentityUser user = await _userManager.GetUserAsync(User); - if(user == null) return NotFound($"Unable to load user with ID '{_userManager.GetUserId(User)}'."); - - if(!ModelState.IsValid) - { - await LoadSharedKeyAndQrCodeUriAsync(user); - return Page(); - } - - // Strip spaces and hypens - string verificationCode = Input.Code.Replace(" ", string.Empty).Replace("-", string.Empty); - - bool is2faTokenValid = - await _userManager.VerifyTwoFactorTokenAsync(user, - _userManager.Options.Tokens.AuthenticatorTokenProvider, - verificationCode); - - if(!is2faTokenValid) - { - ModelState.AddModelError("Input.Code", "Verification code is invalid."); - await LoadSharedKeyAndQrCodeUriAsync(user); - return Page(); - } - - await _userManager.SetTwoFactorEnabledAsync(user, true); - string userId = await _userManager.GetUserIdAsync(user); - _logger.LogInformation("User with ID '{UserId}' has enabled 2FA with an authenticator app.", userId); - - StatusMessage = "Your authenticator app has been verified."; - - if(await _userManager.CountRecoveryCodesAsync(user) == 0) - { - IEnumerable recoveryCodes = await _userManager.GenerateNewTwoFactorRecoveryCodesAsync(user, 10); - RecoveryCodes = recoveryCodes.ToArray(); - return RedirectToPage("./ShowRecoveryCodes"); - } - - return RedirectToPage("./TwoFactorAuthentication"); - } - - async Task LoadSharedKeyAndQrCodeUriAsync(IdentityUser user) - { - // Load the authenticator key & QR code URI to display on the form - string unformattedKey = await _userManager.GetAuthenticatorKeyAsync(user); - if(string.IsNullOrEmpty(unformattedKey)) - { - await _userManager.ResetAuthenticatorKeyAsync(user); - unformattedKey = await _userManager.GetAuthenticatorKeyAsync(user); - } - - SharedKey = FormatKey(unformattedKey); - - string email = await _userManager.GetEmailAsync(user); - AuthenticatorUri = GenerateQrCodeUri(email, unformattedKey); - } - - string FormatKey(string unformattedKey) - { - StringBuilder result = new StringBuilder(); - int currentPosition = 0; - while(currentPosition + 4 < unformattedKey.Length) - { - result.Append(unformattedKey.Substring(currentPosition, 4)).Append(" "); - currentPosition += 4; - } - - if(currentPosition < unformattedKey.Length) result.Append(unformattedKey.Substring(currentPosition)); - - return result.ToString().ToLowerInvariant(); - } - - string GenerateQrCodeUri(string email, string unformattedKey) => - string.Format(AuthenticatorUriFormat, _urlEncoder.Encode("cicm_web"), _urlEncoder.Encode(email), - unformattedKey); - - public class InputModel - { - [Required] - [StringLength(7, ErrorMessage = "The {0} must be at least {2} and at max {1} characters long.", - MinimumLength = 6)] - [DataType(DataType.Text)] - [Display(Name = "Verification Code")] - public string Code { get; set; } - } - } -} \ No newline at end of file diff --git a/cicm_web/Areas/Identity/Pages/Account/Manage/ExternalLogins.cshtml b/cicm_web/Areas/Identity/Pages/Account/Manage/ExternalLogins.cshtml deleted file mode 100644 index 0e7bf109..00000000 --- a/cicm_web/Areas/Identity/Pages/Account/Manage/ExternalLogins.cshtml +++ /dev/null @@ -1,105 +0,0 @@ -@{ -/****************************************************************************** -// Canary Islands Computer Museum Website -// ---------------------------------------------------------------------------- -// -// Filename : ExternalLogins.cshtml -// Author(s) : Natalia Portillo -// -// --[ Description ] ---------------------------------------------------------- -// -// ASP.NET Identify management -// -// --[ License ] -------------------------------------------------------------- -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . -// -// ---------------------------------------------------------------------------- -// Copyright © 2003-2018 Natalia Portillo -*******************************************************************************/ -} -@page -@using Microsoft.AspNetCore.Authentication -@model ExternalLoginsModel -@{ - ViewData["Title"] = "Manage your external logins"; - ViewData["ActivePage"] = ManageNavPages.ExternalLogins; -} - - -@if(Model.CurrentLogins?.Count > 0) -{ -

Registered Logins

- - - @foreach(UserLoginInfo login in Model.CurrentLogins) - { - - - - - } - -
@login.ProviderDisplayName - @if(Model.ShowRemoveButton) - { -
-
- - - -
-
- } - else - { - @:   - } -
-} -@if(Model.OtherLogins?.Count > 0) -{ -

Add another service to log in.

-
- -} \ No newline at end of file diff --git a/cicm_web/Areas/Identity/Pages/Account/Manage/ExternalLogins.cshtml.cs b/cicm_web/Areas/Identity/Pages/Account/Manage/ExternalLogins.cshtml.cs deleted file mode 100644 index 5adf82a6..00000000 --- a/cicm_web/Areas/Identity/Pages/Account/Manage/ExternalLogins.cshtml.cs +++ /dev/null @@ -1,128 +0,0 @@ -/****************************************************************************** -// Canary Islands Computer Museum Website -// ---------------------------------------------------------------------------- -// -// Filename : ExternalLogins.cshtml.cs -// Author(s) : Natalia Portillo -// -// --[ Description ] ---------------------------------------------------------- -// -// ASP.NET Identify management -// -// --[ License ] -------------------------------------------------------------- -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . -// -// ---------------------------------------------------------------------------- -// Copyright © 2003-2018 Natalia Portillo -*******************************************************************************/ - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Authentication; -using Microsoft.AspNetCore.Identity; -using Microsoft.AspNetCore.Mvc; -using Microsoft.AspNetCore.Mvc.RazorPages; - -namespace cicm_web.Areas.Identity.Pages.Account.Manage -{ - public class ExternalLoginsModel : PageModel - { - readonly SignInManager _signInManager; - readonly UserManager _userManager; - - public ExternalLoginsModel(UserManager userManager, SignInManager signInManager) - { - _userManager = userManager; - _signInManager = signInManager; - } - - public IList CurrentLogins { get; set; } - - public IList OtherLogins { get; set; } - - public bool ShowRemoveButton { get; set; } - - [TempData] - public string StatusMessage { get; set; } - - public async Task OnGetAsync() - { - IdentityUser user = await _userManager.GetUserAsync(User); - if(user == null) return NotFound($"Unable to load user with ID '{_userManager.GetUserId(User)}'."); - - CurrentLogins = await _userManager.GetLoginsAsync(user); - OtherLogins = (await _signInManager.GetExternalAuthenticationSchemesAsync()) - .Where(auth => CurrentLogins.All(ul => auth.Name != ul.LoginProvider)).ToList(); - ShowRemoveButton = user.PasswordHash != null || CurrentLogins.Count > 1; - return Page(); - } - - public async Task OnPostRemoveLoginAsync(string loginProvider, string providerKey) - { - IdentityUser user = await _userManager.GetUserAsync(User); - if(user == null) return NotFound($"Unable to load user with ID '{_userManager.GetUserId(User)}'."); - - IdentityResult result = await _userManager.RemoveLoginAsync(user, loginProvider, providerKey); - if(!result.Succeeded) - { - string userId = await _userManager.GetUserIdAsync(user); - throw new - InvalidOperationException($"Unexpected error occurred removing external login for user with ID '{userId}'."); - } - - await _signInManager.RefreshSignInAsync(user); - StatusMessage = "The external login was removed."; - return RedirectToPage(); - } - - public async Task OnPostLinkLoginAsync(string provider) - { - // Clear the existing external cookie to ensure a clean login process - await HttpContext.SignOutAsync(IdentityConstants.ExternalScheme); - - // Request a redirect to the external login provider to link a login for the current user - string redirectUrl = Url.Page("./ExternalLogins", "LinkLoginCallback"); - AuthenticationProperties properties = - _signInManager.ConfigureExternalAuthenticationProperties(provider, redirectUrl, - _userManager.GetUserId(User)); - return new ChallengeResult(provider, properties); - } - - public async Task OnGetLinkLoginCallbackAsync() - { - IdentityUser user = await _userManager.GetUserAsync(User); - if(user == null) return NotFound($"Unable to load user with ID '{_userManager.GetUserId(User)}'."); - - ExternalLoginInfo info = - await _signInManager.GetExternalLoginInfoAsync(await _userManager.GetUserIdAsync(user)); - if(info == null) - throw new - InvalidOperationException($"Unexpected error occurred loading external login info for user with ID '{user.Id}'."); - - IdentityResult result = await _userManager.AddLoginAsync(user, info); - if(!result.Succeeded) - throw new - InvalidOperationException($"Unexpected error occurred adding external login for user with ID '{user.Id}'."); - - // Clear the existing external cookie to ensure a clean login process - await HttpContext.SignOutAsync(IdentityConstants.ExternalScheme); - - StatusMessage = "The external login was added."; - return RedirectToPage(); - } - } -} \ No newline at end of file diff --git a/cicm_web/Areas/Identity/Pages/Account/Manage/GenerateRecoveryCodes.cshtml b/cicm_web/Areas/Identity/Pages/Account/Manage/GenerateRecoveryCodes.cshtml deleted file mode 100644 index bf88f874..00000000 --- a/cicm_web/Areas/Identity/Pages/Account/Manage/GenerateRecoveryCodes.cshtml +++ /dev/null @@ -1,64 +0,0 @@ -@{ -/****************************************************************************** -// Canary Islands Computer Museum Website -// ---------------------------------------------------------------------------- -// -// Filename : GenerateRecoveryCodes.cshtml -// Author(s) : Natalia Portillo -// -// --[ Description ] ---------------------------------------------------------- -// -// ASP.NET Identify management -// -// --[ License ] -------------------------------------------------------------- -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . -// -// ---------------------------------------------------------------------------- -// Copyright © 2003-2018 Natalia Portillo -*******************************************************************************/ -} -@page -@model GenerateRecoveryCodesModel -@{ - ViewData["Title"] = "Generate two-factor authentication (2FA) recovery codes"; - ViewData["ActivePage"] = ManageNavPages.TwoFactorAuthentication; -} - - -

@ViewData["Title"]

- -
-
- -
-
\ No newline at end of file diff --git a/cicm_web/Areas/Identity/Pages/Account/Manage/GenerateRecoveryCodes.cshtml.cs b/cicm_web/Areas/Identity/Pages/Account/Manage/GenerateRecoveryCodes.cshtml.cs deleted file mode 100644 index 80b8995d..00000000 --- a/cicm_web/Areas/Identity/Pages/Account/Manage/GenerateRecoveryCodes.cshtml.cs +++ /dev/null @@ -1,92 +0,0 @@ -/****************************************************************************** -// Canary Islands Computer Museum Website -// ---------------------------------------------------------------------------- -// -// Filename : GenerateRecoveryCodes.cshtml.cs -// Author(s) : Natalia Portillo -// -// --[ Description ] ---------------------------------------------------------- -// -// ASP.NET Identify management -// -// --[ License ] -------------------------------------------------------------- -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . -// -// ---------------------------------------------------------------------------- -// Copyright © 2003-2018 Natalia Portillo -*******************************************************************************/ - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Identity; -using Microsoft.AspNetCore.Mvc; -using Microsoft.AspNetCore.Mvc.RazorPages; -using Microsoft.Extensions.Logging; - -namespace cicm_web.Areas.Identity.Pages.Account.Manage -{ - public class GenerateRecoveryCodesModel : PageModel - { - readonly ILogger _logger; - readonly UserManager _userManager; - - public GenerateRecoveryCodesModel(UserManager userManager, - ILogger logger) - { - _userManager = userManager; - _logger = logger; - } - - [TempData] - public string[] RecoveryCodes { get; set; } - - [TempData] - public string StatusMessage { get; set; } - - public async Task OnGetAsync() - { - IdentityUser user = await _userManager.GetUserAsync(User); - if(user == null) return NotFound($"Unable to load user with ID '{_userManager.GetUserId(User)}'."); - - bool isTwoFactorEnabled = await _userManager.GetTwoFactorEnabledAsync(user); - if(isTwoFactorEnabled) return Page(); - - string userId = await _userManager.GetUserIdAsync(user); - throw new - InvalidOperationException($"Cannot generate recovery codes for user with ID '{userId}' because they do not have 2FA enabled."); - } - - public async Task OnPostAsync() - { - IdentityUser user = await _userManager.GetUserAsync(User); - if(user == null) return NotFound($"Unable to load user with ID '{_userManager.GetUserId(User)}'."); - - bool isTwoFactorEnabled = await _userManager.GetTwoFactorEnabledAsync(user); - string userId = await _userManager.GetUserIdAsync(user); - if(!isTwoFactorEnabled) - throw new - InvalidOperationException($"Cannot generate recovery codes for user with ID '{userId}' as they do not have 2FA enabled."); - - IEnumerable recoveryCodes = await _userManager.GenerateNewTwoFactorRecoveryCodesAsync(user, 10); - RecoveryCodes = recoveryCodes.ToArray(); - - _logger.LogInformation("User with ID '{UserId}' has generated new 2FA recovery codes.", userId); - StatusMessage = "You have generated new recovery codes."; - return RedirectToPage("./ShowRecoveryCodes"); - } - } -} \ No newline at end of file diff --git a/cicm_web/Areas/Identity/Pages/Account/Manage/Index.cshtml b/cicm_web/Areas/Identity/Pages/Account/Manage/Index.cshtml deleted file mode 100644 index 49b61744..00000000 --- a/cicm_web/Areas/Identity/Pages/Account/Manage/Index.cshtml +++ /dev/null @@ -1,102 +0,0 @@ -@{ -/****************************************************************************** -// Canary Islands Computer Museum Website -// ---------------------------------------------------------------------------- -// -// Filename : Index.cshtml -// Author(s) : Natalia Portillo -// -// --[ Description ] ---------------------------------------------------------- -// -// ASP.NET Identify management -// -// --[ License ] -------------------------------------------------------------- -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . -// -// ---------------------------------------------------------------------------- -// Copyright © 2003-2018 Natalia Portillo -*******************************************************************************/ -} -@page -@model IndexModel -@{ - ViewData["Title"] = "Profile"; - ViewData["ActivePage"] = ManageNavPages.Index; -} - -

@ViewData["Title"]

- -
-
-
-
-
-
- - -
-
- - @if(Model.IsEmailConfirmed) - { -
- - -
- } - else - { - - - } - - -
-
- - - - -
- -
-
-
- -@section Scripts { - -} \ No newline at end of file diff --git a/cicm_web/Areas/Identity/Pages/Account/Manage/Index.cshtml.cs b/cicm_web/Areas/Identity/Pages/Account/Manage/Index.cshtml.cs deleted file mode 100644 index 8330446e..00000000 --- a/cicm_web/Areas/Identity/Pages/Account/Manage/Index.cshtml.cs +++ /dev/null @@ -1,149 +0,0 @@ -/****************************************************************************** -// Canary Islands Computer Museum Website -// ---------------------------------------------------------------------------- -// -// Filename : Index.cshtml.cs -// Author(s) : Natalia Portillo -// -// --[ Description ] ---------------------------------------------------------- -// -// ASP.NET Identify management -// -// --[ License ] -------------------------------------------------------------- -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . -// -// ---------------------------------------------------------------------------- -// Copyright © 2003-2018 Natalia Portillo -*******************************************************************************/ - -using System; -using System.ComponentModel.DataAnnotations; -using System.Text.Encodings.Web; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Identity; -using Microsoft.AspNetCore.Identity.UI.Services; -using Microsoft.AspNetCore.Mvc; -using Microsoft.AspNetCore.Mvc.RazorPages; - -namespace cicm_web.Areas.Identity.Pages.Account.Manage -{ - public class IndexModel : PageModel - { - readonly IEmailSender _emailSender; - readonly SignInManager _signInManager; - readonly UserManager _userManager; - - public IndexModel(UserManager userManager, SignInManager signInManager, - IEmailSender emailSender) - { - _userManager = userManager; - _signInManager = signInManager; - _emailSender = emailSender; - } - - public string Username { get; set; } - - public bool IsEmailConfirmed { get; set; } - - [TempData] - public string StatusMessage { get; set; } - - [BindProperty] - public InputModel Input { get; set; } - - public async Task OnGetAsync() - { - IdentityUser user = await _userManager.GetUserAsync(User); - if(user == null) return NotFound($"Unable to load user with ID '{_userManager.GetUserId(User)}'."); - - string userName = await _userManager.GetUserNameAsync(user); - string email = await _userManager.GetEmailAsync(user); - string phoneNumber = await _userManager.GetPhoneNumberAsync(user); - - Username = userName; - - Input = new InputModel {Email = email, PhoneNumber = phoneNumber}; - - IsEmailConfirmed = await _userManager.IsEmailConfirmedAsync(user); - - return Page(); - } - - public async Task OnPostAsync() - { - if(!ModelState.IsValid) return Page(); - - IdentityUser user = await _userManager.GetUserAsync(User); - if(user == null) return NotFound($"Unable to load user with ID '{_userManager.GetUserId(User)}'."); - - string email = await _userManager.GetEmailAsync(user); - if(Input.Email != email) - { - IdentityResult setEmailResult = await _userManager.SetEmailAsync(user, Input.Email); - if(!setEmailResult.Succeeded) - { - string userId = await _userManager.GetUserIdAsync(user); - throw new - InvalidOperationException($"Unexpected error occurred setting email for user with ID '{userId}'."); - } - } - - string phoneNumber = await _userManager.GetPhoneNumberAsync(user); - if(Input.PhoneNumber != phoneNumber) - { - IdentityResult setPhoneResult = await _userManager.SetPhoneNumberAsync(user, Input.PhoneNumber); - if(!setPhoneResult.Succeeded) - { - string userId = await _userManager.GetUserIdAsync(user); - throw new - InvalidOperationException($"Unexpected error occurred setting phone number for user with ID '{userId}'."); - } - } - - await _signInManager.RefreshSignInAsync(user); - StatusMessage = "Your profile has been updated"; - return RedirectToPage(); - } - - public async Task OnPostSendVerificationEmailAsync() - { - if(!ModelState.IsValid) return Page(); - - IdentityUser user = await _userManager.GetUserAsync(User); - if(user == null) return NotFound($"Unable to load user with ID '{_userManager.GetUserId(User)}'."); - - string userId = await _userManager.GetUserIdAsync(user); - string email = await _userManager.GetEmailAsync(user); - string code = await _userManager.GenerateEmailConfirmationTokenAsync(user); - string callbackUrl = Url.Page("/Account/ConfirmEmail", null, new {userId, code}, Request.Scheme); - await _emailSender.SendEmailAsync(email, "Confirm your email", - $"Please confirm your account by clicking here."); - - StatusMessage = "Verification email sent. Please check your email."; - return RedirectToPage(); - } - - public class InputModel - { - [Required] - [EmailAddress] - public string Email { get; set; } - - [Phone] - [Display(Name = "Phone number")] - public string PhoneNumber { get; set; } - } - } -} \ No newline at end of file diff --git a/cicm_web/Areas/Identity/Pages/Account/Manage/ManageNavPages.cs b/cicm_web/Areas/Identity/Pages/Account/Manage/ManageNavPages.cs deleted file mode 100644 index 2150225b..00000000 --- a/cicm_web/Areas/Identity/Pages/Account/Manage/ManageNavPages.cs +++ /dev/null @@ -1,69 +0,0 @@ -/****************************************************************************** -// Canary Islands Computer Museum Website -// ---------------------------------------------------------------------------- -// -// Filename : ManageNavPages.cs -// Author(s) : Natalia Portillo -// -// --[ Description ] ---------------------------------------------------------- -// -// ASP.NET Identify management -// -// --[ License ] -------------------------------------------------------------- -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . -// -// ---------------------------------------------------------------------------- -// Copyright © 2003-2018 Natalia Portillo -*******************************************************************************/ - -using System; -using System.IO; -using Microsoft.AspNetCore.Mvc.Rendering; - -namespace cicm_web.Areas.Identity.Pages.Account.Manage -{ - public static class ManageNavPages - { - public static string Index => "Index"; - - public static string ChangePassword => "ChangePassword"; - - public static string ExternalLogins => "ExternalLogins"; - - public static string PersonalData => "PersonalData"; - - public static string TwoFactorAuthentication => "TwoFactorAuthentication"; - - public static string IndexNavClass(ViewContext viewContext) => PageNavClass(viewContext, Index); - - public static string ChangePasswordNavClass(ViewContext viewContext) => - PageNavClass(viewContext, ChangePassword); - - public static string ExternalLoginsNavClass(ViewContext viewContext) => - PageNavClass(viewContext, ExternalLogins); - - public static string PersonalDataNavClass(ViewContext viewContext) => PageNavClass(viewContext, PersonalData); - - public static string TwoFactorAuthenticationNavClass(ViewContext viewContext) => - PageNavClass(viewContext, TwoFactorAuthentication); - - static string PageNavClass(ViewContext viewContext, string page) - { - string activePage = viewContext.ViewData["ActivePage"] as string ?? - Path.GetFileNameWithoutExtension(viewContext.ActionDescriptor.DisplayName); - return string.Equals(activePage, page, StringComparison.OrdinalIgnoreCase) ? "active" : null; - } - } -} \ No newline at end of file diff --git a/cicm_web/Areas/Identity/Pages/Account/Manage/PersonalData.cshtml b/cicm_web/Areas/Identity/Pages/Account/Manage/PersonalData.cshtml deleted file mode 100644 index 31b9d7ce..00000000 --- a/cicm_web/Areas/Identity/Pages/Account/Manage/PersonalData.cshtml +++ /dev/null @@ -1,68 +0,0 @@ -@{ -/****************************************************************************** -// Canary Islands Computer Museum Website -// ---------------------------------------------------------------------------- -// -// Filename : PersonalData.cshtml -// Author(s) : Natalia Portillo -// -// --[ Description ] ---------------------------------------------------------- -// -// ASP.NET Identify management -// -// --[ License ] -------------------------------------------------------------- -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . -// -// ---------------------------------------------------------------------------- -// Copyright © 2003-2018 Natalia Portillo -*******************************************************************************/ -} -@page -@model PersonalDataModel -@{ - ViewData["Title"] = "Personal Data"; - ViewData["ActivePage"] = ManageNavPages.PersonalData; -} - -

@ViewData["Title"]

- -
-
-

Your account contains personal data that you have given us. This page allows you to download or delete that data.

-

- Deleting this data will permanently remove your account, and this cannot be recovered. -

-
- -
-

- - Delete - -

-
-
- -@section Scripts { - -} \ No newline at end of file diff --git a/cicm_web/Areas/Identity/Pages/Account/Manage/PersonalData.cshtml.cs b/cicm_web/Areas/Identity/Pages/Account/Manage/PersonalData.cshtml.cs deleted file mode 100644 index d2e397bb..00000000 --- a/cicm_web/Areas/Identity/Pages/Account/Manage/PersonalData.cshtml.cs +++ /dev/null @@ -1,58 +0,0 @@ -/****************************************************************************** -// Canary Islands Computer Museum Website -// ---------------------------------------------------------------------------- -// -// Filename : PersonalData.cshtml.cs -// Author(s) : Natalia Portillo -// -// --[ Description ] ---------------------------------------------------------- -// -// ASP.NET Identify management -// -// --[ License ] -------------------------------------------------------------- -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . -// -// ---------------------------------------------------------------------------- -// Copyright © 2003-2018 Natalia Portillo -*******************************************************************************/ - -using System.Threading.Tasks; -using Microsoft.AspNetCore.Identity; -using Microsoft.AspNetCore.Mvc; -using Microsoft.AspNetCore.Mvc.RazorPages; -using Microsoft.Extensions.Logging; - -namespace cicm_web.Areas.Identity.Pages.Account.Manage -{ - public class PersonalDataModel : PageModel - { - readonly ILogger _logger; - readonly UserManager _userManager; - - public PersonalDataModel(UserManager userManager, ILogger logger) - { - _userManager = userManager; - _logger = logger; - } - - public async Task OnGet() - { - IdentityUser user = await _userManager.GetUserAsync(User); - if(user == null) return NotFound($"Unable to load user with ID '{_userManager.GetUserId(User)}'."); - - return Page(); - } - } -} \ No newline at end of file diff --git a/cicm_web/Areas/Identity/Pages/Account/Manage/ResetAuthenticator.cshtml b/cicm_web/Areas/Identity/Pages/Account/Manage/ResetAuthenticator.cshtml deleted file mode 100644 index bd063715..00000000 --- a/cicm_web/Areas/Identity/Pages/Account/Manage/ResetAuthenticator.cshtml +++ /dev/null @@ -1,63 +0,0 @@ -@{ -/****************************************************************************** -// Canary Islands Computer Museum Website -// ---------------------------------------------------------------------------- -// -// Filename : ResetAuthenticator.cshtml -// Author(s) : Natalia Portillo -// -// --[ Description ] ---------------------------------------------------------- -// -// ASP.NET Identify management -// -// --[ License ] -------------------------------------------------------------- -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . -// -// ---------------------------------------------------------------------------- -// Copyright © 2003-2018 Natalia Portillo -*******************************************************************************/ -} -@page -@model ResetAuthenticatorModel -@{ - ViewData["Title"] = "Reset authenticator key"; - ViewData["ActivePage"] = ManageNavPages.TwoFactorAuthentication; -} - - -

@ViewData["Title"]

- -
-
- -
-
\ No newline at end of file diff --git a/cicm_web/Areas/Identity/Pages/Account/Manage/ResetAuthenticator.cshtml.cs b/cicm_web/Areas/Identity/Pages/Account/Manage/ResetAuthenticator.cshtml.cs deleted file mode 100644 index 71a6eb3f..00000000 --- a/cicm_web/Areas/Identity/Pages/Account/Manage/ResetAuthenticator.cshtml.cs +++ /dev/null @@ -1,81 +0,0 @@ -/****************************************************************************** -// Canary Islands Computer Museum Website -// ---------------------------------------------------------------------------- -// -// Filename : ResetAuthenticator.cshtml.cs -// Author(s) : Natalia Portillo -// -// --[ Description ] ---------------------------------------------------------- -// -// ASP.NET Identify management -// -// --[ License ] -------------------------------------------------------------- -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . -// -// ---------------------------------------------------------------------------- -// Copyright © 2003-2018 Natalia Portillo -*******************************************************************************/ - -using System.Threading.Tasks; -using Microsoft.AspNetCore.Identity; -using Microsoft.AspNetCore.Mvc; -using Microsoft.AspNetCore.Mvc.RazorPages; -using Microsoft.Extensions.Logging; - -namespace cicm_web.Areas.Identity.Pages.Account.Manage -{ - public class ResetAuthenticatorModel : PageModel - { - readonly SignInManager _signInManager; - readonly ILogger _logger; - readonly UserManager _userManager; - - public ResetAuthenticatorModel(UserManager userManager, - SignInManager signInManager, - ILogger logger) - { - _userManager = userManager; - _signInManager = signInManager; - _logger = logger; - } - - [TempData] - public string StatusMessage { get; set; } - - public async Task OnGet() - { - IdentityUser user = await _userManager.GetUserAsync(User); - if(user == null) return NotFound($"Unable to load user with ID '{_userManager.GetUserId(User)}'."); - - return Page(); - } - - public async Task OnPostAsync() - { - IdentityUser user = await _userManager.GetUserAsync(User); - if(user == null) return NotFound($"Unable to load user with ID '{_userManager.GetUserId(User)}'."); - - await _userManager.SetTwoFactorEnabledAsync(user, false); - await _userManager.ResetAuthenticatorKeyAsync(user); - _logger.LogInformation("User with ID '{UserId}' has reset their authentication app key.", user.Id); - - await _signInManager.RefreshSignInAsync(user); - StatusMessage = - "Your authenticator app key has been reset, you will need to configure your authenticator app using the new key."; - - return RedirectToPage("./EnableAuthenticator"); - } - } -} \ No newline at end of file diff --git a/cicm_web/Areas/Identity/Pages/Account/Manage/SetPassword.cshtml b/cicm_web/Areas/Identity/Pages/Account/Manage/SetPassword.cshtml deleted file mode 100644 index b32571ee..00000000 --- a/cicm_web/Areas/Identity/Pages/Account/Manage/SetPassword.cshtml +++ /dev/null @@ -1,79 +0,0 @@ -@{ -/****************************************************************************** -// Canary Islands Computer Museum Website -// ---------------------------------------------------------------------------- -// -// Filename : SetPassword.cshtml -// Author(s) : Natalia Portillo -// -// --[ Description ] ---------------------------------------------------------- -// -// ASP.NET Identify management -// -// --[ License ] -------------------------------------------------------------- -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . -// -// ---------------------------------------------------------------------------- -// Copyright © 2003-2018 Natalia Portillo -*******************************************************************************/ -} -@page -@model SetPasswordModel -@{ - ViewData["Title"] = "Set password"; - ViewData["ActivePage"] = ManageNavPages.ChangePassword; -} - -

Set your password

- -

- You do not have a local username/password for this site. Add a local - account so you can log in without an external login. -

-
-
-
-
-
-
- - - - -
-
- - - - -
- -
-
-
- -@section Scripts { - -} \ No newline at end of file diff --git a/cicm_web/Areas/Identity/Pages/Account/Manage/SetPassword.cshtml.cs b/cicm_web/Areas/Identity/Pages/Account/Manage/SetPassword.cshtml.cs deleted file mode 100644 index 425b049b..00000000 --- a/cicm_web/Areas/Identity/Pages/Account/Manage/SetPassword.cshtml.cs +++ /dev/null @@ -1,104 +0,0 @@ -/****************************************************************************** -// Canary Islands Computer Museum Website -// ---------------------------------------------------------------------------- -// -// Filename : SetPassword.cshtml.cs -// Author(s) : Natalia Portillo -// -// --[ Description ] ---------------------------------------------------------- -// -// ASP.NET Identify management -// -// --[ License ] -------------------------------------------------------------- -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . -// -// ---------------------------------------------------------------------------- -// Copyright © 2003-2018 Natalia Portillo -*******************************************************************************/ - -using System.ComponentModel.DataAnnotations; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Identity; -using Microsoft.AspNetCore.Mvc; -using Microsoft.AspNetCore.Mvc.RazorPages; - -namespace cicm_web.Areas.Identity.Pages.Account.Manage -{ - public class SetPasswordModel : PageModel - { - readonly SignInManager _signInManager; - readonly UserManager _userManager; - - public SetPasswordModel(UserManager userManager, SignInManager signInManager) - { - _userManager = userManager; - _signInManager = signInManager; - } - - [BindProperty] - public InputModel Input { get; set; } - - [TempData] - public string StatusMessage { get; set; } - - public async Task OnGetAsync() - { - IdentityUser user = await _userManager.GetUserAsync(User); - if(user == null) return NotFound($"Unable to load user with ID '{_userManager.GetUserId(User)}'."); - - bool hasPassword = await _userManager.HasPasswordAsync(user); - - if(hasPassword) return RedirectToPage("./ChangePassword"); - - return Page(); - } - - public async Task OnPostAsync() - { - if(!ModelState.IsValid) return Page(); - - IdentityUser user = await _userManager.GetUserAsync(User); - if(user == null) return NotFound($"Unable to load user with ID '{_userManager.GetUserId(User)}'."); - - IdentityResult addPasswordResult = await _userManager.AddPasswordAsync(user, Input.NewPassword); - if(!addPasswordResult.Succeeded) - { - foreach(IdentityError error in addPasswordResult.Errors) - ModelState.AddModelError(string.Empty, error.Description); - return Page(); - } - - await _signInManager.RefreshSignInAsync(user); - StatusMessage = "Your password has been set."; - - return RedirectToPage(); - } - - public class InputModel - { - [Required] - [StringLength(100, ErrorMessage = "The {0} must be at least {2} and at max {1} characters long.", - MinimumLength = 6)] - [DataType(DataType.Password)] - [Display(Name = "New password")] - public string NewPassword { get; set; } - - [DataType(DataType.Password)] - [Display(Name = "Confirm new password")] - [Compare("NewPassword", ErrorMessage = "The new password and confirmation password do not match.")] - public string ConfirmPassword { get; set; } - } - } -} \ No newline at end of file diff --git a/cicm_web/Areas/Identity/Pages/Account/Manage/TwoFactorAuthentication.cshtml b/cicm_web/Areas/Identity/Pages/Account/Manage/TwoFactorAuthentication.cshtml deleted file mode 100644 index 7e9dd574..00000000 --- a/cicm_web/Areas/Identity/Pages/Account/Manage/TwoFactorAuthentication.cshtml +++ /dev/null @@ -1,111 +0,0 @@ -@{ -/****************************************************************************** -// Canary Islands Computer Museum Website -// ---------------------------------------------------------------------------- -// -// Filename : TwoFactorAuthentication.cshtml -// Author(s) : Natalia Portillo -// -// --[ Description ] ---------------------------------------------------------- -// -// ASP.NET Identify management -// -// --[ License ] -------------------------------------------------------------- -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . -// -// ---------------------------------------------------------------------------- -// Copyright © 2003-2018 Natalia Portillo -*******************************************************************************/ -} -@page -@model TwoFactorAuthenticationModel -@{ - ViewData["Title"] = "Two-factor authentication (2FA)"; - ViewData["ActivePage"] = ManageNavPages.TwoFactorAuthentication; -} - - -

@ViewData["Title"]

-@if(Model.Is2faEnabled) -{ - if(Model.RecoveryCodesLeft == 0) - { -
- You have no recovery codes left. -

You must generate a new set of recovery codes before you can log in with a recovery code.

-
- } - else if(Model.RecoveryCodesLeft == 1) - { -
- You have 1 recovery code left. -

You can generate a new set of recovery codes.

-
- } - else if(Model.RecoveryCodesLeft <= 3) - { -
- You have @Model.RecoveryCodesLeft recovery codes left. -

You should generate a new set of recovery codes.

-
- } - - if(Model.IsMachineRemembered) - { -
- -
- } - - Disable 2FA - - - Reset recovery codes - -} - -
Authenticator app
-@if(!Model.HasAuthenticator) -{ - - Add authenticator app - -} -else -{ - - Setup authenticator app - - - Reset authenticator app - -} - -@section Scripts { - -} \ No newline at end of file diff --git a/cicm_web/Areas/Identity/Pages/Account/Manage/TwoFactorAuthentication.cshtml.cs b/cicm_web/Areas/Identity/Pages/Account/Manage/TwoFactorAuthentication.cshtml.cs deleted file mode 100644 index d0b46eb1..00000000 --- a/cicm_web/Areas/Identity/Pages/Account/Manage/TwoFactorAuthentication.cshtml.cs +++ /dev/null @@ -1,93 +0,0 @@ -/****************************************************************************** -// Canary Islands Computer Museum Website -// ---------------------------------------------------------------------------- -// -// Filename : TwoFactorAuthentication.cshtml.cs -// Author(s) : Natalia Portillo -// -// --[ Description ] ---------------------------------------------------------- -// -// ASP.NET Identify management -// -// --[ License ] -------------------------------------------------------------- -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . -// -// ---------------------------------------------------------------------------- -// Copyright © 2003-2018 Natalia Portillo -*******************************************************************************/ - -using System.Threading.Tasks; -using Microsoft.AspNetCore.Identity; -using Microsoft.AspNetCore.Mvc; -using Microsoft.AspNetCore.Mvc.RazorPages; -using Microsoft.Extensions.Logging; - -namespace cicm_web.Areas.Identity.Pages.Account.Manage -{ - public class TwoFactorAuthenticationModel : PageModel - { - const string AuthenicatorUriFormat = - "otpauth://totp/{0}:{1}?secret={2}&issuer={0}"; - readonly ILogger _logger; - readonly SignInManager _signInManager; - - readonly UserManager _userManager; - - public TwoFactorAuthenticationModel(UserManager userManager, - SignInManager signInManager, - ILogger logger) - { - _userManager = userManager; - _signInManager = signInManager; - _logger = logger; - } - - public bool HasAuthenticator { get; set; } - - public int RecoveryCodesLeft { get; set; } - - [BindProperty] - public bool Is2faEnabled { get; set; } - - public bool IsMachineRemembered { get; set; } - - [TempData] - public string StatusMessage { get; set; } - - public async Task OnGet() - { - IdentityUser user = await _userManager.GetUserAsync(User); - if(user == null) return NotFound($"Unable to load user with ID '{_userManager.GetUserId(User)}'."); - - HasAuthenticator = await _userManager.GetAuthenticatorKeyAsync(user) != null; - Is2faEnabled = await _userManager.GetTwoFactorEnabledAsync(user); - IsMachineRemembered = await _signInManager.IsTwoFactorClientRememberedAsync(user); - RecoveryCodesLeft = await _userManager.CountRecoveryCodesAsync(user); - - return Page(); - } - - public async Task OnPost() - { - IdentityUser user = await _userManager.GetUserAsync(User); - if(user == null) return NotFound($"Unable to load user with ID '{_userManager.GetUserId(User)}'."); - - await _signInManager.ForgetTwoFactorClientAsync(); - StatusMessage = - "The current browser has been forgotten. When you login again from this browser you will be prompted for your 2fa code."; - return RedirectToPage(); - } - } -} \ No newline at end of file diff --git a/cicm_web/Areas/Identity/Pages/Account/Manage/_Layout.cshtml b/cicm_web/Areas/Identity/Pages/Account/Manage/_Layout.cshtml deleted file mode 100644 index af9a05a2..00000000 --- a/cicm_web/Areas/Identity/Pages/Account/Manage/_Layout.cshtml +++ /dev/null @@ -1,53 +0,0 @@ -@{ -/****************************************************************************** -// Canary Islands Computer Museum Website -// ---------------------------------------------------------------------------- -// -// Filename : _Layout.cshtml -// Author(s) : Natalia Portillo -// -// --[ Description ] ---------------------------------------------------------- -// -// ASP.NET Identify management -// -// --[ License ] -------------------------------------------------------------- -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . -// -// ---------------------------------------------------------------------------- -// Copyright © 2003-2018 Natalia Portillo -*******************************************************************************/ -} -@{ - Layout = "/Views/Shared/_Layout.cshtml"; -} - -

Manage your account

- -
-

Change your account settings

-
-
-
- -
-
- @RenderBody() -
-
-
- -@section Scripts { - @RenderSection("Scripts", false) -} \ No newline at end of file diff --git a/cicm_web/Areas/Identity/Pages/Account/Manage/_ManageNav.cshtml b/cicm_web/Areas/Identity/Pages/Account/Manage/_ManageNav.cshtml deleted file mode 100644 index 909c079f..00000000 --- a/cicm_web/Areas/Identity/Pages/Account/Manage/_ManageNav.cshtml +++ /dev/null @@ -1,76 +0,0 @@ -@{ -/****************************************************************************** -// Canary Islands Computer Museum Website -// ---------------------------------------------------------------------------- -// -// Filename : _ManageNav.cshtml -// Author(s) : Natalia Portillo -// -// --[ Description ] ---------------------------------------------------------- -// -// ASP.NET Identify management -// -// --[ License ] -------------------------------------------------------------- -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . -// -// ---------------------------------------------------------------------------- -// Copyright © 2003-2018 Natalia Portillo -*******************************************************************************/ -} -@inject SignInManager SignInManager -@{ - bool hasExternalLogins = (await SignInManager.GetExternalAuthenticationSchemesAsync()).Any(); -} - \ No newline at end of file diff --git a/cicm_web/Areas/Identity/Pages/Account/Manage/_StatusMessage.cshtml b/cicm_web/Areas/Identity/Pages/Account/Manage/_StatusMessage.cshtml deleted file mode 100644 index 5ec28d16..00000000 --- a/cicm_web/Areas/Identity/Pages/Account/Manage/_StatusMessage.cshtml +++ /dev/null @@ -1,47 +0,0 @@ -@{ -/****************************************************************************** -// Canary Islands Computer Museum Website -// ---------------------------------------------------------------------------- -// -// Filename : _StatusMessage.cshtml -// Author(s) : Natalia Portillo -// -// --[ Description ] ---------------------------------------------------------- -// -// ASP.NET Identify management -// -// --[ License ] -------------------------------------------------------------- -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . -// -// ---------------------------------------------------------------------------- -// Copyright © 2003-2018 Natalia Portillo -*******************************************************************************/ -} -@model string - -@if(!string.IsNullOrEmpty(Model)) -{ - string statusMessageClass = Model.StartsWith("Error") ? "danger" : "success"; - -} \ No newline at end of file diff --git a/cicm_web/Areas/Identity/Pages/Account/Manage/_ViewImports.cshtml b/cicm_web/Areas/Identity/Pages/Account/Manage/_ViewImports.cshtml deleted file mode 100644 index ff12cbd7..00000000 --- a/cicm_web/Areas/Identity/Pages/Account/Manage/_ViewImports.cshtml +++ /dev/null @@ -1,32 +0,0 @@ -@{ -/****************************************************************************** -// Canary Islands Computer Museum Website -// ---------------------------------------------------------------------------- -// -// Filename : _ViewImports.cshtml -// Author(s) : Natalia Portillo -// -// --[ Description ] ---------------------------------------------------------- -// -// ASP.NET Identify management -// -// --[ License ] -------------------------------------------------------------- -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . -// -// ---------------------------------------------------------------------------- -// Copyright © 2003-2018 Natalia Portillo -*******************************************************************************/ -} -@using cicm_web.Areas.Identity.Pages.Account.Manage diff --git a/cicm_web/Areas/Identity/Pages/Account/Register.cshtml b/cicm_web/Areas/Identity/Pages/Account/Register.cshtml deleted file mode 100644 index b1168756..00000000 --- a/cicm_web/Areas/Identity/Pages/Account/Register.cshtml +++ /dev/null @@ -1,83 +0,0 @@ -@{ -/****************************************************************************** -// Canary Islands Computer Museum Website -// ---------------------------------------------------------------------------- -// -// Filename : Register.cshtml -// Author(s) : Natalia Portillo -// -// --[ Description ] ---------------------------------------------------------- -// -// ASP.NET Identify management -// -// --[ License ] -------------------------------------------------------------- -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . -// -// ---------------------------------------------------------------------------- -// Copyright © 2003-2018 Natalia Portillo -*******************************************************************************/ -} -@page -@model RegisterModel -@{ - ViewData["Title"] = "Register"; -} - -

@ViewData["Title"]

- -
-
-
-

Create a new account.

-
-
-
-
- - - - -
-
- - - - -
-
- - - - -
- -
-
-
- -@section Scripts { - -} \ No newline at end of file diff --git a/cicm_web/Areas/Identity/Pages/Account/Register.cshtml.cs b/cicm_web/Areas/Identity/Pages/Account/Register.cshtml.cs deleted file mode 100644 index 8f8813ab..00000000 --- a/cicm_web/Areas/Identity/Pages/Account/Register.cshtml.cs +++ /dev/null @@ -1,119 +0,0 @@ -/****************************************************************************** -// Canary Islands Computer Museum Website -// ---------------------------------------------------------------------------- -// -// Filename : Register.cshtml.cs -// Author(s) : Natalia Portillo -// -// --[ Description ] ---------------------------------------------------------- -// -// ASP.NET Identify management -// -// --[ License ] -------------------------------------------------------------- -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . -// -// ---------------------------------------------------------------------------- -// Copyright © 2003-2018 Natalia Portillo -*******************************************************************************/ - -using System.ComponentModel.DataAnnotations; -using System.Text.Encodings.Web; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Authorization; -using Microsoft.AspNetCore.Identity; -using Microsoft.AspNetCore.Identity.UI.Services; -using Microsoft.AspNetCore.Mvc; -using Microsoft.AspNetCore.Mvc.RazorPages; -using Microsoft.Extensions.Logging; - -namespace cicm_web.Areas.Identity.Pages.Account -{ - [AllowAnonymous] - public class RegisterModel : PageModel - { - readonly IEmailSender _emailSender; - readonly ILogger _logger; - readonly SignInManager _signInManager; - readonly UserManager _userManager; - - public RegisterModel(UserManager userManager, SignInManager signInManager, - ILogger logger, IEmailSender emailSender) - { - _userManager = userManager; - _signInManager = signInManager; - _logger = logger; - _emailSender = emailSender; - } - - [BindProperty] - public InputModel Input { get; set; } - - public string ReturnUrl { get; set; } - - public void OnGet(string returnUrl = null) - { - ReturnUrl = returnUrl; - } - - public async Task OnPostAsync(string returnUrl = null) - { - returnUrl = returnUrl ?? Url.Content("~/"); - if(ModelState.IsValid) - { - IdentityUser user = new IdentityUser {UserName = Input.Email, Email = Input.Email}; - IdentityResult result = await _userManager.CreateAsync(user, Input.Password); - if(result.Succeeded) - { - _logger.LogInformation("User created a new account with password."); - - string code = await _userManager.GenerateEmailConfirmationTokenAsync(user); - string callbackUrl = Url.Page("/Account/ConfirmEmail", null, new {userId = user.Id, code}, - Request.Scheme); - - await _emailSender.SendEmailAsync(Input.Email, "Confirm your email", - $"Please confirm your account by clicking here."); - - await _signInManager.SignInAsync(user, false); - return LocalRedirect(returnUrl); - } - - foreach(IdentityError error in result.Errors) ModelState.AddModelError(string.Empty, error.Description); - } - - // If we got this far, something failed, redisplay form - return Page(); - } - - public class InputModel - { - [Required] - [EmailAddress] - [Display(Name = "Email")] - public string Email { get; set; } - - [Required] - [StringLength(100, ErrorMessage = "The {0} must be at least {2} and at max {1} characters long.", - MinimumLength = 6)] - [DataType(DataType.Password)] - [Display(Name = "Password")] - public string Password { get; set; } - - [DataType(DataType.Password)] - [Display(Name = "Confirm password")] - [Compare("Password", ErrorMessage = "The password and confirmation password do not match.")] - public string ConfirmPassword { get; set; } - } - } -} \ No newline at end of file diff --git a/cicm_web/Areas/Identity/Pages/Account/ResetPassword.cshtml b/cicm_web/Areas/Identity/Pages/Account/ResetPassword.cshtml deleted file mode 100644 index cbf565dd..00000000 --- a/cicm_web/Areas/Identity/Pages/Account/ResetPassword.cshtml +++ /dev/null @@ -1,83 +0,0 @@ -@{ -/****************************************************************************** -// Canary Islands Computer Museum Website -// ---------------------------------------------------------------------------- -// -// Filename : ResetPassword.cshtml -// Author(s) : Natalia Portillo -// -// --[ Description ] ---------------------------------------------------------- -// -// ASP.NET Identify management -// -// --[ License ] -------------------------------------------------------------- -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . -// -// ---------------------------------------------------------------------------- -// Copyright © 2003-2018 Natalia Portillo -*******************************************************************************/ -} -@page -@model ResetPasswordModel -@{ - ViewData["Title"] = "Reset password"; -} - -

@ViewData["Title"]

-

Reset your password.

-
-
-
-
-
-
- -
- - - - -
-
- - - - -
-
- - - - -
- -
-
-
- -@section Scripts { - -} \ No newline at end of file diff --git a/cicm_web/Areas/Identity/Pages/Account/ResetPassword.cshtml.cs b/cicm_web/Areas/Identity/Pages/Account/ResetPassword.cshtml.cs deleted file mode 100644 index 2357d7b8..00000000 --- a/cicm_web/Areas/Identity/Pages/Account/ResetPassword.cshtml.cs +++ /dev/null @@ -1,97 +0,0 @@ -/****************************************************************************** -// Canary Islands Computer Museum Website -// ---------------------------------------------------------------------------- -// -// Filename : ResetPasswordConfirmation.cshtml.cs -// Author(s) : Natalia Portillo -// -// --[ Description ] ---------------------------------------------------------- -// -// ASP.NET Identify management -// -// --[ License ] -------------------------------------------------------------- -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . -// -// ---------------------------------------------------------------------------- -// Copyright © 2003-2018 Natalia Portillo -*******************************************************************************/ - -using System.ComponentModel.DataAnnotations; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Authorization; -using Microsoft.AspNetCore.Identity; -using Microsoft.AspNetCore.Mvc; -using Microsoft.AspNetCore.Mvc.RazorPages; - -namespace cicm_web.Areas.Identity.Pages.Account -{ - [AllowAnonymous] - public class ResetPasswordModel : PageModel - { - readonly UserManager _userManager; - - public ResetPasswordModel(UserManager userManager) - { - _userManager = userManager; - } - - [BindProperty] - public InputModel Input { get; set; } - - public IActionResult OnGet(string code = null) - { - if(code == null) return BadRequest("A code must be supplied for password reset."); - - Input = new InputModel {Code = code}; - return Page(); - } - - public async Task OnPostAsync() - { - if(!ModelState.IsValid) return Page(); - - IdentityUser user = await _userManager.FindByEmailAsync(Input.Email); - if(user == null) - // Don't reveal that the user does not exist - return RedirectToPage("./ResetPasswordConfirmation"); - - IdentityResult result = await _userManager.ResetPasswordAsync(user, Input.Code, Input.Password); - if(result.Succeeded) return RedirectToPage("./ResetPasswordConfirmation"); - - foreach(IdentityError error in result.Errors) ModelState.AddModelError(string.Empty, error.Description); - return Page(); - } - - public class InputModel - { - [Required] - [EmailAddress] - public string Email { get; set; } - - [Required] - [StringLength(100, ErrorMessage = "The {0} must be at least {2} and at max {1} characters long.", - MinimumLength = 6)] - [DataType(DataType.Password)] - public string Password { get; set; } - - [DataType(DataType.Password)] - [Display(Name = "Confirm password")] - [Compare("Password", ErrorMessage = "The password and confirmation password do not match.")] - public string ConfirmPassword { get; set; } - - public string Code { get; set; } - } - } -} \ No newline at end of file diff --git a/cicm_web/Areas/Identity/Pages/Account/ResetPasswordConfirmation.cshtml b/cicm_web/Areas/Identity/Pages/Account/ResetPasswordConfirmation.cshtml deleted file mode 100644 index a610574d..00000000 --- a/cicm_web/Areas/Identity/Pages/Account/ResetPasswordConfirmation.cshtml +++ /dev/null @@ -1,41 +0,0 @@ -@{ -/****************************************************************************** -// Canary Islands Computer Museum Website -// ---------------------------------------------------------------------------- -// -// Filename : ResetPasswordConfirmation.cshtml -// Author(s) : Natalia Portillo -// -// --[ Description ] ---------------------------------------------------------- -// -// ASP.NET Identify management -// -// --[ License ] -------------------------------------------------------------- -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . -// -// ---------------------------------------------------------------------------- -// Copyright © 2003-2018 Natalia Portillo -*******************************************************************************/ -} -@page -@model ResetPasswordConfirmationModel -@{ - ViewData["Title"] = "Reset password confirmation"; -} - -

@ViewData["Title"]

-

- Your password has been reset. Please click here to log in. -

\ No newline at end of file diff --git a/cicm_web/Areas/Identity/Pages/Account/ResetPasswordConfirmation.cshtml.cs b/cicm_web/Areas/Identity/Pages/Account/ResetPasswordConfirmation.cshtml.cs deleted file mode 100644 index 247f3768..00000000 --- a/cicm_web/Areas/Identity/Pages/Account/ResetPasswordConfirmation.cshtml.cs +++ /dev/null @@ -1,41 +0,0 @@ -/****************************************************************************** -// Canary Islands Computer Museum Website -// ---------------------------------------------------------------------------- -// -// Filename : ResetPasswordConfirmation.cshtml.cs -// Author(s) : Natalia Portillo -// -// --[ Description ] ---------------------------------------------------------- -// -// ASP.NET Identify management -// -// --[ License ] -------------------------------------------------------------- -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . -// -// ---------------------------------------------------------------------------- -// Copyright © 2003-2018 Natalia Portillo -*******************************************************************************/ - -using Microsoft.AspNetCore.Authorization; -using Microsoft.AspNetCore.Mvc.RazorPages; - -namespace cicm_web.Areas.Identity.Pages.Account -{ - [AllowAnonymous] - public class ResetPasswordConfirmationModel : PageModel - { - public void OnGet() { } - } -} \ No newline at end of file diff --git a/cicm_web/Areas/Identity/Pages/Account/_ViewImports.cshtml b/cicm_web/Areas/Identity/Pages/Account/_ViewImports.cshtml deleted file mode 100644 index e7e0d0b8..00000000 --- a/cicm_web/Areas/Identity/Pages/Account/_ViewImports.cshtml +++ /dev/null @@ -1 +0,0 @@ -@using cicm_web.Areas.Identity.Pages.Account \ No newline at end of file diff --git a/cicm_web/Areas/Identity/Pages/Error.cshtml b/cicm_web/Areas/Identity/Pages/Error.cshtml deleted file mode 100644 index 0e224a2f..00000000 --- a/cicm_web/Areas/Identity/Pages/Error.cshtml +++ /dev/null @@ -1,54 +0,0 @@ -@{ -/****************************************************************************** -// Canary Islands Computer Museum Website -// ---------------------------------------------------------------------------- -// -// Filename : Error.cshtml -// Author(s) : Natalia Portillo -// -// --[ Description ] ---------------------------------------------------------- -// -// ASP.NET Identify management -// -// --[ License ] -------------------------------------------------------------- -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . -// -// ---------------------------------------------------------------------------- -// Copyright © 2003-2018 Natalia Portillo -*******************************************************************************/ -} -@page -@model ErrorModel -@{ - ViewData["Title"] = "Error"; -} - -

Error.

-

An error occurred while processing your request.

- -@if(Model.ShowRequestId) -{ -

- Request ID: @Model.RequestId -

-} - -

Development Mode

-

- Swapping to Development environment will display more detailed information about the error that occurred. -

-

- Development environment should not be enabled in deployed applications, as it can result in sensitive information from exceptions being displayed to end users. For local debugging, development environment can be enabled by setting the ASPNETCORE_ENVIRONMENT environment variable to Development, and restarting the application. -

\ No newline at end of file diff --git a/cicm_web/Areas/Identity/Pages/Error.cshtml.cs b/cicm_web/Areas/Identity/Pages/Error.cshtml.cs deleted file mode 100644 index e5b6236e..00000000 --- a/cicm_web/Areas/Identity/Pages/Error.cshtml.cs +++ /dev/null @@ -1,51 +0,0 @@ -/****************************************************************************** -// Canary Islands Computer Museum Website -// ---------------------------------------------------------------------------- -// -// Filename : Error.cshtml.cs -// Author(s) : Natalia Portillo -// -// --[ Description ] ---------------------------------------------------------- -// -// ASP.NET Identify management -// -// --[ License ] -------------------------------------------------------------- -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . -// -// ---------------------------------------------------------------------------- -// Copyright © 2003-2018 Natalia Portillo -*******************************************************************************/ - -using System.Diagnostics; -using Microsoft.AspNetCore.Authorization; -using Microsoft.AspNetCore.Mvc; -using Microsoft.AspNetCore.Mvc.RazorPages; - -namespace cicm_web.Areas.Identity.Pages -{ - [AllowAnonymous] - [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)] - public class ErrorModel : PageModel - { - public string RequestId { get; set; } - - public bool ShowRequestId => !string.IsNullOrEmpty(RequestId); - - public void OnGet() - { - RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier; - } - } -} \ No newline at end of file diff --git a/cicm_web/Areas/Identity/Pages/_ViewImports.cshtml b/cicm_web/Areas/Identity/Pages/_ViewImports.cshtml deleted file mode 100644 index 21f50226..00000000 --- a/cicm_web/Areas/Identity/Pages/_ViewImports.cshtml +++ /dev/null @@ -1,36 +0,0 @@ -@{ -/****************************************************************************** -// Canary Islands Computer Museum Website -// ---------------------------------------------------------------------------- -// -// Filename : _ViewImports.cshtml -// Author(s) : Natalia Portillo -// -// --[ Description ] ---------------------------------------------------------- -// -// ASP.NET Identify management -// -// --[ License ] -------------------------------------------------------------- -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . -// -// ---------------------------------------------------------------------------- -// Copyright © 2003-2018 Natalia Portillo -*******************************************************************************/ -} -@using Microsoft.AspNetCore.Identity -@using cicm_web.Areas.Identity -@using Microsoft.AspNetCore.Identity -@namespace cicm_web.Areas.Identity.Pages -@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers \ No newline at end of file diff --git a/cicm_web/Startup.cs b/cicm_web/Startup.cs index 56cf6fdc..38dbaa62 100644 --- a/cicm_web/Startup.cs +++ b/cicm_web/Startup.cs @@ -32,7 +32,6 @@ using Cicm.Database.Models; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Http; -using Microsoft.AspNetCore.Identity; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; @@ -55,13 +54,14 @@ namespace cicm_web services.Configure(options => { // This lambda determines whether user consent for non-essential cookies is needed for a given request. - options.CheckConsentNeeded = context => true; + options.CheckConsentNeeded = context => true; options.MinimumSameSitePolicy = SameSiteMode.None; }); -#warning To protect potentially sensitive information in your connection string, you should move it out of source code. See http://go.microsoft.com/fwlink/?LinkId=723263 for guidance on storing connection strings. + #warning To protect potentially sensitive information in your connection string, you should move it out of source code. See http://go.microsoft.com/fwlink/?LinkId=723263 for guidance on storing connection strings. services.AddDbContext(options => options .UseLazyLoadingProxies() .UseMySql("server=localhost;port=3306;user=cicm;password=cicmpass;database=cicm")); + services.AddMvc(); } @@ -75,10 +75,11 @@ namespace cicm_web app.UseAuthentication(); app.UseCookiePolicy(); - app.UseMvc(routes => { routes.MapRoute( - name: "areas", - template: "{area:exists}/{controller=Home}/{action=Index}/{id?}" - ).MapRoute("default", "{controller=Home}/{action=Index}/{id?}"); }); + app.UseMvc(routes => + { + routes.MapRoute("areas", "{area:exists}/{controller=Home}/{action=Index}/{id?}") + .MapRoute("default", "{controller=Home}/{action=Index}/{id?}"); + }); } } } \ No newline at end of file diff --git a/cicm_web/cicm_web.csproj b/cicm_web/cicm_web.csproj index 5da898a9..7ebe01df 100644 --- a/cicm_web/cicm_web.csproj +++ b/cicm_web/cicm_web.csproj @@ -2,7 +2,7 @@ netcoreapp2.2 - 3.0.99.371 + 3.0.99.386 Canary Islands Computer Museum Copyright © 2003-2018 Natalia Portillo Canary Islands Computer Museum Website @@ -32,4 +32,9 @@ + + + ..\..\..\.nuget\packages\microsoft.aspnetcore.authorization\2.2.0\lib\netstandard2.0\Microsoft.AspNetCore.Authorization.dll + + \ No newline at end of file