diff --git a/wiki/auth/anonymous_user.py b/wiki/auth/anonymous_user.py new file mode 100644 index 00000000..abffeda1 --- /dev/null +++ b/wiki/auth/anonymous_user.py @@ -0,0 +1,74 @@ +# -*- coding: iso-8859-1 -*- +""" + MoinMoin - CAS authentication + + Jasig CAS (see http://www.jasig.org/cas) authentication module. + + @copyright: 2012 MoinMoin:RichardLiao + @license: GNU GPL, see COPYING for details. +""" + +import sys +import os +import time, re +import urlparse +import urllib, urllib2 + +from MoinMoin import log +logging = log.getLogger(__name__) + +from MoinMoin.auth import BaseAuth +from MoinMoin import user, wikiutil +from MoinMoin.Page import Page + +from werkzeug import get_host + +class AnonymousAuth(BaseAuth): + name = 'AnonymousAuth' + login_inputs = [] + logout_possible = False + + def __init__(self, auth_username="Connexion"): + BaseAuth.__init__(self) + self.auth_username = auth_username + + def can_view(self, request): + raise NotImplementedError + + def request(self, request, user_obj, **kw): + + # authenticated user + if user_obj and user_obj.valid: + return user_obj, True + + + # anonymous + if self.can_view(request): + if user_obj and user_obj.valid: + return user_obj, True + u = user.User(request, auth_username=self.auth_username, auth_method=self.name) + u.valid = True + u.name = self.auth_username + elif user_obj and user_obj.valid: + u = user.User(request, auth_method=self.name) + u.valid = False + else: + u = user_obj + + action = request.args.get("action", "") + p = urlparse.urlparse(request.url) + # Impossible to edit preferences + if u and u.valid and action == "userprefs": + url = urlparse.urlunparse(('https', p.netloc, p.path, "", "", "")) + request.http_redirect(url) + # If reach anonymous user personnal page, redirect to referer with action=login + if p.path == "/%s" % self.auth_username and action != "login": + referer_p = urlparse.urlparse(request.http_referer) + if get_host(request.environ) == referer_p.netloc: + referer_url = urlparse.urlunparse(('https', p.netloc, referer_p.path, "", "", "")) + request.http_redirect(referer_url + "?action=login") + else: + request.http_redirect("https://"+ p.netloc + "/?action=login") + + return u, True +