Community authentication
authorMagnus Hagander <magnus@hagander.net>
Tue, 30 Dec 2008 16:00:31 +0000 (17:00 +0100)
committerMagnus Hagander <magnus@hagander.net>
Tue, 30 Dec 2008 16:00:31 +0000 (17:00 +0100)
gitadmin/auth.py [new file with mode: 0644]
gitadmin/settings.py

diff --git a/gitadmin/auth.py b/gitadmin/auth.py
new file mode 100644 (file)
index 0000000..3fed0b4
--- /dev/null
@@ -0,0 +1,29 @@
+from django.contrib.auth.models import User
+import psycopg2
+
+class AuthBackend:
+       def authenticate(self, username=None, password=None):
+               conn = psycopg2.connect('host=wwwmaster.postgresql.org dbname=186_www user=auth_svc password=g7y3m9u8 sslmode=require')
+               try:
+                       conn.set_client_encoding('UNICODE')
+                       cur = conn.cursor()
+                       cur.execute('SELECT * FROM community_login(%s,%s)', (username, password))
+                       row  = cur.fetchall()[0]
+               finally:
+                       conn.close()
+
+               if row[1] == 1:
+                       try:
+                               user = User.objects.get(username=username)
+                       except User.DoesNotExist:
+                               # User doesn't exist yet
+                               user = User(username=username, password='setmanually', email=row[3], first_name=row[2])
+                               user.save()
+                       return user
+               return None
+
+       def get_user(self, user_id):
+               try:
+                       return User.objects.get(pk=user_id)
+               except User.DoesNotExist:
+                       return None
index 6f10317298ea105d2766ffb5760889a944d15b6a..8413c8c24af66e2ab7125e7ab3c4b35c88814dbd 100644 (file)
@@ -80,6 +80,10 @@ INSTALLED_APPS = (
     'gitadmin.adm',
 )
 
+AUTHENTICATION_BACKENDS = (
+       'gitadmin.auth.AuthBackend',
+)
+
 LOGIN_URL = '/adm/login'