mirror of
https://github.com/quay/quay.git
synced 2026-01-26 06:21:37 +03:00
* ui: Add custom TOS support Enable adding of a custom TOS in the Quay footer for on-premise installations via the optional `TERMS_OF_SERVICE` config flag. If the flag is not defined, the TOS field will not be visible on Quay rendering. Also changes the behaviour of the discovery endpoint to include custom terms of service instead of pointing to Quay.io terms of service for all installations. * Fix formatting errors * Fix TOS page for Quay.io deployments * Change TOS variable name to TERMS_OF_SERVICE_URL for better clarity * Removed reference to Quay.io from the discovery endpoint description
207 lines
8.8 KiB
HTML
207 lines
8.8 KiB
HTML
<!DOCTYPE html>
|
|
<html ng-app="quay" class="{% if onprem %}onprem{% else %}hosted{% endif %}">
|
|
<head>
|
|
{% if config_set['SERVER_HOSTNAME'] == 'stage.quay.io' %}
|
|
<script id="trustarc" src="//static.redhat.com/libs/redhat/marketing/latest/trustarc/trustarc.stage.js"></script>
|
|
<script id="dpal" src="https://www.redhat.com/ma/dpal-staging.js" type="text/javascript"></script>
|
|
{% endif %}
|
|
|
|
{% if config_set['SERVER_HOSTNAME'] == 'quay.io' %}
|
|
<script id="trustarc" src="//static.redhat.com/libs/redhat/marketing/latest/trustarc/trustarc.js"></script>
|
|
<script id="dpal" src="https://www.redhat.com/ma/dpal.js" type="text/javascript"></script>
|
|
{% endif %}
|
|
|
|
<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|tojson|safe }};
|
|
|
|
{% 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 %}
|
|
{% if config_set['TERMS_OF_SERVICE_URL'] %}
|
|
<li><a href="{{ config_set['TERMS_OF_SERVICE_URL'] }}" ng-safenewtab>Terms of Service</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>
|
|
{% if config_set['SERVER_HOSTNAME'] == ('quay.io') or config_set['SERVER_HOSTNAME'] == ('stage.quay.io') %}
|
|
<li>
|
|
<span id="teconsent" style="line-height: 1.1;"></span>
|
|
</li>
|
|
{% endif %}
|
|
<li>{{ version_number }}</li>
|
|
</ul>
|
|
</div>
|
|
</nav>
|
|
|
|
{% if config_set['SERVER_HOSTNAME'] == ('quay.io') or config_set['SERVER_HOSTNAME'] == ('stage.quay.io') %}
|
|
<div id="consent_blackbar" style="position: fixed;bottom: 0;width: 100%;z-index: 5;padding: 10px;"></div>
|
|
{% endif %}
|
|
|
|
<!-- 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>
|
|
|
|
{% if config_set['SERVER_HOSTNAME'].endswith('quay.io') %}
|
|
<script type="text/javascript">
|
|
if (("undefined" !== typeof _satellite) && ("function" === typeof _satellite.pageBottom)) {
|
|
_satellite.pageBottom();
|
|
}
|
|
</script>
|
|
{% endif %}
|
|
</body>
|
|
</html>
|