| // 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; |
| |
| using fuchsia.ui.viewsv1token; |
| |
| // 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] |
| interface AccountProvider { |
| // Adds a new user account. This involves talking to the identity provider and |
| // fetching profile attributes. |
| 2: 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. |
| 3: 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. |
| 5: Terminate(); |
| }; |