예제 #1
0
        public async Task <SelectUserObject> SelectUserAsync(string email)
        {
            SelectUserObject result = null;

            try
            {
                await _sqlConn.OpenAsync();

                _logger.LogInformation("Preparing sql command to select user");

                var sqlCmd = _sqlConn.CreateCommand();
                sqlCmd.CommandType = CommandType.StoredProcedure;
                sqlCmd.CommandText = DbProcedures.SelectUser.ProcedureName;
                sqlCmd.Parameters.Add(new MySqlParameter
                {
                    ParameterName = DbProcedures.SelectUser.Parameters.UserEmail,
                    DbType        = DbType.String,
                    Value         = email
                });

                _logger.LogInformation("Selecting user from database");

                await using var sqlReader = await sqlCmd.ExecuteReaderAsync();

                while (await sqlReader.ReadAsync())
                {
                    var addressOrdinal     = sqlReader.GetOrdinal(DbTables.Users.Address);
                    var phoneNumberOrdinal = sqlReader.GetOrdinal(DbTables.Users.PhoneNumber);

                    result = new SelectUserObject
                    {
                        Id      = sqlReader.GetInt64(DbTables.Users.Id),
                        Email   = sqlReader.GetString(DbTables.Users.Email),
                        Name    = sqlReader.GetString(DbTables.Users.Name),
                        IsAdmin = sqlReader.GetBoolean(DbTables.Users.Admin),

                        Address = await sqlReader.IsDBNullAsync(addressOrdinal)
                            ? null
                            : sqlReader.GetString(DbTables.Users.Address),

                        PhoneNumber = await sqlReader.IsDBNullAsync(phoneNumberOrdinal)
                            ? null
                            : sqlReader.GetString(DbTables.Users.PhoneNumber)
                    };
                }
            }
            catch (Exception ex)
            {
                _logger.LogError($"Exception while selecting user from database: {ex.Message}");
            }
            finally
            {
                if (_sqlConn.State == ConnectionState.Open)
                {
                    await _sqlConn.CloseAsync();
                }
            }

            return(result);
        }
예제 #2
0
        public static string GenerateToken(SelectUserObject user, DateTimeOffset expirationTime)
        {
            var userRole = user.IsAdmin ? UserRole.Admin : UserRole.User;
            var claims   = new List <Claim>
            {
                new Claim(ClaimTypes.Name, user.Email),
                new Claim(ClaimTypes.Role, userRole),
                new Claim(JwtRegisteredClaimNames.Nbf, new DateTimeOffset(DateTime.Now).ToUnixTimeSeconds().ToString()),
                new Claim(JwtRegisteredClaimNames.Exp, expirationTime.ToUnixTimeSeconds().ToString())
            };

            var token = new JwtSecurityToken(
                new JwtHeader(new SigningCredentials(
                                  new SymmetricSecurityKey(
                                      Encoding.UTF8.GetBytes(Environment.GetEnvironmentVariable("SECURITY_KEY"))),
                                  SecurityAlgorithms.HmacSha256)), new JwtPayload(claims));

            return(new JwtSecurityTokenHandler().WriteToken(token));
        }