Ejemplo n.º 1
0
        public async ValueTask <IActionResult> ChangeEmailV1([FromBody] EmailChangeV1 model)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            var user = uow.Users.Get(x => x.Id == GetIdentityGUID()).SingleOrDefault();

            if (user == null)
            {
                ModelState.AddModelError(MessageType.UserNotFound.ToString(), $"User:{model.EntityId}");
                return(NotFound(ModelState));
            }
            else if (user.Id != model.EntityId ||
                     user.EmailAddress != model.CurrentEmail ||
                     model.NewEmail != model.NewEmailConfirm)
            {
                ModelState.AddModelError(MessageType.UserInvalid.ToString(), $"User:{user.Id}");
                return(BadRequest(ModelState));
            }

            var expire = uow.Settings.Get(x => x.IssuerId == null && x.AudienceId == null && x.UserId == null &&
                                          x.ConfigKey == SettingsConstants.GlobalTotpExpire).Single();

            string token = HttpUtility.UrlEncode(new PasswordTokenFactory(uow.InstanceType.ToString())
                                                 .Generate(model.NewEmail, TimeSpan.FromSeconds(uint.Parse(expire.ConfigValue)), user.Id.ToString(), user.SecurityStamp));

            if (uow.InstanceType != InstanceContext.DeployedOrLocal &&
                uow.InstanceType != InstanceContext.End2EndTest)
            {
                return(Ok(token));
            }

            var url   = UrlFactory.GenerateConfirmEmailV1(conf, user.Id.ToString(), token);
            var alert = ControllerContext.HttpContext.RequestServices.GetRequiredService <IAlertService>();

            await alert.Enqueue_EmailV1(
                new EmailV1()
            {
                FromEmail   = user.EmailAddress,
                FromDisplay = $"{user.FirstName} {user.LastName}",
                ToEmail     = user.EmailAddress,
                ToDisplay   = $"{user.FirstName} {user.LastName}",
                Subject     = MessageConstants.ConfirmEmailSubject,
                Body        = Email.ConfirmEmail(map.Map <UserV1>(user), url)
            });

            return(NoContent());
        }
Ejemplo n.º 2
0
        public async ValueTask <IActionResult> CreateV1([FromBody] UserV1 model)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            if (uow.Users.Get(x => x.UserName == model.UserName).Any())
            {
                ModelState.AddModelError(MessageType.UserAlreadyExists.ToString(), $"User:{model.UserName}");
                return(BadRequest(ModelState));
            }

            var issuer = uow.Issuers.Get(x => x.Id == model.IssuerId)
                         .SingleOrDefault();

            if (issuer == null)
            {
                ModelState.AddModelError(MessageType.IssuerNotFound.ToString(), $"Issuer:{model.IssuerId}");
                return(NotFound(ModelState));
            }

            //ignore how these may be set in model...
            model.IsHumanBeing         = true;
            model.EmailConfirmed       = false;
            model.PhoneNumberConfirmed = false;
            model.PasswordConfirmed    = false;

            if (!new ValidationHelper().ValidateEmail(model.UserName).Succeeded)
            {
                ModelState.AddModelError(MessageType.UserInvalid.ToString(), $"User:{model.UserName}");
                return(BadRequest(ModelState));
            }

            var result = uow.Users.Create(map.Map <tbl_User>(model));

            uow.Commit();

            if (uow.InstanceType == InstanceContext.DeployedOrLocal ||
                uow.InstanceType == InstanceContext.End2EndTest)
            {
                var expire = uow.Settings.Get(x => x.IssuerId == issuer.Id && x.AudienceId == null && x.UserId == null &&
                                              x.ConfigKey == SettingsConstants.TotpExpire).Single();

                var code = HttpUtility.UrlEncode(new PasswordTokenFactory(uow.InstanceType.ToString())
                                                 .Generate(result.UserName, TimeSpan.FromSeconds(uint.Parse(expire.ConfigValue)), result.Id.ToString(), result.SecurityStamp));

                var url   = UrlFactory.GenerateConfirmEmailV1(conf, result.Id.ToString(), code);
                var alert = ControllerContext.HttpContext.RequestServices.GetRequiredService <IAlertService>();

                await alert.Enqueue_EmailV1(
                    new EmailV1()
                {
                    FromEmail   = result.EmailAddress,
                    FromDisplay = $"{result.FirstName} {result.LastName}",
                    ToEmail     = result.EmailAddress,
                    ToDisplay   = $"{result.FirstName} {result.LastName}",
                    Subject     = $"{issuer.Name} {MessageConstants.ConfirmNewUserSubject}",
                    Body        = Email.ConfirmNewUser(map.Map <IssuerV1>(issuer), map.Map <UserV1>(result), url)
                });
            }

            return(Ok(map.Map <UserV1>(result)));
        }