description: >
    Provides user management functionality.
    As communication to this service is done through authenticated
    & authorized session, there won't be any validation for both.

methods:
    - name: CreateUser
      description: >
          Creates a new user. If the user already exists, then it will throw
          an error.
      parameters:
          - name: UserName
            type: string
            description: >
                User name which has to be created.
          - name: GroupNames
            type: array[string]
            description: >
                List of groups to which the user has to be added.
          - name: Privilege
            type: string
            description: >
                Privilege of the user to be added.
          - name: Enabled
            type: boolean
            description: >
                User enabled / disabled.
      errors:
          - xyz.openbmc_project.Common.Error.InternalFailure
          - xyz.openbmc_project.Common.Error.InsufficientPermission
          - xyz.openbmc_project.Common.Error.InvalidArgument
          - xyz.openbmc_project.User.Common.Error.UserNameExists
          - xyz.openbmc_project.User.Common.Error.UserNameGroupFail
          - xyz.openbmc_project.User.Common.Error.UserNamePrivFail
          - xyz.openbmc_project.User.Common.Error.NoResource

    - name: RenameUser
      description: >
          Rename's existing user to new one. All other properties of the
          user will remain same.
      parameters:
          - name: UserName
            type: string
            description: >
                User name which has to be updated.
          - name: NewUserName
            type: string
            description: >
                New User name to which user has to be updated.
      errors:
          - xyz.openbmc_project.Common.Error.InternalFailure
          - xyz.openbmc_project.Common.Error.InsufficientPermission
          - xyz.openbmc_project.Common.Error.InvalidArgument
          - xyz.openbmc_project.User.Common.Error.UserNameDoesNotExist
          - xyz.openbmc_project.User.Common.Error.UserNameExists
          - xyz.openbmc_project.User.Common.Error.UserNameGroupFail
          - xyz.openbmc_project.User.Common.Error.UserNamePrivFail
          - xyz.openbmc_project.User.Common.Error.NoResource

    - name: GetUserInfo
      description: >
          Get user properites.
          If its local user, method returns
             -user privilege
             -user groups
             -user enabled state
             -user locked state
             -user password expired state
             -remote user flag
          If its ldap user, method returns
             -user privilege
             -remote user flag
      parameters:
          - name: UserName
            type: string
            description: >
                User name whose properties have to be returned.
      returns:
          - name: UserInfo
            type: dict[string,variant[string,array[string],boolean]]
            description: >
                Dictionary of user properties.
                List of key name and data type of properties below.
                UserPrivilege -> privilege of the user(string)
                UserGroups    -> list of groups user belongs to(array[string])
                UserEnabled   -> user enabled state(boolean)
                UserLockedForFailedAttempt -> user locked state(boolean)
                UserPasswordExpired -> user password expired(boolean)
                RemoteUser    ->  remote or local user(boolean)

                For detailed documentation of user properties refer
                Attributes.interface.yaml
                examples:
                    1.UserInfo["RemoteUser"] returns true for ldap user
                    and false for local user.
                    2.UserInfo["UserGroups"] gets list of groups of user.
      errors:
          - xyz.openbmc_project.Common.Error.InternalFailure
          - xyz.openbmc_project.Common.Error.InsufficientPermission
          - xyz.openbmc_project.Common.Error.InvalidArgument
          - xyz.openbmc_project.User.Common.Error.UserNameDoesNotExist

    - name: CreateGroup
      description: >
          Creates a new groups. If the group already exists, or the
          group name is not allowed to be created, it throws an error.
      parameters:
          - name: GroupName
            type: string
            description: >
                The group to be added to the system.
      errors:
          - xyz.openbmc_project.Common.Error.InternalFailure
          - xyz.openbmc_project.Common.Error.InvalidArgument
          - xyz.openbmc_project.User.Common.Error.GroupNameExists

    - name: DeleteGroup
      description: >
          Deletes an existing groups. If the group doesn't exists, or the
          group name is not allowed to be deleted, it throws an error.
      parameters:
          - name: GroupName
            type: string
            description: >
                The group to be deleted from the system.
      errors:
          - xyz.openbmc_project.Common.Error.InternalFailure
          - xyz.openbmc_project.Common.Error.InvalidArgument
          - xyz.openbmc_project.User.Common.Error.GroupNameDoesNotExist

properties:
    - name: AllPrivileges
      type: array[string]
      flags:
          - const
      description: >
          Lists all available user privileges in the system.

    - name: AllGroups
      type: array[string]
      flags:
          - const
      description: >
          Lists all available groups in the system.

signals:
    - name: UserRenamed
      description: >
          Signal indicating user's name is updated.
      properties:
          - name: UserName
            type: string
            description: Name of the user which got renamed.
          - name: NewUserName
            type: string
            description: New name of the user.
