[token auth] Fetch user for token if needed

There are some places in egit-github that assume that a user name is
available. With token auth, the user needs not be given. Make the
GitHubClient fetch it automatically if token auth is used.

This should work fine for PRs and for issues. For gists, still require
the user name be given in the task repository configuration. The code
assumes it can get the user name from there in several places where
there is no GitHubClient easily accessible.

Bug: 567557
Change-Id: I5baab8c21759711fcf46897530c81e7b38f023be
Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
diff --git a/org.eclipse.egit.github.core/src/org/eclipse/egit/github/core/client/GitHubClient.java b/org.eclipse.egit.github.core/src/org/eclipse/egit/github/core/client/GitHubClient.java
index 4ac386b..fbd5404 100644
--- a/org.eclipse.egit.github.core/src/org/eclipse/egit/github/core/client/GitHubClient.java
+++ b/org.eclipse.egit.github.core/src/org/eclipse/egit/github/core/client/GitHubClient.java
@@ -50,6 +50,8 @@
 import java.net.URL;
 
 import org.eclipse.egit.github.core.RequestError;
+import org.eclipse.egit.github.core.User;
+import org.eclipse.egit.github.core.service.UserService;
 import org.eclipse.egit.github.core.util.EncodingUtils;
 
 /**
@@ -159,6 +161,8 @@
 
 	private int remainingRequests = -1;
 
+	private boolean userSet;
+
 	/**
 	 * Create default client
 	 */
@@ -423,6 +427,18 @@
 	 * @return user or null if not authentication
 	 */
 	public String getUser() {
+		if (!userSet && user == null && credentials != null
+				&& credentials.startsWith(AUTH_TOKEN)) {
+			userSet = true;
+			try {
+				User authenticatedUser = new UserService(this).getUser();
+				if (authenticatedUser != null) {
+					user = authenticatedUser.getLogin();
+				}
+			} catch (IOException e) {
+				// Ignore here
+			}
+		}
 		return user;
 	}