示例#1
0
                #pragma warning disable CA1506 // TODO: Decomplexify
        public async Task <IActionResult> Update([FromBody] Api.Models.InstanceUser model, CancellationToken cancellationToken)
        {
            var test = StandardModelChecks(model);

            if (test != null)
            {
                return(test);
            }

            var originalUser = await DatabaseContext.Instances.Where(x => x.Id == Instance.Id).SelectMany(x => x.InstanceUsers).Where(x => x.UserId == model.UserId).FirstOrDefaultAsync(cancellationToken).ConfigureAwait(false);

            if (originalUser == null)
            {
                return(StatusCode((int)HttpStatusCode.Gone));
            }

            originalUser.ByondRights         = model.ByondRights ?? originalUser.ByondRights;
            originalUser.RepositoryRights    = model.RepositoryRights ?? originalUser.RepositoryRights;
            originalUser.InstanceUserRights  = model.InstanceUserRights ?? originalUser.InstanceUserRights;
            originalUser.ChatBotRights       = model.ChatBotRights ?? originalUser.ChatBotRights;
            originalUser.ConfigurationRights = model.ConfigurationRights ?? originalUser.ConfigurationRights;
            originalUser.DreamDaemonRights   = model.DreamDaemonRights ?? originalUser.DreamDaemonRights;
            originalUser.DreamMakerRights    = model.DreamMakerRights ?? originalUser.DreamMakerRights;

            await DatabaseContext.Save(cancellationToken).ConfigureAwait(false);

            return(Json(originalUser.UserId == AuthenticationContext.User.Id || (AuthenticationContext.GetRight(RightsType.InstanceUser) & (ulong)InstanceUserRights.ReadUsers) != 0 ? originalUser.ToApi() : new Api.Models.InstanceUser
            {
                UserId = originalUser.UserId
            }));
        }
示例#2
0
        public async Task <IActionResult> Create([FromBody] Api.Models.InstanceUser model, CancellationToken cancellationToken)
        {
            var test = StandardModelChecks(model);

            if (test != null)
            {
                return(test);
            }

            var dbUser = new Models.InstanceUser
            {
                ByondRights         = model.ByondRights ?? ByondRights.None,
                ChatBotRights       = model.ChatBotRights ?? ChatBotRights.None,
                ConfigurationRights = model.ConfigurationRights ?? ConfigurationRights.None,
                DreamDaemonRights   = model.DreamDaemonRights ?? DreamDaemonRights.None,
                DreamMakerRights    = model.DreamMakerRights ?? DreamMakerRights.None,
                RepositoryRights    = model.RepositoryRights ?? RepositoryRights.None,
                InstanceUserRights  = model.InstanceUserRights ?? InstanceUserRights.None,
                UserId     = model.UserId,
                InstanceId = Instance.Id
            };

            DatabaseContext.InstanceUsers.Add(dbUser);

            await DatabaseContext.Save(cancellationToken).ConfigureAwait(false);

            return(StatusCode((int)HttpStatusCode.Created, dbUser.ToApi()));
        }
        /// <summary>
        /// Checks a <paramref name="model"/> for errors.
        /// </summary>
        /// <param name="model">The <see cref="Api.Models.InstanceUser"/> to check</param>
        /// <returns>The <see cref="IActionResult"/> to take if this is not a new <see cref="Api.Models.InstanceUser"/></returns>
        IActionResult StandardModelChecks(Api.Models.InstanceUser model)
        {
            if (model == null)
            {
                throw new ArgumentNullException(nameof(model));
            }

            if (!model.UserId.HasValue)
            {
                return(BadRequest(new ErrorMessage(ErrorCode.UserMissingId)));
            }

            return(null);
        }
示例#4
0
        /// <summary>
        /// Checks a <paramref name="model"/> for errors
        /// </summary>
        /// <param name="model">The <see cref="Api.Models.InstanceUser"/> to check</param>
        /// <returns>A <see cref="BadRequestResult"/> explaining any errors, <see langword="null"/> if none</returns>
        BadRequestObjectResult StandardModelChecks(Api.Models.InstanceUser model)
        {
            if (model == null)
            {
                throw new ArgumentNullException(nameof(model));
            }

            if (!model.UserId.HasValue)
            {
                return(BadRequest(new ErrorMessage {
                    Message = "Missing UserId!"
                }));
            }

            return(null);
        }
示例#5
0
        public async Task <IActionResult> Create([FromBody] Api.Models.InstanceUser model, CancellationToken cancellationToken)
        {
            if (model == null)
            {
                throw new ArgumentNullException(nameof(model));
            }

            var userCanonicalName = await DatabaseContext
                                    .Users
                                    .AsQueryable()
                                    .Where(x => x.Id == model.UserId)
                                    .Select(x => x.CanonicalName)
                                    .FirstOrDefaultAsync(cancellationToken)
                                    .ConfigureAwait(false);

            if (userCanonicalName == default)
            {
                return(BadRequest(new ErrorMessage(ErrorCode.ModelValidationFailure)));
            }

            if (userCanonicalName == Models.User.CanonicalizeName(Models.User.TgsSystemUserName))
            {
                return(Forbid());
            }

            var dbUser = new Models.InstanceUser
            {
                ByondRights         = RightsHelper.Clamp(model.ByondRights ?? ByondRights.None),
                ChatBotRights       = RightsHelper.Clamp(model.ChatBotRights ?? ChatBotRights.None),
                ConfigurationRights = RightsHelper.Clamp(model.ConfigurationRights ?? ConfigurationRights.None),
                DreamDaemonRights   = RightsHelper.Clamp(model.DreamDaemonRights ?? DreamDaemonRights.None),
                DreamMakerRights    = RightsHelper.Clamp(model.DreamMakerRights ?? DreamMakerRights.None),
                RepositoryRights    = RightsHelper.Clamp(model.RepositoryRights ?? RepositoryRights.None),
                InstanceUserRights  = RightsHelper.Clamp(model.InstanceUserRights ?? InstanceUserRights.None),
                UserId     = model.UserId,
                InstanceId = Instance.Id
            };

            DatabaseContext.InstanceUsers.Add(dbUser);

            await DatabaseContext.Save(cancellationToken).ConfigureAwait(false);

            return(Created(dbUser.ToApi()));
        }
示例#6
0
                #pragma warning disable CA1506 // TODO: Decomplexify
        public async Task <IActionResult> Update([FromBody] Api.Models.InstanceUser model, CancellationToken cancellationToken)
        {
            if (model == null)
            {
                throw new ArgumentNullException(nameof(model));
            }

            var originalUser = await DatabaseContext
                               .Instances
                               .AsQueryable()
                               .Where(x => x.Id == Instance.Id)
                               .SelectMany(x => x.InstanceUsers)
                               .Where(x => x.UserId == model.UserId)
                               .FirstOrDefaultAsync(cancellationToken)
                               .ConfigureAwait(false);

            if (originalUser == null)
            {
                return(Gone());
            }

            originalUser.ByondRights         = RightsHelper.Clamp(model.ByondRights ?? originalUser.ByondRights.Value);
            originalUser.RepositoryRights    = RightsHelper.Clamp(model.RepositoryRights ?? originalUser.RepositoryRights.Value);
            originalUser.InstanceUserRights  = RightsHelper.Clamp(model.InstanceUserRights ?? originalUser.InstanceUserRights.Value);
            originalUser.ChatBotRights       = RightsHelper.Clamp(model.ChatBotRights ?? originalUser.ChatBotRights.Value);
            originalUser.ConfigurationRights = RightsHelper.Clamp(model.ConfigurationRights ?? originalUser.ConfigurationRights.Value);
            originalUser.DreamDaemonRights   = RightsHelper.Clamp(model.DreamDaemonRights ?? originalUser.DreamDaemonRights.Value);
            originalUser.DreamMakerRights    = RightsHelper.Clamp(model.DreamMakerRights ?? originalUser.DreamMakerRights.Value);

            await DatabaseContext.Save(cancellationToken).ConfigureAwait(false);

            return(Json(originalUser.UserId == AuthenticationContext.User.Id || (AuthenticationContext.GetRight(RightsType.InstanceUser) & (ulong)InstanceUserRights.ReadUsers) != 0 ? originalUser.ToApi() : new Api.Models.InstanceUser
            {
                UserId = originalUser.UserId
            }));
        }
        public async Task <IActionResult> Create([FromBody] Api.Models.InstanceUser model, CancellationToken cancellationToken)
        {
            // Don't check the result as how can a new user have an ID
            StandardModelChecks(model);

            var dbUser = new Models.InstanceUser
            {
                ByondRights         = RightsHelper.Clamp(model.ByondRights ?? ByondRights.None),
                ChatBotRights       = RightsHelper.Clamp(model.ChatBotRights ?? ChatBotRights.None),
                ConfigurationRights = RightsHelper.Clamp(model.ConfigurationRights ?? ConfigurationRights.None),
                DreamDaemonRights   = RightsHelper.Clamp(model.DreamDaemonRights ?? DreamDaemonRights.None),
                DreamMakerRights    = RightsHelper.Clamp(model.DreamMakerRights ?? DreamMakerRights.None),
                RepositoryRights    = RightsHelper.Clamp(model.RepositoryRights ?? RepositoryRights.None),
                InstanceUserRights  = RightsHelper.Clamp(model.InstanceUserRights ?? InstanceUserRights.None),
                UserId     = model.UserId,
                InstanceId = Instance.Id
            };

            DatabaseContext.InstanceUsers.Add(dbUser);

            await DatabaseContext.Save(cancellationToken).ConfigureAwait(false);

            return(StatusCode((int)HttpStatusCode.Created, dbUser.ToApi()));
        }