first commit

This commit is contained in:
2025-07-18 16:20:14 +07:00
commit 98af45c018
16382 changed files with 3148096 additions and 0 deletions

View File

@@ -0,0 +1,12 @@
{% extends "base.twig" %}
{% block contentwrapper %}
<div id="portalmenu" class="ui-tabs ui-widget ui-widget-content ui-corner-all">
<div id="portalcontent" class="ui-tabs-panel ui-widget-content ui-corner-bottom">
{{ block('content') }}
</div>
</div>
{% endblock %}

View File

@@ -0,0 +1,28 @@
{% set pagetitle = 'Incorrect Attributes' | trans %}
{% extends "base.twig" %}
{% block content %}
<h1>{{ pagetitle }}</h1>
<p>{{ 'One or more of the attributes supplied by your identity provider did not contain the expected number of values.'|trans }}</p>
<h3>{{ 'The problematic attribute(s) are:'|trans }}</h3>
<dl class="cardinalityErrorAttributes">
{% for attr,issues in cardinalityErrorAttributes %}
{% set got = issues[0] %}
{% set want = issues[1] %}
<dt>{{ attr }}</dt>
<dd>{% trans with {
'%got%': got,
'%want%': want
} %}got %got% values, want %want%{% endtrans %}</dd>
{% endfor %}
</dl>
{% if LogoutURL is defined %}
<p><a href="{{ LogoutURL }}">{{ 'Logout'|trans }}</a></p>
{% endif %}
{% endblock %}

View File

@@ -0,0 +1,33 @@
{% set pagetitle = 'An error has occurred'|trans %}
{% extends "base.twig" %}
{% block content %}
<h2>{{ pagetitle }}</h2>
{% if code is same as ('IDENTIFICATION_FAILURE') %}
<p>{{ 'The identification procesd has failed.' |trans }}</p>
{% elseif code is same as ('AUTHENTICATION_FAILURE') %}
<p>{{ 'The authentication procesd has failed.' |trans }}</p>
{% elseif code is same as ('AUTHORIZATION_FAILURE') %}
<p>{{ 'The authorization procesd has failed.' |trans }}</p>
{% else %}
<p>{{ 'There was an issue while signing you in.' |trans }}</p>
{% endif %}
{% if ts is defined or rp is defined or tid is defined or ctx is defined %}
<table id="table_with_attributes" class="attributes pure-table pure-table-striped pure-table-attributes" summary="attribute overview">
{% if ts is defined %}
<tr><td>Timestamp</td><td>{{ ts }}</td></tr>
{% endif %}
{% if rp is defined %}
<tr><td>Service Provider</td><td>{{ rp }}</td></tr>
{% endif %}
{% if tid is defined %}
<tr><td>Reference code</td><td>{{ tid }}</td></tr>
{% endif %}
{% if ctx is defined %}
<tr><td>Context</td><td>{{ ctx }}</td></tr>
{% endif %}
</table>
{% endif %}
{% endblock %}

View File

@@ -0,0 +1,8 @@
{% set pagetitle = 'Error report sent'|trans %}
{% extends "base.twig" %}
{% block content %}
<h2>{{ pagetitle }}</h2>
<p>{{ 'The error report has been sent to the administrators.' |trans }}</p>
{% endblock %}

View File

@@ -0,0 +1,126 @@
{% set pagetitle = 'Enter your username and password'|trans %}
{% extends "@core/base.twig" %}
{% block postload %}
<script src="{{ asset('js/loginuserpass.js', 'core') }}"></script>
{% endblock %}
{% block content %}
{%- if not isProduction %}
<div class="message-box warning">
{% trans %}You are now accessing a pre-production system. This authentication setup is for testing and pre-production verification only. If someone sent you a link that pointed you here, and you are not <i>a tester</i> you probably got the wrong link, and should <b>not be here</b>.{% endtrans %}
</div>
{% endif -%}
{% if errorcode -%}
<div class="pure-g">
<div class="pure-u-1">
<div class="message-box error">
{% set errtitles = errorcodes['title'] %}
{% set errtitle = errtitles[errorcode] %}
<h3>{{ errtitle|trans(errorparams) }}</h3>
{% set errdescs = errorcodes['descr'] %}
{% set errdesc = errdescs[errorcode] %}
<p>{{ errdesc|trans(errorparams) }}</p>
</div>
</div>
</div>
{%- endif %}
<h1>{{ 'Enter your username and password'|trans }}</h1>
<p>{{ 'A service has requested you to authenticate yourself. Please enter your username and password in the form below.'|trans }}</p>
<div class="center-form login-form-start">
<form id="f" class="pure-form pure-form-aligned" action="{{ formURL }}" method="post" name="f" spellcheck="false">
<div class="pure-control-group">
<label for="username">{{ 'Username'|trans }}</label>
<input id="username" {{ forceUsername ? 'disabled autocomplete="off"' }} placeholder="{{ username }}" type="text" name="username" class="edge"
{%- if not forceUsername %} tabindex="1" value="{{ username }}" autocomplete="username" {% endif %}
{%- if not forceUsername and not username %} autofocus {% endif %} >
{% if rememberUsernameEnabled and not forceUsername -%}
</div>
<div class="pure-controls">
<label for="remember_username" class="pure-checkbox">
<input id="remember_username" type="checkbox" tabindex="4"
{{ rememberUsernameChecked ? 'checked' }} name="remember_username" value="Yes">
<small>{{ 'Remember my username'|trans }}</small>
</label>
{%- endif %}
</div>
<div class="pure-control-group">
<label for="password">{{ 'Password'|trans}}</label>
<input id="password" type="password" tabindex="2" name="password" class="edge" autocomplete="current-password"
{%- if forceUsername or username %} autofocus {% endif %} >
</div>
{% if rememberMeEnabled -%}
<div class="pure-controls">
<label for="remember_me" class="pure-checkbox">
<input id="remember_me" type="checkbox" tabindex="5"
{{ rememberMeChecked ? 'checked="checked"' }} name="remember_me" value="Yes">
<small>{{ 'Remember me'|trans }}</small>
</label>
</div>
{%- endif %}
{% if organizations is defined -%}
<div class="pure-control-group">
<label for="organization">{{ 'Organization'|trans }}</label>
<div class="pure-select right pure-input-1-2 pure-input-sm-1-1">
<select name="organization" id="organization" tabindex="3">
{{ selectedOrg ?: null }}
{%- for id, orgDesc in organizations -%}
{% if id == selectedOrg -%}
{%- set selected = 'selected="selected"' %}
{%- else -%}
{% set selected = '' -%}
{% endif -%}
{% if orgDesc -%}
<option value="{{ id }}" {{ selected }}>{{ orgDesc|trans }}</option>
{% endif -%}
{% endfor %}
</select>
</div>
{% if rememberOrganizationEnabled is defined -%}
<div class="pure-controls">
<label for="remember_organization" class="pure-checkbox">
<input type="checkbox" id="remember_organization" tabindex="5" name="remember_organization"
value="Yes" {{ rememberOrganizationChecked ? 'checked="checked"' }} >
<small>{{ 'Remember my organization'|trans }}</small>
</label>
</div>
{%- endif %}
</div> <!--pure-control-group-->
{%- endif %}
<div class="pure-control-group center login-form-submit">
<button class="pure-button pure-button-red pure-input-1-2 pure-input-sm-1-1 right" id="submit_button"
type="submit" tabindex="6" data-default="{% trans %}Login{% endtrans %}"
data-processing="{% trans %}Processing...{% endtrans %}">
{% trans %}Login{% endtrans %}
</button>
</div>
</form>
</div>
{% if loginpage_links is defined -%}
<ul>
{% for link in loginpage_links -%}
<li><a href="{{ link.href }}">{{ link['text']|trans }}</a></li>
{% endfor %}
</ul>
{%- endif %}
<br><br>
<div class="pure-form-message">
<strong>{{ 'Help! I don\'t remember my password.'|trans }}</strong>
<p>{{ 'Without your username and password you cannot authenticate yourself for access to the service. There may be someone that can help you. Consult the help desk at your organization!'|trans }}</p>
</div>
{% endblock %}

View File

@@ -0,0 +1,2 @@
{% set pagetitle = 'Logging out...'|trans %}
{% extends "@core/logout-iframe.twig" %}

View File

@@ -0,0 +1,126 @@
{% set pagetitle = 'Logging out...'|trans %}
{% extends "base.twig" %}
{% block preload %}
<link rel="preload" href="{{ asset('js/logout.js') }}" as="script">
{%- if type != "init" %}
{%- set content = '2' %}
{%- if remaining_services|length == 0 %}
{%- set content = '0; url=' ~ moduleURL('core/logout-iframe-done', {'id': auth_state }) %}
{%- endif %}
<meta http-equiv="refresh" content="{{ content }}">
{% endif %}
{% endblock preload %}
{% block content %}
<h1>{{ pagetitle }}</h1>
{%- if terminated_service %}
{%- set SP = terminated_service|entityDisplayName %}
<p>{% trans with {
'%SP%': SP
} %}You are now successfully logged out from %SP%.{% endtrans %}</p>
{%- endif %}
{%- if remaining_services %}
{%- set failed = false %}
{%- set remaining = 0 %}
{%- if remaining_services|length > 0 %}
<p>{% trans %}You are also logged in on these services:{% endtrans %}</p>
{%- endif %}
<div class="custom-restricted-width">
<ul class="fa-ul">
{%- for key, sp in remaining_services %}
{%- set timeout = 5 %}
{%- set name = sp['metadata']|entityDisplayName %}
{%- set icon = 'circle-o-notch' %}
{%- if sp['status'] == 'completed' %}
{%- set icon = 'check-circle' %}
{%- elseif sp['status'] == 'failed' %}
{%- set icon = 'exclamation-circle' %}
{%- set failed = true %}
{%- elseif (sp['status'] == 'onhold' or sp['status'] == 'inprogress') %}
{%- set remaining = remaining + 1 %}
{%- endif %}
{%- if type == 'nojs' and sp['status'] == 'inprogress' %}
{%- set icon = icon ~ ' fa-spin' %}
{%- endif %}
<li id="sp-{{ key }}" data-id="{{ key }}" data-status="{{ sp['status'] }}"
{#- #} data-timeout="{{ timeout }}">
<span class="fa-li"><i id="icon-{{ key }}" class="fa fa-{{ icon }}"></i></span>
{{ name }}
{%- if sp['status'] != 'completed' and sp['status'] != 'failed' %}
{%- if type == 'nojs' %}
<iframe id="iframe-{{ key }}" class="hidden" src="{{ sp['logoutURL'] }}"></iframe>
{%- else %}
<iframe id="iframe-{{ key }}" class="hidden" data-url="{{ sp['logoutURL'] }}"></iframe>
{%- endif %}
{%- else %}
{%- if sp['status'] == 'failed' %}
({% trans %}logout is not supported{% endtrans %})
{%- endif %}
{%- endif %}
</li>
{%- endfor %}
</ul>
</div>
<br>
<div id="error-message"{% if not failed or type == 'init' %} class="hidden"{% endif %}>
<div class="message-box error">
{% trans %}Unable to log out of one or more services. To ensure that all your sessions are closed, you are encouraged to <i>close your webbrowser</i>.{% endtrans %}
</div>
</div>
<form id="error-form" action="{{ moduleURL('core/logout-iframe-done') }}"
{%- if (not failed or type == 'init') and remaining %} class="hidden"{% endif %}>
<input type="hidden" name="id" value="{{ auth_state }}">
<button type="submit" id="btn-continue" name="ok" class="pure-button pure-button-red">
{%- trans %}Continue{% endtrans -%}
</button>
</form>
<div id="original-actions"{% if type != 'init' %} class="hidden"{% endif %}>
<p>{% trans %}Do you want to logout from all the services above?{% endtrans %}</p>
<div class="pure-button-group two-elements">
<form id="startform" action="{{ moduleURL('core/logout-iframe') }}">
<input type="hidden" name="id" value="{{ auth_state }}">
<noscript>
<input type="hidden" name="type" value="nojs" id="logout-type-selector">
</noscript>
<button type="submit" id="btn-all" name="ok" class="pure-button pure-button-red">
{%- trans %}Yes, all services{% endtrans -%}
</button>
</form>
<form action="{{ moduleURL('core/logout-iframe-done') }}">
<input type="hidden" name="id" value="{{ auth_state }}">
<input type="hidden" name="cancel" value="">
<button id="btn-cancel" class="pure-button" type="submit">
{%- if terminated_service %}{% trans with {
'%SP%': SP
} %}No, only %SP%{% endtrans %}
{%- else %}{% trans %}No{% endtrans %}{% endif -%}
</button>
</form>
</div>
</div>
{%- else %}
<form id="error-form" action="{{ moduleURL('core/logout-iframe-done') }}">
<input type="hidden" name="id" value="{{ auth_state }}">
<button type="submit" id="btn-continue" name="ok" class="pure-button pure-button-red">
{%- trans %}Continue{% endtrans -%}
</button>
</form>
{% endif %}
{% endblock %}
{% block postload %}
<script src="{{ asset('js/logout.js') }}"></script>
{% endblock postload %}

View File

@@ -0,0 +1,6 @@
<p>{{ 'This is most likely a configuration problem on either the service provider or identity provider.'|trans }}</p>
<ul>
<li>{{ 'If you are a user who received this error after following a link on a site, you should report this error to the owner of that site.'|trans }}</li>
<li>{{ 'If you are a developer who is deploying a single sign-on solution, you have are trying to reach an endpoint using the wrong HTTP-method.'|trans }}</li>
</ul>

View File

@@ -0,0 +1,10 @@
{% set pagetitle = 'Missing cookie'|trans %}
{% extends "base.twig" %}
{% block content %}
<h2>{{ 'Missing cookie'|trans }}</h2>
<p>{{ 'You appear to have disabled cookies in your browser. Please check the settings in your browser, and try again.'|trans }}</p>
{% if retryURL is not null %}
<p><a href="{{ retryURL|escape('html') }}" class="pure-button pure-button-red" id="retry">{{ 'Retry'|trans }}</a></p>
{% endif %}
{% endblock %}

View File

@@ -0,0 +1,7 @@
<p>{{ 'This is most likely a configuration problem on either the service provider or identity provider.'|trans }}</p>
<ul>
<li>{{ 'If you are a user who received this error after following a link on a site, you should report this error to the owner of that site.'|trans }}</li>
<li>{{ 'If you are a developer who is deploying a single sign-on solution, you have a problem with the metadata configuration. Verify that metadata is configured correctly on both the identity provider and service provider.'|trans }}</li>
</ul>

View File

@@ -0,0 +1,14 @@
<h3>{{ 'Suggestions for resolving this problem:'|trans }}</h3>
<ul>
<li>{{ 'Check that the link you used to access the web site is correct.'|trans }}</li>
<li>{{ 'Go back to the previous page and try again.'|trans }}</li>
<li>{{ 'Close the web browser, and try again.'|trans }}</li>
</ul>
<h3>{{ 'This error may be caused by:'|trans }}</h3>
<ul>
<li>{{ 'The link used to get here was bad, perhaps a bookmark.'|trans }}</li>
<li>{{ 'Using the back and forward buttons in the web browser.'|trans }}</li>
<li>{{ 'Opened the web browser with tabs saved from the previous session.'|trans }}</li>
<li>{{ 'Cookies may be disabled in the web browser.'|trans }}</li>
</ul>

View File

@@ -0,0 +1,16 @@
{% set pagetitle = 'SimpleSAMLphp'|trans %}
{% extends "base.twig" %}
{% block content %}
<h1>{{ 'Too short interval between single sign on events.'|trans }}</h1>
<form style="display: inline; margin: 0px; padding: 0px" action="{{ moduleURL('core/short_sso_interval') }}">
{% for name, value in params %}
<input type="hidden" name="{{ name|escape('html') }}" value="{{ value|escape('html') }}">
{% endfor %}
<p>{{ 'We have detected that there is only a few seconds since you last authenticated with this service provider, and therefore assume that there is a problem with this SP.'|trans }}</p>
<div class="trackidtext">
<p>{{ 'If you report this error, please also report this tracking number which makes it possible to locate your session in the logs available to the system administrator:'|trans }}<span class="trackid">{{ trackId }}</span></p>
</div>
<input type="submit" name="continue" id="contbutton" value="{{ 'Retry login'|trans|escape('html') }}" autofocus>
</form>
{% endblock %}

View File

@@ -0,0 +1,12 @@
{% set pagetitle = 'Welcome'|trans %}
{% extends "@core/base.twig" %}
{% block content %}
<h1>{{ 'Welcome'|trans }}</h1>
<p>{{ 'This is the front page of the SimpleSAMLphp authentication software. There\'s not much to see here.'|trans }}</p>
<p>{% trans %}If you are the administrator of this installation, please refer to the <a href="https://simplesamlphp.org/docs/">SimpleSAMLphp documentation</a> for how to configure and interact with the software.{% endtrans %}</p>
{% endblock %}