This repository has been archived on 2023-02-21. You can view files and clone it, but cannot push or open issues or pull requests.
authentic-adeline/extra/modules/admin.ptl

332 lines
12 KiB
Plaintext

import lasso
from quixote import redirect
from quixote.directory import Directory
from qommon import get_cfg
from authentic import misc
from authentic.form import *
from authentic import storage
from authentic.admin.menu import html_top, command_icon
import authentic.admin.root
import authentic.admin.menu
from collectivity import Collectivity
from national_services import NationalService
from authentic.admin.settings import cfg_submit
class NationalServiceUI:
def __init__(self, nationalservice):
self.nationalservice = nationalservice
def form(self, new = False):
form = Form(enctype='multipart/form-data')
form.add(StringWidget, 'name', title = _('Name'), required = True, size = 30,
value = self.nationalservice.name)
form.add(StringWidget, 'url', title = _('URL'), required = True, size = 30,
value = self.nationalservice.url)
form.add(StringWidget, 'key', title = _('Key'), required = False, size = 10,
value = self.nationalservice.key)
form.add_submit('submit', _('Submit'))
form.add_submit('cancel', _('Cancel'))
return form
def form_new(self):
return self.form(new = True)
def form_edit(self):
return self.form()
def submit_form(self, form):
for f in ('name', 'url', 'key'):
if form.get_widget(f):
setattr(self.nationalservice, f, form.get_widget(f).parse())
class NationalServicePage(Directory):
_q_exports = ['edit', 'delete']
def __init__(self, component):
self.nationalservice = NationalService.get(component)
self.nationalservice_ui = NationalServiceUI(self.nationalservice)
def edit [html] (self):
form = self.nationalservice_ui.form_edit()
if form.get_widget('cancel').parse():
return redirect('..')
if not form.is_submitted() or form.has_errors():
html_top('adeline', title = _('Edit National Service'))
'<h2>%s - %s</h2>' % (_('Edit National Service'), self.nationalservice.name)
form.render()
else:
self.nationalservice_ui.submit_form(form)
self.nationalservice.store()
return redirect('../..')
def delete [html] (self):
form = Form(enctype='multipart/form-data')
form.widgets.append(HtmlWidget('<p>%s</p>' % _(
'You are about to irrevocably delete this national service.')))
form.add_submit('submit', _('Submit'))
form.add_submit('cancel', _('Cancel'))
if form.get_widget('cancel').parse():
return redirect('..')
if not form.is_submitted() or form.has_errors():
html_top('adeline', title = _('Delete National Service'))
'<h2>%s %s</h2>' % (_('Deleting National Service:'), self.nationalservice.name)
form.render()
else:
self.nationalservice.remove_self()
return redirect('../..')
class CollectivityUI:
def __init__(self, collectivity):
self.collectivity = collectivity
def form(self, new = False):
form = Form(enctype="multipart/form-data")
if new:
form.add(StringWidget, 'id', title = _('Collectivity SPL Id'),
required = True, size = 30,
value = self.collectivity.id)
form.add(StringWidget, 'name', title = _('Name'), required = True, size = 30,
value = self.collectivity.name)
form.add(StringWidget, 'msp_tsid', title = _('MSP tsId'), required = False, size = 10,
value = self.collectivity.msp_tsid)
form.add(StringWidget, 'url_on_logout', title = _('URL on Logout'), required = False,
size = 30, value = self.collectivity.url_on_logout)
form.add_submit('submit', _('Submit'))
form.add_submit('cancel', _('Cancel'))
return form
def form_new(self):
return self.form(new = True)
def form_edit(self):
return self.form()
def submit_form(self, form):
for f in ('id', 'name', 'msp_tsid', 'url_on_logout'):
if form.get_widget(f):
setattr(self.collectivity, f, form.get_widget(f).parse())
class CollectivityPage(Directory):
_q_exports = ["edit", "delete"]
def __init__(self, component):
self.collectivity = Collectivity.get(component)
self.collectivity_ui = CollectivityUI(self.collectivity)
def edit [html] (self):
form = self.collectivity_ui.form_edit()
if form.get_widget('cancel').parse():
return redirect('..')
if not form.is_submitted() or form.has_errors():
html_top('adeline', title = _('Edit Collectivity'))
"""<h2>%s - %s</h2>""" % (_('Edit Collectivity'), self.collectivity.id)
form.render()
else:
self.collectivity_ui.submit_form(form)
self.collectivity.store()
return redirect('..')
def delete [html] (self):
form = Form(enctype="multipart/form-data")
form.widgets.append(HtmlWidget("""<p>%s</p>""" % _(
"You are about to irrevocably delete this collectivity.")))
form.add_submit("submit", _("Submit"))
form.add_submit("cancel", _("Cancel"))
if form.get_widget('cancel').parse():
return redirect('..')
if not form.is_submitted() or form.has_errors():
html_top('adeline', title = _('Delete Collectivity'))
"""<h2>%s %s</h2>""" % (_('Deleting Collectivity:'), self.collectivity.name)
form.render()
else:
self.collectivity.remove_self()
return redirect('..')
class NationalServicessDirectory(Directory):
_q_exports = ['']
def _q_lookup(self, component):
return NationalServicePage(component)
class AdelineSettingsDirectory(Directory):
_q_exports = ['', 'newcollectivity', 'newnationalservice', 'options', 'mspmapping',
'nationalservices']
nationalservices = NationalServicessDirectory()
def _q_index [html] (self):
html_top('adeline')
'<p><a href="newcollectivity">%s</a> - ' % _('New Collectivity')
'<a href="newnationalservice">%s</a> - '% _('New National Service')
'<a href="options">%s</a></p>' % _('Options')
'<h2>%s</h2>' % _('Collectivities')
'<ul class="biglist">'
for collectivity in Collectivity.select(order_by = 'name'):
'<li>'
'<strong>%s</strong>' % collectivity.name
'<p class="details">'
_('SPL Code: ')
collectivity.id
'</p>'
'<p class="commands">'
command_icon('%s/edit' % collectivity.id, 'edit')
command_icon('%s/delete' % collectivity.id, 'remove')
'</p></li>'
'</ul>'
'<h2>%s</h2>' % _('National Services (for MSP)')
'<ul class="biglist">'
for nationalservice in NationalService.select():
'<li>'
'<strong>%s</strong>' % nationalservice.name
'<p class="commands">'
command_icon('nationalservices/%s/edit' % nationalservice.id, 'edit')
command_icon('nationalservices/%s/delete' % nationalservice.id, 'remove')
'</p></li>'
'</ul>'
def newcollectivity [html] (self):
collectivity = Collectivity()
collectivity_ui = CollectivityUI(collectivity)
form = collectivity_ui.form_new()
if form.get_widget('cancel').parse():
return redirect('.')
if not form.is_submitted() or form.has_errors():
html_top('adeline', title = _('New Adeline Collectivity'))
'<h2>%s</h2>' % _('New Adeline Collectivity')
form.render()
else:
collectivity_ui.submit_form(form)
collectivity.store()
return redirect('.')
def newnationalservice [html] (self):
nationalservice = NationalService()
nationalservice_ui = NationalServiceUI(nationalservice)
form = nationalservice_ui.form_new()
if form.get_widget('cancel').parse():
return redirect('.')
if not form.is_submitted() or form.has_errors():
html_top('adeline', title = _('New MSP National Service'))
'<h2>%s</h2>' % _('New MSP National Service')
form.render()
else:
nationalservice_ui.submit_form(form)
nationalservice.store()
return redirect('.')
def options [html] (self):
form = Form(enctype="multipart/form-data")
adeline_cfg = get_cfg('adeline', {})
options = [(None, _('Unknown'))]
for klp, lp in get_cfg('providers', {}).items():
if lp['role'] != lasso.PROVIDER_ROLE_IDP:
continue
p = lasso.Provider(lp['role'],
misc.get_abs_path(lp['metadata']),
misc.get_abs_path(lp.get('publickey')),
misc.get_abs_path(lp.get('cacertchain')))
if not p:
continue
label = misc.get_provider_and_label(klp)[1]
if not label:
label = klp
options.append((p.providerId, label))
form.add(SingleSelectWidget, 'msp_idp', title = _('MSP IdP'),
options = options, value = adeline_cfg.get('msp_idp'))
form.add(StringWidget, 'msp_portal_url', title = _('MSP Portal URL'),
value = adeline_cfg.get('msp_portal_url'))
form.add(StringWidget, 'data_migration_url', title = _('Data Migration URL'),
value = adeline_cfg.get('data_migration_url'))
form.add(StringWidget, 'msp_session_image_url', title = _('MSP Session Image URL'),
value = adeline_cfg.get('msp_session_image_url'))
form.add(StringWidget, 'msp_new_account_url', title = _('MSP New Account URL'),
value = adeline_cfg.get('msp_new_account_url'))
form.add(StringWidget, 'http_auth_tuple', title = _('HTTP Authentication Tuple'),
value = adeline_cfg.get('http_auth_tuple'),
hint = _('Format: username:password'))
form.add_submit("submit", _("Submit"))
form.add_submit("cancel", _("Cancel"))
if form.get_widget('cancel').parse():
return redirect('.')
if not form.is_submitted() or form.has_errors():
html_top('adeline', title = _('Adeline Options'))
'<h2>%s</h2>' % _('Adeline Options')
form.render()
else:
cfg_submit(form, 'adeline', ['msp_idp', 'msp_portal_url',
'data_migration_url', 'http_auth_tuple',
'msp_session_image_url', 'msp_new_account_url'])
redirect('.')
def mspmapping [html] (self):
form = Form(enctype="multipart/form-data")
msp_mapping = get_cfg('adeline', {}).get('msp_mapping', {})
keys = []
for klp, lp in get_cfg('providers', {}).items():
if lp['role'] != lasso.PROVIDER_ROLE_SP:
continue
try:
p, label = misc.get_provider_and_label(klp)
except KeyError:
continue
keys.append(klp)
key_provider_id = klp
form.add(StringWidget, key_provider_id, title = label, size=20, required = False,
value = msp_mapping.get(key_provider_id))
form.add_submit('submit', _('Submit'))
form.add_submit('cancel', _('Cancel'))
if not form.is_submitted() or form.has_errors():
html_top('adeline', title = _('MSP SP Mapping'))
'<h2>%s</h2>' % _('MSP SP Mapping')
form.render()
else:
self.mspmapping_submit(form, keys)
redirect('.')
def mspmapping_submit(self, form, keys):
if not get_cfg('adeline'):
get_publisher().cfg['adeline'] = {}
if not get_cfg('adeline').has_key('msp_mapping'):
get_cfg('adeline')['msp_mapping'] = {}
msp_mapping = get_cfg('adeline')['msp_mapping']
for k in keys:
msp_mapping[k] = form.get_widget(k).parse()
get_publisher().write_cfg()
def _q_lookup(self, component):
return CollectivityPage(component)
authentic.admin.root.register_page('adeline', AdelineSettingsDirectory(), N_('Adeline'))