Prefix user id with oauth provider name
To migrate the legacy user id, fixLegacyUserId property must be set to
true for all providers.
Bug: Issue https://github.com/davido/gerrit-oauth-provider/issues/82
Change-Id: I36833b90280b158172423180358faf90ac2b6718
diff --git a/src/main/java/com/googlesource/gerrit/plugins/oauth/BitbucketOAuthService.java b/src/main/java/com/googlesource/gerrit/plugins/oauth/BitbucketOAuthService.java
index d2240fc..3dbd81b 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/oauth/BitbucketOAuthService.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/oauth/BitbucketOAuthService.java
@@ -47,8 +47,10 @@
public class BitbucketOAuthService implements OAuthServiceProvider {
private static final Logger log = getLogger(BitbucketOAuthService.class);
static final String CONFIG_SUFFIX = "-bitbucket-oauth";
+ private final static String BITBUCKET_PROVIDER_PREFIX = "bitbucket-oauth:";
private static final String PROTECTED_RESOURCE_URL =
"https://bitbucket.org/api/1.0/user/";
+ private final boolean fixLegacyUserId;
private final OAuthService service;
@Inject
@@ -60,7 +62,7 @@
String canonicalWebUrl =
CharMatcher.is('/').trimTrailingFrom(urlProvider.get()) + "/";
-
+ fixLegacyUserId = cfg.getBoolean(InitOAuth.FIX_LEGACY_USER_ID, false);
service = new ServiceBuilder().provider(BitbucketApi.class)
.apiKey(cfg.getString(InitOAuth.CLIENT_ID))
.apiSecret(cfg.getString(InitOAuth.CLIENT_SECRET))
@@ -93,10 +95,14 @@
String username = usernameElement.getAsString();
JsonElement displayName = jsonObject.get("display_name");
- return new OAuthUserInfo(username, username, null,
- displayName == null || displayName.isJsonNull() ? null
+ return new OAuthUserInfo(
+ BITBUCKET_PROVIDER_PREFIX + username,
+ username,
+ null,
+ displayName == null || displayName.isJsonNull()
+ ? null
: displayName.getAsString(),
- null);
+ fixLegacyUserId ? username : null);
}
throw new IOException(
diff --git a/src/main/java/com/googlesource/gerrit/plugins/oauth/CasOAuthService.java b/src/main/java/com/googlesource/gerrit/plugins/oauth/CasOAuthService.java
index 04b9635..f8c7b5b 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/oauth/CasOAuthService.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/oauth/CasOAuthService.java
@@ -50,10 +50,12 @@
private static final Logger log =
LoggerFactory.getLogger(CasOAuthService.class);
static final String CONFIG_SUFFIX = "-cas-oauth";
+ private final static String CAS_PROVIDER_PREFIX = "cas-oauth:";
private static final String PROTECTED_RESOURCE_URL =
"%s/oauth2.0/profile";
private final String rootUrl;
+ private final boolean fixLegacyUserId;
private final OAuthService service;
@Inject
@@ -65,6 +67,7 @@
rootUrl = cfg.getString(InitOAuth.ROOT_URL);
String canonicalWebUrl = CharMatcher.is('/').trimTrailingFrom(
urlProvider.get()) + "/";
+ fixLegacyUserId = cfg.getBoolean(InitOAuth.FIX_LEGACY_USER_ID, false);
service = new ServiceBuilder()
.provider(new CasApi(rootUrl))
.apiKey(cfg.getString(InitOAuth.CLIENT_ID))
@@ -133,7 +136,11 @@
login = property;
}
- return new OAuthUserInfo(id.getAsString(), login, email, name, null);
+ return new OAuthUserInfo(CAS_PROVIDER_PREFIX + id.getAsString(),
+ login,
+ email,
+ name,
+ fixLegacyUserId ? id.getAsString() : null);
}
private String getStringElement(JsonObject o, String name) {
diff --git a/src/main/java/com/googlesource/gerrit/plugins/oauth/GitHubOAuthService.java b/src/main/java/com/googlesource/gerrit/plugins/oauth/GitHubOAuthService.java
index d66cd7f..bb135a5 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/oauth/GitHubOAuthService.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/oauth/GitHubOAuthService.java
@@ -49,10 +49,12 @@
private static final Logger log =
LoggerFactory.getLogger(GitHubOAuthService.class);
static final String CONFIG_SUFFIX = "-github-oauth";
+ private final static String GITHUB_PROVIDER_PREFIX = "github-oauth:";
private static final String PROTECTED_RESOURCE_URL =
"https://api.github.com/user";
private static final String SCOPE = "user:email";
+ private final boolean fixLegacyUserId;
private final OAuthService service;
@Inject
@@ -63,6 +65,7 @@
pluginName + CONFIG_SUFFIX);
String canonicalWebUrl = CharMatcher.is('/').trimTrailingFrom(
urlProvider.get()) + "/";
+ fixLegacyUserId = cfg.getBoolean(InitOAuth.FIX_LEGACY_USER_ID, false);
service = new ServiceBuilder()
.provider(GitHub2Api.class)
.apiKey(cfg.getString(InitOAuth.CLIENT_ID))
@@ -99,11 +102,12 @@
JsonElement email = jsonObject.get("email");
JsonElement name = jsonObject.get("name");
JsonElement login = jsonObject.get("login");
- return new OAuthUserInfo(id.getAsString(),
+ return new OAuthUserInfo(
+ GITHUB_PROVIDER_PREFIX + id.getAsString(),
login == null || login.isJsonNull() ? null : login.getAsString(),
email == null || email.isJsonNull() ? null : email.getAsString(),
name == null || name.isJsonNull() ? null : name.getAsString(),
- null);
+ fixLegacyUserId ? id.getAsString() : null);
}
throw new IOException(String.format(
diff --git a/src/main/java/com/googlesource/gerrit/plugins/oauth/GoogleOAuthService.java b/src/main/java/com/googlesource/gerrit/plugins/oauth/GoogleOAuthService.java
index 18547f7..6e2219f 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/oauth/GoogleOAuthService.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/oauth/GoogleOAuthService.java
@@ -55,6 +55,7 @@
private static final Logger log =
LoggerFactory.getLogger(GoogleOAuthService.class);
static final String CONFIG_SUFFIX = "-google-oauth";
+ private static final String GOOGLE_PROVIDER_PREFIX = "google-oauth:";
private static final String PROTECTED_RESOURCE_URL =
"https://www.googleapis.com/userinfo/v2/me";
//"https://www.googleapis.com/plus/v1/people/me/openIdConnect";
@@ -63,6 +64,7 @@
private final String canonicalWebUrl;
private final String domain;
private final boolean useEmailAsUsername;
+ private final boolean fixLegacyUserId;
@Inject
GoogleOAuthService(PluginConfigFactory cfgFactory,
@@ -76,6 +78,7 @@
log.warn(String.format("The support for: %s is disconinued",
InitOAuth.LINK_TO_EXISTING_OPENID_ACCOUNT));
}
+ fixLegacyUserId = cfg.getBoolean(InitOAuth.FIX_LEGACY_USER_ID, false);
this.domain = cfg.getString(InitOAuth.DOMAIN);
this.useEmailAsUsername = cfg.getBoolean(
InitOAuth.USE_EMAIL_AS_USERNAME, false);
@@ -137,11 +140,12 @@
if (useEmailAsUsername && !email.isJsonNull()) {
login = email.getAsString().split("@")[0];
}
- return new OAuthUserInfo(id.getAsString() /*externalId*/,
+ return new OAuthUserInfo(
+ GOOGLE_PROVIDER_PREFIX + id.getAsString() /*externalId*/,
login /*username*/,
email == null || email.isJsonNull() ? null : email.getAsString() /*email*/,
name == null || name.isJsonNull() ? null : name.getAsString() /*displayName*/,
- null /*claimedIdentity*/);
+ fixLegacyUserId ? id.getAsString() : null /*claimedIdentity*/);
}
throw new IOException(String.format(
diff --git a/src/main/java/com/googlesource/gerrit/plugins/oauth/InitOAuth.java b/src/main/java/com/googlesource/gerrit/plugins/oauth/InitOAuth.java
index add1da1..ac5e33c 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/oauth/InitOAuth.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/oauth/InitOAuth.java
@@ -25,10 +25,14 @@
static final String CLIENT_SECRET = "client-secret";
static final String LINK_TO_EXISTING_OPENID_ACCOUNT =
"link-to-existing-openid-accounts";
+ static final String FIX_LEGACY_USER_ID =
+ "fix-legacy-user-id";
static final String DOMAIN = "domain";
static final String USE_EMAIL_AS_USERNAME =
"use-email-as-username";
static final String ROOT_URL = "root-url";
+ static String FIX_LEGACY_USER_ID_QUESTION =
+ "Fix legacy user id, without oauth provider prefix?";
private final ConsoleUI ui;
private final Section googleOAuthProviderSection;
@@ -59,18 +63,24 @@
true, "Use Google OAuth provider for Gerrit login ?");
if (configureGoogleOAuthProvider) {
configureOAuth(googleOAuthProviderSection);
+ googleOAuthProviderSection.string(FIX_LEGACY_USER_ID_QUESTION,
+ FIX_LEGACY_USER_ID, "false");
}
boolean configueGitHubOAuthProvider = ui.yesno(
true, "Use GitHub OAuth provider for Gerrit login ?");
if (configueGitHubOAuthProvider) {
configureOAuth(githubOAuthProviderSection);
+ githubOAuthProviderSection.string(FIX_LEGACY_USER_ID_QUESTION,
+ FIX_LEGACY_USER_ID, "false");
}
boolean configureBitbucketOAuthProvider = ui.yesno(
true, "Use Bitbucket OAuth provider for Gerrit login ?");
if (configureBitbucketOAuthProvider) {
configureOAuth(bitbucketOAuthProviderSection);
+ bitbucketOAuthProviderSection.string(FIX_LEGACY_USER_ID_QUESTION,
+ FIX_LEGACY_USER_ID, "false");
}
boolean configureCasOAuthProvider = ui.yesno(
@@ -78,6 +88,8 @@
if (configureCasOAuthProvider) {
casOAuthProviderSection.string("CAS Root URL", ROOT_URL, null);
configureOAuth(casOAuthProviderSection);
+ casOAuthProviderSection.string(FIX_LEGACY_USER_ID_QUESTION,
+ FIX_LEGACY_USER_ID, "false");
}
}