using IdentityServer.Domain.Data.DbContexts; using IdentityServer.Domain.Entities; using IdentityServer.Domain.Models; using IdentityServer.Domain.Repositories; using Microsoft.EntityFrameworkCore; using System; using System.Linq; using System.Threading.Tasks; namespace IdentityServer.Domain.Data.Repositories { class IdentityRepository : IIdentityRepository { private readonly IdentityDbContext _dbContext; public IdentityRepository(IdentityDbContext dbContext) { _dbContext = dbContext; } public Task GetUser(string userName, string password) { return _dbContext.Users .Include(z => z.Status) .Include(z => z.Claims) .FirstOrDefaultAsync(z => z.UserName == userName && z.Password == password); } public async Task UpdateUserAfterAuthentication(AppUser user, Token token) { var userToken = new UserToken() { UserId = user.UserId, Token = token.Raw, ValidFrom = token.ValidFrom, ValidUntil = token.ValidUntil }; await _dbContext.AddAsync(userToken); user.LastLoginDate = DateTime.Now; _dbContext.Update(user); await _dbContext.SaveChangesAsync(); } public Task GetActiveTokens() { var currentDate = DateTime.Now; var query = _dbContext.UserTokens .Where(z => z.ValidFrom <= currentDate && z.ValidUntil >= currentDate && (!z.Burnt.HasValue || z.Burnt.Value == false)); return query.ToArrayAsync(); } } }