Sort OAuth implementations into packages

Change-Id: I3ad158173adb11df6bf313df0dc1e08906d5f1d9
diff --git a/src/main/java/com/googlesource/gerrit/plugins/oauth/HttpModule.java b/src/main/java/com/googlesource/gerrit/plugins/oauth/HttpModule.java
index d64a26c..3cf1564 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/oauth/HttpModule.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/oauth/HttpModule.java
@@ -22,6 +22,22 @@
 import com.google.inject.Inject;
 import com.google.inject.ProvisionException;
 import com.google.inject.servlet.ServletModule;
+import com.googlesource.gerrit.plugins.oauth.airvantage.AirVantageOAuthService;
+import com.googlesource.gerrit.plugins.oauth.auth0.Auth0OAuthService;
+import com.googlesource.gerrit.plugins.oauth.authentik.AuthentikOAuthService;
+import com.googlesource.gerrit.plugins.oauth.azure.AzureActiveDirectoryService;
+import com.googlesource.gerrit.plugins.oauth.bitbucket.BitbucketOAuthService;
+import com.googlesource.gerrit.plugins.oauth.cas.CasOAuthService;
+import com.googlesource.gerrit.plugins.oauth.cognito.CognitoOAuthService;
+import com.googlesource.gerrit.plugins.oauth.dex.DexOAuthService;
+import com.googlesource.gerrit.plugins.oauth.facebook.FacebookOAuthService;
+import com.googlesource.gerrit.plugins.oauth.github.GitHubOAuthService;
+import com.googlesource.gerrit.plugins.oauth.gitlab.GitLabOAuthService;
+import com.googlesource.gerrit.plugins.oauth.google.GoogleOAuthService;
+import com.googlesource.gerrit.plugins.oauth.keycloak.KeycloakOAuthService;
+import com.googlesource.gerrit.plugins.oauth.lemon.LemonLDAPOAuthService;
+import com.googlesource.gerrit.plugins.oauth.phabricator.PhabricatorOAuthService;
+import com.googlesource.gerrit.plugins.oauth.tuleap.TuleapOAuthService;
 
 class HttpModule extends ServletModule {
 
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 a292b74..15986bd 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/oauth/InitOAuth.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/oauth/InitOAuth.java
@@ -22,23 +22,40 @@
 import com.google.gerrit.pgm.init.api.Section;
 import com.google.inject.Inject;
 import com.google.inject.ProvisionException;
+import com.googlesource.gerrit.plugins.oauth.airvantage.AirVantageOAuthService;
+import com.googlesource.gerrit.plugins.oauth.auth0.Auth0OAuthService;
+import com.googlesource.gerrit.plugins.oauth.authentik.AuthentikOAuthService;
+import com.googlesource.gerrit.plugins.oauth.azure.AzureActiveDirectoryService;
+import com.googlesource.gerrit.plugins.oauth.bitbucket.BitbucketOAuthService;
+import com.googlesource.gerrit.plugins.oauth.cas.CasOAuthService;
+import com.googlesource.gerrit.plugins.oauth.cognito.CognitoOAuthService;
+import com.googlesource.gerrit.plugins.oauth.dex.DexOAuthService;
+import com.googlesource.gerrit.plugins.oauth.facebook.FacebookOAuthService;
+import com.googlesource.gerrit.plugins.oauth.github.GitHubOAuthService;
+import com.googlesource.gerrit.plugins.oauth.gitlab.GitLabOAuthService;
+import com.googlesource.gerrit.plugins.oauth.google.GoogleOAuthService;
+import com.googlesource.gerrit.plugins.oauth.keycloak.KeycloakOAuthService;
+import com.googlesource.gerrit.plugins.oauth.lemon.LemonLDAPOAuthService;
+import com.googlesource.gerrit.plugins.oauth.phabricator.PhabricatorOAuthService;
+import com.googlesource.gerrit.plugins.oauth.tuleap.TuleapOAuthService;
 import java.net.URI;
 
-class InitOAuth implements InitStep {
+public class InitOAuth implements InitStep {
   static final String PLUGIN_SECTION = "plugin";
-  static final String CLIENT_ID = "client-id";
-  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 USE_PREFERRED_USERNAME = "use-preferred-username";
-  static final String ROOT_URL = "root-url";
-  static final String REALM = "realm";
-  static final String TENANT = "tenant";
-  static final String LINK_TO_EXISTING_OFFICE365_ACCOUNT = "link-to-existing-office365-accounts";
-  static final String LINK_TO_EXISTING_GERRIT_ACCOUNT = "link-to-existing-gerrit-accounts";
-  static final String SERVICE_NAME = "service-name";
+  public static final String CLIENT_ID = "client-id";
+  public static final String CLIENT_SECRET = "client-secret";
+  public static final String LINK_TO_EXISTING_OPENID_ACCOUNT = "link-to-existing-openid-accounts";
+  public static final String FIX_LEGACY_USER_ID = "fix-legacy-user-id";
+  public static final String DOMAIN = "domain";
+  public static final String USE_EMAIL_AS_USERNAME = "use-email-as-username";
+  public static final String USE_PREFERRED_USERNAME = "use-preferred-username";
+  public static final String ROOT_URL = "root-url";
+  public static final String REALM = "realm";
+  public static final String TENANT = "tenant";
+  public static final String LINK_TO_EXISTING_OFFICE365_ACCOUNT =
+      "link-to-existing-office365-accounts";
+  public static final String LINK_TO_EXISTING_GERRIT_ACCOUNT = "link-to-existing-gerrit-accounts";
+  public static final String SERVICE_NAME = "service-name";
   static String FIX_LEGACY_USER_ID_QUESTION = "Fix legacy user id, without oauth provider prefix?";
 
   private final ConsoleUI ui;
diff --git a/src/main/java/com/googlesource/gerrit/plugins/oauth/AirVantageApi.java b/src/main/java/com/googlesource/gerrit/plugins/oauth/airvantage/AirVantageApi.java
similarity index 95%
rename from src/main/java/com/googlesource/gerrit/plugins/oauth/AirVantageApi.java
rename to src/main/java/com/googlesource/gerrit/plugins/oauth/airvantage/AirVantageApi.java
index 0426162..7b895ed 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/oauth/AirVantageApi.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/oauth/airvantage/AirVantageApi.java
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package com.googlesource.gerrit.plugins.oauth;
+package com.googlesource.gerrit.plugins.oauth.airvantage;
 
 import com.github.scribejava.core.builder.api.DefaultApi20;
 import com.github.scribejava.core.oauth2.bearersignature.BearerSignature;
diff --git a/src/main/java/com/googlesource/gerrit/plugins/oauth/AirVantageOAuthService.java b/src/main/java/com/googlesource/gerrit/plugins/oauth/airvantage/AirVantageOAuthService.java
similarity index 96%
rename from src/main/java/com/googlesource/gerrit/plugins/oauth/AirVantageOAuthService.java
rename to src/main/java/com/googlesource/gerrit/plugins/oauth/airvantage/AirVantageOAuthService.java
index 2bd7b3e..0ee981d 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/oauth/AirVantageOAuthService.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/oauth/airvantage/AirVantageOAuthService.java
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package com.googlesource.gerrit.plugins.oauth;
+package com.googlesource.gerrit.plugins.oauth.airvantage;
 
 import static com.google.gerrit.json.OutputFormat.JSON;
 import static com.googlesource.gerrit.plugins.oauth.JsonUtil.isNull;
@@ -39,6 +39,7 @@
 import com.google.inject.Inject;
 import com.google.inject.Provider;
 import com.google.inject.Singleton;
+import com.googlesource.gerrit.plugins.oauth.InitOAuth;
 import java.io.IOException;
 import java.util.concurrent.ExecutionException;
 import org.slf4j.Logger;
@@ -46,7 +47,7 @@
 @Singleton
 public class AirVantageOAuthService implements OAuthServiceProvider {
   private static final Logger log = getLogger(AirVantageOAuthService.class);
-  static final String CONFIG_SUFFIX = "-airvantage-oauth";
+  public static final String CONFIG_SUFFIX = "-airvantage-oauth";
   private static final String AV_PROVIDER_PREFIX = "airvantage-oauth:";
   private static final String PROTECTED_RESOURCE_URL =
       "https://eu.airvantage.net/api/v1/users/current";
diff --git a/src/main/java/com/googlesource/gerrit/plugins/oauth/Auth0Api.java b/src/main/java/com/googlesource/gerrit/plugins/oauth/auth0/Auth0Api.java
similarity index 95%
rename from src/main/java/com/googlesource/gerrit/plugins/oauth/Auth0Api.java
rename to src/main/java/com/googlesource/gerrit/plugins/oauth/auth0/Auth0Api.java
index a6888b5..c1aa03e 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/oauth/Auth0Api.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/oauth/auth0/Auth0Api.java
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package com.googlesource.gerrit.plugins.oauth;
+package com.googlesource.gerrit.plugins.oauth.auth0;
 
 import com.github.scribejava.core.builder.api.DefaultApi20;
 
diff --git a/src/main/java/com/googlesource/gerrit/plugins/oauth/Auth0OAuthService.java b/src/main/java/com/googlesource/gerrit/plugins/oauth/auth0/Auth0OAuthService.java
similarity index 96%
rename from src/main/java/com/googlesource/gerrit/plugins/oauth/Auth0OAuthService.java
rename to src/main/java/com/googlesource/gerrit/plugins/oauth/auth0/Auth0OAuthService.java
index b2fc206..7133988 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/oauth/Auth0OAuthService.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/oauth/auth0/Auth0OAuthService.java
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package com.googlesource.gerrit.plugins.oauth;
+package com.googlesource.gerrit.plugins.oauth.auth0;
 
 import static com.google.gerrit.json.OutputFormat.JSON;
 import static com.googlesource.gerrit.plugins.oauth.JsonUtil.asString;
@@ -38,6 +38,7 @@
 import com.google.inject.Inject;
 import com.google.inject.Provider;
 import com.google.inject.ProvisionException;
+import com.googlesource.gerrit.plugins.oauth.InitOAuth;
 import java.io.IOException;
 import java.net.URI;
 import java.util.concurrent.ExecutionException;
@@ -48,7 +49,7 @@
 public class Auth0OAuthService implements OAuthServiceProvider {
   private static final Logger log = LoggerFactory.getLogger(Auth0OAuthService.class);
   private static final String AUTH0_PROVIDER_PREFIX = "auth0-oauth:";
-  static final String CONFIG_SUFFIX = "-auth0-oauth";
+  public static final String CONFIG_SUFFIX = "-auth0-oauth";
   private static final String PROTECTED_RESOURCE_URL = "%s/userinfo";
   private final OAuth20Service service;
   private final String serviceName;
diff --git a/src/main/java/com/googlesource/gerrit/plugins/oauth/AuthentikApi.java b/src/main/java/com/googlesource/gerrit/plugins/oauth/authentik/AuthentikApi.java
similarity index 95%
rename from src/main/java/com/googlesource/gerrit/plugins/oauth/AuthentikApi.java
rename to src/main/java/com/googlesource/gerrit/plugins/oauth/authentik/AuthentikApi.java
index 249f85f..241fd6c 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/oauth/AuthentikApi.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/oauth/authentik/AuthentikApi.java
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package com.googlesource.gerrit.plugins.oauth;
+package com.googlesource.gerrit.plugins.oauth.authentik;
 
 import com.github.scribejava.core.builder.api.DefaultApi20;
 
diff --git a/src/main/java/com/googlesource/gerrit/plugins/oauth/AuthentikOAuthService.java b/src/main/java/com/googlesource/gerrit/plugins/oauth/authentik/AuthentikOAuthService.java
similarity index 96%
rename from src/main/java/com/googlesource/gerrit/plugins/oauth/AuthentikOAuthService.java
rename to src/main/java/com/googlesource/gerrit/plugins/oauth/authentik/AuthentikOAuthService.java
index 7c4662a..f0e57a9 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/oauth/AuthentikOAuthService.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/oauth/authentik/AuthentikOAuthService.java
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package com.googlesource.gerrit.plugins.oauth;
+package com.googlesource.gerrit.plugins.oauth.authentik;
 
 import static com.google.gerrit.json.OutputFormat.JSON;
 import static com.googlesource.gerrit.plugins.oauth.JsonUtil.asString;
@@ -38,6 +38,7 @@
 import com.google.inject.Inject;
 import com.google.inject.Provider;
 import com.google.inject.ProvisionException;
+import com.googlesource.gerrit.plugins.oauth.InitOAuth;
 import java.io.IOException;
 import java.net.URI;
 import java.util.concurrent.ExecutionException;
@@ -48,7 +49,7 @@
 public class AuthentikOAuthService implements OAuthServiceProvider {
   private static final Logger log = LoggerFactory.getLogger(AuthentikOAuthService.class);
   private static final String AUTHENTIK_PROVIDER_PREFIX = "authentik-oauth:";
-  static final String CONFIG_SUFFIX = "-authentik-oauth";
+  public static final String CONFIG_SUFFIX = "-authentik-oauth";
   private static final String PROTECTED_RESOURCE_URL = "%s/application/o/userinfo/";
   private final OAuth20Service service;
   private final String serviceName;
diff --git a/src/main/java/com/googlesource/gerrit/plugins/oauth/AzureActiveDirectoryService.java b/src/main/java/com/googlesource/gerrit/plugins/oauth/azure/AzureActiveDirectoryService.java
similarity index 96%
rename from src/main/java/com/googlesource/gerrit/plugins/oauth/AzureActiveDirectoryService.java
rename to src/main/java/com/googlesource/gerrit/plugins/oauth/azure/AzureActiveDirectoryService.java
index c221170..5fa1f27 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/oauth/AzureActiveDirectoryService.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/oauth/azure/AzureActiveDirectoryService.java
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package com.googlesource.gerrit.plugins.oauth;
+package com.googlesource.gerrit.plugins.oauth.azure;
 
 import static com.google.gerrit.json.OutputFormat.JSON;
 import static com.googlesource.gerrit.plugins.oauth.JsonUtil.asString;
@@ -42,6 +42,7 @@
 import com.google.inject.Inject;
 import com.google.inject.Provider;
 import com.google.inject.Singleton;
+import com.googlesource.gerrit.plugins.oauth.InitOAuth;
 import java.io.IOException;
 import java.nio.charset.StandardCharsets;
 import java.util.Base64;
@@ -51,10 +52,10 @@
 import org.slf4j.LoggerFactory;
 
 @Singleton
-class AzureActiveDirectoryService implements OAuthServiceProvider {
+public class AzureActiveDirectoryService implements OAuthServiceProvider {
   private static final Logger log = LoggerFactory.getLogger(AzureActiveDirectoryService.class);
-  static final String CONFIG_SUFFIX_LEGACY = "-office365-oauth";
-  static final String CONFIG_SUFFIX = "-azure-oauth";
+  public static final String CONFIG_SUFFIX_LEGACY = "-office365-oauth";
+  public static final String CONFIG_SUFFIX = "-azure-oauth";
   private static final String AZURE_PROVIDER_PREFIX = "azure-oauth:";
   private static final String OFFICE365_PROVIDER_PREFIX = "office365-oauth:";
   private static final String PROTECTED_RESOURCE_URL = "https://graph.microsoft.com/v1.0/me";
diff --git a/src/main/java/com/googlesource/gerrit/plugins/oauth/BitbucketApi.java b/src/main/java/com/googlesource/gerrit/plugins/oauth/bitbucket/BitbucketApi.java
similarity index 95%
rename from src/main/java/com/googlesource/gerrit/plugins/oauth/BitbucketApi.java
rename to src/main/java/com/googlesource/gerrit/plugins/oauth/bitbucket/BitbucketApi.java
index 06e92bc..0d796e5 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/oauth/BitbucketApi.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/oauth/bitbucket/BitbucketApi.java
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package com.googlesource.gerrit.plugins.oauth;
+package com.googlesource.gerrit.plugins.oauth.bitbucket;
 
 import com.github.scribejava.core.builder.api.DefaultApi20;
 import com.github.scribejava.core.oauth2.bearersignature.BearerSignature;
diff --git a/src/main/java/com/googlesource/gerrit/plugins/oauth/BitbucketOAuthService.java b/src/main/java/com/googlesource/gerrit/plugins/oauth/bitbucket/BitbucketOAuthService.java
similarity index 96%
rename from src/main/java/com/googlesource/gerrit/plugins/oauth/BitbucketOAuthService.java
rename to src/main/java/com/googlesource/gerrit/plugins/oauth/bitbucket/BitbucketOAuthService.java
index 181236c..d766e33 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/oauth/BitbucketOAuthService.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/oauth/bitbucket/BitbucketOAuthService.java
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package com.googlesource.gerrit.plugins.oauth;
+package com.googlesource.gerrit.plugins.oauth.bitbucket;
 
 import static com.google.gerrit.json.OutputFormat.JSON;
 import static com.googlesource.gerrit.plugins.oauth.JsonUtil.isNull;
@@ -39,6 +39,7 @@
 import com.google.inject.Inject;
 import com.google.inject.Provider;
 import com.google.inject.Singleton;
+import com.googlesource.gerrit.plugins.oauth.InitOAuth;
 import java.io.IOException;
 import java.util.concurrent.ExecutionException;
 import org.slf4j.Logger;
@@ -46,7 +47,7 @@
 @Singleton
 public class BitbucketOAuthService implements OAuthServiceProvider {
   private static final Logger log = getLogger(BitbucketOAuthService.class);
-  static final String CONFIG_SUFFIX = "-bitbucket-oauth";
+  public static final String CONFIG_SUFFIX = "-bitbucket-oauth";
   private static final String BITBUCKET_PROVIDER_PREFIX = "bitbucket-oauth:";
   private static final String PROTECTED_RESOURCE_URL = "https://bitbucket.org/api/1.0/user/";
   private final boolean fixLegacyUserId;
diff --git a/src/main/java/com/googlesource/gerrit/plugins/oauth/CasApi.java b/src/main/java/com/googlesource/gerrit/plugins/oauth/cas/CasApi.java
similarity index 97%
rename from src/main/java/com/googlesource/gerrit/plugins/oauth/CasApi.java
rename to src/main/java/com/googlesource/gerrit/plugins/oauth/cas/CasApi.java
index 6c06b24..3cadd2d 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/oauth/CasApi.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/oauth/cas/CasApi.java
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package com.googlesource.gerrit.plugins.oauth;
+package com.googlesource.gerrit.plugins.oauth.cas;
 
 import com.github.scribejava.core.builder.api.DefaultApi20;
 import com.github.scribejava.core.extractors.OAuth2AccessTokenExtractor;
diff --git a/src/main/java/com/googlesource/gerrit/plugins/oauth/CasOAuthService.java b/src/main/java/com/googlesource/gerrit/plugins/oauth/cas/CasOAuthService.java
similarity index 96%
rename from src/main/java/com/googlesource/gerrit/plugins/oauth/CasOAuthService.java
rename to src/main/java/com/googlesource/gerrit/plugins/oauth/cas/CasOAuthService.java
index f47e096..1be982f 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/oauth/CasOAuthService.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/oauth/cas/CasOAuthService.java
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package com.googlesource.gerrit.plugins.oauth;
+package com.googlesource.gerrit.plugins.oauth.cas;
 
 import static com.google.common.base.Strings.nullToEmpty;
 import static com.google.gerrit.json.OutputFormat.JSON;
@@ -40,6 +40,7 @@
 import com.google.inject.Provider;
 import com.google.inject.ProvisionException;
 import com.google.inject.Singleton;
+import com.googlesource.gerrit.plugins.oauth.InitOAuth;
 import java.io.IOException;
 import java.net.URI;
 import java.util.concurrent.ExecutionException;
@@ -48,9 +49,9 @@
 import org.slf4j.LoggerFactory;
 
 @Singleton
-class CasOAuthService implements OAuthServiceProvider {
+public class CasOAuthService implements OAuthServiceProvider {
   private static final Logger log = LoggerFactory.getLogger(CasOAuthService.class);
-  static final String CONFIG_SUFFIX = "-cas-oauth";
+  public static final String CONFIG_SUFFIX = "-cas-oauth";
   private static final String CAS_PROVIDER_PREFIX = "cas-oauth:";
   private static final String PROTECTED_RESOURCE_URL = "%s/oauth2.0/profile";
   private static final String USE_JSON_EXTRACTOR = "use-json-extractor";
diff --git a/src/main/java/com/googlesource/gerrit/plugins/oauth/CognitoApi.java b/src/main/java/com/googlesource/gerrit/plugins/oauth/cognito/CognitoApi.java
similarity index 95%
rename from src/main/java/com/googlesource/gerrit/plugins/oauth/CognitoApi.java
rename to src/main/java/com/googlesource/gerrit/plugins/oauth/cognito/CognitoApi.java
index ca8da2d..53ec5ff 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/oauth/CognitoApi.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/oauth/cognito/CognitoApi.java
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package com.googlesource.gerrit.plugins.oauth;
+package com.googlesource.gerrit.plugins.oauth.cognito;
 
 import com.github.scribejava.core.builder.api.DefaultApi20;
 
diff --git a/src/main/java/com/googlesource/gerrit/plugins/oauth/CognitoOAuthService.java b/src/main/java/com/googlesource/gerrit/plugins/oauth/cognito/CognitoOAuthService.java
similarity index 95%
rename from src/main/java/com/googlesource/gerrit/plugins/oauth/CognitoOAuthService.java
rename to src/main/java/com/googlesource/gerrit/plugins/oauth/cognito/CognitoOAuthService.java
index bcd2126..77cb974 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/oauth/CognitoOAuthService.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/oauth/cognito/CognitoOAuthService.java
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package com.googlesource.gerrit.plugins.oauth;
+package com.googlesource.gerrit.plugins.oauth.cognito;
 
 import static com.google.gerrit.json.OutputFormat.JSON;
 import static com.googlesource.gerrit.plugins.oauth.JsonUtil.asString;
@@ -38,6 +38,8 @@
 import com.google.inject.Inject;
 import com.google.inject.Provider;
 import com.google.inject.ProvisionException;
+import com.googlesource.gerrit.plugins.oauth.InitOAuth;
+import com.googlesource.gerrit.plugins.oauth.github.GitHubOAuthService;
 import java.io.IOException;
 import java.net.URI;
 import java.util.concurrent.ExecutionException;
@@ -47,7 +49,7 @@
 
 public class CognitoOAuthService implements OAuthServiceProvider {
   private static final Logger log = LoggerFactory.getLogger(GitHubOAuthService.class);
-  static final String CONFIG_SUFFIX = "-cognito-oauth";
+  public static final String CONFIG_SUFFIX = "-cognito-oauth";
   private static final String COGNITO_PROVIDER_PREFIX = "cognito-oauth:";
   private static final String PROTECTED_RESOURCE_URL = "%s/oauth2/userInfo";
   private final String rootUrl;
diff --git a/src/main/java/com/googlesource/gerrit/plugins/oauth/DexApi.java b/src/main/java/com/googlesource/gerrit/plugins/oauth/dex/DexApi.java
similarity index 96%
rename from src/main/java/com/googlesource/gerrit/plugins/oauth/DexApi.java
rename to src/main/java/com/googlesource/gerrit/plugins/oauth/dex/DexApi.java
index 1f2510e..8829f1b 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/oauth/DexApi.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/oauth/dex/DexApi.java
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package com.googlesource.gerrit.plugins.oauth;
+package com.googlesource.gerrit.plugins.oauth.dex;
 
 import com.github.scribejava.core.builder.api.DefaultApi20;
 import com.github.scribejava.core.oauth2.bearersignature.BearerSignature;
diff --git a/src/main/java/com/googlesource/gerrit/plugins/oauth/DexOAuthService.java b/src/main/java/com/googlesource/gerrit/plugins/oauth/dex/DexOAuthService.java
similarity index 97%
rename from src/main/java/com/googlesource/gerrit/plugins/oauth/DexOAuthService.java
rename to src/main/java/com/googlesource/gerrit/plugins/oauth/dex/DexOAuthService.java
index abf3689..03c8a07 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/oauth/DexOAuthService.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/oauth/dex/DexOAuthService.java
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package com.googlesource.gerrit.plugins.oauth;
+package com.googlesource.gerrit.plugins.oauth.dex;
 
 import static com.google.gerrit.json.OutputFormat.JSON;
 import static com.googlesource.gerrit.plugins.oauth.JsonUtil.isNull;
@@ -36,6 +36,7 @@
 import com.google.inject.Provider;
 import com.google.inject.ProvisionException;
 import com.google.inject.Singleton;
+import com.googlesource.gerrit.plugins.oauth.InitOAuth;
 import java.io.IOException;
 import java.io.UnsupportedEncodingException;
 import java.net.URI;
@@ -49,7 +50,7 @@
 public class DexOAuthService implements OAuthServiceProvider {
   private static final Logger log = LoggerFactory.getLogger(DexOAuthService.class);
 
-  static final String CONFIG_SUFFIX = "-dex-oauth";
+  public static final String CONFIG_SUFFIX = "-dex-oauth";
   private static final String DEX_PROVIDER_PREFIX = "dex-oauth:";
   private final OAuth20Service service;
   private final String rootUrl;
diff --git a/src/main/java/com/googlesource/gerrit/plugins/oauth/Facebook2Api.java b/src/main/java/com/googlesource/gerrit/plugins/oauth/facebook/Facebook2Api.java
similarity index 95%
rename from src/main/java/com/googlesource/gerrit/plugins/oauth/Facebook2Api.java
rename to src/main/java/com/googlesource/gerrit/plugins/oauth/facebook/Facebook2Api.java
index 96f4636..82032b9 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/oauth/Facebook2Api.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/oauth/facebook/Facebook2Api.java
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package com.googlesource.gerrit.plugins.oauth;
+package com.googlesource.gerrit.plugins.oauth.facebook;
 
 import com.github.scribejava.core.builder.api.DefaultApi20;
 import com.github.scribejava.core.oauth2.clientauthentication.ClientAuthentication;
diff --git a/src/main/java/com/googlesource/gerrit/plugins/oauth/FacebookOAuthService.java b/src/main/java/com/googlesource/gerrit/plugins/oauth/facebook/FacebookOAuthService.java
similarity index 95%
rename from src/main/java/com/googlesource/gerrit/plugins/oauth/FacebookOAuthService.java
rename to src/main/java/com/googlesource/gerrit/plugins/oauth/facebook/FacebookOAuthService.java
index c2a2419..dfb56d6 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/oauth/FacebookOAuthService.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/oauth/facebook/FacebookOAuthService.java
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package com.googlesource.gerrit.plugins.oauth;
+package com.googlesource.gerrit.plugins.oauth.facebook;
 
 import static com.google.gerrit.json.OutputFormat.JSON;
 import static com.googlesource.gerrit.plugins.oauth.JsonUtil.asString;
@@ -38,6 +38,7 @@
 import com.google.inject.Inject;
 import com.google.inject.Provider;
 import com.google.inject.Singleton;
+import com.googlesource.gerrit.plugins.oauth.InitOAuth;
 import java.io.IOException;
 import java.util.concurrent.ExecutionException;
 import javax.servlet.http.HttpServletResponse;
@@ -45,9 +46,9 @@
 import org.slf4j.LoggerFactory;
 
 @Singleton
-class FacebookOAuthService implements OAuthServiceProvider {
+public class FacebookOAuthService implements OAuthServiceProvider {
   private static final Logger log = LoggerFactory.getLogger(FacebookOAuthService.class);
-  static final String CONFIG_SUFFIX = "-facebook-oauth";
+  public static final String CONFIG_SUFFIX = "-facebook-oauth";
   private static final String PROTECTED_RESOURCE_URL = "https://graph.facebook.com/me";
 
   private static final String FACEBOOK_PROVIDER_PREFIX = "facebook-oauth:";
diff --git a/src/main/java/com/googlesource/gerrit/plugins/oauth/GitHub2Api.java b/src/main/java/com/googlesource/gerrit/plugins/oauth/github/GitHub2Api.java
similarity index 96%
rename from src/main/java/com/googlesource/gerrit/plugins/oauth/GitHub2Api.java
rename to src/main/java/com/googlesource/gerrit/plugins/oauth/github/GitHub2Api.java
index 477eadf..16a6f9f 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/oauth/GitHub2Api.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/oauth/github/GitHub2Api.java
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package com.googlesource.gerrit.plugins.oauth;
+package com.googlesource.gerrit.plugins.oauth.github;
 
 import com.github.scribejava.core.builder.api.DefaultApi20;
 import com.github.scribejava.core.extractors.OAuth2AccessTokenExtractor;
diff --git a/src/main/java/com/googlesource/gerrit/plugins/oauth/GitHubOAuthService.java b/src/main/java/com/googlesource/gerrit/plugins/oauth/github/GitHubOAuthService.java
similarity index 95%
rename from src/main/java/com/googlesource/gerrit/plugins/oauth/GitHubOAuthService.java
rename to src/main/java/com/googlesource/gerrit/plugins/oauth/github/GitHubOAuthService.java
index e62b3f5..2ccf49b 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/oauth/GitHubOAuthService.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/oauth/github/GitHubOAuthService.java
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package com.googlesource.gerrit.plugins.oauth;
+package com.googlesource.gerrit.plugins.oauth.github;
 
 import static com.google.gerrit.json.OutputFormat.JSON;
 import static com.googlesource.gerrit.plugins.oauth.JsonUtil.asString;
@@ -38,6 +38,7 @@
 import com.google.inject.Inject;
 import com.google.inject.Provider;
 import com.google.inject.Singleton;
+import com.googlesource.gerrit.plugins.oauth.InitOAuth;
 import java.io.IOException;
 import java.util.concurrent.ExecutionException;
 import javax.servlet.http.HttpServletResponse;
@@ -45,9 +46,9 @@
 import org.slf4j.LoggerFactory;
 
 @Singleton
-class GitHubOAuthService implements OAuthServiceProvider {
+public class GitHubOAuthService implements OAuthServiceProvider {
   private static final Logger log = LoggerFactory.getLogger(GitHubOAuthService.class);
-  static final String CONFIG_SUFFIX = "-github-oauth";
+  public static final String CONFIG_SUFFIX = "-github-oauth";
   private static final String GITHUB_PROVIDER_PREFIX = "github-oauth:";
   private static final String GITHUB_API_ENDPOINT_URL = "https://api.github.com/";
   private static final String GHE_API_ENDPOINT_URL = "%sapi/v3/";
diff --git a/src/main/java/com/googlesource/gerrit/plugins/oauth/GitLabApi.java b/src/main/java/com/googlesource/gerrit/plugins/oauth/gitlab/GitLabApi.java
similarity index 96%
rename from src/main/java/com/googlesource/gerrit/plugins/oauth/GitLabApi.java
rename to src/main/java/com/googlesource/gerrit/plugins/oauth/gitlab/GitLabApi.java
index ca88d05..d62244a 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/oauth/GitLabApi.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/oauth/gitlab/GitLabApi.java
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package com.googlesource.gerrit.plugins.oauth;
+package com.googlesource.gerrit.plugins.oauth.gitlab;
 
 import com.github.scribejava.core.builder.api.DefaultApi20;
 import com.github.scribejava.core.oauth2.clientauthentication.ClientAuthentication;
diff --git a/src/main/java/com/googlesource/gerrit/plugins/oauth/GitLabOAuthService.java b/src/main/java/com/googlesource/gerrit/plugins/oauth/gitlab/GitLabOAuthService.java
similarity index 96%
rename from src/main/java/com/googlesource/gerrit/plugins/oauth/GitLabOAuthService.java
rename to src/main/java/com/googlesource/gerrit/plugins/oauth/gitlab/GitLabOAuthService.java
index 767b551..6174019 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/oauth/GitLabOAuthService.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/oauth/gitlab/GitLabOAuthService.java
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package com.googlesource.gerrit.plugins.oauth;
+package com.googlesource.gerrit.plugins.oauth.gitlab;
 
 import static com.google.gerrit.json.OutputFormat.JSON;
 import static com.googlesource.gerrit.plugins.oauth.JsonUtil.asString;
@@ -41,6 +41,7 @@
 import com.google.inject.Provider;
 import com.google.inject.ProvisionException;
 import com.google.inject.Singleton;
+import com.googlesource.gerrit.plugins.oauth.InitOAuth;
 import java.io.IOException;
 import java.net.URI;
 import java.util.concurrent.ExecutionException;
@@ -49,7 +50,7 @@
 @Singleton
 public class GitLabOAuthService implements OAuthServiceProvider {
   private static final Logger log = getLogger(GitLabOAuthService.class);
-  static final String CONFIG_SUFFIX = "-gitlab-oauth";
+  public static final String CONFIG_SUFFIX = "-gitlab-oauth";
   private static final String PROTECTED_RESOURCE_URL = "%s/api/v3/user";
   private static final String GITLAB_PROVIDER_PREFIX = "gitlab-oauth:";
   private final OAuth20Service service;
diff --git a/src/main/java/com/googlesource/gerrit/plugins/oauth/Google2Api.java b/src/main/java/com/googlesource/gerrit/plugins/oauth/google/Google2Api.java
similarity index 94%
rename from src/main/java/com/googlesource/gerrit/plugins/oauth/Google2Api.java
rename to src/main/java/com/googlesource/gerrit/plugins/oauth/google/Google2Api.java
index 4f2eed2..4ea6672 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/oauth/Google2Api.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/oauth/google/Google2Api.java
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package com.googlesource.gerrit.plugins.oauth;
+package com.googlesource.gerrit.plugins.oauth.google;
 
 import com.github.scribejava.core.builder.api.DefaultApi20;
 
diff --git a/src/main/java/com/googlesource/gerrit/plugins/oauth/GoogleOAuthService.java b/src/main/java/com/googlesource/gerrit/plugins/oauth/google/GoogleOAuthService.java
similarity index 97%
rename from src/main/java/com/googlesource/gerrit/plugins/oauth/GoogleOAuthService.java
rename to src/main/java/com/googlesource/gerrit/plugins/oauth/google/GoogleOAuthService.java
index 98ce6f7..01851cb 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/oauth/GoogleOAuthService.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/oauth/google/GoogleOAuthService.java
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package com.googlesource.gerrit.plugins.oauth;
+package com.googlesource.gerrit.plugins.oauth.google;
 
 import static com.google.gerrit.json.OutputFormat.JSON;
 import static com.googlesource.gerrit.plugins.oauth.JsonUtil.asString;
@@ -40,6 +40,7 @@
 import com.google.inject.Inject;
 import com.google.inject.Provider;
 import com.google.inject.Singleton;
+import com.googlesource.gerrit.plugins.oauth.InitOAuth;
 import java.io.IOException;
 import java.io.UnsupportedEncodingException;
 import java.net.URLEncoder;
@@ -53,9 +54,9 @@
 import org.slf4j.LoggerFactory;
 
 @Singleton
-class GoogleOAuthService implements OAuthServiceProvider {
+public class GoogleOAuthService implements OAuthServiceProvider {
   private static final Logger log = LoggerFactory.getLogger(GoogleOAuthService.class);
-  static final String CONFIG_SUFFIX = "-google-oauth";
+  public 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/oauth2/v2/userinfo";
diff --git a/src/main/java/com/googlesource/gerrit/plugins/oauth/KeycloakApi.java b/src/main/java/com/googlesource/gerrit/plugins/oauth/keycloak/KeycloakApi.java
similarity index 96%
rename from src/main/java/com/googlesource/gerrit/plugins/oauth/KeycloakApi.java
rename to src/main/java/com/googlesource/gerrit/plugins/oauth/keycloak/KeycloakApi.java
index c533f29..0bbb6ca 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/oauth/KeycloakApi.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/oauth/keycloak/KeycloakApi.java
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package com.googlesource.gerrit.plugins.oauth;
+package com.googlesource.gerrit.plugins.oauth.keycloak;
 
 import com.github.scribejava.core.builder.api.DefaultApi20;
 import com.github.scribejava.core.oauth2.bearersignature.BearerSignature;
diff --git a/src/main/java/com/googlesource/gerrit/plugins/oauth/KeycloakOAuthService.java b/src/main/java/com/googlesource/gerrit/plugins/oauth/keycloak/KeycloakOAuthService.java
similarity index 96%
rename from src/main/java/com/googlesource/gerrit/plugins/oauth/KeycloakOAuthService.java
rename to src/main/java/com/googlesource/gerrit/plugins/oauth/keycloak/KeycloakOAuthService.java
index fba25a8..352a1b6 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/oauth/KeycloakOAuthService.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/oauth/keycloak/KeycloakOAuthService.java
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package com.googlesource.gerrit.plugins.oauth;
+package com.googlesource.gerrit.plugins.oauth.keycloak;
 
 import static com.google.gerrit.json.OutputFormat.JSON;
 import static com.googlesource.gerrit.plugins.oauth.JsonUtil.isNull;
@@ -35,6 +35,7 @@
 import com.google.inject.Inject;
 import com.google.inject.Provider;
 import com.google.inject.ProvisionException;
+import com.googlesource.gerrit.plugins.oauth.InitOAuth;
 import java.io.IOException;
 import java.io.UnsupportedEncodingException;
 import java.net.URI;
@@ -48,7 +49,7 @@
 
   private static final Logger log = LoggerFactory.getLogger(KeycloakOAuthService.class);
 
-  static final String CONFIG_SUFFIX = "-keycloak-oauth";
+  public static final String CONFIG_SUFFIX = "-keycloak-oauth";
   private static final String KEYCLOAK_PROVIDER_PREFIX = "keycloak-oauth:";
   private final OAuth20Service service;
   private final String serviceName;
diff --git a/src/main/java/com/googlesource/gerrit/plugins/oauth/LemonLDAPApi.java b/src/main/java/com/googlesource/gerrit/plugins/oauth/lemon/LemonLDAPApi.java
similarity index 96%
rename from src/main/java/com/googlesource/gerrit/plugins/oauth/LemonLDAPApi.java
rename to src/main/java/com/googlesource/gerrit/plugins/oauth/lemon/LemonLDAPApi.java
index 55ebf38..bbd700d 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/oauth/LemonLDAPApi.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/oauth/lemon/LemonLDAPApi.java
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package com.googlesource.gerrit.plugins.oauth;
+package com.googlesource.gerrit.plugins.oauth.lemon;
 
 import com.github.scribejava.core.builder.api.DefaultApi20;
 import com.github.scribejava.core.oauth2.clientauthentication.ClientAuthentication;
diff --git a/src/main/java/com/googlesource/gerrit/plugins/oauth/LemonLDAPOAuthService.java b/src/main/java/com/googlesource/gerrit/plugins/oauth/lemon/LemonLDAPOAuthService.java
similarity index 96%
rename from src/main/java/com/googlesource/gerrit/plugins/oauth/LemonLDAPOAuthService.java
rename to src/main/java/com/googlesource/gerrit/plugins/oauth/lemon/LemonLDAPOAuthService.java
index ce19d97..cdaa090 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/oauth/LemonLDAPOAuthService.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/oauth/lemon/LemonLDAPOAuthService.java
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package com.googlesource.gerrit.plugins.oauth;
+package com.googlesource.gerrit.plugins.oauth.lemon;
 
 import static com.google.gerrit.json.OutputFormat.JSON;
 import static com.googlesource.gerrit.plugins.oauth.JsonUtil.asString;
@@ -39,6 +39,7 @@
 import com.google.inject.Inject;
 import com.google.inject.Provider;
 import com.google.inject.Singleton;
+import com.googlesource.gerrit.plugins.oauth.InitOAuth;
 import java.io.IOException;
 import java.util.concurrent.ExecutionException;
 import javax.servlet.http.HttpServletResponse;
@@ -47,7 +48,7 @@
 @Singleton
 public class LemonLDAPOAuthService implements OAuthServiceProvider {
   private static final Logger log = getLogger(LemonLDAPOAuthService.class);
-  static final String CONFIG_SUFFIX = "-lemonldap-oauth";
+  public static final String CONFIG_SUFFIX = "-lemonldap-oauth";
   private static final String PROTECTED_RESOURCE_URL = "%s/oauth2/userinfo";
   private static final String LEMONLDAP_PROVIDER_PREFIX = "llng-oauth:";
   private final OAuth20Service service;
diff --git a/src/main/java/com/googlesource/gerrit/plugins/oauth/PhabricatorApi.java b/src/main/java/com/googlesource/gerrit/plugins/oauth/phabricator/PhabricatorApi.java
similarity index 95%
rename from src/main/java/com/googlesource/gerrit/plugins/oauth/PhabricatorApi.java
rename to src/main/java/com/googlesource/gerrit/plugins/oauth/phabricator/PhabricatorApi.java
index a2a52ff..d46360f 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/oauth/PhabricatorApi.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/oauth/phabricator/PhabricatorApi.java
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package com.googlesource.gerrit.plugins.oauth;
+package com.googlesource.gerrit.plugins.oauth.phabricator;
 
 import com.github.scribejava.core.builder.api.DefaultApi20;
 import com.github.scribejava.core.oauth2.bearersignature.BearerSignature;
diff --git a/src/main/java/com/googlesource/gerrit/plugins/oauth/PhabricatorOAuthService.java b/src/main/java/com/googlesource/gerrit/plugins/oauth/phabricator/PhabricatorOAuthService.java
similarity index 95%
rename from src/main/java/com/googlesource/gerrit/plugins/oauth/PhabricatorOAuthService.java
rename to src/main/java/com/googlesource/gerrit/plugins/oauth/phabricator/PhabricatorOAuthService.java
index 017fa5b..05cd721 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/oauth/PhabricatorOAuthService.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/oauth/phabricator/PhabricatorOAuthService.java
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package com.googlesource.gerrit.plugins.oauth;
+package com.googlesource.gerrit.plugins.oauth.phabricator;
 
 import static com.google.gerrit.json.OutputFormat.JSON;
 import static com.googlesource.gerrit.plugins.oauth.JsonUtil.asString;
@@ -39,6 +39,7 @@
 import com.google.inject.Provider;
 import com.google.inject.ProvisionException;
 import com.google.inject.Singleton;
+import com.googlesource.gerrit.plugins.oauth.InitOAuth;
 import java.io.IOException;
 import java.net.URI;
 import java.util.concurrent.ExecutionException;
@@ -47,9 +48,9 @@
 import org.slf4j.LoggerFactory;
 
 @Singleton
-class PhabricatorOAuthService implements OAuthServiceProvider {
+public class PhabricatorOAuthService implements OAuthServiceProvider {
   private static final Logger log = LoggerFactory.getLogger(PhabricatorOAuthService.class);
-  static final String CONFIG_SUFFIX = "-phabricator-oauth";
+  public static final String CONFIG_SUFFIX = "-phabricator-oauth";
   private static final String PHABRICATOR_PROVIDER_PREFIX = "phabricator-oauth:";
   private static final String PROTECTED_RESOURCE_URL = "%s/api/user.whoami";
   private final String rootUrl;
diff --git a/src/main/java/com/googlesource/gerrit/plugins/oauth/TuleapApi.java b/src/main/java/com/googlesource/gerrit/plugins/oauth/tuleap/TuleapApi.java
similarity index 95%
rename from src/main/java/com/googlesource/gerrit/plugins/oauth/TuleapApi.java
rename to src/main/java/com/googlesource/gerrit/plugins/oauth/tuleap/TuleapApi.java
index 60f9e03..4bbab56 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/oauth/TuleapApi.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/oauth/tuleap/TuleapApi.java
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package com.googlesource.gerrit.plugins.oauth;
+package com.googlesource.gerrit.plugins.oauth.tuleap;
 
 import com.github.scribejava.core.builder.api.DefaultApi20;
 
diff --git a/src/main/java/com/googlesource/gerrit/plugins/oauth/TuleapOAuthService.java b/src/main/java/com/googlesource/gerrit/plugins/oauth/tuleap/TuleapOAuthService.java
similarity index 96%
rename from src/main/java/com/googlesource/gerrit/plugins/oauth/TuleapOAuthService.java
rename to src/main/java/com/googlesource/gerrit/plugins/oauth/tuleap/TuleapOAuthService.java
index e10d36b..c7423d8 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/oauth/TuleapOAuthService.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/oauth/tuleap/TuleapOAuthService.java
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package com.googlesource.gerrit.plugins.oauth;
+package com.googlesource.gerrit.plugins.oauth.tuleap;
 
 import static com.google.gerrit.json.OutputFormat.JSON;
 import static com.googlesource.gerrit.plugins.oauth.JsonUtil.asString;
@@ -38,6 +38,7 @@
 import com.google.inject.Inject;
 import com.google.inject.Provider;
 import com.google.inject.ProvisionException;
+import com.googlesource.gerrit.plugins.oauth.InitOAuth;
 import java.io.IOException;
 import java.net.URI;
 import java.util.concurrent.ExecutionException;
@@ -48,7 +49,7 @@
 public class TuleapOAuthService implements OAuthServiceProvider {
   private static final Logger log = LoggerFactory.getLogger(TuleapOAuthService.class);
   private static final String TULEAP_PROVIDER_PREFIX = "tuleap-oauth:";
-  static final String CONFIG_SUFFIX = "-tuleap-oauth";
+  public static final String CONFIG_SUFFIX = "-tuleap-oauth";
   private static final String PROTECTED_RESOURCE_URL = "%s/oauth2/userinfo";
   private final OAuth20Service service;
   private final String serviceName;
diff --git a/src/test/java/com/googlesource/gerrit/plugins/oauth/AirVantageApiTest.java b/src/test/java/com/googlesource/gerrit/plugins/oauth/airvantage/AirVantageApiTest.java
similarity index 94%
rename from src/test/java/com/googlesource/gerrit/plugins/oauth/AirVantageApiTest.java
rename to src/test/java/com/googlesource/gerrit/plugins/oauth/airvantage/AirVantageApiTest.java
index 9f2f3b3..a0627cc 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/oauth/AirVantageApiTest.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/oauth/airvantage/AirVantageApiTest.java
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package com.googlesource.gerrit.plugins.oauth;
+package com.googlesource.gerrit.plugins.oauth.airvantage;
 
 import static com.google.common.truth.Truth.assertThat;
 
diff --git a/src/test/java/com/googlesource/gerrit/plugins/oauth/Auth0ApiTest.java b/src/test/java/com/googlesource/gerrit/plugins/oauth/auth0/Auth0ApiTest.java
similarity index 95%
rename from src/test/java/com/googlesource/gerrit/plugins/oauth/Auth0ApiTest.java
rename to src/test/java/com/googlesource/gerrit/plugins/oauth/auth0/Auth0ApiTest.java
index 8e7eebc..7395b6d 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/oauth/Auth0ApiTest.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/oauth/auth0/Auth0ApiTest.java
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package com.googlesource.gerrit.plugins.oauth;
+package com.googlesource.gerrit.plugins.oauth.auth0;
 
 import static com.google.common.truth.Truth.assertThat;
 
diff --git a/src/test/java/com/googlesource/gerrit/plugins/oauth/MicrosoftAzureActiveDirectory20ApiTest.java b/src/test/java/com/googlesource/gerrit/plugins/oauth/azure/MicrosoftAzureActiveDirectory20ApiTest.java
similarity index 95%
rename from src/test/java/com/googlesource/gerrit/plugins/oauth/MicrosoftAzureActiveDirectory20ApiTest.java
rename to src/test/java/com/googlesource/gerrit/plugins/oauth/azure/MicrosoftAzureActiveDirectory20ApiTest.java
index a98348e..d96d6ec 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/oauth/MicrosoftAzureActiveDirectory20ApiTest.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/oauth/azure/MicrosoftAzureActiveDirectory20ApiTest.java
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package com.googlesource.gerrit.plugins.oauth;
+package com.googlesource.gerrit.plugins.oauth.azure;
 
 import static com.google.common.truth.Truth.assertThat;
 
diff --git a/src/test/java/com/googlesource/gerrit/plugins/oauth/BitbucketApiTest.java b/src/test/java/com/googlesource/gerrit/plugins/oauth/bitbucket/BitbucketApiTest.java
similarity index 94%
rename from src/test/java/com/googlesource/gerrit/plugins/oauth/BitbucketApiTest.java
rename to src/test/java/com/googlesource/gerrit/plugins/oauth/bitbucket/BitbucketApiTest.java
index 44eb198..ca5ac1c 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/oauth/BitbucketApiTest.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/oauth/bitbucket/BitbucketApiTest.java
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package com.googlesource.gerrit.plugins.oauth;
+package com.googlesource.gerrit.plugins.oauth.bitbucket;
 
 import static com.google.common.truth.Truth.assertThat;
 
diff --git a/src/test/java/com/googlesource/gerrit/plugins/oauth/CasApiTest.java b/src/test/java/com/googlesource/gerrit/plugins/oauth/cas/CasApiTest.java
similarity index 95%
rename from src/test/java/com/googlesource/gerrit/plugins/oauth/CasApiTest.java
rename to src/test/java/com/googlesource/gerrit/plugins/oauth/cas/CasApiTest.java
index f85c316..a82cdc4 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/oauth/CasApiTest.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/oauth/cas/CasApiTest.java
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package com.googlesource.gerrit.plugins.oauth;
+package com.googlesource.gerrit.plugins.oauth.cas;
 
 import static com.google.common.truth.Truth.assertThat;
 
diff --git a/src/test/java/com/googlesource/gerrit/plugins/oauth/CognitoApiTest.java b/src/test/java/com/googlesource/gerrit/plugins/oauth/cognito/CognitoApiTest.java
similarity index 95%
rename from src/test/java/com/googlesource/gerrit/plugins/oauth/CognitoApiTest.java
rename to src/test/java/com/googlesource/gerrit/plugins/oauth/cognito/CognitoApiTest.java
index d987621..3ac1fb8 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/oauth/CognitoApiTest.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/oauth/cognito/CognitoApiTest.java
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package com.googlesource.gerrit.plugins.oauth;
+package com.googlesource.gerrit.plugins.oauth.cognito;
 
 import static com.google.common.truth.Truth.assertThat;
 
diff --git a/src/test/java/com/googlesource/gerrit/plugins/oauth/CognitoOAuthServiceTest.java b/src/test/java/com/googlesource/gerrit/plugins/oauth/cognito/CognitoOAuthServiceTest.java
similarity index 98%
rename from src/test/java/com/googlesource/gerrit/plugins/oauth/CognitoOAuthServiceTest.java
rename to src/test/java/com/googlesource/gerrit/plugins/oauth/cognito/CognitoOAuthServiceTest.java
index 0c99b49b..d2b6edf 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/oauth/CognitoOAuthServiceTest.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/oauth/cognito/CognitoOAuthServiceTest.java
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package com.googlesource.gerrit.plugins.oauth;
+package com.googlesource.gerrit.plugins.oauth.cognito;
 
 import static com.google.common.truth.Truth.assertThat;
 import static org.mockito.ArgumentMatchers.any;
@@ -27,6 +27,7 @@
 import com.google.gerrit.server.config.PluginConfig;
 import com.google.gerrit.server.config.PluginConfigFactory;
 import com.google.inject.Provider;
+import com.googlesource.gerrit.plugins.oauth.InitOAuth;
 import java.lang.reflect.Field;
 import javax.servlet.http.HttpServletResponse;
 import org.junit.Before;
diff --git a/src/test/java/com/googlesource/gerrit/plugins/oauth/DexApiTest.java b/src/test/java/com/googlesource/gerrit/plugins/oauth/dex/DexApiTest.java
similarity index 95%
rename from src/test/java/com/googlesource/gerrit/plugins/oauth/DexApiTest.java
rename to src/test/java/com/googlesource/gerrit/plugins/oauth/dex/DexApiTest.java
index 160e20c..7cfae51 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/oauth/DexApiTest.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/oauth/dex/DexApiTest.java
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package com.googlesource.gerrit.plugins.oauth;
+package com.googlesource.gerrit.plugins.oauth.dex;
 
 import static com.google.common.truth.Truth.assertThat;
 
diff --git a/src/test/java/com/googlesource/gerrit/plugins/oauth/Facebook2ApiTest.java b/src/test/java/com/googlesource/gerrit/plugins/oauth/facebook/Facebook2ApiTest.java
similarity index 94%
rename from src/test/java/com/googlesource/gerrit/plugins/oauth/Facebook2ApiTest.java
rename to src/test/java/com/googlesource/gerrit/plugins/oauth/facebook/Facebook2ApiTest.java
index b8afae5..cc47fa8 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/oauth/Facebook2ApiTest.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/oauth/facebook/Facebook2ApiTest.java
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package com.googlesource.gerrit.plugins.oauth;
+package com.googlesource.gerrit.plugins.oauth.facebook;
 
 import static com.google.common.truth.Truth.assertThat;
 
diff --git a/src/test/java/com/googlesource/gerrit/plugins/oauth/GitHub2ApiTest.java b/src/test/java/com/googlesource/gerrit/plugins/oauth/github/GitHub2ApiTest.java
similarity index 95%
rename from src/test/java/com/googlesource/gerrit/plugins/oauth/GitHub2ApiTest.java
rename to src/test/java/com/googlesource/gerrit/plugins/oauth/github/GitHub2ApiTest.java
index 6b29c59..9dbfe7f 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/oauth/GitHub2ApiTest.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/oauth/github/GitHub2ApiTest.java
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package com.googlesource.gerrit.plugins.oauth;
+package com.googlesource.gerrit.plugins.oauth.github;
 
 import static com.google.common.truth.Truth.assertThat;
 
diff --git a/src/test/java/com/googlesource/gerrit/plugins/oauth/GithubApiUrlTest.java b/src/test/java/com/googlesource/gerrit/plugins/oauth/github/GithubApiUrlTest.java
similarity index 97%
rename from src/test/java/com/googlesource/gerrit/plugins/oauth/GithubApiUrlTest.java
rename to src/test/java/com/googlesource/gerrit/plugins/oauth/github/GithubApiUrlTest.java
index 11b460d..142e27c 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/oauth/GithubApiUrlTest.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/oauth/github/GithubApiUrlTest.java
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package com.googlesource.gerrit.plugins.oauth;
+package com.googlesource.gerrit.plugins.oauth.github;
 
 import static com.google.common.truth.Truth.assertThat;
 import static org.mockito.Mockito.when;
@@ -23,6 +23,7 @@
 import com.google.gerrit.server.config.PluginConfig;
 import com.google.gerrit.server.config.PluginConfigFactory;
 import com.google.inject.Provider;
+import com.googlesource.gerrit.plugins.oauth.InitOAuth;
 import java.net.URLEncoder;
 import java.nio.charset.StandardCharsets;
 import org.eclipse.jgit.lib.Config;
diff --git a/src/test/java/com/googlesource/gerrit/plugins/oauth/GitLabApiTest.java b/src/test/java/com/googlesource/gerrit/plugins/oauth/gitlab/GitLabApiTest.java
similarity index 94%
rename from src/test/java/com/googlesource/gerrit/plugins/oauth/GitLabApiTest.java
rename to src/test/java/com/googlesource/gerrit/plugins/oauth/gitlab/GitLabApiTest.java
index 86b1c63..8bbb4f1 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/oauth/GitLabApiTest.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/oauth/gitlab/GitLabApiTest.java
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package com.googlesource.gerrit.plugins.oauth;
+package com.googlesource.gerrit.plugins.oauth.gitlab;
 
 import static com.google.common.truth.Truth.assertThat;
 
diff --git a/src/test/java/com/googlesource/gerrit/plugins/oauth/Google2ApiTest.java b/src/test/java/com/googlesource/gerrit/plugins/oauth/google/Google2ApiTest.java
similarity index 94%
rename from src/test/java/com/googlesource/gerrit/plugins/oauth/Google2ApiTest.java
rename to src/test/java/com/googlesource/gerrit/plugins/oauth/google/Google2ApiTest.java
index 72ddaf3..a4fbb0e 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/oauth/Google2ApiTest.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/oauth/google/Google2ApiTest.java
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package com.googlesource.gerrit.plugins.oauth;
+package com.googlesource.gerrit.plugins.oauth.google;
 
 import static com.google.common.truth.Truth.assertThat;
 
diff --git a/src/test/java/com/googlesource/gerrit/plugins/oauth/KeycloakApiTest.java b/src/test/java/com/googlesource/gerrit/plugins/oauth/keycloak/KeycloakApiTest.java
similarity index 94%
rename from src/test/java/com/googlesource/gerrit/plugins/oauth/KeycloakApiTest.java
rename to src/test/java/com/googlesource/gerrit/plugins/oauth/keycloak/KeycloakApiTest.java
index cb0806d..63f6998 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/oauth/KeycloakApiTest.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/oauth/keycloak/KeycloakApiTest.java
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package com.googlesource.gerrit.plugins.oauth;
+package com.googlesource.gerrit.plugins.oauth.keycloak;
 
 import static com.google.common.truth.Truth.assertThat;
 
diff --git a/src/test/java/com/googlesource/gerrit/plugins/oauth/PhabricatorApiTest.java b/src/test/java/com/googlesource/gerrit/plugins/oauth/phabricator/PhabricatorApiTest.java
similarity index 94%
rename from src/test/java/com/googlesource/gerrit/plugins/oauth/PhabricatorApiTest.java
rename to src/test/java/com/googlesource/gerrit/plugins/oauth/phabricator/PhabricatorApiTest.java
index 9a9646c..ed12823 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/oauth/PhabricatorApiTest.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/oauth/phabricator/PhabricatorApiTest.java
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package com.googlesource.gerrit.plugins.oauth;
+package com.googlesource.gerrit.plugins.oauth.phabricator;
 
 import static com.google.common.truth.Truth.assertThat;
 
diff --git a/src/test/java/com/googlesource/gerrit/plugins/oauth/TuleapApiTest.java b/src/test/java/com/googlesource/gerrit/plugins/oauth/tuleap/TuleapApiTest.java
similarity index 95%
rename from src/test/java/com/googlesource/gerrit/plugins/oauth/TuleapApiTest.java
rename to src/test/java/com/googlesource/gerrit/plugins/oauth/tuleap/TuleapApiTest.java
index 792e27d..7faf84a 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/oauth/TuleapApiTest.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/oauth/tuleap/TuleapApiTest.java
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package com.googlesource.gerrit.plugins.oauth;
+package com.googlesource.gerrit.plugins.oauth.tuleap;
 
 import static com.google.common.truth.Truth.assertThat;