// 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.

#ifndef GOOGLE_APIS_GAIA_GAIA_URLS_H_
#define GOOGLE_APIS_GAIA_GAIA_URLS_H_

#include <string>

#include "base/memory/singleton.h"
#include "url/gurl.h"

// A signleton that provides all the URLs that are used for connecting to GAIA.
class GaiaUrls {
 public:
  static GaiaUrls* GetInstance();

  // The URLs for different calls in the Google Accounts programmatic login API.
  const GURL& gaia_url() const;
  const GURL& captcha_base_url() const;
  const GURL& client_login_url() const;
  const GURL& service_login_url() const;
  const GURL& service_login_auth_url() const;
  const GURL& service_logout_url() const;
  const GURL& issue_auth_token_url() const;
  const GURL& get_user_info_url() const;
  const GURL& token_auth_url() const;
  const GURL& merge_session_url() const;
  const GURL& get_oauth_token_url() const;
  const GURL& oauth_get_access_token_url() const;
  const GURL& oauth_wrap_bridge_url() const;
  const GURL& oauth_user_info_url() const;
  const GURL& oauth_revoke_token_url() const;
  const GURL& oauth1_login_url() const;
  const GURL& list_accounts_url() const;
  const GURL& embedded_signin_url() const;
  const GURL& add_account_url() const;

  const std::string& oauth2_chrome_client_id() const;
  const std::string& oauth2_chrome_client_secret() const;
  const GURL& client_login_to_oauth2_url() const;
  const GURL& oauth2_auth_url() const;
  const GURL& oauth2_token_url() const;
  const GURL& oauth2_issue_token_url() const;
  const GURL& oauth2_token_info_url() const;
  const GURL& oauth2_revoke_url() const;

  const GURL& gaia_login_form_realm() const;

 private:
  GaiaUrls();
  ~GaiaUrls();

  friend struct DefaultSingletonTraits<GaiaUrls>;

  GURL gaia_url_;
  GURL captcha_base_url_;

  GURL lso_origin_url_;
  GURL google_apis_origin_url_;

  GURL client_login_url_;
  GURL service_login_url_;
  GURL service_login_auth_url_;
  GURL service_logout_url_;
  GURL issue_auth_token_url_;
  GURL get_user_info_url_;
  GURL token_auth_url_;
  GURL merge_session_url_;
  GURL get_oauth_token_url_;
  GURL oauth_get_access_token_url_;
  GURL oauth_wrap_bridge_url_;
  GURL oauth_user_info_url_;
  GURL oauth_revoke_token_url_;
  GURL oauth1_login_url_;
  GURL list_accounts_url_;
  GURL embedded_signin_url_;
  GURL add_account_url_;

  std::string oauth2_chrome_client_id_;
  std::string oauth2_chrome_client_secret_;

  GURL client_login_to_oauth2_url_;
  GURL oauth2_auth_url_;
  GURL oauth2_token_url_;
  GURL oauth2_issue_token_url_;
  GURL oauth2_token_info_url_;
  GURL oauth2_revoke_url_;

  GURL gaia_login_form_realm_;

  DISALLOW_COPY_AND_ASSIGN(GaiaUrls);
};

#endif  // GOOGLE_APIS_GAIA_GAIA_URLS_H_
