Example #1
0
        public async Task RunCommand(AddInstanceUserCommand command, CancellationToken cancellationToken)
        {
            switch (command)
            {
            case AddInstanceUserCommand.Close:
                pageContext.ActiveObject = null;
                break;

            case AddInstanceUserCommand.Add:
                loading = true;
                Add.Recheck();
                try
                {
                    var user = new InstanceUser
                    {
                        UserId = IdMode ? UserId : users[SelectedIndex].Id,
                    };
                    var newUser = await instanceUserClient.Create(user, cancellationToken).ConfigureAwait(true);

                    instanceUserRootViewModel.DirectAdd(newUser);
                }
                finally
                {
                    loading = false;
                    Add.Recheck();
                }
                break;

            default:
                throw new ArgumentOutOfRangeException(nameof(command), command, "Invalid command!");
            }
        }
Example #2
0
 /// <summary>
 /// Construct an <see cref="AuthenticationContext"/>
 /// </summary>
 /// <param name="systemIdentity">The value of <see cref="SystemIdentity"/></param>
 /// <param name="user">The value of <see cref="User"/></param>
 /// <param name="instanceUser">The value of <see cref="InstanceUser"/></param>
 public AuthenticationContext(ISystemIdentity systemIdentity, User user, InstanceUser instanceUser)
 {
     this.user = user ?? throw new ArgumentNullException(nameof(user));
     if (systemIdentity == null && User.SystemIdentifier != null)
     {
         throw new ArgumentNullException(nameof(systemIdentity));
     }
     InstanceUser   = instanceUser;
     SystemIdentity = systemIdentity;
 }
        public void TestGetRightsGeneric()
        {
            var user         = new User();
            var instanceUser = new InstanceUser();
            var authContext  = new AuthenticationContext(null, user, instanceUser);

            user.AdministrationRights = AdministrationRights.EditUsers;
            instanceUser.ByondRights  = ByondRights.ChangeVersion | ByondRights.ReadActive;
            Assert.AreEqual((ulong)user.AdministrationRights, authContext.GetRight(RightsType.Administration));
            Assert.AreEqual((ulong)instanceUser.ByondRights, authContext.GetRight(RightsType.Byond));
        }
        public void TestConstruction()
        {
            Assert.ThrowsException <ArgumentNullException>(() => new AuthenticationContext(null, null, null));
            var mockSystemIdentity = new Mock <ISystemIdentity>();

            var user = new User();

            var authContext = new AuthenticationContext(null, user, null);

            Assert.ThrowsException <ArgumentNullException>(() => new AuthenticationContext(mockSystemIdentity.Object, null, null));

            var instanceUser = new InstanceUser();

            Assert.ThrowsException <ArgumentNullException>(() => new AuthenticationContext(null, null, instanceUser));
            Assert.ThrowsException <ArgumentNullException>(() => new AuthenticationContext(mockSystemIdentity.Object, null, instanceUser));
            authContext           = new AuthenticationContext(mockSystemIdentity.Object, user, null);
            authContext           = new AuthenticationContext(null, user, instanceUser);
            authContext           = new AuthenticationContext(mockSystemIdentity.Object, user, instanceUser);
            user.SystemIdentifier = "root";
            Assert.ThrowsException <ArgumentNullException>(() => new AuthenticationContext(null, user, null));
        }
Example #5
0
 /// <inheritdoc />
 public Task Delete(InstanceUser instanceUser, CancellationToken cancellationToken) => apiClient.Delete(
Example #6
0
 /// <inheritdoc />
 public Task <InstanceUser> Create(InstanceUser instanceUser, CancellationToken cancellationToken) => apiClient.Create <InstanceUser, InstanceUser>(Routes.InstanceUser, instanceUser ?? throw new ArgumentNullException(nameof(instanceUser)), instance.Id, cancellationToken);
Example #7
0
        /// <inheritdoc />
        public async Task CreateAuthenticationContext(long userId, long?instanceId, DateTimeOffset validAfter, CancellationToken cancellationToken)
        {
            if (CurrentAuthenticationContext != null)
            {
                throw new InvalidOperationException("Authentication context has already been loaded");
            }

            var user = await databaseContext
                       .Users
                       .AsQueryable()
                       .Where(x => x.Id == userId)
                       .Include(x => x.CreatedBy)
                       .FirstOrDefaultAsync(cancellationToken)
                       .ConfigureAwait(false);

            if (user == default)
            {
                logger.LogWarning("Unable to find user with ID {0}!", userId);
                CurrentAuthenticationContext = new AuthenticationContext();
                return;
            }

            ISystemIdentity systemIdentity;

            if (user.SystemIdentifier != null)
            {
                systemIdentity = identityCache.LoadCachedIdentity(user);
            }
            else
            {
                if (user.LastPasswordUpdate.HasValue && user.LastPasswordUpdate > validAfter)
                {
                    logger.LogDebug("Rejecting token for user {0} created before last password update: {1}", userId, user.LastPasswordUpdate.Value);
                    CurrentAuthenticationContext = new AuthenticationContext();
                    return;
                }

                systemIdentity = null;
            }

            try
            {
                InstanceUser instanceUser = null;
                if (instanceId.HasValue)
                {
                    instanceUser = await databaseContext.InstanceUsers
                                   .AsQueryable()
                                   .Where(x => x.UserId == userId && x.InstanceId == instanceId)
                                   .Include(x => x.Instance)
                                   .FirstOrDefaultAsync(cancellationToken)
                                   .ConfigureAwait(false);

                    if (instanceUser == null)
                    {
                        logger.LogDebug("User {0} does not have permissions on instance {1}!", userId, instanceId.Value);
                    }
                }

                CurrentAuthenticationContext = new AuthenticationContext(systemIdentity, user, instanceUser);
            }
            catch
            {
                systemIdentity?.Dispose();
                throw;
            }
        }
Example #8
0
 /// <inheritdoc />
 public Task <InstanceUser> GetId(InstanceUser instanceUser, CancellationToken cancellationToken) => apiClient.Read <InstanceUser>(Routes.SetID(Routes.InstanceUser, instanceUser?.UserId ?? throw new ArgumentNullException(nameof(instanceUser))), instance.Id, cancellationToken);
Example #9
0
 /// <inheritdoc />
 public Task Delete(InstanceUser instanceUser, CancellationToken cancellationToken) => apiClient.Delete(Routes.SetID(Routes.InstanceUser, instanceUser.UserId.Value), instance.Id, cancellationToken);
Example #10
0
 /// <inheritdoc />
 public Task <InstanceUser> Update(InstanceUser user, CancellationToken cancellationToken) => apiClient.Update <InstanceUser, InstanceUser>(Routes.InstanceUser, user, instance.Id, cancellationToken);