1 """
   2     MoinMoin - login action based on userform
   3 
   4     @copyright: 2005 by Radomirs Cirskis <nad2000 AT gmail DOT com>
   5     @license: GNU GPL, see COPYING for details.
   6 """
   7 
   8 from MoinMoin import user, wikiutil
   9 from MoinMoin.Page import Page
  10 
  11 def execute(pagename, request):
  12     return LoginHandler(pagename, request).handle()
  13 
  14 class LoginHandler:
  15 
  16     def __init__(self, pagename, request):
  17         """ Initialize user settings form. """
  18         self.request = request
  19         self._ = request.getText
  20         self.cfg = request.cfg
  21         self.page = Page(request, pagename)
  22 
  23     def handle(self):
  24         _ = self._
  25         form = self.request.form
  26 
  27         error = None
  28 
  29         # Trying to login with a user name and a password
  30 
  31         # Require valid user name
  32         name = form.get('username', [''])[0]
  33         if not user.isValidName(self.request, name):
  34              error = _("""Invalid user name {{{'%s'}}}.
  35 Name may contain any Unicode alpha numeric character, with optional one
  36 space between words. Group page name is not allowed.""") % name
  37 
  38         # Check that user exists
  39         elif not user.getUserId(self.request, name):
  40             error = _('Unknown user name: {{{"%s"}}}. Please enter'
  41                          ' user name and password.') % name
  42 
  43         # Require password
  44         else:
  45             password = form.get('password',[None])[0]
  46             if not password:
  47                 error = _("Missing password. Please enter user name and"
  48                          " password.")
  49             else:
  50                 # Load the user data and check for validness
  51                 theuser = user.User(self.request, name=name, password=password)
  52                 if not theuser.valid:
  53                     error = _("Sorry, wrong password.")
  54 
  55                 # Save the user and send a cookie
  56                 else:
  57                     self.request.user = theuser
  58                     self.request.setCookie()
  59         if error:
  60             # Send page with an error message
  61             return self.page.send_page(self.request, msg=error)
  62 
  63         nextpagename = self.request.cfg.page_front_page
  64         for p in theuser.getTrail()[::-1]:
  65             if p!=self.page.page_name:
  66                 nextpagename = p
  67                 break
  68 
  69         return Page(self.request, nextpagename).send_page( self.request)

MoinMoin: RadomirsCirskis/LoginLogout/login.py (last edited 2007-10-29 19:12:42 by localhost)