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); }
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)); }