{#-
       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 %} Third-party application authorized. {% endblock %}

{% block header %}Third-party application authorized.{% endblock %}

{% block content %}
<p>You have authorized {{ rtok.consumer_token.name }} access to your account.  If you wish
  to revoke this access at any time, please visit 
  <a href="{{g.url('/auth/preferences/') }}">user preferences</a>
  and click 'revoke access'.</p>
<h2>PIN: {{ rtok.validation_pin }}</h2>
<a href="{{g.url('/auth/preferences/')}}">Return to preferences</a>
{% endblock %}
