Skip to content
Snippets Groups Projects
Commit e49ac278 authored by Thijs Kinkhorst's avatar Thijs Kinkhorst
Browse files

Add twig templates for built-in idp discovery.

There's some redundancy now since the code must support the old
and new template. The links variety is not very beautiful, but the
old one wasn't either..
parent eaecd2c2
No related branches found
No related tags found
No related merge requests found
...@@ -587,7 +587,41 @@ class IdPDisco ...@@ -587,7 +587,41 @@ class IdPDisco
} }
$t = new Template($this->config, $templateFile, 'disco'); $t = new Template($this->config, $templateFile, 'disco');
$t->data['idplist'] = $idpList;
$fallbackLanguage = 'en';
$defaultLanguage = $this->config->getString('language.default', $fallbackLanguage);
$translator = $t->getTranslator();
$language = $translator->getLanguage()->getLanguage();
$tryLanguages = [0 => $language, 1 => $defaultLanguage, 2 => $fallbackLanguage];
$newlist = [];
foreach($idpList as $entityid => $data) {
$newlist[$entityid]['entityid'] = $entityid;
foreach ( $tryLanguages as $lang ) {
if ( $name = $this->getEntityDisplayName($data, $lang) ) {
$newlist[$entityid]['name'] = $name;
continue;
}
}
if ( empty($newlist[$entityid]['name']) ) {
$newlist[$entityid]['name'] = $entityid;
}
foreach ( $tryLanguages as $lang ) {
if ( !empty($data['description'][$lang]) ) {
$newlist[$entityid]['description'] = $data['description'][$lang];
continue;
}
}
if ( !empty($data['icon']) ) {
$newlist[$entityid]['icon'] = $data['icon'];
$newlist[$entityid]['iconurl'] = \SimpleSAML\Utils\HTTP::resolveURL($data['icon']);
}
}
usort($newlist, function($idpentry1, $idpentry2) {
return strcasecmp($idpentry1['name'],$idpentry2['name']);
});
$t->data['idplist'] = $newlist;
$t->data['preferredidp'] = $preferredIdP; $t->data['preferredidp'] = $preferredIdP;
$t->data['return'] = $this->returnURL; $t->data['return'] = $this->returnURL;
$t->data['returnIDParam'] = $this->returnIdParam; $t->data['returnIDParam'] = $this->returnIdParam;
...@@ -596,4 +630,16 @@ class IdPDisco ...@@ -596,4 +630,16 @@ class IdPDisco
$t->data['rememberenabled'] = $this->config->getBoolean('idpdisco.enableremember', false); $t->data['rememberenabled'] = $this->config->getBoolean('idpdisco.enableremember', false);
$t->show(); $t->show();
} }
private function getEntityDisplayName(array $idpData, $language)
{
if(isset($idpData['UIInfo']['DisplayName'][$language]) ) {
return $idpData['UIInfo']['DisplayName'][$language];
} elseif ( isset($idpData['name'][$language]) ) {
return $idpData['name'][$language];
} elseif ( isset($idpData['OrganizationDisplayName'][$language]) ) {
return $idpData['OrganizationDisplayName'][$language];
}
return null;
}
} }
{% set pagetitle = "Select your identity provider"|trans %}
{% extends "base.twig" %}
{% block content %}
<h2>{{ pagetitle }}</h2>
<p>{{ "Please select the identity provider where you want to authenticate:" | trans }}</p>
<form method="get" action="{{ urlpattern }}">
<input type="hidden" name="entityID" value="{{ entityID }}">
<input type="hidden" name="return" value="{{ return }}">
<input type="hidden" name="returnIDParam" value="{{ returnIDParam }}">
<select id="dropdownlist" name="idpentityid" autofocus>
{% for idpentry in idplist %}
<option value="{{ idpentry.entityid }}"
{% if idpentry.entityid == preferredidp %}
selected
{% endif %}
>{{ idpentry.name }}</option>
{% endfor %}
</select>
<button class="btn" type="submit">{{ 'Select' | trans }}</button>
{% if rememberenabled %}
<br/><input type="checkbox" name="remember" id="remember" value="1">
<label for="remember">{{ 'Remember my choice' | trans }}</label>
{% endif %}
</form>
{% endblock %}
{% set pagetitle = "Select your identity provider"|trans %}
{% extends "base.twig" %}
{% block content %}
<h2>{{ pagetitle }}</h2>
<p>{{ "Please select the identity provider where you want to authenticate:" | trans }}</p>
<form method="get" action="{{ urlpattern }}">
<input type="hidden" name="entityID" value="{{ entityID }}">
<input type="hidden" name="return" value="{{ return }}">
<input type="hidden" name="returnIDParam" value="{{ returnIDParam }}">
{% if rememberenabled %}
<p><input type="checkbox" name="remember" id="remember" value="1">
<label for="remember">{{ 'Remember my choice' | trans }}</label></p>
{% endif %}
{% for idpentry in idplist %}
{% if idpentry.entityid == preferredidp %}
<div class="preferredidp">
{% if idpentry.iconurl %}
<img class="float-l" src="{{ idpentry.iconurl }}">
{% endif %}
<h3><i class="fa fa-star"></i> {{ idpentry.name }}</h3>
{% if idpentry.description %}
<p>{{ idpentry.description }}</p>
{% endif %}
<button type="submit" class="btn" name="idp_{{ idpentry.entityid }}">{{'Select'|trans}}</button>
</div>
{% endif %}
{% endfor %}
{% for idpentry in idplist %}
{% if idpentry.entityid != preferredidp %}
{% if idpentry.iconurl %}
<img class="float-l" src="{{ idpentry.iconurl }}">
{% endif %}
<h3>{{ idpentry.name }}</h3>
{% if idpentry.description %}
<p>{{ idpentry.description }}</p>
{% endif %}
<button type="submit" class="btn" name="idp_{{ idpentry.entityid }}">{{'Select'|trans}}</button>
{% endif %}
{% endfor %}
</form>
{% endblock %}
...@@ -652,3 +652,8 @@ dt { ...@@ -652,3 +652,8 @@ dt {
.entity-expired { .entity-expired {
color: #500; color: #500;
} }
div.preferredidp {
border: 1px dashed #ccc;
background: #eee;
padding: 2px 2em 2px 2em;
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment