--- a/pvl/login/server.py Mon Jan 13 02:28:19 2014 +0200
+++ b/pvl/login/server.py Mon Jan 13 02:46:18 2014 +0200
@@ -25,6 +25,9 @@
'//netdna.bootstrapcdn.com/bootstrap/3.0.3/js/bootstrap.min.js',
)
+ def redirect (self, *url, **params) :
+ return pvl.web.response.redirect(self.url(*url, **params))
+
def process_cookie (self) :
"""
Reverse the urlencoding used for the cookie...
@@ -55,6 +58,9 @@
self.pubtkt = self.process_cookie()
except pubtkt.Error as ex :
self.cookie_error = ex
+
+ if not self.pubtkt :
+ return self.redirect(Login)
def render_valid (self, valid) :
seconds = valid.seconds + valid.days * (24 * 60 * 60)
@@ -91,7 +97,6 @@
yield 'keys', "Authentication token", pubtkt.bauth
def render_pubtkt (self, pubtkt) :
-
return html.div(class_='panel panel-info')(
html.div(class_='panel-heading')("Login: {pubtkt.uid}".format(pubtkt=self.pubtkt)),
html.div(class_='panel-body')(
@@ -103,6 +108,11 @@
info,
) for icon, title, info in self.render_pubtkt_fields(pubtkt)
),
+ html.div(class_='panel-footer')(
+ html.form(action='/logout', method='post')(
+ html.button(type='submit', class_='btn btn-warning')("Logout"),
+ ),
+ ),
)
def render_info (self) :
@@ -111,13 +121,8 @@
html.h2("Invalid cookie"),
html.p(self.cookie_error),
)
- elif self.pubtkt :
- return self.render_pubtkt(self.pubtkt)
- else :
- return (
- html.a(href=self.url(Login), title="Login")(html.h2("No login")),
- )
+ return self.render_pubtkt(self.pubtkt)
def render (self) :
@@ -176,7 +181,7 @@
domain = self.app.login_domain
return html.div(class_='container')(
- html.form(action=self.request.path, method='POST', id='login')(
+ html.form(action=self.url(), method='POST', id='login')(
html.fieldset(
html.legend("Log in"),
@@ -196,10 +201,49 @@
)
)
+class Logout (Handler) :
+ TITLE = "Logout"
+
+ def process (self) :
+ try :
+ self.pubtkt = self.process_cookie()
+ except Error as ex :
+ self.pubtkt_error = ex
+ self.pubtkt = ex.pubtkt
+
+ if not self.pubtkt :
+ return self.redirect(Index)
+
+ if self.request.method == 'POST' :
+ back = self.app.login_server
+
+ response = pvl.web.response.redirect(back)
+
+ response.set_cookie(self.app.cookie_name, '',
+ expires = 0,
+ domain = self.app.cookie_domain,
+ secure = self.app.cookie_secure,
+ httponly = self.app.cookie_httponly,
+ )
+
+ return response
+
+ def render (self) :
+ return html.div(class_='container')(
+ html.form(action=self.url(), method='post')(
+ html.fieldset(
+ html.legend("Logout {pubtkt.uid}".format(pubtkt=self.pubtkt)),
+
+ html.button(type='submit', class_='btn btn-warning')("Logout"),
+ )
+ )
+ )
+
class LoginApplication (pvl.web.Application) :
URLS = urls.Map((
urls.rule('/', Index),
urls.rule('/login', Login),
+ urls.rule('/logout', Logout),
))
PUBLIC_KEY = 'etc/login/public.pem'