123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512 |
- // Copyright (c) 2012 The Chromium Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style license that can be
- // found in the LICENSE file.
- #include "google_apis/gaia/gaia_urls.h"
- #include "base/command_line.h"
- #include "base/logging.h"
- #include "base/strings/strcat.h"
- #include "base/strings/string_piece.h"
- #include "base/strings/stringprintf.h"
- #include "build/build_config.h"
- #include "build/chromeos_buildflags.h"
- #include "google_apis/gaia/gaia_config.h"
- #include "google_apis/gaia/gaia_switches.h"
- #include "google_apis/google_api_keys.h"
- #include "url/url_canon.h"
- #include "url/url_constants.h"
- #define CONCAT_HIDDEN(a, b) a##b
- #define CONCAT(a, b) CONCAT_HIDDEN(a, b)
- #define URL_KEY_AND_PTR(name) #name, &CONCAT(name, _)
- namespace {
- // Gaia service constants
- const char kDefaultGoogleUrl[] = "http://google.com";
- const char kDefaultGaiaUrl[] = "https://accounts.google.com";
- const char kDefaultGoogleApisBaseUrl[] = "https://www.googleapis.com";
- const char kDefaultOAuthAccountManagerBaseUrl[] =
- "https://oauthaccountmanager.googleapis.com";
- const char kDefaultAccountCapabilitiesBaseUrl[] =
- "https://accountcapabilities-pa.googleapis.com";
- // API calls from accounts.google.com
- const char kClientLoginUrlSuffix[] = "ClientLogin";
- const char kServiceLoginUrlSuffix[] = "ServiceLogin";
- const char kEmbeddedSetupChromeOsUrlSuffixV2[] = "embedded/setup/v2/chromeos";
- const char kEmbeddedReauthChromeOsUrlSuffix[] = "embedded/reauth/chromeos";
- const char kEmbeddedSetupChromeOsKidSignupUrlSuffix[] =
- "embedded/setup/kidsignup/chromeos";
- const char kEmbeddedSetupChromeOsKidSigninUrlSuffix[] =
- "embedded/setup/kidsignin/chromeos";
- const char kEmbeddedSetupWindowsUrlSuffix[] = "embedded/setup/windows";
- // Parameter "ssp=1" is used to skip showing the password bubble when a user
- // signs in to Chrome. Note that Gaia will pass this client specified parameter
- // to all URLs that are loaded as part of thi sign-in flow.
- const char kSigninChromeSyncDice[] = "signin/chrome/sync?ssp=1";
- #if BUILDFLAG(IS_ANDROID)
- const char kSigninChromeSyncKeysRetrievalUrl[] = "encryption/unlock/android";
- #elif BUILDFLAG(IS_IOS)
- const char kSigninChromeSyncKeysRetrievalUrl[] = "encryption/unlock/ios";
- #elif BUILDFLAG(IS_CHROMEOS_ASH)
- const char kSigninChromeSyncKeysRetrievalUrl[] = "encryption/unlock/chromeos";
- #else
- const char kSigninChromeSyncKeysRetrievalUrl[] = "encryption/unlock/desktop";
- #endif
- // Parameter "kdi" is used to distinguish recoverability management from
- // retrieval. The value is a base64-encoded serialized protobuf, referred to
- // internally as ClientDecryptableKeyDataInputs.
- const char kSigninChromeSyncKeysRecoverabilityUrlSuffix[] =
- "?kdi=CAIaDgoKY2hyb21lc3luYxAB";
- const char kServiceLoginAuthUrlSuffix[] = "ServiceLoginAuth";
- const char kServiceLogoutUrlSuffix[] = "Logout";
- const char kContinueUrlForLogoutSuffix[] = "chrome/blank.html";
- const char kTokenAuthUrlSuffix[] = "TokenAuth";
- const char kMergeSessionUrlSuffix[] = "MergeSession";
- const char kOAuthGetAccessTokenUrlSuffix[] = "OAuthGetAccessToken";
- const char kOAuthWrapBridgeUrlSuffix[] = "OAuthWrapBridge";
- const char kOAuth1LoginUrlSuffix[] = "OAuthLogin";
- const char kOAuthMultiloginSuffix[] = "oauth/multilogin";
- const char kOAuthRevokeTokenUrlSuffix[] = "AuthSubRevokeToken";
- const char kListAccountsSuffix[] = "ListAccounts?json=standard";
- const char kEmbeddedSigninSuffix[] = "embedded/setup/chrome/usermenu";
- const char kAddAccountSuffix[] = "AddSession";
- const char kReauthSuffix[] = "embedded/xreauth/chrome";
- const char kGetCheckConnectionInfoSuffix[] = "GetCheckConnectionInfo";
- // API calls from accounts.google.com (LSO)
- const char kGetOAuthTokenUrlSuffix[] = "o/oauth/GetOAuthToken/";
- const char kOAuth2AuthUrlSuffix[] = "o/oauth2/auth";
- const char kOAuth2RevokeUrlSuffix[] = "o/oauth2/revoke";
- // API calls from www.googleapis.com
- const char kOAuth2TokenUrlSuffix[] = "oauth2/v4/token";
- const char kOAuth2TokenInfoUrlSuffix[] = "oauth2/v2/tokeninfo";
- const char kOAuthUserInfoUrlSuffix[] = "oauth2/v1/userinfo";
- const char kReAuthApiUrlSuffix[] = "reauth/v1beta/users/";
- // API calls from oauthaccountmanager.googleapis.com
- const char kOAuth2IssueTokenUrlSuffix[] = "v1/issuetoken";
- // API calls from accountcapabilities-pa.googleapis.com
- const char kAccountCapabilitiesBatchGetUrlSuffix[] =
- "v1/accountcapabilities:batchGet";
- void GetSwitchValueWithDefault(base::StringPiece switch_value,
- base::StringPiece default_value,
- std::string* output_value) {
- base::CommandLine* command_line = base::CommandLine::ForCurrentProcess();
- if (command_line->HasSwitch(switch_value)) {
- *output_value = command_line->GetSwitchValueASCII(switch_value);
- } else {
- *output_value = std::string(default_value);
- }
- }
- GURL GetURLSwitchValueWithDefault(base::StringPiece switch_value,
- base::StringPiece default_value) {
- std::string string_value;
- GetSwitchValueWithDefault(switch_value, default_value, &string_value);
- const GURL result(string_value);
- if (result.is_valid()) {
- return result;
- }
- LOG(ERROR) << "Ignoring invalid URL \"" << string_value << "\" for switch \""
- << switch_value << "\"";
- return GURL(default_value);
- }
- url::Origin GetOriginSwitchValueWithDefault(base::StringPiece switch_value,
- base::StringPiece default_value) {
- std::string string_value;
- GetSwitchValueWithDefault(switch_value, default_value, &string_value);
- const url::Origin result = url::Origin::Create(GURL(string_value));
- if (result.GetURL().SchemeIsHTTPOrHTTPS() &&
- result.GetURL() == GURL(string_value)) {
- return result;
- }
- LOG(ERROR) << "Ignoring invalid origin \"" << string_value
- << "\" for switch \"" << switch_value << "\"";
- return url::Origin::Create(GURL(default_value));
- }
- void SetDefaultURLIfInvalid(GURL* url_to_set,
- base::StringPiece switch_value,
- base::StringPiece default_value) {
- if (!url_to_set->is_valid()) {
- *url_to_set = GetURLSwitchValueWithDefault(switch_value, default_value);
- }
- }
- void SetDefaultOriginIfOpaqueOrInvalidScheme(url::Origin* origin_to_set,
- base::StringPiece switch_value,
- base::StringPiece default_value) {
- if (origin_to_set->opaque() ||
- !origin_to_set->GetURL().SchemeIsHTTPOrHTTPS()) {
- *origin_to_set =
- GetOriginSwitchValueWithDefault(switch_value, default_value);
- }
- }
- void ResolveURLIfInvalid(GURL* url_to_set,
- const GURL& base_url,
- base::StringPiece suffix) {
- if (!url_to_set->is_valid()) {
- *url_to_set = base_url.Resolve(suffix);
- }
- }
- } // namespace
- GaiaUrls* GaiaUrls::GetInstance() {
- return base::Singleton<GaiaUrls>::get();
- }
- GaiaUrls::GaiaUrls() {
- // Initialize all urls from a config first.
- InitializeFromConfig();
- // Set a default value for all urls not set by the config.
- InitializeDefault();
- }
- GaiaUrls::~GaiaUrls() = default;
- const GURL& GaiaUrls::google_url() const {
- return google_url_;
- }
- const GURL& GaiaUrls::secure_google_url() const {
- return secure_google_url_;
- }
- const url::Origin& GaiaUrls::gaia_origin() const {
- return gaia_origin_;
- }
- GURL GaiaUrls::gaia_url() const {
- return gaia_origin_.GetURL();
- }
- const GURL& GaiaUrls::client_login_url() const {
- return client_login_url_;
- }
- const GURL& GaiaUrls::service_login_url() const {
- return service_login_url_;
- }
- const GURL& GaiaUrls::embedded_setup_chromeos_url(unsigned version) const {
- DCHECK_EQ(version, 2U);
- return embedded_setup_chromeos_url_v2_;
- }
- const GURL& GaiaUrls::embedded_setup_chromeos_kid_signup_url() const {
- return embedded_setup_chromeos_kid_signup_url_;
- }
- const GURL& GaiaUrls::embedded_setup_chromeos_kid_signin_url() const {
- return embedded_setup_chromeos_kid_signin_url_;
- }
- const GURL& GaiaUrls::embedded_setup_windows_url() const {
- return embedded_setup_windows_url_;
- }
- const GURL& GaiaUrls::embedded_reauth_chromeos_url() const {
- return embedded_reauth_chromeos_url_;
- }
- const GURL& GaiaUrls::signin_chrome_sync_dice() const {
- return signin_chrome_sync_dice_;
- }
- const GURL& GaiaUrls::signin_chrome_sync_keys_retrieval_url() const {
- return signin_chrome_sync_keys_retrieval_url_;
- }
- const GURL& GaiaUrls::signin_chrome_sync_keys_recoverability_degraded_url()
- const {
- return signin_chrome_sync_keys_recoverability_degraded_url_;
- }
- const GURL& GaiaUrls::service_login_auth_url() const {
- return service_login_auth_url_;
- }
- const GURL& GaiaUrls::service_logout_url() const {
- return service_logout_url_;
- }
- const GURL& GaiaUrls::token_auth_url() const {
- return token_auth_url_;
- }
- const GURL& GaiaUrls::merge_session_url() const {
- return merge_session_url_;
- }
- const GURL& GaiaUrls::get_oauth_token_url() const {
- return get_oauth_token_url_;
- }
- const GURL& GaiaUrls::oauth_multilogin_url() const {
- return oauth_multilogin_url_;
- }
- const GURL& GaiaUrls::oauth_get_access_token_url() const {
- return oauth_get_access_token_url_;
- }
- const GURL& GaiaUrls::oauth_wrap_bridge_url() const {
- return oauth_wrap_bridge_url_;
- }
- const GURL& GaiaUrls::oauth_user_info_url() const {
- return oauth_user_info_url_;
- }
- const GURL& GaiaUrls::oauth_revoke_token_url() const {
- return oauth_revoke_token_url_;
- }
- const GURL& GaiaUrls::oauth1_login_url() const {
- return oauth1_login_url_;
- }
- const GURL& GaiaUrls::embedded_signin_url() const {
- return embedded_signin_url_;
- }
- const GURL& GaiaUrls::add_account_url() const {
- return add_account_url_;
- }
- const GURL& GaiaUrls::reauth_url() const {
- return reauth_url_;
- }
- const GURL& GaiaUrls::account_capabilities_url() const {
- return account_capabilities_url_;
- }
- const std::string& GaiaUrls::oauth2_chrome_client_id() const {
- return oauth2_chrome_client_id_;
- }
- const std::string& GaiaUrls::oauth2_chrome_client_secret() const {
- return oauth2_chrome_client_secret_;
- }
- const GURL& GaiaUrls::oauth2_auth_url() const {
- return oauth2_auth_url_;
- }
- const GURL& GaiaUrls::oauth2_token_url() const {
- return oauth2_token_url_;
- }
- const GURL& GaiaUrls::oauth2_issue_token_url() const {
- return oauth2_issue_token_url_;
- }
- const GURL& GaiaUrls::oauth2_token_info_url() const {
- return oauth2_token_info_url_;
- }
- const GURL& GaiaUrls::oauth2_revoke_url() const {
- return oauth2_revoke_url_;
- }
- const GURL& GaiaUrls::reauth_api_url() const {
- return reauth_api_url_;
- }
- const GURL& GaiaUrls::google_apis_origin_url() const {
- return google_apis_origin_url_;
- }
- GURL GaiaUrls::ListAccountsURLWithSource(const std::string& source) {
- if (source.empty()) {
- return list_accounts_url_;
- } else {
- std::string query = list_accounts_url_.query();
- return list_accounts_url_.Resolve(base::StringPrintf(
- "?gpsia=1&source=%s&%s", source.c_str(), query.c_str()));
- }
- }
- GURL GaiaUrls::LogOutURLWithSource(const std::string& source) {
- std::string params =
- source.empty()
- ? base::StringPrintf("?continue=%s",
- continue_url_for_logout_.spec().c_str())
- : base::StringPrintf("?source=%s&continue=%s", source.c_str(),
- continue_url_for_logout_.spec().c_str());
- return service_logout_url_.Resolve(params);
- }
- GURL GaiaUrls::GetCheckConnectionInfoURLWithSource(const std::string& source) {
- return source.empty() ? get_check_connection_info_url_
- : get_check_connection_info_url_.Resolve(
- base::StringPrintf("?source=%s", source.c_str()));
- }
- void GaiaUrls::InitializeDefault() {
- SetDefaultURLIfInvalid(&google_url_, switches::kGoogleUrl, kDefaultGoogleUrl);
- SetDefaultOriginIfOpaqueOrInvalidScheme(&gaia_origin_, switches::kGaiaUrl,
- kDefaultGaiaUrl);
- SetDefaultURLIfInvalid(&lso_origin_url_, switches::kLsoUrl, kDefaultGaiaUrl);
- SetDefaultURLIfInvalid(&google_apis_origin_url_, switches::kGoogleApisUrl,
- kDefaultGoogleApisBaseUrl);
- SetDefaultURLIfInvalid(&oauth_account_manager_origin_url_,
- switches::kOAuthAccountManagerUrl,
- kDefaultOAuthAccountManagerBaseUrl);
- if (!account_capabilities_origin_url_.is_valid()) {
- account_capabilities_origin_url_ = GURL(kDefaultAccountCapabilitiesBaseUrl);
- }
- if (!secure_google_url_.is_valid()) {
- GURL::Replacements scheme_replacement;
- scheme_replacement.SetSchemeStr(url::kHttpsScheme);
- secure_google_url_ = google_url_.ReplaceComponents(scheme_replacement);
- }
- oauth2_chrome_client_id_ =
- google_apis::GetOAuth2ClientID(google_apis::CLIENT_MAIN);
- oauth2_chrome_client_secret_ =
- google_apis::GetOAuth2ClientSecret(google_apis::CLIENT_MAIN);
- CHECK(!gaia_origin_.opaque());
- const GURL gaia_url = gaia_origin_.GetURL();
- CHECK(gaia_url.SchemeIsHTTPOrHTTPS());
- // URLs from |gaia_origin_|.
- ResolveURLIfInvalid(&client_login_url_, gaia_url, kClientLoginUrlSuffix);
- ResolveURLIfInvalid(&service_login_url_, gaia_url, kServiceLoginUrlSuffix);
- ResolveURLIfInvalid(&embedded_setup_chromeos_url_v2_, gaia_url,
- kEmbeddedSetupChromeOsUrlSuffixV2);
- ResolveURLIfInvalid(&embedded_setup_chromeos_kid_signup_url_, gaia_url,
- kEmbeddedSetupChromeOsKidSignupUrlSuffix);
- ResolveURLIfInvalid(&embedded_setup_chromeos_kid_signin_url_, gaia_url,
- kEmbeddedSetupChromeOsKidSigninUrlSuffix);
- ResolveURLIfInvalid(&embedded_setup_windows_url_, gaia_url,
- kEmbeddedSetupWindowsUrlSuffix);
- ResolveURLIfInvalid(&embedded_reauth_chromeos_url_, gaia_url,
- kEmbeddedReauthChromeOsUrlSuffix);
- ResolveURLIfInvalid(&signin_chrome_sync_dice_, gaia_url,
- kSigninChromeSyncDice);
- ResolveURLIfInvalid(&signin_chrome_sync_keys_retrieval_url_, gaia_url,
- kSigninChromeSyncKeysRetrievalUrl);
- ResolveURLIfInvalid(
- &signin_chrome_sync_keys_recoverability_degraded_url_, gaia_url,
- base::StrCat({kSigninChromeSyncKeysRetrievalUrl,
- kSigninChromeSyncKeysRecoverabilityUrlSuffix}));
- ResolveURLIfInvalid(&service_login_auth_url_, gaia_url,
- kServiceLoginAuthUrlSuffix);
- ResolveURLIfInvalid(&service_logout_url_, gaia_url, kServiceLogoutUrlSuffix);
- ResolveURLIfInvalid(&continue_url_for_logout_, gaia_url,
- kContinueUrlForLogoutSuffix);
- ResolveURLIfInvalid(&token_auth_url_, gaia_url, kTokenAuthUrlSuffix);
- ResolveURLIfInvalid(&merge_session_url_, gaia_url, kMergeSessionUrlSuffix);
- ResolveURLIfInvalid(&oauth_multilogin_url_, gaia_url, kOAuthMultiloginSuffix);
- ResolveURLIfInvalid(&oauth_get_access_token_url_, gaia_url,
- kOAuthGetAccessTokenUrlSuffix);
- ResolveURLIfInvalid(&oauth_wrap_bridge_url_, gaia_url,
- kOAuthWrapBridgeUrlSuffix);
- ResolveURLIfInvalid(&oauth_revoke_token_url_, gaia_url,
- kOAuthRevokeTokenUrlSuffix);
- ResolveURLIfInvalid(&oauth1_login_url_, gaia_url, kOAuth1LoginUrlSuffix);
- ResolveURLIfInvalid(&list_accounts_url_, gaia_url, kListAccountsSuffix);
- ResolveURLIfInvalid(&embedded_signin_url_, gaia_url, kEmbeddedSigninSuffix);
- ResolveURLIfInvalid(&add_account_url_, gaia_url, kAddAccountSuffix);
- ResolveURLIfInvalid(&reauth_url_, gaia_url, kReauthSuffix);
- ResolveURLIfInvalid(&get_check_connection_info_url_, gaia_url,
- kGetCheckConnectionInfoSuffix);
- // URLs from |lso_origin_url_|.
- ResolveURLIfInvalid(&get_oauth_token_url_, lso_origin_url_,
- kGetOAuthTokenUrlSuffix);
- ResolveURLIfInvalid(&oauth2_auth_url_, lso_origin_url_, kOAuth2AuthUrlSuffix);
- ResolveURLIfInvalid(&oauth2_revoke_url_, lso_origin_url_,
- kOAuth2RevokeUrlSuffix);
- // URLs from |google_apis_origin_url_|.
- ResolveURLIfInvalid(&oauth2_token_url_, google_apis_origin_url_,
- kOAuth2TokenUrlSuffix);
- ResolveURLIfInvalid(&oauth2_token_info_url_, google_apis_origin_url_,
- kOAuth2TokenInfoUrlSuffix);
- ResolveURLIfInvalid(&oauth_user_info_url_, google_apis_origin_url_,
- kOAuthUserInfoUrlSuffix);
- ResolveURLIfInvalid(&reauth_api_url_, google_apis_origin_url_,
- kReAuthApiUrlSuffix);
- // URLs from |oauth_account_manager_origin_url_|.
- ResolveURLIfInvalid(&oauth2_issue_token_url_,
- oauth_account_manager_origin_url_,
- kOAuth2IssueTokenUrlSuffix);
- // URLs from |account_capabilities_origin_url_|.
- ResolveURLIfInvalid(&account_capabilities_url_,
- account_capabilities_origin_url_,
- kAccountCapabilitiesBatchGetUrlSuffix);
- }
- void GaiaUrls::InitializeFromConfig() {
- GaiaConfig* config = GaiaConfig::GetInstance();
- if (!config)
- return;
- config->GetURLIfExists(URL_KEY_AND_PTR(google_url));
- config->GetURLIfExists(URL_KEY_AND_PTR(secure_google_url));
- GURL gaia_origin_url;
- config->GetURLIfExists("gaia_url", &gaia_origin_url);
- gaia_origin_ = url::Origin::Create(gaia_origin_url);
- config->GetURLIfExists(URL_KEY_AND_PTR(lso_origin_url));
- config->GetURLIfExists(URL_KEY_AND_PTR(google_apis_origin_url));
- config->GetURLIfExists(URL_KEY_AND_PTR(oauth_account_manager_origin_url));
- config->GetURLIfExists(URL_KEY_AND_PTR(account_capabilities_origin_url));
- config->GetURLIfExists(URL_KEY_AND_PTR(client_login_url));
- config->GetURLIfExists(URL_KEY_AND_PTR(service_login_url));
- config->GetURLIfExists(URL_KEY_AND_PTR(embedded_setup_chromeos_url_v2));
- config->GetURLIfExists(
- URL_KEY_AND_PTR(embedded_setup_chromeos_kid_signup_url));
- config->GetURLIfExists(
- URL_KEY_AND_PTR(embedded_setup_chromeos_kid_signin_url));
- config->GetURLIfExists(URL_KEY_AND_PTR(embedded_setup_windows_url));
- config->GetURLIfExists(URL_KEY_AND_PTR(embedded_reauth_chromeos_url));
- config->GetURLIfExists(URL_KEY_AND_PTR(signin_chrome_sync_dice));
- config->GetURLIfExists(
- URL_KEY_AND_PTR(signin_chrome_sync_keys_retrieval_url));
- config->GetURLIfExists(
- URL_KEY_AND_PTR(signin_chrome_sync_keys_recoverability_degraded_url));
- config->GetURLIfExists(URL_KEY_AND_PTR(service_login_auth_url));
- config->GetURLIfExists(URL_KEY_AND_PTR(service_logout_url));
- config->GetURLIfExists(URL_KEY_AND_PTR(continue_url_for_logout));
- config->GetURLIfExists(URL_KEY_AND_PTR(token_auth_url));
- config->GetURLIfExists(URL_KEY_AND_PTR(merge_session_url));
- config->GetURLIfExists(URL_KEY_AND_PTR(get_oauth_token_url));
- config->GetURLIfExists(URL_KEY_AND_PTR(oauth_get_access_token_url));
- config->GetURLIfExists(URL_KEY_AND_PTR(oauth_wrap_bridge_url));
- config->GetURLIfExists(URL_KEY_AND_PTR(oauth_multilogin_url));
- config->GetURLIfExists(URL_KEY_AND_PTR(oauth_user_info_url));
- config->GetURLIfExists(URL_KEY_AND_PTR(oauth_revoke_token_url));
- config->GetURLIfExists(URL_KEY_AND_PTR(oauth1_login_url));
- config->GetURLIfExists(URL_KEY_AND_PTR(list_accounts_url));
- config->GetURLIfExists(URL_KEY_AND_PTR(embedded_signin_url));
- config->GetURLIfExists(URL_KEY_AND_PTR(add_account_url));
- config->GetURLIfExists(URL_KEY_AND_PTR(reauth_url));
- config->GetURLIfExists(URL_KEY_AND_PTR(account_capabilities_url));
- config->GetURLIfExists(URL_KEY_AND_PTR(get_check_connection_info_url));
- config->GetURLIfExists(URL_KEY_AND_PTR(oauth2_auth_url));
- config->GetURLIfExists(URL_KEY_AND_PTR(oauth2_token_url));
- config->GetURLIfExists(URL_KEY_AND_PTR(oauth2_issue_token_url));
- config->GetURLIfExists(URL_KEY_AND_PTR(oauth2_token_info_url));
- config->GetURLIfExists(URL_KEY_AND_PTR(oauth2_revoke_url));
- config->GetURLIfExists(URL_KEY_AND_PTR(reauth_api_url));
- }
|