admin: move idp token stuff to idp specific code

This commit is contained in:
Frédéric Péters 2012-08-14 16:25:37 +02:00
parent 7b87646faa
commit a2537caad3
2 changed files with 74 additions and 64 deletions

View File

@ -26,7 +26,6 @@ except NameError:
from quixote import get_publisher, get_response, get_request, get_session, redirect
from quixote.directory import Directory
from qommon import emails
from qommon import errors
from qommon import misc, get_cfg
from wcs.roles import Role
@ -237,66 +236,6 @@ class UserPage(Directory):
self.user.remove_self()
return redirect('..')
def token [html] (self):
request = get_request()
if request.form.has_key('cancel') or request.form.has_key('done'):
return redirect('..')
html_top('users', title = _('Email with Identification Token'))
"<h2>%s</h2>" % _('Email with Identification Token')
if not self.user.identification_token:
token = '-'.join(['%04d' % random.randint(1, 9999) for x in range(4)])
self.user.identification_token = str(token)
self.user.store()
token = self.user.identification_token
token_url = '%s://%s%sident/idp/token?%s' % (request.get_scheme(), request.get_server(),
get_publisher().get_root_url(), self.user.identification_token)
'<p>'
_('The identification token for this user is %s.\n') % token
'<p>'
'<p>'
_('Its token URL is %s') % token_url
'</p>'
if self.user.email:
'<h3>%s</h3>' % _('Sample Email')
mail_data = {
'sitename': get_cfg('misc', {}).get('sitename'),
'token': token,
'token_url': token_url
}
form = Form(enctype='multipart/form-data', use_tokens = True)
mail_subject = EmailsDirectory.get_subject('email_with_token')
mail_subject_template = ezt.Template(compress_whitespace = False)
mail_subject_template.parse(mail_subject)
fd = StringIO()
mail_subject_template.generate(fd, mail_data)
mail_subject = fd.getvalue()
mail_body = EmailsDirectory.get_body('email_with_token')
mail_body_template = ezt.Template(compress_whitespace = False)
mail_body_template.parse(mail_body)
fd = StringIO()
mail_body_template.generate(fd, mail_data)
mail_body = fd.getvalue()
form.add(StringWidget, 'subject', title = _('Subject'), required = True,
value = mail_subject, size = 50)
form.add(TextWidget, 'body', title = _('Body'), required = True,
value = mail_body, cols = 70, rows = 10)
form.add_submit('submit-email', _('Send Email'))
if form.get_submit() == 'submit-email':
emails.email(mail_subject, mail_body, self.user.email)
return redirect('..')
form.render()
def _q_lookup(self, component):
ident_methods = get_cfg('identification', {}).get('methods', [])
if component in ident_methods:
@ -325,7 +264,6 @@ class UsersDirectory(Directory):
debug_cfg = get_cfg('debug', {})
users = get_publisher().user_class.select(order_by = 'name')
has_idp_as_ident = 'idp' in get_cfg('identification', {}).get('methods', [])
checked_roles = None
if get_request().form.get('filter'):

View File

@ -32,6 +32,7 @@ from qommon import misc, get_cfg
from qommon.form import *
from qommon.tokens import Token
from qommon import emails
from qommon import template
from qommon import errors
@ -524,8 +525,6 @@ class AdminIDPDir(Directory):
return redirect('.')
class AdminIDPUI(Directory):
_q_exports = ['', 'delete', 'edit', 'update_remote']
@ -1029,12 +1028,85 @@ class MethodAdminDirectory(Directory):
('grab-user-with-wsf', 'identity-creation', 'notify-on-register', 'email-confirmation'))
class MethodUserDirectory(Directory):
_q_exports = ['token']
def __init__(self, user):
self.user = user
def get_actions(self):
if not self.user.name_identifiers:
return []
return [('token', _('Send email with identification token'))]
def token [html] (self):
request = get_request()
if request.form.has_key('cancel') or request.form.has_key('done'):
return redirect('..')
admin_html_top('users', title = _('Email with Identification Token'))
'<h2>%s</h2>' % _('Email with Identification Token')
if not self.user.identification_token:
token = '-'.join(['%04d' % random.randint(1, 9999) for x in range(4)])
self.user.identification_token = str(token)
self.user.store()
token = self.user.identification_token
token_url = '%s://%s%sident/idp/token?%s' % (request.get_scheme(), request.get_server(),
get_publisher().get_root_url(), self.user.identification_token)
'<p>'
_('The identification token for this user is %s.\n') % token
'<p>'
'<p>'
_('Its token URL is %s') % token_url
'</p>'
if self.user.email:
'<h3>%s</h3>' % _('Sample Email')
mail_data = {
'sitename': get_cfg('misc', {}).get('sitename'),
'token': token,
'token_url': token_url
}
form = Form(enctype='multipart/form-data', use_tokens = True)
mail_subject = EmailsDirectory.get_subject('email_with_token')
mail_subject_template = ezt.Template(compress_whitespace = False)
mail_subject_template.parse(mail_subject)
fd = StringIO()
mail_subject_template.generate(fd, mail_data)
mail_subject = fd.getvalue()
mail_body = EmailsDirectory.get_body('email_with_token')
mail_body_template = ezt.Template(compress_whitespace = False)
mail_body_template.parse(mail_body)
fd = StringIO()
mail_body_template.generate(fd, mail_data)
mail_body = fd.getvalue()
form.add(StringWidget, 'subject', title = _('Subject'), required = True,
value = mail_subject, size = 50)
form.add(TextWidget, 'body', title = _('Body'), required = True,
value = mail_body, cols = 70, rows = 10)
form.add_submit('submit-email', _('Send Email'))
if form.get_submit() == 'submit-email':
emails.email(mail_subject, mail_body, self.user.email)
return redirect('..')
form.render()
class IdPAuthMethod(AuthMethod):
key = 'idp'
description = N_('Liberty/SAML2 identity provider')
method_directory = MethodDirectory
method_admin_directory = MethodAdminDirectory
method_user_directory = MethodUserDirectory
def is_interactive(self):
idps = get_cfg('idp', {})