99import java .util .concurrent .TimeUnit ;
1010
1111import jakarta .enterprise .context .ApplicationScoped ;
12+ import jakarta .enterprise .inject .Instance ;
1213import jakarta .inject .Inject ;
1314
1415import org .kohsuke .github .GHAppInstallationToken ;
2324import com .github .benmanes .caffeine .cache .LoadingCache ;
2425
2526import io .quarkiverse .githubapp .GitHubClientProvider ;
27+ import io .quarkiverse .githubapp .GitHubCustomizer ;
2628import io .quarkiverse .githubapp .runtime .config .CheckedConfigProvider ;
2729import io .quarkiverse .githubapp .runtime .signing .JwtTokenCreator ;
2830import io .smallrye .graphql .client .dynamic .api .DynamicGraphQLClient ;
@@ -33,16 +35,26 @@ public class GitHubService implements GitHubClientProvider {
3335
3436 private static final String AUTHORIZATION_HEADER = "Authorization" ;
3537 private static final String AUTHORIZATION_HEADER_BEARER = "Bearer %s" ;
38+ private static final GitHubCustomizer NOOP_GITHUB_CUSTOMIZER = new GitHubCustomizer () {
39+
40+ @ Override
41+ public void customize (GitHubBuilder builder ) {
42+ }
43+ };
3644
3745 private final CheckedConfigProvider checkedConfigProvider ;
3846
3947 private final LoadingCache <Long , CachedInstallationToken > installationTokenCache ;
4048
4149 private final JwtTokenCreator jwtTokenCreator ;
4250 private final GitHubConnector gitHubConnector ;
51+ private final GitHubCustomizer githubCustomizer ;
4352
4453 @ Inject
45- public GitHubService (CheckedConfigProvider checkedConfigProvider , JwtTokenCreator jwtTokenCreator ) {
54+ public GitHubService (
55+ CheckedConfigProvider checkedConfigProvider ,
56+ JwtTokenCreator jwtTokenCreator ,
57+ Instance <GitHubCustomizer > gitHubCustomizer ) {
4658 this .checkedConfigProvider = checkedConfigProvider ;
4759 this .jwtTokenCreator = jwtTokenCreator ;
4860 this .installationTokenCache = Caffeine .newBuilder ()
@@ -74,6 +86,8 @@ public long expireAfterRead(Long installationId, CachedInstallationToken cachedI
7486 .build (new CreateInstallationToken ());
7587 this .gitHubConnector = new HttpClientGitHubConnector (
7688 HttpClient .newBuilder ().version (Version .HTTP_1_1 ).followRedirects (HttpClient .Redirect .NEVER ).build ());
89+ // if the customizer is not resolvable, we use a no-op customizer
90+ githubCustomizer = gitHubCustomizer .isResolvable () ? gitHubCustomizer .get () : NOOP_GITHUB_CUSTOMIZER ;
7791 }
7892
7993 @ Override
@@ -126,7 +140,11 @@ private GitHub createInstallationClient(long installationId) throws IOException
126140 CachedInstallationToken installationToken = installationTokenCache .get (installationId );
127141
128142 final GitHubBuilder gitHubBuilder = new GitHubBuilder ()
129- .withConnector (gitHubConnector )
143+ .withConnector (gitHubConnector );
144+ // apply customizations
145+ githubCustomizer .customize (gitHubBuilder );
146+ // configure mandatory defaults
147+ gitHubBuilder
130148 .withAppInstallationToken (installationToken .getToken ())
131149 .withEndpoint (checkedConfigProvider .restApiEndpoint ());
132150
@@ -194,7 +212,11 @@ private GitHub createApplicationGitHub() {
194212
195213 try {
196214 final GitHubBuilder gitHubBuilder = new GitHubBuilder ()
197- .withConnector (gitHubConnector )
215+ .withConnector (gitHubConnector );
216+ // apply customizations
217+ githubCustomizer .customize (gitHubBuilder );
218+ // configure mandatory defaults
219+ gitHubBuilder
198220 .withJwtToken (jwtToken )
199221 .withEndpoint (checkedConfigProvider .restApiEndpoint ());
200222
0 commit comments