Exemple #1
0
        public async Task <ActionResult <Users> > RegisterUser(LoginInput input)
        {
            try
            {
                if (!_context.Users.Any(x => x.Username == input.username))
                {
                    DataSyncManager dataSyncManager = new DataSyncManager(_syncDbConnectionString);

                    byte[] salt = new byte[128 / 8];
                    using (var rng = RandomNumberGenerator.Create())
                    {
                        rng.GetBytes(salt);
                    }

                    Users newUser = new Users()
                    {
                        Username      = input.username,
                        Password      = PasswordHashHelper.GetHash(input.password, salt),
                        Salt          = salt,
                        EnvironmentId = RDSEnums.EnvironmentId.ProductionPrimary
                    };

                    _context.Users.Add(newUser);
                    await _context.SaveChangesAsync();

                    Users createdUser = await _context.Users.FirstOrDefaultAsync(x => x.Username == input.username);

                    Tokens newToken = new Tokens()
                    {
                        UserID        = createdUser.Id,
                        Token         = TokenHelper.GenerateToken(input.username, TokenHelper.TokenType.Standard),
                        EnvironmentId = RDSEnums.EnvironmentId.ProductionPrimary
                    };

                    Accounts newAccount = new Accounts()
                    {
                        UserID        = createdUser.Id,
                        Balance       = 1000000.99,
                        EnvironmentId = RDSEnums.EnvironmentId.ProductionPrimary
                    };

                    _context.Tokens.Add(newToken);
                    _context.Accounts.Add(newAccount);
                    await _context.SaveChangesAsync();

                    if (_dataSyncEnabled)
                    {
                        Users replicatedUser = new Users()
                        {
                            Username      = newUser.Username,
                            Password      = newUser.Password,
                            Salt          = newUser.Salt,
                            EnvironmentId = RDSEnums.EnvironmentId.ProductionSecondary
                        };

                        await dataSyncManager.SyncNewUser(replicatedUser, newToken.Token);
                    }

                    StatusOutput output = new StatusOutput()
                    {
                        message = StatusMessages.UserCreatedMessage
                    };
                    return(Ok(output));
                }
                else
                {
                    StatusOutput output = new StatusOutput()
                    {
                        message = StatusMessages.UserExistsMessage
                    };
                    return(Ok(output));
                }
            }
            catch (Exception e)
            {
                Log.Fatal(e, $"{nameof(RegisterUser)}");
                return(StatusCode(500));
            }
        }