Example #1
0
        public static JObject ToDto(this OAuthClient client, string issuer)
        {
            var result = new JObject();

            result.AddNotEmpty(OAuthClientParameters.ClientId, client.ClientId)
            .AddNotEmpty(OAuthClientParameters.RegistrationAccessToken, client.RegistrationAccessToken)
            .AddNotEmpty(OAuthClientParameters.GrantTypes, client.GrantTypes)
            .AddNotEmpty(OAuthClientParameters.RedirectUris, client.RedirectionUrls)
            .AddNotEmpty(OAuthClientParameters.TokenEndpointAuthMethod, client.TokenEndPointAuthMethod)
            .AddNotEmpty(OAuthClientParameters.ResponseTypes, client.ResponseTypes)
            .AddNotEmpty(OAuthClientParameters.ClientName, client.ClientNames)
            .AddNotEmpty(OAuthClientParameters.ClientUri, client.ClientUris)
            .AddNotEmpty(OAuthClientParameters.LogoUri, client.LogoUris)
            .AddNotEmpty(OAuthClientParameters.Contacts, client.Contacts)
            .AddNotEmpty(OAuthClientParameters.TosUri, client.TosUris)
            .AddNotEmpty(OAuthClientParameters.PolicyUri, client.PolicyUris)
            .AddNotEmpty(OAuthClientParameters.JwksUri, client.JwksUri)
            .AddNotEmpty(OAuthClientParameters.SoftwareId, client.SoftwareId)
            .AddNotEmpty(OAuthClientParameters.SoftwareVersion, client.SoftwareVersion)
            .AddNotEmpty(OAuthClientParameters.TlsClientAuthSubjectDN, client.TlsClientAuthSubjectDN)
            .AddNotEmpty(OAuthClientParameters.TlsClientAuthSanDNS, client.TlsClientAuthSanDNS)
            .AddNotEmpty(OAuthClientParameters.TlsClientAuthSanUri, client.TlsClientAuthSanURI)
            .AddNotEmpty(OAuthClientParameters.TlsClientAuthSanIp, client.TlsClientAuthSanIP)
            .AddNotEmpty(OAuthClientParameters.TlsClientAuthSanEmail, client.TlsClientAuthSanEmail);
            result.Add(OAuthClientParameters.ClientIdIssuedAt, client.CreateDateTime.ConvertToUnixTimestamp());
            result.Add(OAuthClientParameters.RegistrationClientUri, $"{issuer}/{Constants.EndPoints.Registration}/{client.ClientId}");
            if (client.Secrets != null && client.Secrets.Any())
            {
                var secret = client.Secrets.FirstOrDefault(_ => _.Type == ClientSecretTypes.SharedSecret);
                if (secret != null)
                {
                    result.AddNotEmpty(OAuthClientParameters.ClientSecret, secret.Value);
                    result.Add(OAuthClientParameters.ClientSecretExpiresAt, secret.ExpirationDateTime == null ? 0 : secret.ExpirationDateTime.Value.ConvertToUnixTimestamp());
                }
            }

            if (client.AllowedScopes != null && client.AllowedScopes.Any())
            {
                result.Add(OAuthClientParameters.Scope, string.Join(" ", client.AllowedScopes.Select(_ => _.Name)));
            }

            if (client.JsonWebKeys != null && client.JsonWebKeys.Any())
            {
                var keys = new JObject
                {
                    { "keys", JArray.FromObject(client.JsonWebKeys.Select(_ => _.Serialize())) }
                };
                result.Add(OAuthClientParameters.Jwks, keys);
            }

            return(result);
        }