'Email address',
[wtforms.validators.Required(),
wtforms.validators.Email()])
+
+
+class LoginForm(wtforms.Form):
+ username = wtforms.TextField(
+ 'Username',
+ [wtforms.validators.Required(),
+ wtforms.validators.Regexp(r'^\w+$')])
+ password = wtforms.PasswordField(
+ 'Password',
+ [wtforms.validators.Required()])
def login(request):
+ """
+ Mediagoblin login view.
+
+ If you provide the POST with 'next', it'll redirect to that view.
+ """
login_form = auth_forms.LoginForm(request.POST)
+ login_failed = False
+
if request.method == 'POST' and login_form.validate():
#try:
user = request.db.User.find_one(
if user.check_login(request.POST['password']):
# set up login in session
request.session['user_id'] = unicode(user['_id'])
+ request.session.save()
- import pdb
- pdb.set_trace()
-
+ if request.POST.has_key('next'):
+ return exc.HTTPFound(location=request.POST['next'])
+ else:
+ return exc.HTTPFound(
+ location=request.urlgen("index"))
else:
# Prevent detecting who's on this system by testing login
# attempt timings
auth_lib.fake_login_attempt()
+ login_failed = True
# render
template = request.template_env.get_template(
return Response(
template.render(
{'request': request,
- 'login_form': login_form}))
+ 'login_form': login_form,
+ 'next': request.GET.get('next') or request.POST.get('next'),
+ 'login_failed': login_failed}))
def logout(request):
--- /dev/null
+{% extends "mediagoblin/base.html" %}
+
+{% import "/mediagoblin/utils/wtforms.html" as wtforms_util %}
+
+{% block mediagoblin_content %}
+ <h2>Login:</h2>
+
+ <form action="{{ request.urlgen('mediagoblin.auth.login') }}"
+ method="POST" enctype="multipart/form-data">
+
+ {% if login_failed %}
+ <p><i>Login failed!</i></p>
+ {% endif %}
+
+ <table>
+ {{ wtforms_util.render_table(login_form) }}
+ <tr>
+ <td></td>
+ <td><input type="submit" value="submit" /></td>
+ </tr>
+ </table>
+ </form>
+{% endblock %}