< Summary

Class:MUNityCore.Areas.Identity.Pages.Account.RegisterModel
Assembly:MUNity.BlazorServer
File(s):C:\Users\aeuke\source\repos\PeerConradi\munity\src\MUNity.BlazorServer\Areas\Identity\Pages\Account\Register.cshtml.cs
Covered lines:0
Uncovered lines:76
Coverable lines:76
Total lines:184
Line coverage:0% (0 of 76)
Covered branches:0
Total branches:14
Branch coverage:0% (0 of 14)
Covered methods:0
Total methods:15
Method coverage:0% (0 of 15)

Metrics

MethodBranch coverage Cyclomatic complexity Line coverage
.ctor(...)100%10%
get_Input()100%10%
get_ReturnUrl()100%10%
get_ExternalLogins()100%10%
get_Username()100%10%
get_Email()100%10%
get_Forename()100%10%
get_Lastname()100%10%
get_Password()100%10%
get_BirthdayYear()100%10%
get_BirthdayMonth()100%10%
get_BirthdayDay()100%10%
get_AcceptedAGB()100%10%
OnGetAsync()100%10%
OnPostAsync()0%140%

File(s)

C:\Users\aeuke\source\repos\PeerConradi\munity\src\MUNity.BlazorServer\Areas\Identity\Pages\Account\Register.cshtml.cs

#LineLine coverage
 1using System;
 2using System.Collections.Generic;
 3using System.ComponentModel.DataAnnotations;
 4using System.Linq;
 5using System.Text;
 6using System.Text.Encodings.Web;
 7using System.Threading.Tasks;
 8using Microsoft.AspNetCore.Authentication;
 9using Microsoft.AspNetCore.Authorization;
 10using Microsoft.AspNetCore.Identity;
 11using Microsoft.AspNetCore.Identity.UI.Services;
 12using Microsoft.AspNetCore.Mvc;
 13using Microsoft.AspNetCore.Mvc.RazorPages;
 14using Microsoft.AspNetCore.WebUtilities;
 15using Microsoft.Extensions.Logging;
 16using MUNity.Database.Context;
 17using MUNity.Database.Models.User;
 18using MUNity.Services;
 19
 20namespace MUNityCore.Areas.Identity.Pages.Account
 21{
 22    [AllowAnonymous]
 23    public class RegisterModel : PageModel
 24    {
 25        private readonly SignInManager<MunityUser> _signInManager;
 26        private readonly UserManager<MunityUser> _userManager;
 27        private readonly ILogger<RegisterModel> _logger;
 28        private readonly IMailService _emailSender;
 29        private readonly MunityContext _dbContext;
 30
 031        public RegisterModel(
 032            UserManager<MunityUser> userManager,
 033            SignInManager<MunityUser> signInManager,
 034            ILogger<RegisterModel> logger,
 035            IMailService emailSender,
 036            MunityContext context)
 037        {
 038            _userManager = userManager;
 039            _signInManager = signInManager;
 040            _logger = logger;
 041            _emailSender = emailSender;
 042            _dbContext = context;
 043        }
 44
 45        [BindProperty]
 046        public InputModel Input { get; set; }
 47
 48        public enum RegistrationStates
 49        {
 50            Waiting,
 51            Success,
 52            FollowedInvitation
 53        }
 54
 055        public string ReturnUrl { get; set; }
 56
 057        public IList<AuthenticationScheme> ExternalLogins { get; set; }
 58
 59        public class InputModel
 60        {
 61            [Required]
 62            [MinLength(3)]
 63            [MaxLength(30)]
 064            public string Username { get; set; }
 65
 66            [Required]
 67            [EmailAddress]
 68            [Display(Name = "Email")]
 069            public string Email { get; set; }
 70
 71            [Required]
 72            [MaxLength(200)]
 073            public string Forename { get; set; }
 74
 75            [Required]
 76            [MaxLength(200)]
 077            public string Lastname { get; set; }
 78
 79            [Required]
 80            [StringLength(100, ErrorMessage = "The {0} must be at least {2} and at max {1} characters long.", MinimumLen
 81            [DataType(DataType.Password)]
 82            [Display(Name = "Password")]
 083            public string Password { get; set; }
 84
 85            [Required]
 86            [Display(Name = "Birthday Year")]
 087            public int BirthdayYear { get; set; } = DateTime.Now.Year - 13;
 88
 89            [Required]
 90            [Display(Name = "Birthday Month")]
 091            public int BirthdayMonth { get; set; } = 1;
 92
 93            [Required]
 94            [Display(Name = "Birthday Day")]
 095            public int BirthdayDay { get; set; } = 1;
 96
 97            [Required]
 098            public bool AcceptedAGB { get; set; }
 99        }
 100
 101        public async Task OnGetAsync(string returnUrl = null)
 0102        {
 0103            ReturnUrl = returnUrl;
 0104            ExternalLogins = (await _signInManager.GetExternalAuthenticationSchemesAsync()).ToList();
 0105        }
 106
 107        public async Task<IActionResult> OnPostAsync(string returnUrl = null)
 0108        {
 0109            returnUrl ??= Url.Content("~/");
 110            //ExternalLogins = (await _signInManager.GetExternalAuthenticationSchemesAsync()).ToList();
 0111            if (ModelState.IsValid && Input.AcceptedAGB)
 0112            {
 0113                var userFound = await _userManager.FindByEmailAsync(Input.Email);
 0114                if (userFound != null)
 0115                {
 0116                    if (userFound.IsShadowUser)
 0117                    {
 0118                        userFound.UserName = Input.Username;
 0119                        userFound.Forename = Input.Forename;
 0120                        userFound.Lastname = Input.Lastname;
 0121                        await _userManager.RemovePasswordAsync(userFound);
 0122                        await _userManager.ChangePasswordAsync(userFound, String.Empty, Input.Password);
 0123                        _dbContext.Update(userFound);
 0124                        _dbContext.SaveChanges();
 0125                        await _signInManager.SignInAsync(userFound, isPersistent: false);
 0126                        return LocalRedirect(returnUrl);
 127                    }
 0128                    _logger.LogWarning($"User already exisits and was not a shadow user: {Input.Username}");
 0129                }
 130                else
 0131                {
 0132                    var user = new MunityUser
 0133                    {
 0134                        UserName = Input.Username,
 0135                        Email = Input.Email,
 0136                        RegistrationDate = DateTime.UtcNow,
 0137                        Birthday = new DateOnly(Input.BirthdayYear, Input.BirthdayMonth, Input.BirthdayDay),
 0138                        Forename = Input.Forename,
 0139                        Lastname = Input.Lastname
 0140                    };
 141
 0142                    var result = await _userManager.CreateAsync(user, Input.Password);
 0143                    if (result.Succeeded)
 0144                    {
 0145                        _logger.LogInformation("User created a new account with password.");
 146
 147                        //var code = await _userManager.GenerateEmailConfirmationTokenAsync(user);
 148                        //code = WebEncoders.Base64UrlEncode(Encoding.UTF8.GetBytes(code));
 149                        //var callbackUrl = Url.Page(
 150                        //    "/Account/ConfirmEmail",
 151                        //    pageHandler: null,
 152                        //    values: new { area = "Identity", userId = user.Id, code = code, returnUrl = returnUrl },
 153                        //    protocol: Request.Scheme);
 154
 155                        //await _emailSender.SendEmailAsync(Input.Email, "Confirm your email",
 156                        //    $"Please confirm your account by <a href='{HtmlEncoder.Default.Encode(callbackUrl)}'>click
 157
 158                        //if (_userManager.Options.SignIn.RequireConfirmedAccount)
 159                        //{
 160                        //    return RedirectToPage("RegisterConfirmation", new { email = Input.Email, returnUrl = retur
 161                        //}
 162                        //else
 163                        //{
 0164                        await _signInManager.SignInAsync(user, isPersistent: false);
 0165                        return LocalRedirect(returnUrl);
 166                        //}
 167                    }
 0168                    foreach (var error in result.Errors)
 0169                    {
 0170                        ModelState.AddModelError(string.Empty, error.Description);
 0171                    }
 0172                }
 173
 0174            }
 175            else
 0176            {
 0177                Console.WriteLine("AGB not accepted!");
 0178            }
 179
 180            // If we got this far, something failed, redisplay form
 0181            return Page();
 0182        }
 183    }
 184}