mirror of
https://github.com/quay/quay.git
synced 2025-04-18 10:44:06 +03:00
Adds ACCOUNT_RECOVERY_MODE to allow Quay to run with some core features disabled. When this is set, the instance should only be used in order by existing users who hasn't linked their account to an external login service, after database authentication has been disabled.
177 lines
7.3 KiB
HTML
177 lines
7.3 KiB
HTML
<!DOCTYPE html>
|
|
<html ng-app="quay" class="{% if onprem %}onprem{% else %}hosted{% endif %}">
|
|
<head>
|
|
<base href="/">
|
|
|
|
{% block title %}
|
|
|
|
{% endblock %}
|
|
|
|
{% block added_meta %}
|
|
|
|
{% endblock %}
|
|
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
|
|
{% for style_url in external_styles %}
|
|
<link rel="stylesheet" href="{{ style_url }}" type="text/css">
|
|
{% endfor %}
|
|
|
|
<!-- Icons -->
|
|
<link rel="shortcut icon" href="/static/img/quay_favicon.png" type="image/png" />
|
|
<!-- /Icons -->
|
|
|
|
<!-- Hide the footer until the CSS loads properly. -->
|
|
<style type="text/css">
|
|
.page-footer {
|
|
display: none;
|
|
}
|
|
|
|
.loading-js-fade-in {
|
|
text-align: center;
|
|
}
|
|
</style>
|
|
|
|
{% block added_stylesheets %}
|
|
|
|
{% endblock %}
|
|
|
|
<script type="text/javascript">
|
|
window.__endpoints = {{ route_data|tojson|safe }}.paths;
|
|
window.__features = {{ feature_set|tojson|safe }};
|
|
window.__config = {{ config_set|tojson|safe }};
|
|
window.__oauth = {{ oauth_set|tojson|safe }};
|
|
window.__external_login = {{ external_login_set|tojson|safe }};
|
|
window.__auth_scopes = {{ scope_set|tojson|safe }};
|
|
window.__vuln_priority = {{ vuln_priority_set|tojson|safe }}
|
|
window.__token = '{{ csrf_token() }}';
|
|
window.__kubernetes_namespace = {{ kubernetes_namespace|tojson|safe }};
|
|
window.__registry_state = '{{ registry_state }}';
|
|
window.__account_recovery_mode = '{{ account_recovery_mode }}';
|
|
|
|
{% if error_code %}
|
|
window.__error_code = {{ error_code }};
|
|
{% endif %}
|
|
|
|
{% if error_info %}
|
|
window.__error_info = {{ error_info|tojson|safe }};
|
|
{% endif %}
|
|
</script>
|
|
|
|
{% for script_url in external_scripts %}
|
|
<script src="{{ script_url }}"></script>
|
|
{% endfor %}
|
|
|
|
{% block added_dependencies %}
|
|
|
|
{% endblock %}
|
|
|
|
{% for script_path in main_scripts %}
|
|
<script src="/static/{{ script_path }}"></script>
|
|
{% endfor %}
|
|
|
|
{% if sentry_public_dsn %}
|
|
<script type="text/javascript">
|
|
Raven.config('{{ sentry_public_dsn }}').install();
|
|
</script>
|
|
{% endif %}
|
|
|
|
{% if google_analytics_key %}
|
|
<script>
|
|
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
|
|
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
|
|
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
|
|
})(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
|
|
|
|
ga('create', '{{ google_analytics_key }}', 'auto');
|
|
ga('send', 'pageview');
|
|
|
|
</script>
|
|
{% endif %}
|
|
|
|
{% if mixpanel_key %}
|
|
<!-- start Mixpanel --><script type="text/javascript">
|
|
(function(e,b){if(!b.__SV){var a,f,i,g;window.mixpanel=b;a=e.createElement("script");a.type="text/javascript";a.async=!0;a.src=("https:"===e.location.protocol?"https:":"http:")+'//cdn.mxpnl.com/libs/mixpanel-2.2.min.js';f=e.getElementsByTagName("script")[0];f.parentNode.insertBefore(a,f);b._i=[];b.init=function(a,e,d){function f(b,h){var a=h.split(".");2==a.length&&(b=b[a[0]],h=a[1]);b[h]=function(){b.push([h].concat(Array.prototype.slice.call(arguments,0)))}}var c=b;"undefined"!==
|
|
typeof d?c=b[d]=[]:d="mixpanel";c.people=c.people||[];c.toString=function(b){var a="mixpanel";"mixpanel"!==d&&(a+="."+d);b||(a+=" (stub)");return a};c.people.toString=function(){return c.toString(1)+".people (stub)"};i="disable track track_pageview track_links track_forms register register_once alias unregister identify name_tag set_config people.set people.set_once people.increment people.append people.track_charge people.clear_charges people.delete_user".split(" ");for(g=0;g<i.length;g++)f(c,i[g]);
|
|
b._i.push([a,e,d])};b.__SV=1.2}})(document,window.mixpanel||[]);
|
|
mixpanel.init("{{ mixpanel_key }}", { track_pageview : false, debug: {{ is_debug }} });</script><!-- end Mixpanel -->
|
|
{% endif %}
|
|
|
|
<link rel="search" type="application/opensearchdescription+xml" title="{{ config_set['REGISTRY_TITLE'] }}" href="/opensearch.xml" />
|
|
|
|
</head>
|
|
<body ng-class="pageClass + ' ' + (user.anonymous ? 'anon' : 'signedin')" class="co-img-bg-network">
|
|
<div id="co-l-footer-wrapper">
|
|
<nav class="navbar navbar-default header-bar co-m-navbar co-fx-box-shadow" role="navigation"></nav>
|
|
|
|
<div class="quay-message-bar"></div>
|
|
<div quay-require="['BILLING']">
|
|
<div class="quay-service-status-bar"></div>
|
|
</div>
|
|
|
|
<div id="padding-container">
|
|
<div id="co-l-view-container">
|
|
<div ng-class="newLayout ? '' : 'main-panel co-fx-box-shadow-heavy'">
|
|
{% block body_content %}
|
|
|
|
{% endblock %}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="co-l-footer-push"></div>
|
|
</div>
|
|
|
|
<nav id="co-l-footer" class="page-footer hidden-xs">
|
|
<div class="col-md-12">
|
|
<ul>
|
|
{% if config_set['BRANDING']['footer_img'] %}
|
|
<li><a href="{{ config_set['BRANDING']['footer_url'] }}" ng-safenewtab><img src="{{ config_set['BRANDING']['footer_img'] }}"></a></li>
|
|
{% endif %}
|
|
<li><a href="{{ config_set['DOCUMENTATION_ROOT'] }}" ng-safenewtab>Documentation</a></li>
|
|
<li quay-require="['BILLING']"><a href="https://www.openshift.com/legal/terms" target="_blank">Terms</a></li>
|
|
<li quay-require="['BILLING']"><a href="https://www.redhat.com/en/about/privacy-policy" target="_blank">Privacy</a></li>
|
|
<li quay-require="['BILLING']"><a href="/security/" target="_self">Security</a></li>
|
|
<li quay-require="['BILLING']"><a href="/about/" target="_self">About</a></li>
|
|
{% if has_contact %}
|
|
<li><b><a href="{{ contact_href or '/contact/' }}" target="_self">Contact</a></b></li>
|
|
{% endif %}
|
|
<li quay-require="['BILLING']">
|
|
<span class="quay-service-status"></span>
|
|
</li>
|
|
<li>{{ version_number }}</li>
|
|
</ul>
|
|
</div>
|
|
</nav>
|
|
|
|
<!-- Modal message dialog -->
|
|
<div class="modal fade" id="couldnotloadModal" data-backdrop="static">
|
|
<div class="modal-dialog">
|
|
<div class="modal-content">
|
|
<div class="modal-header">
|
|
<h4 class="modal-title">Uh Oh...</h4>
|
|
</div>
|
|
<div class="modal-body">
|
|
Something went wrong when trying to load Quay! Please report this to <a href="mailto:support@quay.io">support@quay.io</a>.
|
|
</div>
|
|
<div class="modal-footer">
|
|
</div>
|
|
</div><!-- /.modal-content -->
|
|
</div><!-- /.modal-dialog -->
|
|
</div><!-- /.modal -->
|
|
|
|
{% if google_tagmanager_key %}
|
|
<!-- Google Tag Manager (hooked up to CrossDomain) -->
|
|
<noscript><iframe src="//www.googletagmanager.com/ns.html?id={{ google_tagmanager_key }}"
|
|
height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
|
|
<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
|
|
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
|
|
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
|
|
'//www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
|
|
})(window,document,'script','dataLayer','{{ google_tagmanager_key }}');</script>
|
|
{% endif %}
|
|
|
|
<div class="angular-tour-ui" inline="false" tour="angular_tour_current"></div>
|
|
</body>
|
|
</html>
|