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

[DartPackage="mojo_services",
 JavaPackage="org.chromium.mojo.authentication"]
module authentication;

// Interface to handle user identity and authentication tokens.
// TODO(qsr): This API only handles google accounts at this time. It will need
//            to be extended to allow generic account manager on the platform.
[ServiceName="authentication::AuthenticationService"]
interface AuthenticationService {
  // Requests a Google account to use. In case of success, error will be null.
  // In case of error, username will be null and error will contain a
  // description of the error. If |return_last_selected| is true and the client
  // application already selected an account, the same account will be returned
  // without user intervention.
  SelectAccount(bool return_last_selected) => (string? username, string? error);

  // Requests an oauth2 token for the given Google account with the given
  // scopes.  In case of error, token will be null and error will contain a
  // description of the error.
  GetOAuth2Token(string username, array<string> scopes)
      => (string? token, string? error);

  // Requests to clear a previously acquired token. This should be called when a
  // token is refused by a server component before requesting a new token to
  // clear the token from any cache.
  ClearOAuth2Token(string token);

  // Requests an oauth2 device code response for the given set of scopes. In
  // case of error, all response parameters other than error, namely
  // verifcation_url, device_code and user_code will be null and error will
  // contain a description of the error. To provision FNL like systems with
  // Google account credentials, invoke GetOAuth2DeviceCode() method followed by
  // AddAccount() instead of using SelectAccount(), which only works for
  // Android.
  GetOAuth2DeviceCode(array<string> scopes)
      => (string? verification_url,
          string? device_code,
          string? user_code,
          string? error);

  // Exchanges an oauth2 device code to a refresh token for the granted user,
  // and stores it locally in a secure storage location on FNL. For future
  // GetOAuth2Token requests, a new access token is minted from this refresh
  // token and returned to the calling mojo app.
  AddAccount(string device_code) => (string? username, string? error);
};
