diff --git a/forge/src/main/java/org/openjdk/skara/forge/github/GitHubHost.java b/forge/src/main/java/org/openjdk/skara/forge/github/GitHubHost.java index 56c1bc033..b3fafbf79 100644 --- a/forge/src/main/java/org/openjdk/skara/forge/github/GitHubHost.java +++ b/forge/src/main/java/org/openjdk/skara/forge/github/GitHubHost.java @@ -176,7 +176,10 @@ public HostedRepository repository(String name) { @Override public HostUser user(String username) { var details = request.get("users/" + URLEncoder.encode(username, StandardCharsets.UTF_8)).execute().asObject(); + return asHostUser(details); + } + private static HostUser asHostUser(JSONObject details) { // Always present var login = details.get("login").asString(); var id = details.get("id").asInt(); @@ -196,7 +199,11 @@ public HostUser currentUser() { var appName = appDetails.get("name").asString() + "[bot]"; currentUser = user(appName); } else if (pat != null) { - currentUser = user(pat.username()); + // Cannot always trust username in PAT, e.g. Git Credential Manager + // on Windows always return "PersonalAccessToken" as username. + // Query GitHub for the username instead. + var details = request.get("user").execute().asObject(); + currentUser = asHostUser(details); } else { throw new IllegalStateException("No credentials present"); }