[llvm-commits] [zorg] r125861 - in /zorg/trunk/llvmlab/llvmlab: TODO.txt ui/app.py ui/templates/layout.html ui/templates/login.html

Daniel Dunbar daniel at zuster.org
Fri Feb 18 08:40:42 PST 2011


Author: ddunbar
Date: Fri Feb 18 10:40:42 2011
New Revision: 125861

URL: http://llvm.org/viewvc/llvm-project?rev=125861&view=rev
Log:
llvmlab: Add login support.
 - Not yet very secure, password goes in plain text (TODOed).

Added:
    zorg/trunk/llvmlab/llvmlab/ui/templates/login.html
Modified:
    zorg/trunk/llvmlab/llvmlab/TODO.txt
    zorg/trunk/llvmlab/llvmlab/ui/app.py
    zorg/trunk/llvmlab/llvmlab/ui/templates/layout.html

Modified: zorg/trunk/llvmlab/llvmlab/TODO.txt
URL: http://llvm.org/viewvc/llvm-project/zorg/trunk/llvmlab/llvmlab/TODO.txt?rev=125861&r1=125860&r2=125861&view=diff
==============================================================================
--- zorg/trunk/llvmlab/llvmlab/TODO.txt (original)
+++ zorg/trunk/llvmlab/llvmlab/TODO.txt Fri Feb 18 10:40:42 2011
@@ -7,6 +7,8 @@
 
  - User Login
 
+   o Secure login support.
+
    o Expect superset of committer list.
 
    o Keep auth info with lab.llvm.org user cred, svn access will be an

Modified: zorg/trunk/llvmlab/llvmlab/ui/app.py
URL: http://llvm.org/viewvc/llvm-project/zorg/trunk/llvmlab/llvmlab/ui/app.py?rev=125861&r1=125860&r2=125861&view=diff
==============================================================================
--- zorg/trunk/llvmlab/llvmlab/ui/app.py (original)
+++ zorg/trunk/llvmlab/llvmlab/ui/app.py Fri Feb 18 10:40:42 2011
@@ -1,7 +1,8 @@
+import hashlib
 import os
 
 import flask
-from flask import redirect, render_template, url_for
+from flask import redirect, render_template, request, session, url_for
 
 import llvmlab.data
 import llvmlab.user
@@ -29,6 +30,11 @@
 
     return data
 
+def authenticate_login(username, password):
+    passhash = hashlib.sha256(password + app.config["SECRET_KEY"]).hexdigest()
+    user = app.config.data.users.get(username)
+    return user and passhash == user.passhash
+
 ###
 
 # Construct the Flask application.
@@ -37,6 +43,9 @@
 # Load the configuration file.
 app.config.from_envvar("LLVMLAB_CONFIG")
 
+# Set the application secret key.
+app.secret_key = app.config["SECRET_KEY"]
+
 # Load the LLVM-Lab database.
 app.config.data = load_llvmlab_data(app)
 
@@ -55,6 +64,31 @@
 def users():
     return render_template("users.html")
 
+ at app.route('/login', methods=['GET', 'POST'])
+def login():
+    # If this isn't a post request, return the login template.
+    if request.method != 'POST':
+        return render_template("login.html", error=None)
+
+    # Authenticate the user.
+    username = request.form['username']
+    if not authenticate_login(username, request.form['password']):
+        return render_template("login.html",
+                               error="Invalid login")
+
+    # Log the user in.
+    session['logged_in'] = True
+    session['active_user'] = username
+    flask.flash('You were logged in as "%s"!' % username)
+    return redirect(url_for("index"))
+
+ at app.route('/logout')
+def logout():
+    session.pop('logged_in', None)
+    session.pop('active_user', None)
+    flask.flash('You were logged out!')
+    return redirect(url_for("index"))
+
 ###
 
 if __name__ == '__main__':

Modified: zorg/trunk/llvmlab/llvmlab/ui/templates/layout.html
URL: http://llvm.org/viewvc/llvm-project/zorg/trunk/llvmlab/llvmlab/ui/templates/layout.html?rev=125861&r1=125860&r2=125861&view=diff
==============================================================================
--- zorg/trunk/llvmlab/llvmlab/ui/templates/layout.html (original)
+++ zorg/trunk/llvmlab/llvmlab/ui/templates/layout.html Fri Feb 18 10:40:42 2011
@@ -11,6 +11,10 @@
   <div class="header">
     <a href="{{ url_for('index') }}">{#
       #}lab.llvm.org</a> | {{ self.title() }}
+    {% if session.logged_in %}
+         
+      Logged In: <i>{{ session.active_user }}</i>
+    {% endif %}
   </div>
   <div class="flash_messages">
     {% for message in get_flashed_messages() %}

Added: zorg/trunk/llvmlab/llvmlab/ui/templates/login.html
URL: http://llvm.org/viewvc/llvm-project/zorg/trunk/llvmlab/llvmlab/ui/templates/login.html?rev=125861&view=auto
==============================================================================
--- zorg/trunk/llvmlab/llvmlab/ui/templates/login.html (added)
+++ zorg/trunk/llvmlab/llvmlab/ui/templates/login.html Fri Feb 18 10:40:42 2011
@@ -0,0 +1,15 @@
+{% extends "layout.html" %}
+{% block title %}login{% endblock %}
+{% block body %}
+<h2>Login</h2>
+{% if error %}
+<p class=error><strong>Error:</strong> {{ error }}
+{% endif %}
+<form action="{{ url_for('login') }}" method="POST">
+<dl>
+  <dt>Username:</dt><dd><input type=text name=username></dd>
+  <dt>Password:</td><dd><input type=password name=password></dd>
+  <dd><input type=submit value=Login></dd>
+</dl>
+</form>
+{% endblock %}





More information about the llvm-commits mailing list