# -*- coding: utf-8 -*- #
# Copyright 2013 Google LLC. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#    http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

"""Auth for the Google Cloud SDK."""

from __future__ import absolute_import
from __future__ import division
from __future__ import unicode_literals

from googlecloudsdk.calliope import base


@base.ReleaseTracks(base.ReleaseTrack.GA,
                    base.ReleaseTrack.BETA,
                    base.ReleaseTrack.ALPHA)
class Auth(base.Group):
  # pylint: disable=line-too-long
  """Manage oauth2 credentials for the Google Cloud CLI.

  The `gcloud auth` command group lets you grant and revoke authorization to
  Google Cloud CLI (`gcloud` CLI) to access Google Cloud. Typically, when
  scripting Google Cloud CLI tools for use on multiple machines, using
  `gcloud auth activate-service-account` is recommended.

  For information about authorization and credential types, see
  [Authorizing the gcloud CLI](https://cloud.google.com/sdk/docs/authorizing).
  For information about authorizing a service account, see
  [Authorizing with a service account](https://cloud.google.com/sdk/docs/authorizing#authorizing_with_a_service_account).

  After running `gcloud auth` commands, you can run other commands with
  `--account`=``ACCOUNT'' to authenticate the command with the credentials
  of the specified account. For information about `--account` and other `gcloud`
  CLI global flags, see the
  [gcloud CLI overview](https://cloud.google.com/sdk/gcloud/reference).

  See `$ gcloud topic client-certificate` to learn how to use Mutual TLS when using gcloud.
  Mutual TLS can be used for [certificate based access](https://cloud.google.com/beyondcorp-enterprise/docs/securing-resources-with-certificate-based-access) with gcloud.

  ## EXAMPLES

  To authenticate a user account with `gcloud` and minimal user output, run:

    $ gcloud auth login --brief

  To list all credentialed accounts and identify the current active account,
  run:

    $ gcloud auth list

  To revoke credentials for a user account (like logging out), run:

    $ gcloud auth revoke test@gmail.com
  """
  # pylint: enable=line-too-long

  category = base.IDENTITY_AND_SECURITY_CATEGORY

  def Filter(self, context, args):
    del context, args
    base.DisableUserProjectQuota()
