Exemple #1
0
        public async Task <IActionResult> OnPostAsync()
        {
            ModelState.Remove("InputRandomCode");
            if (ModelState.IsValid)
            {
                var LodgerUser = await _userManager.GetUserAsync(User);

                UserRevert ur = new UserRevert()
                {
                    UserRevertId         = Guid.NewGuid().ToString(),
                    FullName             = LodgerUser.FullName,
                    Gender               = LodgerUser.Gender,
                    AlternateEmail       = LodgerUser.AlternateEmail,
                    Country              = LodgerUser.Country,
                    City                 = LodgerUser.City,
                    Occupation           = LodgerUser.Occupation,
                    Address              = LodgerUser.Address,
                    GovernmentID         = LodgerUser.GovernmentID,
                    Status               = LodgerUser.Status,
                    Biography            = LodgerUser.Biography,
                    Hobbies              = LodgerUser.Hobbies,
                    Email                = LodgerUser.Email,
                    PasswordHash         = LodgerUser.PasswordHash,
                    PhoneNumber          = LodgerUser.PhoneNumber,
                    PhoneNumberConfirmed = LodgerUser.PhoneNumberConfirmed,
                    is3AuthEnabled       = LodgerUser.is3AuthEnabled
                };
                var phoneNumber = await _userManager.GetPhoneNumberAsync(LodgerUser);

                if (!(InputMobileNumber.Equals(phoneNumber)))
                {
                    HttpContext.Session.SetString("MobileNumber", "65" + InputMobileNumber);
                    Random randObj          = new Random();
                    string verificationCode = randObj.Next(999999).ToString();
                    HttpContext.Session.SetString("RandomCode", verificationCode);
                    if (!(_smsSender.SendSms("65" + InputMobileNumber, $"Your Verification Code for InfiniteLodging is {verificationCode}")))
                    {
                        HttpContext.Session.Remove("MobileNumber");
                        StatusMessage           = "Verification Code Sent!";
                        hasSentVerificationCode = true;
                        return(Page());
                    }
                }
                StatusMessage = "Changes have been updated successfully!";
                AuditRecord auditRecord = new AuditRecord();
                auditRecord.AuditActionType = "Changed Phone Number";
                auditRecord.AuditRecordId   = Guid.NewGuid().ToString();
                auditRecord.DateTimeStamp   = DateTime.Now;
                auditRecord.PerformedBy     = LodgerUser;
                auditRecord.IPAddress       = HttpContext.Connection.RemoteIpAddress.MapToIPv4().ToString();
                ur.AuditRecord = auditRecord;
                _context.UserReverts.Add(ur);
                await _context.SaveChangesAsync();

                return(Page());
            }
            return(Page());
        }
Exemple #2
0
        public async Task <IActionResult> OnPostRevertChangesAsync()
        {
            if (!(ModelState.IsValid))
            {
                return(Page());
            }
            AuditRecord usingAuditRecord = _context.AuditRecords.First(ar => (ar.AuditRecordId == auditRecordId));

            if (usingAuditRecord == null)
            {
                ModelState.AddModelError("Error!", "Audit Record Not Found!");
                return(Page());
            }
            Lodger cu = _context.Users.First(u => (u.Id == usingAuditRecord.PerformedBy.Id));

            if (!(cu is Lodger))
            {
                ModelState.AddModelError("Error!", "User Not Found!");
                return(Page());
            }
            UserRevert rt = _context.UserReverts.First(ur => (ur.AuditRecord.AuditRecordId == usingAuditRecord.AuditRecordId));

            if (rt == null)
            {
                ModelState.AddModelError("Error!", "Revert Backup not found!");
                return(Page());
            }
            cu.FullName             = rt.FullName;
            cu.Gender               = rt.Gender;
            cu.AlternateEmail       = rt.AlternateEmail;
            cu.Country              = rt.Country;
            cu.City                 = rt.City;
            cu.Occupation           = rt.Occupation;
            cu.Address              = rt.Address;
            cu.GovernmentID         = rt.GovernmentID;
            cu.Status               = rt.Status;
            cu.Biography            = rt.Biography;
            cu.Hobbies              = rt.Hobbies;
            cu.Email                = rt.Email;
            cu.PasswordHash         = rt.PasswordHash;
            cu.PhoneNumber          = rt.PhoneNumber;
            cu.PhoneNumberConfirmed = rt.PhoneNumberConfirmed;
            cu.is3AuthEnabled       = rt.is3AuthEnabled;
            await _context.SaveChangesAsync();

            return(RedirectToPage());
        }
        public async Task <IActionResult> OnPostDisable3AuthAsync()
        {
            var LodgerUser = await _userManager.GetUserAsync(User);

            UserRevert ur = new UserRevert()
            {
                UserRevertId         = Guid.NewGuid().ToString(),
                FullName             = LodgerUser.FullName,
                Gender               = LodgerUser.Gender,
                AlternateEmail       = LodgerUser.AlternateEmail,
                Country              = LodgerUser.Country,
                City                 = LodgerUser.City,
                Occupation           = LodgerUser.Occupation,
                Address              = LodgerUser.Address,
                GovernmentID         = LodgerUser.GovernmentID,
                Status               = LodgerUser.Status,
                Biography            = LodgerUser.Biography,
                Hobbies              = LodgerUser.Hobbies,
                Email                = LodgerUser.Email,
                PasswordHash         = LodgerUser.PasswordHash,
                PhoneNumber          = LodgerUser.PhoneNumber,
                PhoneNumberConfirmed = LodgerUser.PhoneNumberConfirmed,
                is3AuthEnabled       = LodgerUser.is3AuthEnabled
            };

            if (LodgerUser.is3AuthEnabled == "True")
            {
                LodgerUser.is3AuthEnabled = "False";
                LodgerUser.is3AuthPattern = "";
                await _dbContext.SaveChangesAsync();

                StatusMessage = "Profile changes updated successfully!";
            }
            AuditRecord auditRecord = new AuditRecord();

            auditRecord.AuditActionType = "Disabled 3-Factor-Authentication";
            auditRecord.AuditRecordId   = Guid.NewGuid().ToString();
            auditRecord.DateTimeStamp   = DateTime.Now;
            auditRecord.PerformedBy     = LodgerUser;
            auditRecord.IPAddress       = HttpContext.Connection.RemoteIpAddress.MapToIPv4().ToString();
            ur.AuditRecord = auditRecord;
            _dbContext.UserReverts.Add(ur);
            await _dbContext.SaveChangesAsync();

            return(Page());
        }
Exemple #4
0
        public async Task <IActionResult> OnPostAsync()
        {
            if (!ModelState.IsValid)
            {
                return(Page());
            }

            var LodgerUser = await _userManager.GetUserAsync(User);

            if (LodgerUser == null)
            {
                return(NotFound($"Unable to load user with ID '{_userManager.GetUserId(User)}'."));
            }
            UserRevert ur = new UserRevert()
            {
                UserRevertId         = Guid.NewGuid().ToString(),
                FullName             = LodgerUser.FullName,
                Gender               = LodgerUser.Gender,
                AlternateEmail       = LodgerUser.AlternateEmail,
                Country              = LodgerUser.Country,
                City                 = LodgerUser.City,
                Occupation           = LodgerUser.Occupation,
                Address              = LodgerUser.Address,
                GovernmentID         = LodgerUser.GovernmentID,
                Status               = LodgerUser.Status,
                Biography            = LodgerUser.Biography,
                Hobbies              = LodgerUser.Hobbies,
                Email                = LodgerUser.Email,
                PasswordHash         = LodgerUser.PasswordHash,
                PhoneNumber          = LodgerUser.PhoneNumber,
                PhoneNumberConfirmed = LodgerUser.PhoneNumberConfirmed,
                is3AuthEnabled       = LodgerUser.is3AuthEnabled
            };
            var changePasswordResult = await _userManager.ChangePasswordAsync(LodgerUser, Input.OldPassword, Input.NewPassword);

            if (!changePasswordResult.Succeeded)
            {
                foreach (var error in changePasswordResult.Errors)
                {
                    ModelState.AddModelError(string.Empty, error.Description);
                }
                return(Page());
            }
            AuditRecord auditRecord = new AuditRecord();

            auditRecord.AuditActionType = "Changed Password";
            auditRecord.AuditRecordId   = Guid.NewGuid().ToString();
            auditRecord.DateTimeStamp   = DateTime.Now;
            auditRecord.PerformedBy     = LodgerUser;
            auditRecord.IPAddress       = HttpContext.Connection.RemoteIpAddress.MapToIPv4().ToString();
            ur.AuditRecord = auditRecord;
            _context.UserReverts.Add(ur);
            await _context.SaveChangesAsync();

            await _signInManager.RefreshSignInAsync(LodgerUser);

            _logger.LogInformation("User changed their password successfully.");
            StatusMessage = "Your password has been changed.";

            return(RedirectToPage());
        }
Exemple #5
0
        public async Task <IActionResult> OnPostAsync()
        {
            LodgerUser = await _userManager.GetUserAsync(User);

            if (!(string.IsNullOrEmpty(LodgerUser.GovernmentID)))
            {
                ModelState.Remove("GovernmentID"); // remove governmentId req if already have
            }
            UserRevert ur = new UserRevert()
            {
                UserRevertId         = Guid.NewGuid().ToString(),
                FullName             = LodgerUser.FullName,
                Gender               = LodgerUser.Gender,
                AlternateEmail       = LodgerUser.AlternateEmail,
                Country              = LodgerUser.Country,
                City                 = LodgerUser.City,
                Occupation           = LodgerUser.Occupation,
                Address              = LodgerUser.Address,
                GovernmentID         = LodgerUser.GovernmentID,
                Status               = LodgerUser.Status,
                Biography            = LodgerUser.Biography,
                Hobbies              = LodgerUser.Hobbies,
                Email                = LodgerUser.Email,
                PasswordHash         = LodgerUser.PasswordHash,
                PhoneNumber          = LodgerUser.PhoneNumber,
                PhoneNumberConfirmed = LodgerUser.PhoneNumberConfirmed,
                is3AuthEnabled       = LodgerUser.is3AuthEnabled
            };

            if (!ModelState.IsValid)
            {
                return(Page());
            }
            if (UserInput.ProfilePicture != null)
            {
                VirusReport vr = await ScanForVirus(UserInput.ProfilePicture);

                if (vr.Positives > 0)
                {
                    ModelState.AddModelError("ProfilePictureFailedVirusCheck", "ProfilePicture failed virus scan!");
                    ModelState.AddModelError("ProfilePictureReportLink", vr.ReportLink);
                    return(Page());
                }
                if (!(checkPictureHeader(UserInput.ProfilePicture)))
                {
                    ModelState.AddModelError("ProfilePicInvalid", "Invalid file format for Profile Picture (Only .jpg/.jpeg/.png are accepted!)");
                    return(Page());
                }
                var filename = Guid.NewGuid().ToString() + Path.GetExtension(UserInput.ProfilePicture.FileName);
                if (!(string.IsNullOrEmpty(LodgerUser.ProfilePic)))
                {
                    var CurrentProfilePicture = LodgerUser.ProfilePic;
                    System.IO.File.Delete(Path.Combine(_environment.ContentRootPath, "wwwroot", "profile-images", CurrentProfilePicture));
                }
                LodgerUser.ProfilePic = filename;
                var file = Path.Combine(_environment.ContentRootPath, "wwwroot", "profile-images", filename);
                using (var fileStream = new FileStream(file, FileMode.Create))
                {
                    await UserInput.ProfilePicture.CopyToAsync(fileStream);
                }
            }
            LodgerUser.FullName = (UserInput.FullName == LodgerUser.FullName) ? LodgerUser.FullName : UserInput.FullName;
            List <string> toCheck = new List <string>()
            {
                "Male", "Female", "Other"
            };

            if (toCheck.Contains(UserInput.Gender))
            {
                LodgerUser.Gender = (LodgerUser.Gender == UserInput.Gender) ? LodgerUser.Gender : UserInput.Gender;
            }
            else
            {
                ModelState.AddModelError("Invalid Gender", "Invalid Gender!");
                return(Page());
            }
            LodgerUser.Biography      = (LodgerUser.Biography == UserInput.Biography) ? LodgerUser.Biography : UserInput.Biography;
            LodgerUser.AlternateEmail = (LodgerUser.AlternateEmail == UserInput.AlternateEmail) ? LodgerUser.AlternateEmail : UserInput.AlternateEmail;
            LodgerUser.Country        = (LodgerUser.Country == UserInput.Country) ? LodgerUser.Country : UserInput.Country;
            LodgerUser.City           = (LodgerUser.City == UserInput.City) ? LodgerUser.City : UserInput.City;
            LodgerUser.Address        = (LodgerUser.Address == _protector.Protect(UserInput.Address)) ? LodgerUser.Address : _protector.Protect(UserInput.Address);
            LodgerUser.Occupation     = (LodgerUser.Occupation == _protector.Protect(UserInput.Occupation)) ? LodgerUser.Occupation : _protector.Protect(UserInput.Occupation);
            LodgerUser.Hobbies        = (LodgerUser.Hobbies == UserInput.Hobbies) ? LodgerUser.Hobbies : UserInput.Hobbies;
            LodgerUser.Status         = (LodgerUser.Status == UserInput.Status) ? LodgerUser.Status : UserInput.Status;
            if (UserInput.GovernmentID != null)
            {
                VirusReport vr2 = await ScanForVirus(UserInput.GovernmentID);

                if (vr2.Positives > 0)
                {
                    ModelState.AddModelError("GovernmentIDFailedVirusCheck", "GovernmentID failed virus scan!");
                    ModelState.AddModelError("GovernmentIDReportLink", vr2.ReportLink);
                    return(Page());
                }
                if (!(checkPictureHeader(UserInput.GovernmentID)))
                {
                    ModelState.AddModelError("GovernmentIDPhoto", "Invalid file format for GovernmentID (Only .jpg/.jpeg/.png are accepted!)");
                    return(Page());
                }
                var gFileName = Guid.NewGuid().ToString() + Path.GetExtension(UserInput.GovernmentID.FileName);
                if (!(string.IsNullOrEmpty(LodgerUser.GovernmentID)))
                {
                    var CurrentGovernmentID = LodgerUser.GovernmentID;
                    System.IO.File.Delete(Path.Combine(_environment.ContentRootPath, "wwwroot", "government-ids", CurrentGovernmentID));
                }
                LodgerUser.GovernmentID = _protector.Protect(gFileName);
                var gFile = Path.Combine(_environment.ContentRootPath, "wwwroot", "government-ids", gFileName);
                using (var fileStream = new FileStream(gFile, FileMode.Create))
                {
                    await UserInput.GovernmentID.CopyToAsync(fileStream);
                }
            }
            if (await _context.SaveChangesAsync() > 0)
            {
                AuditRecord auditRecord = new AuditRecord();
                auditRecord.AuditRecordId   = Guid.NewGuid().ToString();
                auditRecord.AuditActionType = "Edit Profile";
                auditRecord.PerformedBy     = LodgerUser;
                auditRecord.DateTimeStamp   = DateTime.Now;
                auditRecord.IPAddress       = HttpContext.Connection.RemoteIpAddress.MapToIPv4().ToString();
                _context.AuditRecords.Add(auditRecord);
                ur.AuditRecord = auditRecord;
                _context.UserReverts.Add(ur);
                await _context.SaveChangesAsync();
            }
            alertMessage = "User Profile Updated Successfully";
            return(Page());
        }
        public async Task <IActionResult> OnPostAsync()
        {
            if (!ModelState.IsValid)
            {
                return(Page());
            }

            Lodger LodgerUser = await _userManager.GetUserAsync(User);

            if (LodgerUser == null)
            {
                return(NotFound($"Unable to load user with ID '{_userManager.GetUserId(User)}'."));
            }
            UserRevert ur = new UserRevert()
            {
                UserRevertId         = Guid.NewGuid().ToString(),
                FullName             = LodgerUser.FullName,
                Gender               = LodgerUser.Gender,
                AlternateEmail       = LodgerUser.AlternateEmail,
                Country              = LodgerUser.Country,
                City                 = LodgerUser.City,
                Occupation           = LodgerUser.Occupation,
                Address              = LodgerUser.Address,
                GovernmentID         = LodgerUser.GovernmentID,
                Status               = LodgerUser.Status,
                Biography            = LodgerUser.Biography,
                Hobbies              = LodgerUser.Hobbies,
                Email                = LodgerUser.Email,
                PasswordHash         = LodgerUser.PasswordHash,
                PhoneNumber          = LodgerUser.PhoneNumber,
                PhoneNumberConfirmed = LodgerUser.PhoneNumberConfirmed,
                is3AuthEnabled       = LodgerUser.is3AuthEnabled
            };
            var email = await _userManager.GetEmailAsync(LodgerUser);

            if (Input.Email != email)
            {
                //var setEmailResult = await _userManager.SetEmailAsync(user, Input.Email);
                LodgerUser.EmailConfirmed = false;
                var userId = await _userManager.GetUserIdAsync(LodgerUser);

                var code = await _userManager.GenerateChangeEmailTokenAsync(LodgerUser, Input.Email);

                var callbackUrl = Url.Page(
                    "/Account/ConfirmEmail",
                    pageHandler: null,
                    values: new { userId = userId, code = code, newEmail = Input.Email },
                    protocol: Request.Scheme);
                await _emailSender.SendEmailAsync(
                    Input.Email,
                    "Confirm your email",
                    $"<div style=width: 70%; margin: 0 auto;'><p><img style='display: block; margin-left: auto; margin-right: auto;' src='https://image.ibb.co/dyXbEy/test.png' alt='Infinite Lodging' width='198' height='94' /></p><h3 style='text-align: center;'>For security reasons, please verify your new email address.</h3><p style='text-align: center;'><a href='{HtmlEncoder.Default.Encode(callbackUrl)}'><img src='https://image.ibb.co/gEX9mo/Logo_Makr_0k_Wnu_O.png' alt='Confirm Email' width='344' height='43' /></a></p><p style='text-align: center;'>&nbsp;</p><span style='color: #808080; font-size: small;'><em>This message was sent to {Input.Email}. You are receiving this because you're a &infin;Lodging member, or you've signed up to receive email from us. Manage your preferences or unsubscribe. </em></span></div>");

                userAlertMessage = "Please verify your new email address before logging in!";
                AuditRecord auditRecord = new AuditRecord();
                auditRecord.AuditActionType = "Changed Email";
                auditRecord.AuditRecordId   = Guid.NewGuid().ToString();
                auditRecord.DateTimeStamp   = DateTime.Now;
                auditRecord.PerformedBy     = LodgerUser;
                auditRecord.IPAddress       = HttpContext.Connection.RemoteIpAddress.MapToIPv4().ToString();
                ur.AuditRecord = auditRecord;
                _context.UserReverts.Add(ur);
                await _context.SaveChangesAsync();

                await _context.SaveChangesAsync();

                await _signInManager.SignOutAsync();

                return(RedirectToPage("/Index", new { area = "" }));
                //if (!setEmailResult.Succeeded)
                //{
                //    var userId = await _userManager.GetUserIdAsync(user);
                //    throw new InvalidOperationException($"Unexpected error occurred setting email for user with ID '{userId}'.");
                //}
            }

            //var phoneNumber = await _userManager.GetPhoneNumberAsync(user);
            //if (Input.PhoneNumber != phoneNumber)
            //{
            //    var setPhoneResult = await _userManager.SetPhoneNumberAsync(user, Input.PhoneNumber);
            //    if (!setPhoneResult.Succeeded)
            //    {
            //        var userId = await _userManager.GetUserIdAsync(user);
            //        throw new InvalidOperationException($"Unexpected error occurred setting phone number for user with ID '{userId}'.");
            //    }
            //}

            await _signInManager.RefreshSignInAsync(LodgerUser);

            StatusMessage = "Your profile has been updated";
            return(RedirectToPage());
        }