{#-
       Licensed to the Apache Software Foundation (ASF) under one
       or more contributor license agreements.  See the NOTICE file
       distributed with this work for additional information
       regarding copyright ownership.  The ASF licenses this file
       to you 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.
-#}

{% set hide_left_bar = True %}
{% extends g.theme.master %}

{% block title %}{{c.user.username}} / Update password{% endblock %}

{% block header %}Update password for {{c.user.username}}{% endblock %}

{% block content %}
  <div class='grid-15'>
    <p>Your {{config['site_name']}} password
        {% if session.get('expired-reason') == 'hibp' %}
            must be updated to be more secure.
        {% else %}
            has expired.
        {% endif %}
        You must now choose a new password before logging into the site.</p>
  </div>
  <div class="grid-23">
    {{ c.form.display(action='/auth/pwd_expired_change', value=dict(return_to=return_to)) }}
  </div>
  {% if h.asbool(config.get('auth.multifactor.totp')) %}
  <div class='grid-8' style="position: absolute">
    <div class="message info show-message">
        Did you know?  You can also enable multifactor authentication on your account.
        <br><br>
        After changing your password, go to your account settings to set it up.
    </div>
  </div>
  {% endif %}
{% endblock content %}
