/**
 * Copyright (C) 2019 The Android Open Source Project
 *
 * 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.
 */

{namespace com.google.gerrit.server.mail.template.HttpPasswordUpdate}

/**
 * The .HttpPasswordUpdate template will determine the contents of the email related to
 * adding, changing or deleting the HTTP password.
 */
{template HttpPasswordUpdate kind="text"}
  {@param email: ?}
  The HTTP password was {$email.operation} on Gerrit Code Review at
  {sp}{$email.gerritHost}.

  If this is not expected, please contact your Gerrit Administrators
  immediately.

  {\n}
  {\n}

  You can also manage your HTTP password by visiting
  {\n}
  {$email.httpPasswordSettingsUrl}
  {\n}
  {if $email.userNameEmail}
    (while signed in as {$email.userNameEmail})
  {else}
    (while signed in as {$email.email})
  {/if}

  {\n}
  {\n}

  If clicking the link above does not work, copy and paste the URL in a new
  browser window instead.

  {\n}
  {\n}

  This is a send-only email address.  Replies to this message will not be read
  or answered.
{/template}
