Skip to content

Commit

Permalink
feat: apply custom gql headers (#649)
Browse files Browse the repository at this point in the history
  • Loading branch information
iProdigy committed Sep 15, 2022
1 parent 97330a0 commit 830c429
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 10 deletions.
Expand Up @@ -22,7 +22,9 @@
import okhttp3.Request;

import java.time.Duration;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;

/**
Expand Down Expand Up @@ -78,19 +80,25 @@ public class TwitchGraphQL {
*/
private final Cache<String, ApolloClient> clientsByCredential;

/**
* Extra user-defined headers on each request
*/
private final Map<String, String> additionalHeaders;

/**
* Constructor
*
* @param baseUrl Base Url
* @param userAgent User Agent
* @param eventManager Event Manager
* @param clientId Client Id
* @param defaultToken Default Token
* @param proxyConfig Proxy Config
* @param batchingEnabled Query Batching
* @param timeout Query Timeout
* @param baseUrl Base Url
* @param userAgent User Agent
* @param eventManager Event Manager
* @param clientId Client Id
* @param defaultToken Default Token
* @param proxyConfig Proxy Config
* @param batchingEnabled Query Batching
* @param timeout Query Timeout
* @param additionalHeaders Custom headers
*/
public TwitchGraphQL(String baseUrl, String userAgent, EventManager eventManager, String clientId, OAuth2Credential defaultToken, ProxyConfig proxyConfig, boolean batchingEnabled, Integer timeout) {
public TwitchGraphQL(String baseUrl, String userAgent, EventManager eventManager, String clientId, OAuth2Credential defaultToken, ProxyConfig proxyConfig, boolean batchingEnabled, Integer timeout, Map<String, String> additionalHeaders) {
this.baseUrl = baseUrl;
this.userAgent = userAgent;
this.eventManager = eventManager;
Expand All @@ -99,6 +107,7 @@ public TwitchGraphQL(String baseUrl, String userAgent, EventManager eventManager
this.proxyConfig = proxyConfig;
this.batchingEnabled = batchingEnabled;
this.timeout = timeout;
this.additionalHeaders = additionalHeaders != null ? additionalHeaders : Collections.emptyMap();
this.clientsByCredential = CacheApi.create(spec -> {
spec.maxSize(64L);
spec.expiryType(ExpiryType.POST_ACCESS);
Expand Down Expand Up @@ -130,6 +139,10 @@ private ApolloClient getApolloClient(OAuth2Credential credential) {
.header("User-Agent", userAgent)
.header("X-Device-Id", CommandComputeId.INSTANCE.getId());

// Apply custom headers
additionalHeaders.forEach(requestBuilder::header);

// Set auth header
if (!accessToken.isEmpty()) {
requestBuilder.header("Authorization", "OAuth " + accessToken);
}
Expand Down
Expand Up @@ -11,6 +11,9 @@
import lombok.*;
import lombok.extern.slf4j.Slf4j;

import java.util.HashMap;
import java.util.Map;

/**
* Twitch GraphQL Builder
* <p>
Expand Down Expand Up @@ -74,8 +77,15 @@ public class TwitchGraphQLBuilder {
/**
* User Agent
*/
@With
private String userAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36";

/**
* Additional headers to be applied to each outbound request
*/
@With
private Map<String, String> headers = new HashMap<>();

/**
* BaseUrl
*/
Expand Down Expand Up @@ -103,7 +113,7 @@ public TwitchGraphQL build() {
ConfigurationManager.getConfigInstance().setProperty("hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds", timeout);

// GQL
TwitchGraphQL client = new TwitchGraphQL(baseUrl, userAgent, eventManager, clientId, defaultFirstPartyToken, proxyConfig, enableBatching, timeout);
TwitchGraphQL client = new TwitchGraphQL(baseUrl, userAgent, eventManager, clientId, defaultFirstPartyToken, proxyConfig, enableBatching, timeout, headers);

// Initialize/Check EventManager
eventManager = EventManagerUtils.validateOrInitializeEventManager(eventManager, defaultEventHandler);
Expand Down

0 comments on commit 830c429

Please sign in to comment.