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!"); } }
/// <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)); }
/// <inheritdoc /> public Task Delete(InstanceUser instanceUser, CancellationToken cancellationToken) => apiClient.Delete(
/// <inheritdoc /> public Task <InstanceUser> Create(InstanceUser instanceUser, CancellationToken cancellationToken) => apiClient.Create <InstanceUser, InstanceUser>(Routes.InstanceUser, instanceUser ?? throw new ArgumentNullException(nameof(instanceUser)), instance.Id, cancellationToken);
/// <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; } }
/// <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);
/// <inheritdoc /> public Task Delete(InstanceUser instanceUser, CancellationToken cancellationToken) => apiClient.Delete(Routes.SetID(Routes.InstanceUser, instanceUser.UserId.Value), instance.Id, cancellationToken);
/// <inheritdoc /> public Task <InstanceUser> Update(InstanceUser user, CancellationToken cancellationToken) => apiClient.Update <InstanceUser, InstanceUser>(Routes.InstanceUser, user, instance.Id, cancellationToken);