+class LoginFormBase(LoginPageBase):
+
+ def __init__(self, site, mgr, page, template=None):
+ super(LoginFormBase, self).__init__(site, mgr)
+ self.formpage = page
+ self.formtemplate = template or 'login/form.html'
+ self.trans = None
+
+ def GET(self, *args, **kwargs):
+ context = self.create_tmpl_context()
+ # pylint: disable=star-args
+ return self._template(self.formtemplate, **context)
+
+ def root(self, *args, **kwargs):
+ self.trans = self.get_valid_transaction('login', **kwargs)
+ op = getattr(self, cherrypy.request.method, self.GET)
+ if callable(op):
+ return op(*args, **kwargs)
+
+ def create_tmpl_context(self, **kwargs):
+ next_url = None
+ next_login = self.lm.next_login()
+ if next_login:
+ next_url = '%s?%s' % (next_login.path,
+ self.trans.get_GET_arg())
+
+ cookie = SecureCookie(USERNAME_COOKIE)
+ cookie.receive()
+ username = cookie.value
+
+ target = None
+ if self.trans is not None:
+ tid = self.trans.transaction_id
+ target = self.trans.retrieve().get('login_target')
+ username = self.trans.retrieve().get('login_username')
+ if tid is None:
+ tid = ''
+
+ if username is None:
+ username = ''
+
+ context = {
+ "title": 'Login',
+ "action": '%s/%s' % (self.basepath, self.formpage),
+ "service_name": self.lm.service_name,
+ "username_text": self.lm.username_text,
+ "password_text": self.lm.password_text,
+ "description": self.lm.help_text,
+ "next_url": next_url,
+ "username": username,
+ "login_target": target,
+ "cancel_url": '%s/login/cancel?%s' % (self.basepath,
+ self.trans.get_GET_arg()),
+ }
+ context.update(kwargs)
+ if self.trans is not None:
+ t = self.trans.get_POST_tuple()
+ context.update({t[0]: t[1]})
+
+ return context
+
+