Fix some unit tests and bugs
[larjonas-mediagoblin.git] / mediagoblin / plugins / ldap / views.py
blobe10c7f605a7d7247b47d08adf1edb792b2d50f31
1 # GNU MediaGoblin -- federated, autonomous media hosting
2 # Copyright (C) 2011, 2012 MediaGoblin contributors. See AUTHORS.
4 # This program is free software: you can redistribute it and/or modify
5 # it under the terms of the GNU Affero General Public License as published by
6 # the Free Software Foundation, either version 3 of the License, or
7 # (at your option) any later version.
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 # GNU Affero General Public License for more details.
14 # You should have received a copy of the GNU Affero General Public License
15 # along with this program. If not, see <http://www.gnu.org/licenses/>.
17 import six
19 from mediagoblin import mg_globals, messages
20 from mediagoblin.auth.tools import register_user
21 from mediagoblin.db.models import User, LocalUser
22 from mediagoblin.decorators import allow_registration, auth_enabled
23 from mediagoblin.plugins.ldap import forms
24 from mediagoblin.plugins.ldap.tools import LDAP
25 from mediagoblin.tools.translate import pass_to_ugettext as _
26 from mediagoblin.tools.response import redirect, render_to_response
29 @auth_enabled
30 def login(request):
31 login_form = forms.LoginForm(request.form)
33 login_failed = False
35 if request.method == 'POST' and login_form.validate():
36 l = LDAP()
37 username, email = l.login(login_form.username.data,
38 login_form.password.data)
40 if username:
41 user = LocalUser.query.filter(
42 LocalUser.username==username
43 ).first()
45 if user:
46 # set up login in session
47 request.session['user_id'] = six.text_type(user.id)
48 request.session.save()
50 if request.form.get('next'):
51 return redirect(request, location=request.form['next'])
52 else:
53 return redirect(request, "index")
54 else:
55 if not mg_globals.app.auth:
56 messages.add_message(
57 request,
58 messages.WARNING,
59 _('Sorry, authentication is disabled on this '
60 'instance.'))
61 return redirect(request, 'index')
63 register_form = forms.RegisterForm(username=username,
64 email=email)
66 return render_to_response(
67 request,
68 'mediagoblin/auth/register.html',
69 {'register_form': register_form,
70 'post_url': request.urlgen('mediagoblin.plugins.ldap.register')})
72 login_failed = True
74 return render_to_response(
75 request,
76 'mediagoblin/auth/login.html',
77 {'login_form': login_form,
78 'next': request.GET.get('next') or request.form.get('next'),
79 'login_failed': login_failed,
80 'post_url': request.urlgen('mediagoblin.plugins.ldap.login'),
81 'allow_registration': mg_globals.app_config["allow_registration"]})
84 @allow_registration
85 @auth_enabled
86 def register(request):
87 if request.method == 'GET':
88 return redirect(
89 request,
90 'mediagoblin.plugins.ldap.login')
92 register_form = forms.RegisterForm(request.form)
94 if register_form.validate():
95 user = register_user(request, register_form)
97 if user:
98 # redirect the user to their homepage... there will be a
99 # message waiting for them to verify their email
100 return redirect(
101 request, 'mediagoblin.user_pages.user_home',
102 user=user.username)
104 return render_to_response(
105 request,
106 'mediagoblin/auth/register.html',
107 {'register_form': register_form,
108 'post_url': request.urlgen('mediagoblin.plugins.ldap.register')})