Skip to content

Commit

Permalink
[JENKINS-72268] Missing permission due to desync with cache (#256)
Browse files Browse the repository at this point in the history
* [JENKINS-72268] Ensure "gh" is present

In case of impersonation the gh variable and the usersByTokenCache could be de-sync, leading to token not able to connect.

Could be related to JENKINS-72209 as well.

* Fix an exception when the authentication token is not exactly which is expected from the plugin
  • Loading branch information
Wadeck authored Nov 1, 2023
1 parent d9f0051 commit 0646c4a
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -504,6 +504,9 @@ private GHMyself loadMyself(@NonNull String token) throws IOException {
// Also stick into usersByIdCache (to have latest copy)
String username = ghMyself.getLogin();
usersByIdCache.put(username, new GithubUser(ghMyself));
} else {
// force creation of the gh variable, esp. in case of impersonation
getGitHub();
}
} catch (IOException e) {
LOGGER.log(Level.INFO, e.getMessage(), e);
Expand Down
11 changes: 8 additions & 3 deletions src/main/java/org/jenkinsci/plugins/GithubSecurityRealm.java
Original file line number Diff line number Diff line change
Expand Up @@ -753,10 +753,15 @@ public int hashCode() {
@Override
public GroupDetails loadGroupByGroupname(String groupName)
throws UsernameNotFoundException, DataAccessException {
GithubAuthenticationToken authToken = (GithubAuthenticationToken) SecurityContextHolder.getContext().getAuthentication();

if(authToken == null)
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
if (authentication == null) {
throw new UsernameNotFoundException("No known group: " + groupName);
}
if (!(authentication instanceof GithubAuthenticationToken)) {
throw new UserMayOrMayNotExistException("The received token is not a GitHub one");
}

GithubAuthenticationToken authToken = (GithubAuthenticationToken) authentication;

Check warning on line 764 in src/main/java/org/jenkinsci/plugins/GithubSecurityRealm.java

View check run for this annotation

ci.jenkins.io / Code Coverage

Not covered lines

Lines 756-764 are not covered by tests

try {
int idx = groupName.indexOf(GithubOAuthGroupDetails.ORG_TEAM_SEPARATOR);
Expand Down

0 comments on commit 0646c4a

Please sign in to comment.