mirror of
				https://github.com/jellyfin/jellyfin.git
				synced 2025-11-04 03:27:21 -05:00 
			
		
		
		
	Make CreateUser async
This commit is contained in:
		
							parent
							
								
									0750357916
								
							
						
					
					
						commit
						6cbfae209d
					
				@ -46,14 +46,12 @@ namespace Jellyfin.Api.Controllers
 | 
			
		||||
        [HttpGet("Configuration")]
 | 
			
		||||
        public StartupConfigurationDto GetStartupConfiguration()
 | 
			
		||||
        {
 | 
			
		||||
            var result = new StartupConfigurationDto
 | 
			
		||||
            return new StartupConfigurationDto
 | 
			
		||||
            {
 | 
			
		||||
                UICulture = _config.Configuration.UICulture,
 | 
			
		||||
                MetadataCountryCode = _config.Configuration.MetadataCountryCode,
 | 
			
		||||
                PreferredMetadataLanguage = _config.Configuration.PreferredMetadataLanguage
 | 
			
		||||
            };
 | 
			
		||||
 | 
			
		||||
            return result;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
@ -92,10 +90,10 @@ namespace Jellyfin.Api.Controllers
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <returns>The first user.</returns>
 | 
			
		||||
        [HttpGet("User")]
 | 
			
		||||
        public StartupUserDto GetFirstUser()
 | 
			
		||||
        public async Task<StartupUserDto> GetFirstUser()
 | 
			
		||||
        {
 | 
			
		||||
            // TODO: Remove this method when startup wizard no longer requires an existing user.
 | 
			
		||||
            _userManager.Initialize();
 | 
			
		||||
            await _userManager.InitializeAsync().ConfigureAwait(false);
 | 
			
		||||
            var user = _userManager.Users.First();
 | 
			
		||||
            return new StartupUserDto
 | 
			
		||||
            {
 | 
			
		||||
 | 
			
		||||
@ -188,8 +188,24 @@ namespace Jellyfin.Server.Implementations.Users
 | 
			
		||||
            await dbContext.SaveChangesAsync().ConfigureAwait(false);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        internal async Task<User> CreateUserInternalAsync(string name, JellyfinDb dbContext)
 | 
			
		||||
        {
 | 
			
		||||
            // TODO: Remove after user item data is migrated.
 | 
			
		||||
            var max = await dbContext.Users.AnyAsync().ConfigureAwait(false)
 | 
			
		||||
                ? await dbContext.Users.Select(u => u.InternalId).MaxAsync().ConfigureAwait(false)
 | 
			
		||||
                : 0;
 | 
			
		||||
 | 
			
		||||
            return new User(
 | 
			
		||||
                name,
 | 
			
		||||
                _defaultAuthenticationProvider.GetType().FullName,
 | 
			
		||||
                _defaultPasswordResetProvider.GetType().FullName)
 | 
			
		||||
            {
 | 
			
		||||
                InternalId = max + 1
 | 
			
		||||
            };
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <inheritdoc/>
 | 
			
		||||
        public User CreateUser(string name)
 | 
			
		||||
        public async Task<User> CreateUserAsync(string name)
 | 
			
		||||
        {
 | 
			
		||||
            if (!IsValidUsername(name))
 | 
			
		||||
            {
 | 
			
		||||
@ -198,18 +214,10 @@ namespace Jellyfin.Server.Implementations.Users
 | 
			
		||||
 | 
			
		||||
            using var dbContext = _dbProvider.CreateContext();
 | 
			
		||||
 | 
			
		||||
            // TODO: Remove after user item data is migrated.
 | 
			
		||||
            var max = dbContext.Users.Any() ? dbContext.Users.Select(u => u.InternalId).Max() : 0;
 | 
			
		||||
            var newUser = await CreateUserInternalAsync(name, dbContext).ConfigureAwait(false);
 | 
			
		||||
 | 
			
		||||
            var newUser = new User(
 | 
			
		||||
                name,
 | 
			
		||||
                _defaultAuthenticationProvider.GetType().FullName,
 | 
			
		||||
                _defaultPasswordResetProvider.GetType().FullName)
 | 
			
		||||
            {
 | 
			
		||||
                InternalId = max + 1
 | 
			
		||||
            };
 | 
			
		||||
            dbContext.Users.Add(newUser);
 | 
			
		||||
            dbContext.SaveChanges();
 | 
			
		||||
            await dbContext.Users.AddAsync(newUser).ConfigureAwait(false);
 | 
			
		||||
            await dbContext.SaveChangesAsync().ConfigureAwait(false);
 | 
			
		||||
 | 
			
		||||
            OnUserCreated?.Invoke(this, new GenericEventArgs<User>(newUser));
 | 
			
		||||
 | 
			
		||||
@ -572,12 +580,12 @@ namespace Jellyfin.Server.Implementations.Users
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <inheritdoc />
 | 
			
		||||
        public void Initialize()
 | 
			
		||||
        public async Task InitializeAsync()
 | 
			
		||||
        {
 | 
			
		||||
            // TODO: Refactor the startup wizard so that it doesn't require a user to already exist.
 | 
			
		||||
            using var dbContext = _dbProvider.CreateContext();
 | 
			
		||||
 | 
			
		||||
            if (dbContext.Users.Any())
 | 
			
		||||
            if (await dbContext.Users.AnyAsync().ConfigureAwait(false))
 | 
			
		||||
            {
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
@ -595,13 +603,13 @@ namespace Jellyfin.Server.Implementations.Users
 | 
			
		||||
                throw new ArgumentException("Provided username is not valid!", defaultName);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            var newUser = CreateUser(defaultName);
 | 
			
		||||
            var newUser = await CreateUserInternalAsync(defaultName, dbContext).ConfigureAwait(false);
 | 
			
		||||
            newUser.SetPermission(PermissionKind.IsAdministrator, true);
 | 
			
		||||
            newUser.SetPermission(PermissionKind.EnableContentDeletion, true);
 | 
			
		||||
            newUser.SetPermission(PermissionKind.EnableRemoteControlOfOtherUsers, true);
 | 
			
		||||
 | 
			
		||||
            dbContext.Users.Update(newUser);
 | 
			
		||||
            dbContext.SaveChanges();
 | 
			
		||||
            await dbContext.Users.AddAsync(newUser).ConfigureAwait(false);
 | 
			
		||||
            await dbContext.SaveChangesAsync().ConfigureAwait(false);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <inheritdoc/>
 | 
			
		||||
 | 
			
		||||
@ -525,7 +525,7 @@ namespace MediaBrowser.Api
 | 
			
		||||
        /// <returns>System.Object.</returns>
 | 
			
		||||
        public async Task<object> Post(CreateUserByName request)
 | 
			
		||||
        {
 | 
			
		||||
            var newUser = _userManager.CreateUser(request.Name);
 | 
			
		||||
            var newUser = await _userManager.CreateUserAsync(request.Name).ConfigureAwait(false);
 | 
			
		||||
 | 
			
		||||
            // no need to authenticate password for new user
 | 
			
		||||
            if (request.Password != null)
 | 
			
		||||
 | 
			
		||||
@ -55,7 +55,7 @@ namespace MediaBrowser.Controller.Library
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Initializes the user manager and ensures that a user exists.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        void Initialize();
 | 
			
		||||
        Task InitializeAsync();
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Gets a user by Id.
 | 
			
		||||
@ -106,7 +106,7 @@ namespace MediaBrowser.Controller.Library
 | 
			
		||||
        /// <returns>The created user.</returns>
 | 
			
		||||
        /// <exception cref="ArgumentNullException">name</exception>
 | 
			
		||||
        /// <exception cref="ArgumentException"></exception>
 | 
			
		||||
        User CreateUser(string name);
 | 
			
		||||
        Task<User> CreateUserAsync(string name);
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Deletes the specified user.
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user