11package org .kohsuke .github ;
22
33import org .apache .commons .io .IOUtils ;
4+ import org .kohsuke .github .authorization .AuthorizationProvider ;
5+ import org .kohsuke .github .authorization .ImmutableAuthorizationProvider ;
46import org .kohsuke .github .extras .ImpatientHttpConnector ;
57
68import java .io .File ;
@@ -24,16 +26,13 @@ public class GitHubBuilder implements Cloneable {
2426
2527 // default scoped so unit tests can read them.
2628 /* private */ String endpoint = GitHubClient .GITHUB_URL ;
27- /* private */ String user ;
28- /* private */ String password ;
29- /* private */ String oauthToken ;
30- /* private */ String jwtToken ;
3129
3230 private HttpConnector connector ;
3331
3432 private RateLimitHandler rateLimitHandler = RateLimitHandler .WAIT ;
3533 private AbuseLimitHandler abuseLimitHandler = AbuseLimitHandler .WAIT ;
3634 private GitHubRateLimitChecker rateLimitChecker = new GitHubRateLimitChecker ();
35+ /* private */ AuthorizationProvider authorizationProvider = AuthorizationProvider .ANONYMOUS ;
3736
3837 /**
3938 * Instantiates a new Git hub builder.
@@ -61,13 +60,13 @@ static GitHubBuilder fromCredentials() throws IOException {
6160
6261 builder = fromEnvironment ();
6362
64- if (builder .oauthToken != null || builder . user != null || builder . jwtToken != null )
63+ if (builder .authorizationProvider != null )
6564 return builder ;
6665
6766 try {
6867 builder = fromPropertyFile ();
6968
70- if (builder .oauthToken != null || builder . user != null || builder . jwtToken != null )
69+ if (builder .authorizationProvider != null )
7170 return builder ;
7271 } catch (FileNotFoundException e ) {
7372 // fall through
@@ -215,9 +214,20 @@ public static GitHubBuilder fromPropertyFile(String propertyFileName) throws IOE
215214 */
216215 public static GitHubBuilder fromProperties (Properties props ) {
217216 GitHubBuilder self = new GitHubBuilder ();
218- self .withOAuthToken (props .getProperty ("oauth" ), props .getProperty ("login" ));
219- self .withJwtToken (props .getProperty ("jwt" ));
220- self .withPassword (props .getProperty ("login" ), props .getProperty ("password" ));
217+ String oauth = props .getProperty ("oauth" );
218+ String jwt = props .getProperty ("jwt" );
219+ String login = props .getProperty ("login" );
220+ String password = props .getProperty ("password" );
221+
222+ if (oauth != null ) {
223+ self .withOAuthToken (oauth , login );
224+ }
225+ if (jwt != null ) {
226+ self .withJwtToken (jwt );
227+ }
228+ if (password != null ) {
229+ self .withPassword (login , password );
230+ }
221231 self .withEndpoint (props .getProperty ("endpoint" , GitHubClient .GITHUB_URL ));
222232 return self ;
223233 }
@@ -247,9 +257,7 @@ public GitHubBuilder withEndpoint(String endpoint) {
247257 * @return the git hub builder
248258 */
249259 public GitHubBuilder withPassword (String user , String password ) {
250- this .user = user ;
251- this .password = password ;
252- return this ;
260+ return withAuthorizationProvider (ImmutableAuthorizationProvider .fromLoginAndPassword (user , password ));
253261 }
254262
255263 /**
@@ -260,7 +268,7 @@ public GitHubBuilder withPassword(String user, String password) {
260268 * @return the git hub builder
261269 */
262270 public GitHubBuilder withOAuthToken (String oauthToken ) {
263- return withOAuthToken ( oauthToken , null );
271+ return withAuthorizationProvider ( ImmutableAuthorizationProvider . fromOauthToken ( oauthToken ) );
264272 }
265273
266274 /**
@@ -273,8 +281,21 @@ public GitHubBuilder withOAuthToken(String oauthToken) {
273281 * @return the git hub builder
274282 */
275283 public GitHubBuilder withOAuthToken (String oauthToken , String user ) {
276- this .oauthToken = oauthToken ;
277- this .user = user ;
284+ return withAuthorizationProvider (ImmutableAuthorizationProvider .fromOauthToken (oauthToken , user ));
285+ }
286+
287+ /**
288+ * Configures a {@link AuthorizationProvider} for this builder
289+ *
290+ * There can be only one authorization provider per client instance.
291+ *
292+ * @param authorizationProvider
293+ * the authorization provider
294+ * @return the git hub builder
295+ *
296+ */
297+ public GitHubBuilder withAuthorizationProvider (final AuthorizationProvider authorizationProvider ) {
298+ this .authorizationProvider = authorizationProvider ;
278299 return this ;
279300 }
280301
@@ -287,7 +308,7 @@ public GitHubBuilder withOAuthToken(String oauthToken, String user) {
287308 * @see GHAppInstallation#createToken(java.util.Map) GHAppInstallation#createToken(java.util.Map)
288309 */
289310 public GitHubBuilder withAppInstallationToken (String appInstallationToken ) {
290- return withOAuthToken ( appInstallationToken , "" );
311+ return withAuthorizationProvider ( ImmutableAuthorizationProvider . fromAppInstallationToken ( appInstallationToken ) );
291312 }
292313
293314 /**
@@ -298,8 +319,7 @@ public GitHubBuilder withAppInstallationToken(String appInstallationToken) {
298319 * @return the git hub builder
299320 */
300321 public GitHubBuilder withJwtToken (String jwtToken ) {
301- this .jwtToken = jwtToken ;
302- return this ;
322+ return withAuthorizationProvider (ImmutableAuthorizationProvider .fromJwtToken (jwtToken ));
303323 }
304324
305325 /**
@@ -421,14 +441,11 @@ public GitHubBuilder withProxy(final Proxy p) {
421441 */
422442 public GitHub build () throws IOException {
423443 return new GitHub (endpoint ,
424- user ,
425- oauthToken ,
426- jwtToken ,
427- password ,
428444 connector ,
429445 rateLimitHandler ,
430446 abuseLimitHandler ,
431- rateLimitChecker );
447+ rateLimitChecker ,
448+ authorizationProvider );
432449 }
433450
434451 @ Override
0 commit comments