@@ -422,9 +422,8 @@ public <T> GitHubResponse<T> sendRequest(@Nonnull GitHubRequest.Builder<?> build
422422 public <T > GitHubResponse <T > sendRequest (GitHubRequest request , @ CheckForNull BodyHandler <T > handler )
423423 throws IOException {
424424 int retries = CONNECTION_ERROR_RETRIES ;
425-
425+ GitHubConnectorRequest connectorRequest = prepareConnectorRequest ( request );
426426 do {
427- GitHubConnectorRequest connectorRequest = prepareConnectorRequest (request );
428427 GitHubConnectorResponse connectorResponse = null ;
429428 try {
430429 logRequest (connectorRequest );
@@ -461,6 +460,7 @@ private void detectKnownErrors(GitHubConnectorResponse connectorResponse,
461460 boolean detectStatusCodeError ) throws IOException {
462461 detectOTPRequired (connectorResponse );
463462 detectInvalidCached404Response (connectorResponse , request );
463+ detectExpiredToken (connectorResponse , request );
464464 detectRedirect (connectorResponse );
465465 if (rateLimitHandler .isError (connectorResponse )) {
466466 rateLimitHandler .onError (connectorResponse );
@@ -474,6 +474,22 @@ private void detectKnownErrors(GitHubConnectorResponse connectorResponse,
474474 }
475475 }
476476
477+ private void detectExpiredToken (GitHubConnectorResponse connectorResponse , GitHubRequest request )
478+ throws IOException {
479+ if (connectorResponse .statusCode () != HTTP_UNAUTHORIZED ) {
480+ return ;
481+ }
482+ String originalAuthorization = connectorResponse .request ().header ("Authorization" );
483+ if (Objects .isNull (originalAuthorization ) || originalAuthorization .isEmpty ()) {
484+ return ;
485+ }
486+ GitHubConnectorRequest updatedRequest = prepareConnectorRequest (request );
487+ String updatedAuthorization = updatedRequest .header ("Authorization" );
488+ if (!originalAuthorization .equals (updatedAuthorization )) {
489+ throw new RetryRequestException (updatedRequest );
490+ }
491+ }
492+
477493 private void detectRedirect (GitHubConnectorResponse connectorResponse ) throws IOException {
478494 if (connectorResponse .statusCode () == HTTP_MOVED_PERM || connectorResponse .statusCode () == HTTP_MOVED_TEMP ) {
479495 // GitHubClient depends on GitHubConnector implementations to follow any redirects automatically
0 commit comments