[%# This Source Code Form is subject to the terms of the Mozilla Public
  # License, v. 2.0. If a copy of the MPL was not distributed with this
  # file, You can obtain one at http://mozilla.org/MPL/2.0/.
  #
  # This Source Code Form is "Incompatible With Secondary Licenses", as
  # defined by the Mozilla Public License, v. 2.0.
  #%]

[%# INTERFACE:
  # target: string. URL to go to after login.
  #%]

[% IF !target %]
 [% target = "index.cgi" %]
[% END %]

[% PROCESS global/header.html.tmpl
  title = "Log in to $terms.Bugzilla"
%]

[% USE Bugzilla %]

<p>
  [% terms.Bugzilla %] needs a legitimate login and password to continue.
</p>

<form name="login" action="[% urlbase FILTER html %][% target FILTER html %]" method="POST"
[%- IF Bugzilla.cgi.param("data") %] enctype="multipart/form-data"[% END %]>
  <table>
    <tr>
      <th>
        <label for="Bugzilla_login">
          [% IF login_not_email %]
            Login:
          [% ELSE %]
            Your Email Address:
          [% END %]
        </label>
      </th>
      <td>
        <input size="35" id="Bugzilla_login" name="Bugzilla_login"
               [%- ' type="email"' UNLESS login_not_email %] autofocus required>
        [% Param('emailsuffix') FILTER html %]
      </td>
    </tr>
    <tr>
      <th><label for="Bugzilla_password">Password:</label></th>
      <td>
        <input type="password" size="35" id="Bugzilla_password" name="Bugzilla_password" required>
      </td>
    </tr>

    [% IF Param('rememberlogin') == 'defaulton' || 
          Param('rememberlogin') == 'defaultoff' %]
      <tr>
        <th>&nbsp;</th>
        <td>
          <input type="checkbox" id="Bugzilla_remember" name="Bugzilla_remember" value="on"
                 [%+ "checked" IF Param('rememberlogin') == "defaulton" %]>
          <label for="Bugzilla_remember">Remember my Login</label>
        </td>
      </tr>
    [% END %]

    <tr>
      <th>&nbsp;</th>
      <td>
        <input type="checkbox" id="Bugzilla_restrictlogin" name="Bugzilla_restrictlogin"
               checked="checked">
        <label for="Bugzilla_restrictlogin">Restrict this session to this IP address
        (using this option improves security)</label>
      </td>
    </tr>
  </table>

  [% PROCESS "global/hidden-fields.html.tmpl"
     exclude="^Bugzilla_(login|password|restrictlogin)$" %]

  <input type="hidden" name="Bugzilla_login_token"
         value="[% get_login_request_token() FILTER html %]">
  <input type="submit" name="GoAheadAndLogIn" value="Log in" id="log_in">

  <p>
    (Note: you should make sure cookies are enabled for this site. 
    Otherwise, you will be required to log in frequently.)
  </p>
</form>

[% Hook.process('additional_methods') %]

[%# Allow the user to create a new account, or request a token to change
  # their password, assuming that our auth method allows that.
  #%]

  [% IF Param("createemailregexp") && user.authorizer.user_can_create_account %]
    <hr>

    <p>
      If you don't have a [% terms.Bugzilla %] account, you can
      <a href="createaccount.cgi">create a new account</a>.
      [% IF Param("requirelogin") %]
        A user account is required because this Bugzilla
        installation is only accessible to authenticated users.
      [% ELSIF target.match("_bug\.cgi$") %]
        A user account is required to file a new [% terms.bug %] or to comment
        into existing ones so that you can be contacted if more information is
        needed.
      [% END %]
    </p>
  [% END %]

  [% IF user.authorizer.can_change_password %]
    <hr>

    <form id="forgot" method="get" action="token.cgi">
      <input type="hidden" name="a" value="reqpw">
      If you have an account, but have forgotten your password,
      enter your login name below and submit a request
      to change your password.<br>
      <input size="35" name="loginname" required>
      <input type="hidden" id="token" name="token" value="[% issue_hash_token(['reqpw']) FILTER html %]">
      <input type="submit" id="request" value="Reset Password">
    </form>
  [% END %]

[% PROCESS global/footer.html.tmpl %]
