comparison rhodecode/controllers/login.py @ 2031:82a88013a3fd

merge 1.3 into stable
author Marcin Kuzminski <marcin@python-works.com>
date Sun, 26 Feb 2012 17:25:09 +0200
parents 752b0a7b7679 89efedac4e6c
children 79a95f338fd0
comparison
equal deleted inserted replaced
2005:ab0e122b38a7 2031:82a88013a3fd
5 5
6 Login controller for rhodeocode 6 Login controller for rhodeocode
7 7
8 :created_on: Apr 22, 2010 8 :created_on: Apr 22, 2010
9 :author: marcink 9 :author: marcink
10 :copyright: (C) 2009-2011 Marcin Kuzminski <marcin@python-works.com> 10 :copyright: (C) 2010-2012 Marcin Kuzminski <marcin@python-works.com>
11 :license: GPLv3, see COPYING for more details. 11 :license: GPLv3, see COPYING for more details.
12 """ 12 """
13 # This program is free software: you can redistribute it and/or modify 13 # This program is free software: you can redistribute it and/or modify
14 # it under the terms of the GNU General Public License as published by 14 # it under the terms of the GNU General Public License as published by
15 # the Free Software Foundation, either version 3 of the License, or 15 # the Free Software Foundation, either version 3 of the License, or
36 from rhodecode.lib.auth import AuthUser, HasPermissionAnyDecorator 36 from rhodecode.lib.auth import AuthUser, HasPermissionAnyDecorator
37 from rhodecode.lib.base import BaseController, render 37 from rhodecode.lib.base import BaseController, render
38 from rhodecode.model.db import User 38 from rhodecode.model.db import User
39 from rhodecode.model.forms import LoginForm, RegisterForm, PasswordResetForm 39 from rhodecode.model.forms import LoginForm, RegisterForm, PasswordResetForm
40 from rhodecode.model.user import UserModel 40 from rhodecode.model.user import UserModel
41 from rhodecode.model.meta import Session
41 42
42 43
43 log = logging.getLogger(__name__) 44 log = logging.getLogger(__name__)
44 45
45 46
47 48
48 def __before__(self): 49 def __before__(self):
49 super(LoginController, self).__before__() 50 super(LoginController, self).__before__()
50 51
51 def index(self): 52 def index(self):
52 #redirect if already logged in 53 # redirect if already logged in
53 c.came_from = request.GET.get('came_from', None) 54 c.came_from = request.GET.get('came_from', None)
54 55
55 if self.rhodecode_user.is_authenticated \ 56 if self.rhodecode_user.is_authenticated \
56 and self.rhodecode_user.username != 'default': 57 and self.rhodecode_user.username != 'default':
57 58
58 return redirect(url('home')) 59 return redirect(url('home'))
59 60
60 if request.POST: 61 if request.POST:
61 #import Login Form validator class 62 # import Login Form validator class
62 login_form = LoginForm() 63 login_form = LoginForm()
63 try: 64 try:
64 c.form_result = login_form.to_python(dict(request.POST)) 65 c.form_result = login_form.to_python(dict(request.POST))
65 #form checks for username/password, now we're authenticated 66 # form checks for username/password, now we're authenticated
66 username = c.form_result['username'] 67 username = c.form_result['username']
67 user = User.get_by_username(username, case_insensitive=True) 68 user = User.get_by_username(username, case_insensitive=True)
68 auth_user = AuthUser(user.user_id) 69 auth_user = AuthUser(user.user_id)
69 auth_user.set_authenticated() 70 auth_user.set_authenticated()
70 session['rhodecode_user'] = auth_user 71 cs = auth_user.get_cookie_store()
72 session['rhodecode_user'] = cs
73 # If they want to be remembered, update the cookie
74 if c.form_result['remember'] is not False:
75 session.cookie_expires = False
76 session._set_cookie_values()
77 session._update_cookie_out()
71 session.save() 78 session.save()
72 79
73 log.info('user %s is now authenticated and stored in session', 80 log.info('user %s is now authenticated and stored in '
74 username) 81 'session, session attrs %s' % (username, cs))
75 user.update_lastlogin() 82 user.update_lastlogin()
83 Session.commit()
76 84
77 if c.came_from: 85 if c.came_from:
78 return redirect(c.came_from) 86 return redirect(c.came_from)
79 else: 87 else:
80 return redirect(url('home')) 88 return redirect(url('home'))
90 return render('/login.html') 98 return render('/login.html')
91 99
92 @HasPermissionAnyDecorator('hg.admin', 'hg.register.auto_activate', 100 @HasPermissionAnyDecorator('hg.admin', 'hg.register.auto_activate',
93 'hg.register.manual_activate') 101 'hg.register.manual_activate')
94 def register(self): 102 def register(self):
95 user_model = UserModel()
96 c.auto_active = False 103 c.auto_active = False
97 for perm in User.get_by_username('default').user_perms: 104 for perm in User.get_by_username('default').user_perms:
98 if perm.permission.permission_name == 'hg.register.auto_activate': 105 if perm.permission.permission_name == 'hg.register.auto_activate':
99 c.auto_active = True 106 c.auto_active = True
100 break 107 break
103 110
104 register_form = RegisterForm()() 111 register_form = RegisterForm()()
105 try: 112 try:
106 form_result = register_form.to_python(dict(request.POST)) 113 form_result = register_form.to_python(dict(request.POST))
107 form_result['active'] = c.auto_active 114 form_result['active'] = c.auto_active
108 user_model.create_registration(form_result) 115 UserModel().create_registration(form_result)
109 h.flash(_('You have successfully registered into rhodecode'), 116 h.flash(_('You have successfully registered into rhodecode'),
110 category='success') 117 category='success')
118 Session.commit()
111 return redirect(url('login_home')) 119 return redirect(url('login_home'))
112 120
113 except formencode.Invalid, errors: 121 except formencode.Invalid, errors:
114 return htmlfill.render( 122 return htmlfill.render(
115 render('/register.html'), 123 render('/register.html'),
119 encoding="UTF-8") 127 encoding="UTF-8")
120 128
121 return render('/register.html') 129 return render('/register.html')
122 130
123 def password_reset(self): 131 def password_reset(self):
124 user_model = UserModel()
125 if request.POST: 132 if request.POST:
126
127 password_reset_form = PasswordResetForm()() 133 password_reset_form = PasswordResetForm()()
128 try: 134 try:
129 form_result = password_reset_form.to_python(dict(request.POST)) 135 form_result = password_reset_form.to_python(dict(request.POST))
130 user_model.reset_password_link(form_result) 136 UserModel().reset_password_link(form_result)
131 h.flash(_('Your password reset link was sent'), 137 h.flash(_('Your password reset link was sent'),
132 category='success') 138 category='success')
133 return redirect(url('login_home')) 139 return redirect(url('login_home'))
134 140
135 except formencode.Invalid, errors: 141 except formencode.Invalid, errors:
141 encoding="UTF-8") 147 encoding="UTF-8")
142 148
143 return render('/password_reset.html') 149 return render('/password_reset.html')
144 150
145 def password_reset_confirmation(self): 151 def password_reset_confirmation(self):
146
147 if request.GET and request.GET.get('key'): 152 if request.GET and request.GET.get('key'):
148 try: 153 try:
149 user_model = UserModel()
150 user = User.get_by_api_key(request.GET.get('key')) 154 user = User.get_by_api_key(request.GET.get('key'))
151 data = dict(email=user.email) 155 data = dict(email=user.email)
152 user_model.reset_password(data) 156 UserModel().reset_password(data)
153 h.flash(_('Your password reset was successful, ' 157 h.flash(_('Your password reset was successful, '
154 'new password has been sent to your email'), 158 'new password has been sent to your email'),
155 category='success') 159 category='success')
156 except Exception, e: 160 except Exception, e:
157 log.error(e) 161 log.error(e)
158 return redirect(url('reset_password')) 162 return redirect(url('reset_password'))
159 163
160 return redirect(url('login_home')) 164 return redirect(url('login_home'))
161 165
162 def logout(self): 166 def logout(self):
163 del session['rhodecode_user'] 167 session.delete()
164 session.save() 168 log.info('Logging out and deleting session for user')
165 log.info('Logging out and setting user as Empty')
166 redirect(url('home')) 169 redirect(url('home'))