Exemple #1
0
    /// <inheritdoc/>
    public virtual async Task <IReadOnlyCollection <ServerSideSession> > GetSessionsAsync(SessionFilter filter, CancellationToken cancellationToken = default)
    {
        cancellationToken = cancellationToken == CancellationToken.None ? CancellationTokenProvider.CancellationToken : cancellationToken;

        filter.Validate();

        var entities = await Filter(Context.ServerSideSessions.AsNoTracking().AsQueryable(), filter)
                       .ToArrayAsync(cancellationToken);

        entities = Filter(entities.AsQueryable(), filter).ToArray();

        var results = entities.Select(entity => new ServerSideSession
        {
            Key         = entity.Key,
            Scheme      = entity.Scheme,
            SubjectId   = entity.SubjectId,
            SessionId   = entity.SessionId,
            DisplayName = entity.DisplayName,
            Created     = entity.Created,
            Renewed     = entity.Renewed,
            Expires     = entity.Expires,
            Ticket      = entity.Data,
        }).ToArray();

        Logger.LogDebug("Found {serverSideSessionCount} server-side sessions for {@filter}", results.Length, filter);

        return(results);
    }
Exemple #2
0
    /// <inheritdoc/>
    public virtual async Task DeleteSessionsAsync(SessionFilter filter, CancellationToken cancellationToken = default)
    {
        cancellationToken = cancellationToken == CancellationToken.None ? CancellationTokenProvider.CancellationToken : cancellationToken;

        filter.Validate();

        var entities = await Filter(Context.ServerSideSessions.AsQueryable(), filter)
                       .ToArrayAsync(cancellationToken);

        entities = Filter(entities.AsQueryable(), filter).ToArray();

        Context.ServerSideSessions.RemoveRange(entities);

        try
        {
            await Context.SaveChangesAsync(cancellationToken);

            Logger.LogDebug("Removed {serverSideSessionCount} server-side sessions from database for {@filter}", entities.Length, filter);
        }
        catch (DbUpdateConcurrencyException ex)
        {
            Logger.LogInformation("Error removing {serverSideSessionCount} server-side sessions from database for {@filter}: {error}", entities.Length, filter, ex.Message);
        }
    }