public StateTokenParser(
     IClient client,
     ClientApiKeyConfiguration apiKeyConfiguration,
     string token,
     ILogger logger)
 {
     DecodeToken(client, apiKeyConfiguration, token, logger);
 }
 public ClientConfiguration(
     ClientApiKeyConfiguration apiKey = null,
     ClientCacheManagerConfiguration cacheManager = null,
     string baseUrl = null,
     int? connectionTimeout = null,
     ClientAuthenticationScheme? authenticationScheme = null,
     ClientProxyConfiguration proxy = null)
 {
     this.ApiKey = new ClientApiKeyConfiguration(apiKey) ?? Default.Configuration.Client.ApiKey;
     this.CacheManager = new ClientCacheManagerConfiguration(cacheManager) ?? Default.Configuration.Client.CacheManager;
     this.BaseUrl = baseUrl ?? Default.Configuration.Client.BaseUrl;
     this.ConnectionTimeout = connectionTimeout ?? Default.Configuration.Client.ConnectionTimeout;
     this.AuthenticationScheme = authenticationScheme ?? Default.Configuration.Client.AuthenticationScheme;
     this.Proxy = new ClientProxyConfiguration(proxy) ?? Default.Configuration.Client.Proxy;
 }
        private void DecodeToken(
            IClient client,
            ClientApiKeyConfiguration apiKeyConfiguration,
            string token,
            ILogger logger)
        {
            if (string.IsNullOrEmpty(token))
            {
                Valid = false;
                return;
            }

            try
            {
                // TODO: replace with direct JWT library access
                var parsedJwt = client.NewJwtParser()
                                .SetSigningKey(apiKeyConfiguration.Secret, Encoding.UTF8)
                                .Parse(token);

                if (parsedJwt.Body.ContainsClaim(StateTokenBuilder.PathClaimName))
                {
                    Path = parsedJwt.Body.GetClaim(StateTokenBuilder.PathClaimName).ToString();
                }

                if (parsedJwt.Body.ContainsClaim(StateTokenBuilder.StateClaimName))
                {
                    State = parsedJwt.Body.GetClaim(StateTokenBuilder.StateClaimName).ToString();
                }

                Valid = true;
            }
            catch (InvalidJwtException ije)
            {
                logger.Warn($"Redirect token failed validation ({ije.Message}): {token}", source: nameof(StateTokenParser));
                Valid = false;
            }
        }
 public StateTokenBuilder(IClient client, ClientApiKeyConfiguration apiKeyConfiguration)
 {
     _client = client;
     _apiKeyConfiguration = apiKeyConfiguration;
 }
 public ClientApiKeyConfiguration(ClientApiKeyConfiguration existing)
     : this(file: existing?.File,
           id: existing?.Id,
           secret: existing?.Secret)
 {
 }