Logins seem to work.
authorChristopher Allan Webber <cwebber@dustycloud.org>
Sun, 3 Apr 2011 22:05:30 +0000 (17:05 -0500)
committerChristopher Allan Webber <cwebber@dustycloud.org>
Sun, 3 Apr 2011 22:05:30 +0000 (17:05 -0500)
mediagoblin/auth/forms.py
mediagoblin/auth/views.py
mediagoblin/templates/mediagoblin/auth/login.html [new file with mode: 0644]

index 86d82a61014d51fa1f5c677bb5df9c1ca956a92e..334035442876d952b1bab944b6558cba60cbf96f 100644 (file)
@@ -35,3 +35,13 @@ class RegistrationForm(wtforms.Form):
         '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()])
index cbf7c8169870891d9432fedde10d44ba5039946d..16588a5b6c3d90dbe68c9d940181fb289a33a8c3 100644 (file)
@@ -69,8 +69,15 @@ def register_success(request):
 
 
 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(
@@ -79,15 +86,19 @@ def login(request):
         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(
@@ -95,7 +106,9 @@ def login(request):
     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):
diff --git a/mediagoblin/templates/mediagoblin/auth/login.html b/mediagoblin/templates/mediagoblin/auth/login.html
new file mode 100644 (file)
index 0000000..4e775f5
--- /dev/null
@@ -0,0 +1,23 @@
+{% 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 %}