<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -0,0 +1,43 @@
+from auth.models import User
+from django.conf import settings
+import datetime, couchdb, urlparse
+from couchdb.client import PreconditionFailed
+
+SESSION_KEY = '_auth_user_id'
+BACKEND_SESSION_KEY = '_auth_user_backend'
+DEFAULT_COUCHDB_HOST = 'http://localhost:5984/'
+
+def get_or_create(server_uri, db_name):
+    server = couchdb.Server(server_uri)
+    try:
+        db = server.create(db_name)
+    except PreconditionFailed, e:
+        if not e.message[0] == 'file_exists':
+            raise e
+        # Database seems to exist. Let's just use it
+        db = couchdb.Database(urlparse.urljoin(server_uri, db_name))
+    return db
+
+def login(request, user):
+    if user is None:
+        user = request.user
+    # TODO: It would be nice to support different login methods, like signed cookies.
+    backend = getattr(user, 'backend', getattr(settings, 'AUTHENTICATION_BACKENDS'))
+    server_uri = getattr(settings, 'COUCHDB_HOST', DEFAULT_COUCHDB_HOST)
+    auth_db = get_or_create(server_uri, &quot;auth&quot;)
+    user = User.load(auth_db, user.id)
+    user.last_login = datetime.datetime.now()
+    user.store(auth_db)
+
+    if SESSION_KEY in request.session:
+        if request.session[SESSION_KEY] != user.id:
+            # To avoid reusing another user's session, create a new, empty
+            # session if the existing session corresponds to a different
+            # authenticated user.
+            request.session.flush()
+    else:
+        request.session.cycle_key()
+    request.session[SESSION_KEY] = user.id
+    request.session[BACKEND_SESSION_KEY] = backend
+    if hasattr(request, 'user'):
+        request.user = user</diff>
      <filename>auth/__init__.py</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>338ef3a672b3f019f122c0bc7c5b4785b4a0bff3</id>
    </parent>
  </parents>
  <author>
    <name>Thejaswi Puthraya</name>
    <email>thejaswi.puthraya@gmail.com</email>
  </author>
  <url>http://github.com/theju/django-couchdb-utils/commit/0ce722d71b43b30c3a938c32e72c955e3b14fdd1</url>
  <id>0ce722d71b43b30c3a938c32e72c955e3b14fdd1</id>
  <committed-date>2009-11-08T21:37:23-08:00</committed-date>
  <authored-date>2009-11-08T21:37:23-08:00</authored-date>
  <message>Added login function. Mainly used for django_openid</message>
  <tree>2e4efd5587c005acb52e507ea436b68efe7ed49f</tree>
  <committer>
    <name>Thejaswi Puthraya</name>
    <email>thejaswi.puthraya@gmail.com</email>
  </committer>
</commit>
