blob: 3f519c19739dfa1d419fd12fd269aa40abfe195b [file] [log] [blame]
// Copyright 2017 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
library fuchsia.modular.auth;
// Authentication errors returned by AccountProvider. It contains error status
// code along with a detailed error message.
struct AuthErr {
Status status;
string message;
};
// Specifies the success/failure status.
enum Status {
// Success
OK = 0;
// A problem with client configuration such as invalid_client, missing params
// etc. This should happen only in development not at run-time, unless
// user/developer changes any of this config. No retry is required.
BAD_REQUEST = 1;
// Unable to parse the server side response. Retry is optional, this error
// should be extremely rare.
BAD_RESPONSE = 2;
// Server is reachable and propagated an error returned by OAuth Server
// backends. That kind of error cannot be fixed on retries, and has some
// root cause that needs to be addressed either in the client's configuration
// or because the user explicitly revoked access to the client app. For
// instance: invalid_token, expired_token, invalid_client_id, invalid_user,
// invalid_args, etc.
OAUTH_SERVER_ERROR = 3;
// User cancelled the flow, no need to retry.
USER_CANCELLED = 4;
// Network error, eg. unreachable. This may be temporary, a retry is
// recommended.
NETWORK_ERROR = 5;
// Internal error. Retry is optional, this error should be rare.
INTERNAL_ERROR = 6;
};
// An interface that allows the Framework to talk to the token manager service
// to add new accounts and be able to mint the corresponding |TokenManager|
// specialized instances for thid party agents and first party ledger client.
//
// This is only meant to be used by the Framework and will be replaced with
// |AccountManager| in the near future.
[Discoverable]
protocol AccountProvider {
// Adds a new user account. This involves talking to the identity provider and
// fetching profile attributes.
AddAccount(IdentityProvider identity_provider)
-> (Account? account, string? error_code);
// Removes an existing user account. This involves talking to account's
// identity provider and revoking user credentials both locally and remotely.
// This operation also deletes cached tokens for the given account.
//
// TODO(ukode): Modify this api to take account_id and IDP as input once the
// Account struct is cleaned up.
//
// If |revoke_all| is set to true, then all device credentials are revoked
// both locally and remotely on the backend server and user is logged out from
// all devices. If |revoke_all| is set to false, then credentials stored
// locally are wiped. This includes cached tokens such as access/id and
// firebase tokens and the locally persisted refresh token. By default,
// |revoke_all| is set to false and deletes account only from that given
// device.
RemoveAccount(Account account, bool revoke_all) -> (AuthErr status);
// This signals |AccountProvider| to teardown itself. After the
// AccountProvider responds by closing its handle, the caller may terminate
// the |AccountProvider| application if it hasn't already exited.
Terminate();
};