// Copyright 2018 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.identity.account;

/// The maximum number of system accounts that may be simultaneously
/// provisioned on a device. This number may be increased in the future.
const MAX_ACCOUNTS_PER_DEVICE uint32 = 128;

/// The maximum number of personae that may be simultaneously defined within a
/// system account. This number may be increased in the future.
const MAX_PERSONAE_PER_ACCOUNT uint32 = 128;

/// The maximum length of the (UTF-8 encoded) human readable names, in bytes.
const MAX_NAME_SIZE uint32 = 128;

/// The maximum number of authentication mechanisms that can be registered
/// for a device.
const MAX_AUTH_MECHANISMS uint32 = 16;

/// The maximum number of authentication mechanism enrollments that may be
/// simultaneously defined within a Fuchsia account.
const MAX_AUTH_MECHANISM_ENROLLMENTS uint32 = 32;

/// Provides an upper bound to how long an account can live on the device.
type Lifetime = strict enum : uint8 {
    /// The account lives at the longest to the end of the power cycle it
    /// was created in.
    EPHEMERAL = 1;
    /// The account lives on the device until it is removed.
    PERSISTENT = 2;
};

/// A unique identifier for a system account.
alias AccountId = uint64;

/// A unique identifier for a persona of an account.
/// The AccountId for an account cannot be derived from the PersonaId of its
/// personae.
alias PersonaId = uint64;

/// Specifies the reason that a fuchsia.identity.account method failed.
type Error = flexible enum {
    /// Some other problem occurred that cannot be classified using one of the
    /// more specific statuses. Retry is optional.
    UNKNOWN = 1;

    /// An internal error occurred. This usually indicates a bug within the
    /// account system itself. Retry is optional.
    INTERNAL = 2;

    /// The requested operation is not supported. This generally indicates that
    /// implementation of a new feature is not yet complete. The request should
    /// not be retried.
    UNSUPPORTED_OPERATION = 3;

    /// The request was malformed in some way, such as using an empty string for
    /// auth_provider_type. The request should not be retried.
    INVALID_REQUEST = 4;

    /// A local resource error occurred such as I/O, FIDL, or memory allocation
    /// failure. Retry, after a delay, is recommended.
    RESOURCE = 5;

    /// A network error occurred while communicating with an auth server.
    /// Retry, after a delay, is recommended.
    NETWORK = 6;

    /// The requested account or persona is not present.  The request should
    /// not be retried.
    NOT_FOUND = 7;

    /// The request cannot be processed due to an ongoing account or persona
    /// removal. The removal is not guaranteed to suceed and so retry, after
    /// a delay, is recommended.
    REMOVAL_IN_PROGRESS = 8;

    /// The server is not in the state required to perform the requested
    /// operation. The request should not be retried unless the server state
    /// has been corrected before the retry.
    FAILED_PRECONDITION = 9;

    /// The request cannot be processed due to a rejected authentication
    /// attempt. User consent or input is required before any retry.
    FAILED_AUTHENTICATION = 10;

    /// The client cancelled an account operation, usually by closing a channel.
    ABORTED = 11;
};

/// Basic data about a system account. These data are available even while an
/// account is locked.
type AccountMetadata = table {
    /// A human-readable name for the account. Account names are set by a human
    /// and are not guaranteed to be meaningful or unique, even among the
    /// accounts on a single device.
    1: name string:MAX_NAME_SIZE;
};

/// An identifier for an enrollment of an authentication mechanism. It is
/// unique within an account and an authentication mechanism.
alias AuthMechanismEnrollmentId = uint64;

/// Metadata about an enrollment, such as a human readable name.
type AuthMechanismEnrollmentMetadata = table {
    /// A unique identifier associated with the enrollment.
    1: id AuthMechanismEnrollmentId;

    /// A short text describing the enrollment, e.g. "right thumb" for a
    /// fingerprint authenticator.
    2: name string:MAX_NAME_SIZE;
};
