| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 | using System.Collections.Generic;using System.Linq;using System.Threading.Tasks;using Jellyfin.Data.Entities.Security;using MediaBrowser.Controller.Security;using Microsoft.EntityFrameworkCore;namespace Jellyfin.Server.Implementations.Security{    /// <inheritdoc />    public class AuthenticationManager : IAuthenticationManager    {        private readonly IDbContextFactory<JellyfinDbContext> _dbProvider;        /// <summary>        /// Initializes a new instance of the <see cref="AuthenticationManager"/> class.        /// </summary>        /// <param name="dbProvider">The database provider.</param>        public AuthenticationManager(IDbContextFactory<JellyfinDbContext> dbProvider)        {            _dbProvider = dbProvider;        }        /// <inheritdoc />        public async Task CreateApiKey(string name)        {            var dbContext = await _dbProvider.CreateDbContextAsync().ConfigureAwait(false);            await using (dbContext.ConfigureAwait(false))            {                dbContext.ApiKeys.Add(new ApiKey(name));                await dbContext.SaveChangesAsync().ConfigureAwait(false);            }        }        /// <inheritdoc />        public async Task<IReadOnlyList<AuthenticationInfo>> GetApiKeys()        {            var dbContext = await _dbProvider.CreateDbContextAsync().ConfigureAwait(false);            await using (dbContext.ConfigureAwait(false))            {                return await dbContext.ApiKeys                    .Select(key => new AuthenticationInfo                    {                        AppName = key.Name,                        AccessToken = key.AccessToken,                        DateCreated = key.DateCreated,                        DeviceId = string.Empty,                        DeviceName = string.Empty,                        AppVersion = string.Empty                    }).ToListAsync().ConfigureAwait(false);            }        }        /// <inheritdoc />        public async Task DeleteApiKey(string accessToken)        {            var dbContext = await _dbProvider.CreateDbContextAsync().ConfigureAwait(false);            await using (dbContext.ConfigureAwait(false))            {                await dbContext.ApiKeys                    .Where(apiKey => apiKey.AccessToken == accessToken)                    .ExecuteDeleteAsync()                    .ConfigureAwait(false);            }        }    }}
 |