misc: adjust idp pages to newer markup/style (#55869) #596

Merged
fpeters merged 1 commits from wip/55869-idp-pages-style into main 2023-08-16 19:54:26 +02:00
4 changed files with 40 additions and 25 deletions

View File

@ -689,7 +689,7 @@ def test_settings_idp(pub):
resp = resp.follow()
assert 'http://authentic.example.net/idp/saml2/metadata' in resp.text
assert len(rsps.calls) == 1
resp = resp.click('View')
resp = resp.click(resp.pyquery('.biglistitem--content a').text())
resp = resp.click('Update from remote URL')
assert len(rsps.calls) == 2

View File

@ -24,6 +24,8 @@ try:
except ImportError:
lasso = None
import xml.etree.ElementTree as ET
from django.utils.encoding import force_bytes, force_str
from quixote import get_publisher, get_request, get_response, get_session, redirect
from quixote.directory import Directory
@ -212,13 +214,15 @@ class AdminIDPDir(Directory):
def _q_index(self):
get_response().set_title(self.title)
r = TemplateIO(html=True)
r += htmltext('<div id="appbar">')
r += htmltext('<h2>%s</h2>') % _('Identity Providers')
r += htmltext('<ul id="nav-idp-admin">\n')
r += htmltext(' <li><a href="new">%s</a></li>\n') % _('New')
r += htmltext(' <li><a href="new_remote">%s</a></li>\n') % _('Create new from remote URL')
r += htmltext('</ul>')
r += htmltext('<span class="actions">\n')
r += htmltext(' <a rel="popup" href="new_remote">%s</a>\n') % _('Create new from remote URL')
r += htmltext(' <a href="new">%s</a>\n') % _('New')
r += htmltext('</span>')
r += htmltext('</div>')
r += htmltext('<ul class="biglist">')
r += htmltext('<ul class="biglist idp--list">')
for kidp, idp in sorted(get_cfg('idp', {}).items(), key=lambda k: k[0]):
p = None
if idp and isinstance(idp, dict):
@ -234,17 +238,21 @@ class AdminIDPDir(Directory):
except TypeError:
p = None
r += htmltext('<li>')
r += htmltext('<li class="biglistitem">')
r += htmltext('<span class="biglistitem--content">')
if p:
r += htmltext('<strong class="label">%s</strong>') % misc.get_provider_label(p)
r += htmltext('<span class="label"><a href="%s/">%s</a></span>') % (
kidp,
misc.get_provider_label(p),
)
else:
r += htmltext('<strong class="label">%s %s</strong>') % (kidp, _('Broken'))
if p:
r += htmltext('<p class="details">')
r += htmltext('<span class="label">%s %s</span>') % (kidp, _('Broken'))
if p and p.providerId != misc.get_provider_label(p):
r += htmltext('<span class="biglistitem--content-details">')
r += htmltext('<span class="data">%s</span>') % p.providerId
r += htmltext('</p>')
r += htmltext('</span>')
r += htmltext('</span>')
r += htmltext('<p class="commands">')
r += command_icon('%s/' % kidp, 'view')
r += command_icon('%s/edit' % kidp, 'edit')
r += command_icon('%s/delete' % kidp, 'remove')
r += htmltext('</p></li>')
@ -605,17 +613,19 @@ class AdminIDPUI(Directory):
with open(misc.get_abs_path(self.idp['metadata'])) as fd:
metadata = fd.read()
try:
t = metadata.decode('utf8').encode(get_publisher().site_charset)
except Exception:
t = metadata
r += htmltext(t)
metadata_tree = ET.fromstring(metadata)
misc.indent_xml(metadata_tree)
metadata_text = ET.tostring(metadata_tree).decode()
except Exception as e:
metadata_text = str(_('Unable to display metadata (%s)') % e)
r += metadata_text
r += htmltext('</pre>')
r += htmltext('</div>')
r += htmltext('<p>')
r += htmltext('<a href="edit">%s</a> ') % _('Edit')
r += htmltext('<a class="button" href="edit">%s</a> ') % _('Edit')
if self.idp.get('metadata_url'):
r += htmltext('<a href="update_remote">%s</a>') % _('Update from remote URL')
r += htmltext('<a class="button" href="update_remote">%s</a>') % _('Update from remote URL')
r += htmltext('</p>')
return r.getvalue()
@ -794,7 +804,7 @@ class MethodAdminDirectory(Directory):
get_response().set_title(self.title)
r = TemplateIO(html=True)
r += htmltext('<h2>SAML 2.0</h2>')
r += htmltext('<dl> <dt><a href="sp">%s</a></dt> <dd>%s</dd>') % (
r += htmltext('<a class="button button-paragraph" href="sp">%s <p>%s</p></a>') % (
_('Service Provider'),
_('Configure SAML 2.0 parameters'),
)
@ -803,22 +813,21 @@ class MethodAdminDirectory(Directory):
hasattr(get_publisher().root_directory_class, 'saml')
):
metadata_url = '%s/metadata.xml' % get_cfg('sp')['saml2_base_url']
r += htmltext('<dt><a href="%s">%s</a></dt> <dd>%s</dd>') % (
r += htmltext('<a class="button button-paragraph" href="%s">%s <p>%s</p></a>') % (
metadata_url,
_('SAML 2.0 Service Provider Metadata'),
_('Download Service Provider SAML 2.0 Metadata file'),
)
r += htmltext('<dt><a href="idp/">%s</a></dt> <dd>%s</dd>') % (
r += htmltext('<a class="button button-paragraph" href="idp/">%s <p>%s</p></a>') % (
_('Identity Providers'),
_('Add and remove identity providers'),
)
r += htmltext('<dt><a href="identities">%s</a></dt> <dd>%s</dd>') % (
r += htmltext('<a class="button button-paragraph" href="identities">%s <p>%s</p></a>') % (
_('Identities'),
_('Configure identities creation'),
)
r += htmltext('</dl>')
return r.getvalue()
def generate_rsa_keypair(self, branch='sp'):

View File

@ -776,6 +776,7 @@ ul.biglist li.disabled a {
color: #888;
}
ul.biglist.idp--list,
ul.biglist.sortable {
li {
display: flex;
@ -830,12 +831,17 @@ div.bo-block ul.biglist p.details.badge {
color: white;
}
ul.biglist.idp--list li:hover,
ul.biglist.sortable li:hover,
ul.biglist a:hover,
div.bo-block ul.biglist li.hidden-status:hover {
background: #ccc;
}
ul.biglist.idp--list li {
padding-left: 1em;
}
div.bo-block span.disabled a {
color: #666;
text-decoration: none;

View File

@ -9,7 +9,7 @@ a {
color: #028;
}
div.WidgetDict .content div {
div.WidgetDict .content div:not(.hint) {
display: inline-block;
}