public async Task <int> Update(Client client)
        {
            var clientInfo = await GetInfo(client.ClientId);

            if (clientInfo == null)
            {
                return(-1);
            }

            clientInfo = client;
            Context.Entry(clientInfo).State = EntityState.Modified;
            Context.Entry(clientInfo).Property(x => x.ClientId).IsModified = false;
            return(await Context.SaveChangesAsync());
        }
        private static Client MapToClient(ClientMeta clientMeta)
        {
            var client = new Client
            {
                ClientId = clientMeta.ClientId,
                IdentityTokenLifetime            = clientMeta.IdentityTokenLifetime,
                ClientName                       = clientMeta.ClientName,
                AbsoluteRefreshTokenLifetime     = clientMeta.AbsoluteRefreshTokenLifetime,
                AccessTokenLifetime              = clientMeta.AccessTokenLifetime,
                AccessTokenType                  = clientMeta.AccessTokenType,
                AllowAccessTokensViaBrowser      = clientMeta.AllowAccessTokensViaBrowser,
                AllowOfflineAccess               = clientMeta.AllowOfflineAccess,
                AllowPlainTextPkce               = clientMeta.AllowPlainTextPkce,
                AllowRememberConsent             = clientMeta.AllowRememberConsent,
                AlwaysIncludeUserClaimsInIdToken = clientMeta.AlwaysIncludeUserClaimsInIdToken,
                AlwaysSendClientClaims           = clientMeta.AlwaysSendClientClaims,
                AuthorizationCodeLifetime        = clientMeta.AuthorizationCodeLifetime,
                BackChannelLogoutSessionRequired = clientMeta.BackChannelLogoutSessionRequired,
                BackChannelLogoutUri             = clientMeta.BackChannelLogoutUri,
                ClientClaimsPrefix               = clientMeta.ClientClaimsPrefix,
                ClientUri        = clientMeta.ClientUri,
                ConsentLifetime  = clientMeta.ConsentLifetime,
                EnableLocalLogin = clientMeta.EnableLocalLogin,
                Enabled          = clientMeta.Enabled,
                FrontChannelLogoutSessionRequired = clientMeta.FrontChannelLogoutSessionRequired,
                FrontChannelLogoutUri             = clientMeta.FrontChannelLogoutUri,
                IncludeJwtId                     = clientMeta.IncludeJwtId,
                LogoUri                          = clientMeta.LogoUri,
                ClientAllowedGrantTypes          = clientMeta.ClientAllowedGrantTypes,
                PairWiseSubjectSalt              = clientMeta.PairWiseSubjectSalt,
                ProtocolType                     = clientMeta.ProtocolType,
                RefreshTokenExpiration           = clientMeta.RefreshTokenExpiration,
                RefreshTokenUsage                = clientMeta.RefreshTokenUsage,
                RequireClientSecret              = clientMeta.RequireClientSecret,
                RequireConsent                   = clientMeta.RequireConsent,
                RequirePkce                      = clientMeta.RequirePkce,
                SlidingRefreshTokenLifetime      = clientMeta.SlidingRefreshTokenLifetime,
                UpdateAccessTokenClaimsOnRefresh = clientMeta.UpdateAccessTokenClaimsOnRefresh,
                UnsignName                       = clientMeta.ClientName.StripVietnameseChars()
            };

            return(client);
        }
        private IdentityServer4.Models.Client MapToIdentityClient(Client client,
                                                                  List <ClientPostLogoutRedirectUris> listPostLogoutRedirectUris,
                                                                  List <ClientRedirectUris> listClientRedirectUris, List <ClientSecret> listClientSecrets,
                                                                  List <ClientProperty> listClientProperty,
                                                                  List <Domain.Models.ClientClaim> listClaims,
                                                                  List <ClientIdentityProviderRestriction> listIdentityProviderRestrictions,
                                                                  List <ClientAllowedCorsOrigin> listAllowedCorsOrigins,
                                                                  List <ClientAllowedScope> listClientAllowedScopes)
        {
            var propertyDictionary = new Dictionary <string, string>();

            if (listClientProperty.Count > 0)
            {
                listClientProperty.ForEach(x =>
                {
                    propertyDictionary.Add(x.Key, x.Value);
                });
            }

            var identityClient = new IdentityServer4.Models.Client
            {
                ClientId = client.ClientId,
                IdentityTokenLifetime            = client.IdentityTokenLifetime,
                ClientName                       = client.ClientName,
                AbsoluteRefreshTokenLifetime     = client.AbsoluteRefreshTokenLifetime,
                AccessTokenLifetime              = client.AccessTokenLifetime,
                AccessTokenType                  = client.AccessTokenType,
                AllowAccessTokensViaBrowser      = client.AllowAccessTokensViaBrowser,
                AllowOfflineAccess               = client.AllowOfflineAccess,
                AllowPlainTextPkce               = client.AllowPlainTextPkce,
                AllowRememberConsent             = client.AllowRememberConsent,
                AlwaysIncludeUserClaimsInIdToken = client.AlwaysIncludeUserClaimsInIdToken,
                AlwaysSendClientClaims           = client.AlwaysSendClientClaims,
                AuthorizationCodeLifetime        = client.AuthorizationCodeLifetime,
                BackChannelLogoutSessionRequired = client.BackChannelLogoutSessionRequired,
                BackChannelLogoutUri             = client.BackChannelLogoutUri,
                ClientClaimsPrefix               = client.ClientClaimsPrefix,
                ClientUri        = client.ClientUri,
                ConsentLifetime  = client.ConsentLifetime,
                EnableLocalLogin = client.EnableLocalLogin,
                Enabled          = client.Enabled,
                FrontChannelLogoutSessionRequired = client.FrontChannelLogoutSessionRequired,
                FrontChannelLogoutUri             = client.FrontChannelLogoutUri,
                IncludeJwtId                     = client.IncludeJwtId,
                LogoUri                          = client.LogoUri,
                PairWiseSubjectSalt              = client.PairWiseSubjectSalt,
                ProtocolType                     = client.ProtocolType,
                RefreshTokenExpiration           = client.RefreshTokenExpiration,
                RefreshTokenUsage                = client.RefreshTokenUsage,
                RequireClientSecret              = client.RequireClientSecret,
                RequireConsent                   = client.RequireConsent,
                RequirePkce                      = client.RequirePkce,
                SlidingRefreshTokenLifetime      = client.SlidingRefreshTokenLifetime,
                UpdateAccessTokenClaimsOnRefresh = client.UpdateAccessTokenClaimsOnRefresh,
                AllowedGrantTypes                = GetGrantTypes(client.ClientAllowedGrantTypes),
                ClientSecrets                    = listClientSecrets.Select(x => new Secret
                {
                    Value       = x.Value,
                    Description = x.Description,
                    Type        = x.Type,
                    Expiration  = x.Expiration
                }).ToList(),
                PostLogoutRedirectUris       = listPostLogoutRedirectUris.Count > 0 ? listPostLogoutRedirectUris.Select(x => x.Uri).ToList() : new List <string>(),
                RedirectUris                 = listClientRedirectUris.Count > 0 ? listClientRedirectUris.Select(x => x.Uri).ToList() : new List <string>(),
                AllowedCorsOrigins           = listAllowedCorsOrigins.Count > 0 ? listAllowedCorsOrigins.Select(x => x.Domain).ToList() : new List <string>(),
                AllowedScopes                = listClientAllowedScopes.Count > 0 ? listClientAllowedScopes.Distinct().Select(x => x.Scope).ToList() : new List <string>(),
                IdentityProviderRestrictions = listIdentityProviderRestrictions.Count > 0 ? listIdentityProviderRestrictions.Select(x => x.IdentityProviderRestriction).ToList() : new List <string>(),
                Properties = propertyDictionary,
                Claims     = listClaims.Count > 0 ? listClaims.Select(x => new IdentityServer4.Models.ClientClaim(x.ClaimType, x.ClaimValue)).ToList() : new List <IdentityServer4.Models.ClientClaim>()
            };

            return(identityClient);
        }