Пример #1
0
        public async Task <IActionResult> AddClaims([FromBody] IEnumerable <CreateClaimRequest> claims)
        {
            var user = await _userManager.GetUserAsync(User);

            if (user == null)
            {
                return(NotFound());
            }
            var allowedClaims = await _dbContext.ClaimTypes
                                .Where(x => claims.Select(x => x.Type).Contains(x.Name) && x.UserEditable)
                                .Select(x => x.Name)
                                .ToListAsync();

            if (allowedClaims.Count() != claims.Count())
            {
                var notAllowedClaims = claims.Select(x => x.Type).Except(allowedClaims);
                ModelState.AddModelError(nameof(claims), $"The following claims are not allowed to add: '{string.Join(", ", notAllowedClaims)}'.");
                return(BadRequest(new ValidationProblemDetails(ModelState)));
            }
            var claimsToAdd = claims.Select(x => new IdentityUserClaim <string> {
                UserId     = user.Id,
                ClaimType  = x.Type,
                ClaimValue = x.Value
            })
                              .ToArray();

            _dbContext.UserClaims.AddRange(claimsToAdd);
            await _dbContext.SaveChangesAsync();

            return(Ok(claimsToAdd.Select(x => new ClaimInfo {
                Id = x.Id,
                Type = x.ClaimType,
                Value = x.ClaimValue
            })));
        }
Пример #2
0
        public async Task <IActionResult> CreateClaimType([FromBody] CreateClaimTypeRequest request)
        {
            var claimType = new ClaimType {
                Id           = $"{Guid.NewGuid()}",
                Name         = request.Name,
                DisplayName  = request.DisplayName,
                Description  = request.Description,
                Rule         = request.Rule,
                ValueType    = request.ValueType,
                Required     = request.Required,
                Reserved     = false,
                UserEditable = request.UserEditable
            };

            _dbContext.ClaimTypes.Add(claimType);
            await _dbContext.SaveChangesAsync();

            return(CreatedAtAction(nameof(GetClaimType), Name, new { id = claimType.Id }, new ClaimTypeInfo {
                Id = claimType.Id,
                Name = claimType.Name,
                DisplayName = claimType.DisplayName,
                Description = claimType.Description,
                Rule = claimType.Rule,
                ValueType = claimType.ValueType,
                Required = claimType.Required,
                Reserved = claimType.Reserved,
                UserEditable = claimType.UserEditable
            }));
        }
Пример #3
0
        public async Task <IActionResult> LoadFromAppSettings([FromQuery] bool hardRefresh = false)
        {
            var fileInfo      = _webHostEnvironment.ContentRootFileProvider.GetFileInfo("appsettings.json");
            var settingsExist = await _dbContext.AppSettings.AnyAsync();

            if (settingsExist && !hardRefresh)
            {
                return(BadRequest(new ValidationProblemDetails {
                    Detail = "App settings are already loaded in the database."
                }));
            }
            IDictionary <string, string> settings;

            using (var stream = fileInfo.CreateReadStream()) {
                settings = JsonConfigurationFileParser.Parse(stream);
            }
            if (settingsExist)
            {
                await _dbContext.Database.ExecuteSqlRawAsync($"TRUNCATE TABLE [{AppSetting.TableSchema}].[{nameof(AppSetting)}];");
            }
            await _dbContext.AppSettings.AddRangeAsync(settings.Select(x => new AppSetting {
                Key   = x.Key,
                Value = x.Value
            }));

            await _dbContext.SaveChangesAsync();

            return(Ok());
        }
Пример #4
0
        public async Task <IActionResult> AddUserClaim([FromRoute] string userId, [FromBody] CreateClaimRequest request)
        {
            var user = await _dbContext.Users.AsNoTracking().SingleOrDefaultAsync(x => x.Id == userId);

            if (user == null)
            {
                return(NotFound());
            }
            var claimToAdd = new IdentityUserClaim <string> {
                UserId     = userId,
                ClaimType  = request.Type,
                ClaimValue = request.Value
            };

            _dbContext.UserClaims.Add(claimToAdd);
            await _dbContext.SaveChangesAsync();

            return(CreatedAtAction(nameof(GetUserClaim), Name, new { userId, claimId = claimToAdd.Id }, new ClaimInfo {
                Id = claimToAdd.Id,
                Type = claimToAdd.ClaimType,
                Value = claimToAdd.ClaimValue
            }));
        }
Пример #5
0
        public async Task <IActionResult> RegisterDevice([FromBody] RegisterDeviceRequest request)
        {
            var user = await _userManager.GetUserAsync(User);

            if (user == null)
            {
                return(NotFound());
            }
            var device = await _dbContext.UserDevices.SingleOrDefaultAsync(x => x.UserId == user.Id && x.DeviceId == request.DeviceId);

            await _pushNotificationService.Register(request.DeviceId.ToString(), request.PnsHandle, request.DevicePlatform, user.Id, request.Tags?.ToArray());

            var deviceId = default(Guid);

            if (device != null)
            {
                device.IsPushNotificationsEnabled = true;
                device.DeviceName = request.DeviceName;
                deviceId          = device.Id;
            }
            else
            {
                var deviceToAdd = new UserDevice {
                    DeviceId                   = request.DeviceId,
                    DeviceName                 = request.DeviceName,
                    DevicePlatform             = request.DevicePlatform,
                    IsPushNotificationsEnabled = true,
                    UserId      = user.Id,
                    DateCreated = DateTimeOffset.Now
                };
                _dbContext.UserDevices.Add(deviceToAdd);
                deviceId = deviceToAdd.Id;
            }
            await _dbContext.SaveChangesAsync();

            return(CreatedAtAction(nameof(GetDevices), Name, new { deviceId }));
        }