Пример #1
0
        public async Task <IHttpActionResult> Reset(AccountEmailReset model)
        {
            var user = await AppDatabase.Users.FirstOrDefaultAsync(o => o.Email == model.Email);

            if (user == null)
            {
                return(BadRequest("User not found"));
            }

            if (string.IsNullOrEmpty(user.Email))
            {
                return(BadRequest("User lacks a valid email address. Did you use Facebook or Twilio ?"));
            }

            var token = Strings.RandomString(6).ToLower();

            user.ModifiedOn    = DateTime.UtcNow;
            user.EmailPassword = UserPassword.Create(token);

            AppDatabase.Entry(user).State = EntityState.Modified;

            await AppDatabase.SaveChangesAsync();

            await SendTokenEmail(new UserTokenViewModel
            {
                UserId    = user.Id,
                UserEmail = user.Email,
                Token     = token,
            });

            return(Ok(GetAccountDetails()));
        }
Пример #2
0
    public ActionResult CreateUser(UserModal user)
    {
        Result <UserCpf>        cpf        = UserCpf.Create(user.cpf);
        Result <UserPassword>   password   = UserPassword.Create(user.password);
        Result <UserCardNumber> cardNumber = UserCardNumber.Create(user.cardNumber);
        Result <UserCardDigits> cardDigits = UserCardDigits.Create(user.cardDigits);
        Result <UserCardDate>   cardDate   = UserCardDate.Create(user.cardDate);

        Result result = Result.Combine(cpf, password, cardDate, cardDigits, cardNumber);

        if (result.IsNotSuccess)
        {
            return(new BadRequestObjectResult(result.Error));
        }

        User newUser = new User(cpf.Value, cardDate.Value, cardDigits.Value, cardNumber.Value, password.Value);

        var createUserOperation = _userService.CreateUser(newUser);

        if (createUserOperation.IsNotSuccess)
        {
            return(new BadRequestObjectResult(createUserOperation.Error));
        }

        return(new OkResult());
    }
Пример #3
0
    public void should_create_new_user_if_the_user_does_not_exist()
    {
        var dbClient = new UserDatabaseManager();
        var testUser = new User(
            UserCpf.Create("123456789").Value,
            UserCardDate.Create("2020-02-01").Value,
            UserCardDigits.Create("123").Value,
            UserCardNumber.Create("0123456789").Value,
            UserPassword.Create("adminpassword").Value);
        var fileContent = new FileContent(new string[] {
            "222222222;password;01/04/2021;444;0123456789;"
        }, "file");

        Maybe <FileOperation> operation = dbClient.AddUser(fileContent, testUser);

        Assert.True(operation.HasValue);
        if (operation.HasValue)
        {
            Assert.Equal(OperationType.WRITE, operation.Value.Type);
            Assert.Equal(new[] {
                "222222222;password;01/04/2021;444;0123456789",
                "123456789;adminpassword;01/02/2020;123;0123456789"
            }, operation.Value.Content);
            Assert.Equal("file", operation.Value.FileName);
        }
    }
Пример #4
0
    public void should_return_null_if_creating_already_existing_user()
    {
        var dbClient = new UserDatabaseManager();
        var testUser = new User(
            UserCpf.Create("123456789").Value,
            UserCardDate.Create("2020-02-01").Value,
            UserCardDigits.Create("123").Value,
            UserCardNumber.Create("0123456789").Value,
            UserPassword.Create("adminpassword").Value);
        var fileContent = new FileContent(new string[] {
            "222222222;password;01/04/2021;444;0123456789;",
            "123456789;adminpassword;01/02/2020;123;0123456789"
        }, "file");

        Maybe <FileOperation> operation = dbClient.AddUser(fileContent, testUser);

        Assert.True(operation.HasNoValue);
    }
Пример #5
0
        async Task <IHttpActionResult> Create(AccountEmailSignIn model)
        {
            if (string.IsNullOrEmpty(model.UserId))
            {
                model.UserId = Guid.NewGuid().ToString();
            }

            if (await AppDatabase.Users.AnyAsync(o => o.Id == model.UserId))
            {
                return(BadRequest("UserId is in use."));
            }
            if (await AppDatabase.Users.AnyAsync(o => o.Email == model.Email))
            {
                return(BadRequest("Email is in use."));
            }

            var user = new UserAccount
            {
                Email         = model.Email,
                Id            = model.UserId,
                CreatedOn     = DateTime.UtcNow,
                ModifiedOn    = DateTime.UtcNow,
                EmailPassword = UserPassword.Create(model.Password),
                PhonePassword = UserPassword.Create(model.Password),
            };

            AppDatabase.Users.Add(user);

            await AppDatabase.SaveChangesAsync();

            await SendWelcomeMail(new UserEmailViewModel
            {
                UserId    = user.Id,
                UserEmail = user.Email
            });


            //Sign In
            Authorization.UpdateFrom(user);
            Session.UpdateFrom(user);

            return(Ok(GetAccountDetails()));
        }
Пример #6
0
        public async Task <IHttpActionResult> FacebookCreate(AccountFacebookConnect model)
        {
            var client = new FacebookClient(model.AccessToken);

            client.AppId     = AppConfig.Settings.FacebookId;
            client.AppSecret = AppConfig.Settings.FacebookSecret;

            dynamic fbresult = client.Get("me?fields=id,email,first_name,last_name,gender,locale,link,timezone,location,picture");
            string  email    = fbresult.email;

            var social = await AppDatabase.UserFacebookClaims.FindAsync(fbresult.id);

            if (social != null)
            {
                // old profile
                FacebookUpdateInternal(social, fbresult);
                await AppDatabase.SaveChangesAsync();

                var oldUser = social.User;
                Session.UpdateFrom(oldUser);
                return(Ok(GetAccountDetails()));
            }

            //email in use ?
            var user3 = await AppDatabase.Users.FirstOrDefaultAsync(o => o.Email == email);

            if (user3 != null)
            {
                return(BadRequest("Email is in use. Try account recovery."));
            }

            // new user
            var password = new string(Guid.NewGuid().ToString().Take(7).ToArray());
            var user     = new UserAccount
            {
                CreatedOn     = DateTime.UtcNow,
                ModifiedOn    = DateTime.UtcNow,
                Email         = email,
                Id            = Guid.NewGuid().ToString(),
                EmailPassword = UserPassword.Create(password),
            };

            AppDatabase.Users.Add(user);

            social = new UserFacebookClaim
            {
                Id          = fbresult.id,
                UserId      = user.Id,
                User        = user,
                AccessToken = model.AccessToken
            };

            FacebookUpdateInternal(social, fbresult);

            AppDatabase.UserFacebookClaims.Add(social);

            await SendWelcomeMail(new UserEmailViewModel
            {
                UserId    = user.Id,
                UserEmail = user.Email
            });

            await AppDatabase.SaveChangesAsync();

            Session.UpdateFrom(user);
            return(Ok(GetAccountDetails()));
        }
Пример #7
0
        public async Task <IHttpActionResult> Update(AccountEmailUpdate model)
        {
            var user = await AppDatabase.Users.FindAsync(Session.UserId);

            // no user? signUp. This happens from guest upgrades.
            if (user == null)
            {
                return(await Create(new AccountEmailSignIn
                {
                    UserId = Session.UserId,
                    Email = model.NewEmail,
                    Password = model.NewPassword
                }));
            }

            // make sure Email is not in use by someone else
            string oldEmail = null;

            if (!string.IsNullOrEmpty(model.NewEmail))
            {
                var users = await AppDatabase.Users
                            .Where(o => o.Id != Session.UserId)
                            .AnyAsync(o => o.Email == model.NewEmail);

                if (users)
                {
                    return(BadRequest("Email is in use."));
                }

                oldEmail   = user.Email;
                user.Email = model.NewEmail;
            }

            // update password
            if (!string.IsNullOrEmpty(model.NewPassword))
            {
                user.EmailPassword = UserPassword.Create(model.NewPassword);
            }

            // update password
            if (!string.IsNullOrEmpty(model.NewEmail))
            {
                user.Email = model.NewEmail;
            }

            // update
            user.ModifiedOn = DateTime.UtcNow;
            AppDatabase.Entry(user).State = EntityState.Modified;
            await AppDatabase.SaveChangesAsync();

            await SendUpdateEmail(new UserUpdateViewModel
            {
                UserId    = user.Id,
                UserEmail = user.Email,
                OldEmail  = oldEmail,
            });

            //update session
            Session.UpdateFrom(user);
            Authorization.UpdateFrom(user);

            return(Ok(GetAccountDetails()));
        }