public async Task <IActionResult> Update(int id, ClientEditDto input)
        {
            _repository.UpdateScopes(id, input.AllowedScopes.ToArray());
            new NotImplementedException();
            //_repository.Update(id, input);
            await _repository.SaveChangesAsync();

            return(await GetEdit(id));
        }
예제 #2
0
 public async Task <IActionResult> Edit(ClientEditDto client)
 {
     if (client.Id <= 0)
     {
         return(Json(new ResultEntity {
             Message = "请求数据有误,修改数据空主键"
         }));
     }
     return(await CreateOrUpdate(client));
 }
예제 #3
0
        public async Task <ResultModel <string> > EditClient(ClientEditDto dto)
        {
            var clientJson = new StringContent(JsonConvert.SerializeObject(dto), Encoding.UTF8, "application/json");
            var response   = await _httpClient.PostAsync($"/api/Client/UpdateClient", clientJson);

            if (response.IsSuccessStatusCode)
            {
                return(JsonConvert.DeserializeObject <ResultModel <string> >(await response.Content.ReadAsStringAsync()));
            }
            return(null);
        }
예제 #4
0
        private async Task <IActionResult> CreateOrUpdate(ClientEditDto client)
        {
            var result = new ResultEntity();

            if (ModelState.IsValid)
            {
                if (string.IsNullOrWhiteSpace(client.HomePage))
                {
                    client.HomePage = "/Home/Index";
                }
                client.SetCreateOrUpdateInfo(CurrentUser.UserId);
                result = await _clientAppService.AddOrUpdateAsync(client);

                return(Json(result));
            }
            result.Message = ModelState.Values
                             .FirstOrDefault(a => a.ValidationState == ModelValidationState.Invalid)?.Errors.FirstOrDefault()
                             ?.ErrorMessage;

            return(Json(result));
        }
예제 #5
0
        public async Task <ResultEntity> AddOrUpdateAsync(ClientEditDto editDto)
        {
            var barcodeRule = Mapper.Map <Client>(editDto);
            var result      = await _clientManager.AddOrUpdateAsync(barcodeRule);

            if (result.Success)
            {
                await _unitOfWork.CommitAsync();

                if (editDto.Id > 0)
                {
                    await _logManager.LogInfomationAsync(EnumLogType.Audit, LogTitleConstString.ClientEdit,
                                                         $"【{editDto.Name}】", JsonConvert.SerializeObject(barcodeRule), editDto.CreateBy);
                }
                else
                {
                    await _logManager.LogInfomationAsync(EnumLogType.Audit, LogTitleConstString.ClientAdd,
                                                         $"【{editDto.Name}】", JsonConvert.SerializeObject(barcodeRule), editDto.CreateBy);
                }
            }
            return(result);
        }
예제 #6
0
 public async Task <IActionResult> UpdateClient([FromBody] ClientEditDto dto)
 {
     return(Json(await _clientService.UpdateClient(dto)));
 }
예제 #7
0
        public async Task <ResultModel> UpdateClient(ClientEditDto clientUpdateDto)
        {
            if (_userDatabaseContext.Clients.Any(x => x.ClientId == clientUpdateDto.ClientId && x.Id != clientUpdateDto.Id.Value))
            {
                return(new ResultModel(ResultCode.Fail, "此客户端ID已存在"));
            }

            var client = await _userDatabaseContext.Clients.Where(x => x.Id == clientUpdateDto.Id)
                         .Include(x => x.ClientSecrets)
                         .Include(x => x.AllowedGrantTypes)
                         .Include(x => x.RedirectUris)
                         .Include(x => x.PostLogoutRedirectUris)
                         .Include(x => x.AllowedScopes)
                         .Include(x => x.AllowedCorsOrigins)
                         .FirstOrDefaultAsync();

            client.Enabled             = clientUpdateDto.Enabled;
            client.ClientId            = clientUpdateDto.ClientId;
            client.ClientName          = clientUpdateDto.ClientName;
            client.Description         = clientUpdateDto.Description;
            client.AccessTokenLifetime = clientUpdateDto.AccessTokenLifetime.Value;
            client.Updated             = DateTime.Now;
            client.NonEditable         = clientUpdateDto.NonEditable;

            //client.ClientSecrets = null;
            client.AllowedGrantTypes      = null;
            client.RedirectUris           = null;
            client.PostLogoutRedirectUris = null;
            client.AllowedScopes          = null;
            client.AllowedCorsOrigins     = null;

            //List<ClientIdPRestriction> clientIdPRestrictions = new List<ClientIdPRestriction>();
            //foreach (var item in clientUpdateDto.IdentityProviderRestrictions)
            //{
            //    clientIdPRestrictions.Add(new ClientIdPRestriction
            //    {
            //        Provider = item.Provider
            //    });
            //}

            //List<IdentityServer4.EntityFramework.Entities.ClientClaim> clientClaims = new List<IdentityServer4.EntityFramework.Entities.ClientClaim>();
            //foreach (var item in clientUpdateDto.Claims)
            //{
            //    clientClaims.Add(new IdentityServer4.EntityFramework.Entities.ClientClaim
            //    {
            //        Type = item.Type,
            //        Value = item.Value
            //    });
            //}

            List <ClientCorsOrigin> clientCorsOrigins = new List <ClientCorsOrigin>();

            foreach (var item in clientUpdateDto.AllowedCorsOrigins)
            {
                clientCorsOrigins.Add(new ClientCorsOrigin
                {
                    Origin = item.Origin
                });
            }

            //List<ClientProperty> clientProperties = new List<ClientProperty>();
            //foreach (var item in clientUpdateDto.Properties)
            //{
            //    clientProperties.Add(new ClientProperty
            //    {
            //        Key = item.Key,
            //        Value = item.Value
            //    });
            //}

            List <ClientScope> clientScopes = new List <ClientScope>();

            foreach (var item in clientUpdateDto.AllowedScopes)
            {
                clientScopes.Add(new ClientScope
                {
                    Scope = item.Scope
                });
            }

            List <ClientSecret> clientSecrets = new List <ClientSecret>();

            foreach (var item in clientUpdateDto.ClientSecrets)
            {
                clientSecrets.Add(new ClientSecret
                {
                    Created     = DateTime.Now,
                    Description = item.Description,
                    Expiration  = item.Expiration,
                    Type        = "SharedSecret",
                    Value       = item.Value.ToSha256(),
                });
            }

            List <ClientGrantType> clientGrantTypes = new List <ClientGrantType>();

            foreach (var item in clientUpdateDto.AllowedGrantTypes)
            {
                clientGrantTypes.Add(new ClientGrantType
                {
                    GrantType = item.GrantType
                });
            }

            List <ClientRedirectUri> clientRedirectUris = new List <ClientRedirectUri>();

            foreach (var item in clientUpdateDto.RedirectUris)
            {
                clientRedirectUris.Add(new ClientRedirectUri
                {
                    RedirectUri = item.RedirectUri
                });
            }

            List <ClientPostLogoutRedirectUri> clientPostLogoutRedirectUris = new List <ClientPostLogoutRedirectUri>();

            foreach (var item in clientUpdateDto.PostLogoutRedirectUris)
            {
                clientPostLogoutRedirectUris.Add(new ClientPostLogoutRedirectUri
                {
                    PostLogoutRedirectUri = item.PostLogoutRedirectUri
                });
            }

            //这里是因为没处理好加密,所以先注释掉
            //client.ClientSecrets = clientSecrets;
            client.AllowedGrantTypes      = clientGrantTypes;
            client.RedirectUris           = clientRedirectUris;
            client.PostLogoutRedirectUris = clientPostLogoutRedirectUris;
            client.AllowedScopes          = clientScopes;
            //client.IdentityProviderRestrictions = clientIdPRestrictions;
            client.AllowedCorsOrigins = clientCorsOrigins;
            //client.Properties = clientProperties;
            //client.Claims = clientClaims;

            try
            {
                _userDatabaseContext.Clients.Update(client);
                await _userDatabaseContext.SaveChangesAsync();

                return(new ResultModel(ResultCode.Success, "更新客户端成功"));
            }
            catch (Exception ex)
            {
                return(new ResultModel(ResultCode.Fail, ex.Message));
            }
        }
예제 #8
0
        public async Task <ResultModel> CreateClient(ClientEditDto dto)
        {
            if (_userDatabaseContext.Clients.Any(x => x.ClientId == dto.ClientId))
            {
                return(new ResultModel(ResultCode.Fail, "此客户端ID已经存在,请重新输入"));
            }

            //List<ClientIdPRestriction> clientIdPRestrictions = new List<ClientIdPRestriction>();
            //foreach (var item in clientCreateDto.IdentityProviderRestrictions)
            //{
            //    clientIdPRestrictions.Add(new ClientIdPRestriction
            //    {
            //        Provider = item.Provider
            //    });
            //}

            //List<IdentityServer4.EntityFramework.Entities.ClientClaim> clientClaims = new List<IdentityServer4.EntityFramework.Entities.ClientClaim>();
            //foreach (var item in clientCreateDto.Claims)
            //{
            //    clientClaims.Add(new IdentityServer4.EntityFramework.Entities.ClientClaim
            //    {
            //        Type = item.Type,
            //        Value = item.Value
            //    });
            //}

            List <ClientCorsOrigin> clientCorsOrigins = new List <ClientCorsOrigin>();

            foreach (var item in dto.AllowedCorsOrigins)
            {
                clientCorsOrigins.Add(new ClientCorsOrigin
                {
                    Origin = item.Origin
                });
            }

            //List<ClientProperty> clientProperties = new List<ClientProperty>();
            //foreach (var item in clientCreateDto.Properties)
            //{
            //    clientProperties.Add(new ClientProperty
            //    {
            //        Key = item.Key,
            //        Value = item.Value
            //    });
            //}

            List <ClientScope> clientScopes = new List <ClientScope>();

            foreach (var item in dto.AllowedScopes)
            {
                clientScopes.Add(new ClientScope
                {
                    Scope = item.Scope
                });
            }
            clientScopes.Add(new ClientScope
            {
                Scope = "openid"
            });
            clientScopes.Add(new ClientScope
            {
                Scope = "profile"
            });

            List <ClientSecret> clientSecrets = new List <ClientSecret>();

            foreach (var item in dto.ClientSecrets)
            {
                clientSecrets.Add(new ClientSecret
                {
                    Created     = DateTime.Now,
                    Description = item.Description,
                    Expiration  = item.Expiration,
                    Type        = "SharedSecret",
                    Value       = item.Value.ToSha256(),
                });
            }

            List <ClientGrantType> clientGrantTypes = new List <ClientGrantType>();

            foreach (var item in dto.AllowedGrantTypes)
            {
                clientGrantTypes.Add(new ClientGrantType
                {
                    GrantType = item.GrantType
                });
            }

            List <ClientRedirectUri> clientRedirectUris = new List <ClientRedirectUri>();

            foreach (var item in dto.RedirectUris)
            {
                clientRedirectUris.Add(new ClientRedirectUri
                {
                    RedirectUri = item.RedirectUri
                });
            }

            List <ClientPostLogoutRedirectUri> clientPostLogoutRedirectUris = new List <ClientPostLogoutRedirectUri>();

            foreach (var item in dto.PostLogoutRedirectUris)
            {
                clientPostLogoutRedirectUris.Add(new ClientPostLogoutRedirectUri
                {
                    PostLogoutRedirectUri = item.PostLogoutRedirectUri
                });
            }
            try
            {
                var client = new IdentityServer4.EntityFramework.Entities.Client
                {
                    Enabled             = dto.Enabled,
                    ClientId            = dto.ClientId,
                    RequireClientSecret = dto.RequireClientSecret,
                    ClientName          = dto.ClientName,
                    Description         = dto.Description ?? "",
                    AlwaysIncludeUserClaimsInIdToken = true,
                    AllowAccessTokensViaBrowser      = true,
                    AllowOfflineAccess               = true,
                    IdentityTokenLifetime            = 300,
                    AccessTokenLifetime              = dto.AccessTokenLifetime ?? 3600,
                    AuthorizationCodeLifetime        = 300,
                    ConsentLifetime                  = null,
                    AbsoluteRefreshTokenLifetime     = 2592000,
                    SlidingRefreshTokenLifetime      = 1296000,
                    RefreshTokenUsage                = (int)TokenUsage.OneTimeOnly,
                    UpdateAccessTokenClaimsOnRefresh = true,
                    RefreshTokenExpiration           = (int)TokenExpiration.Absolute,
                    AccessTokenType                  = 0,
                    EnableLocalLogin                 = true,
                    IncludeJwtId           = true,
                    AlwaysSendClientClaims = false,
                    ClientClaimsPrefix     = "client_",
                    PairWiseSubjectSalt    = null,
                    Created                = DateTime.Now,
                    UserSsoLifetime        = null,
                    UserCodeType           = null,
                    DeviceCodeLifetime     = 300,
                    NonEditable            = dto.NonEditable,
                    ClientSecrets          = clientSecrets,
                    AllowedGrantTypes      = clientGrantTypes,
                    RedirectUris           = clientRedirectUris,
                    PostLogoutRedirectUris = clientPostLogoutRedirectUris,
                    AllowedScopes          = clientScopes,
                    //IdentityProviderRestrictions = clientIdPRestrictions,
                    AllowedCorsOrigins = clientCorsOrigins,
                    //Properties = clientProperties,
                    //Claims = clientClaims,
                    //RequirePkce = clientCreateDto.RequirePkce ?? true,
                    RequireRequestObject = false,
                };


                _userDatabaseContext.Clients.Add(client);
                await _userDatabaseContext.SaveChangesAsync();

                return(new ResultModel(ResultCode.Success, "创建客户端成功"));
            }
            catch (Exception ex)
            {
                return(new ResultModel(ResultCode.Fail, ex.Message));
            }
        }