Commits

Anonymous committed 7fbb910

add documentation

  • Participants
  • Parent commits fca5c3b

Comments (0)

Files changed (16)

 django_authopenid.egg*
 dist
 *.db
+docs/_build/doctrees
+docs/_build/html
+
 
 syntax: regexp
 .*\#.*\#$
-# django_authopenid 
+#django_authopenid 
 
 Author : Benoît Chesneau <benoitc@metavers.net>
 Url : [http://bitbucket.org/benoitc/django-authopenid/](http://bitbucket.org/benoitc/django-authopenid/)
+License: Apache License 2
 
-Updated version of this doc is always here :
+This package provide the django-authopenid application that allow you to authenticate your users with OpenID in Django.
 
-[http://bitbucket.org/benoitc/django-authopenid/wiki](http://bitbucket.org/benoitc/django-authopenid/wiki)
+For more information go [here](http://bitbucket.org/benoitc/django-authopenid/).
 
 
-## Introduction
-
-Django authentification application **with openid using django auth contrib**.
-
-This application allow a user to connect to you website with :
-
- * legacy account : username/password
- * openid url
-
-Idee is having workflow to integrate openid and _legacy_ authentification.
-
-If the user connect with an openid he could associate it with its legaccy account or just create a new django account. When the user is connected you could manage him like you usually do with auth contrib or [django-registration](http://bitbucket.org/ubernostrum/django-registration/):
-
-http://www.djangoproject.com/documentation/authentication/ 
-
-
-## Requirements
-
- * [django 1.x](http://djangoproject.org)
- * [python-openid 2.x](http://openidenabled.com/python-openid/)
-
-## Set your django project
-
-To use django_authopenid add `django_authopenid.middleware.OpenIDMiddleware` to MIDDLEWARE_CLASSES and
- `'django_authopenid'` to INSTALLED_APP. 
-
-then add django_authopenid.urls to urls.py, for example :
-
-	(r'^account/', include('django_authopenid.urls')),
-
-so all django_authopenid view will be available under account/ path.
-
-Set also your LOGIN_URL in settings.py to something like this:
-
-	ugettext = lambda s: s
-	LOGIN_URL = '/%s%s' % (ugettext('account/'), ugettext('signin/'))
-
-
-To install tables, run :
-
-	python manage.py syncdb
-
-
-
-## Use it
-
-### Urls
-
-all code is documented so you could esayly know what do a view.
-
-  * signin/signup :
-  * /account/signin : go to signin page
-  * /account/signout : signout url
-  * /account/signin/complete/ : register openid after signin 
-  * /account/signup : legacy authentification 
-  * /account/sendpw/password : send a new password
-
-
-### Templates
-
-Templates are in *templates/authopenid* folder :
-
-
- * complete.html  : complete page after signin (register openid)
- * signin.html : signin page
- 

File django_authopenid/forms.py

 except ImportError:
     from yadis import xri
     
-from django_authopenid.models import UserAssociation  
+from django_authopenid.models import UserAssociation
+
     
 class OpenidSigninForm(forms.Form):
     """ signin form """
                 
                 
 class AssociateOpenID(forms.Form):
-    """ signin form """
+    """ new openid association form """
     openid_url = forms.CharField(max_length=255, 
             widget=forms.widgets.TextInput(attrs={'class': 'required openid'}))
 

File django_authopenid/models.py

 
 from django_authopenid.signals import oid_associate
 
+__all__ = ['Nonce', 'Association', 'UserAssociation']
+
 class Nonce(models.Model):
     """ openid nonce """
     server_url = models.CharField(max_length=255)

File django_authopenid/views.py

     :attr openid_form: form use for openid signin, by default `OpenidSigninForm`
     :attr auth_form: form object used for legacy authentification. 
     by default AuthentificationForm form auser auth contrib.
-
+    :attr extra_context: A dictionary of variables to add to the template context. Any
+    callable object in this dictionary will be called to produce the
+    end result which appears in the context.
     """
     return render(template_name, {
         'msg': message,
 def signin(request, template_name='authopenid/signin.html', redirect_field_name=REDIRECT_FIELD_NAME,
         openid_form=OpenidSigninForm, auth_form=AuthenticationForm, 
         on_failure=None, extra_context=None):
-    """
-    signin page. It manage the legacy authentification (user/password) 
-    and authentification with openid.
+    """Signin page. It manage the legacy authentification (user/password)  and authentification with openid.
 
     :attr request: request object
     :attr template_name: string, name of template to use
     :attr redirect_field_name: string, field name used for redirect. by default 'next'
     :attr openid_form: form use for openid signin, by default `OpenidSigninForm`
     :attr auth_form: form object used for legacy authentification. 
-    by default AuthentificationForm form auser auth contrib.
-    
+    By default AuthentificationForm form auser auth contrib.
+    :attr extra_context: A dictionary of variables to add to the template context. Any
+    callable object in this dictionary will be called to produce the
+    end result which appears in the context.
     """
     if on_failure is None:
         on_failure = signin_failure
 def complete_signin(request, redirect_field_name=REDIRECT_FIELD_NAME,  
         openid_form=OpenidSigninForm, auth_form=AuthenticationForm, 
         on_success=signin_success, on_failure=signin_failure, extra_context=None):
-    """ in case of complete signin with openid """
+    """
+    in case of complete signin with openid 
+
+    :attr request: request object
+    :attr openid_form: form use for openid signin, by default `OpenidSigninForm`
+    :attr auth_form: form object used for legacy authentification. 
+    by default AuthentificationForm form auser auth contrib.
+    :attr on_success: callbale, function used when openid auth success
+    :attr on_failure: callable, function used when openid auth failed.
+    :attr extra_context: A dictionary of variables to add to the template context. Any
+    callable object in this dictionary will be called to produce the
+    end result which appears in the context.  
+    """
     return complete(request, on_success, on_failure,
             get_url_host(request) + reverse('user_complete_signin'),
             redirect_field_name=redirect_field_name, openid_form=openid_form, 
     return is_exist
     
 def register_account(form, openid_url):
+    """ create an account """
     user = User.objects.create_user(form.cleaned_data['username'], form.cleaned_data['email'])
     user.backend = "django.contrib.auth.backends.ModelBackend"
     oid_register.send(sender=user, openid=openid_url)
     by default `OpenidVerifyForm` form auser auth contrib.
     :attr register_account: callback used to create a new account from openid. 
     It take the register_form as param.
-    
+    :attr send_email: boolean, by default True. If True, an email will be sent to the user.
+    :attr extra_context: A dictionary of variables to add to the template context. Any
+    callable object in this dictionary will be called to produce the
+    end result which appears in the context.
     """
     is_redirect = False
     redirect_to = request.REQUEST.get(redirect_field_name, '')
 def signout(request):
     """
     signout from the website. Remove openid from session and kill it.
-
-    url : /signout/"
     """
     try:
         del request.session['openid']
     return HttpResponseRedirect(next)
     
 def xrdf(request, template_name='authopenid/yadis.xrdf'):
+    """ view used to process the xrdf file"""
+    
     url_host = get_url_host(request)
     return_to = [
         "%s%s" % (url_host, reverse('user_complete_signin'))
         set_password_form=SetPasswordForm, change_password_form=PasswordChangeForm,
         post_change_redirect=None, extra_context=None):
     """
-    View that allow the user to set a password. Only 
+    View that allow a user to add a password to its account or change it.
+
+    :attr request: request object
+    :attr template_name: string, name of template to use, 'authopenid/password_change_form.html' by default
+    :attr set_password_form: form use to create a new password. By default ``django.contrib.auth.forms.SetPasswordForm``
+    :attr change_password_form: form objectto change passworf. 
+    by default `django.contrib.auth.forms.SetPasswordForm.PasswordChangeForm` form auser auth contrib.
+    :attr post_change_redirect: url used to redirect user after password change.
+    It take the register_form as param.
+    :attr extra_context: A dictionary of variables to add to the template context. Any
+    callable object in this dictionary will be called to produce the
+    end result which appears in the context.
     """
     if post_change_redirect is None:
         post_change_redirect = settings.LOGIN_REDIRECT_URL
 @login_required
 def associate_failure(request, message, template_failure="authopenid/associate.html",
         openid_form=OpenidSigninForm, redirect_name=None, extra_context=None, **kwargs):
+        
+    """ function used when new openid association fail"""
     
     return render(template_failure, {
         'form': openid_form(),
 @login_required
 def associate_success(request, identity_url, openid_response,
         redirect_field_name=REDIRECT_FIELD_NAME, send_email=True, **kwargs):
+        
+    """ function used when new openid association success. redirect the user
+    """
     openid_ = from_openid_response(openid_response)
     openids = request.session.get('openids', [])
     openids.append(openid_)
         redirect_name=None, on_success=associate_success, on_failure=associate_failure,
         send_email=True, extra_context=None):
         
+    """ in case of complete association with openid """
+        
     return complete(request, on_success, on_failure,
             get_url_host(request) + reverse('user_complete_associate'),
             redirect_field_name=redirect_field_name, openid_form=openid_form, 
 def associate(request, template_name='authopenid/associate.html', 
         openid_form=AssociateOpenID, redirect_field_name=REDIRECT_FIELD_NAME,
         on_failure=associate_failure, extra_context=None):
+        
+    """View that allow a user to associate a new openid to its account.
+    
+    :attr request: request object
+    :attr template_name: string, name of template to use, 'authopenid/associate.html' by default
+    :attr openid_form: form use enter openid url. By default ``django_authopenid.forms.AssociateOpenID``
+    :attr redirect_field_name: string, field name used for redirect. by default 'next'
+    :attr on_success: callbale, function used when openid auth success
+    :attr on_failure: callable, function used when openid auth failed. by default ``django_authopenid.views.associate_failure`
+    :attr extra_context: A dictionary of variables to add to the template context. A callable object in this dictionary will be called to produce the end result which appears in the context.
+    """
     
     redirect_to = request.REQUEST.get(redirect_field_name, '')
     if request.POST:            
         dissociate_form=OpenidDissociateForm, redirect_field_name=REDIRECT_FIELD_NAME, 
         extra_context=None):
         
+    """ view used to dissociate an openid from an account """
     redirect_to = request.REQUEST.get(redirect_field_name, '')
     if not redirect_to or '//' in redirect_to or ' ' in redirect_to:
         redirect_to = settings.LOGIN_REDIRECT_URL

File docs/Makefile

+# Makefile for Sphinx documentation
+#
+
+# You can set these variables from the command line.
+SPHINXOPTS    =
+SPHINXBUILD   = sphinx-build
+PAPER         =
+
+# Internal variables.
+PAPEROPT_a4     = -D latex_paper_size=a4
+PAPEROPT_letter = -D latex_paper_size=letter
+ALLSPHINXOPTS   = -d _build/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
+
+.PHONY: help clean html web pickle htmlhelp latex changes linkcheck
+
+help:
+	@echo "Please use \`make <target>' where <target> is one of"
+	@echo "  html      to make standalone HTML files"
+	@echo "  pickle    to make pickle files"
+	@echo "  json      to make JSON files"
+	@echo "  htmlhelp  to make HTML files and a HTML help project"
+	@echo "  latex     to make LaTeX files, you can set PAPER=a4 or PAPER=letter"
+	@echo "  changes   to make an overview over all changed/added/deprecated items"
+	@echo "  linkcheck to check all external links for integrity"
+
+clean:
+	-rm -rf _build/*
+
+html:
+	mkdir -p _build/html _build/doctrees
+	$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) _build/html
+	@echo
+	@echo "Build finished. The HTML pages are in _build/html."
+
+pickle:
+	mkdir -p _build/pickle _build/doctrees
+	$(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) _build/pickle
+	@echo
+	@echo "Build finished; now you can process the pickle files."
+
+web: pickle
+
+json:
+	mkdir -p _build/json _build/doctrees
+	$(SPHINXBUILD) -b json $(ALLSPHINXOPTS) _build/json
+	@echo
+	@echo "Build finished; now you can process the JSON files."
+
+htmlhelp:
+	mkdir -p _build/htmlhelp _build/doctrees
+	$(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) _build/htmlhelp
+	@echo
+	@echo "Build finished; now you can run HTML Help Workshop with the" \
+	      ".hhp project file in _build/htmlhelp."
+
+latex:
+	mkdir -p _build/latex _build/doctrees
+	$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) _build/latex
+	@echo
+	@echo "Build finished; the LaTeX files are in _build/latex."
+	@echo "Run \`make all-pdf' or \`make all-ps' in that directory to" \
+	      "run these through (pdf)latex."
+
+changes:
+	mkdir -p _build/changes _build/doctrees
+	$(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) _build/changes
+	@echo
+	@echo "The overview file is in _build/changes."
+
+linkcheck:
+	mkdir -p _build/linkcheck _build/doctrees
+	$(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) _build/linkcheck
+	@echo
+	@echo "Link check complete; look for any errors in the above output " \
+	      "or in _build/linkcheck/output.txt."

File docs/_build/.index

Empty file added.

File docs/_static/.index

Empty file added.

File docs/_templates/.index

Empty file added.

File docs/conf.py

+# -*- coding: utf-8 -*-
+#
+# django_authopenid documentation build configuration file, created by
+# sphinx-quickstart on Fri Mar 27 19:15:59 2009.
+#
+# This file is execfile()d with the current directory set to its containing dir.
+#
+# The contents of this file are pickled, so don't put values in the namespace
+# that aren't pickleable (module imports are okay, they're removed automatically).
+#
+# Note that not all possible configuration values are present in this
+# autogenerated file.
+#
+# All configuration values have a default; values that are commented out
+# serve to show the default.
+
+import sys, os
+
+from django.conf import settings
+settings.configure()
+
+# If your extensions are in another directory, add it here. If the directory
+# is relative to the documentation root, use os.path.abspath to make it
+# absolute, like shown here.
+sys.path.append(os.path.abspath('..'))
+
+# General configuration
+# ---------------------
+
+# Add any Sphinx extension module names here, as strings. They can be extensions
+# coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
+extensions = ['sphinx.ext.autodoc', 'sphinx.ext.doctest']
+
+# Add any paths that contain templates here, relative to this directory.
+templates_path = ['_templates']
+
+# The suffix of source filenames.
+source_suffix = '.txt'
+
+# The encoding of source files.
+#source_encoding = 'utf-8'
+
+# The master toctree document.
+master_doc = 'index'
+
+# General information about the project.
+project = u'django-authopenid'
+copyright = u'2009, Benoît Chesneau'
+
+# The version info for the project you're documenting, acts as replacement for
+# |version| and |release|, also used in various other places throughout the
+# built documents.
+#
+# The short X.Y version.
+version = '1.0'
+# The full version, including alpha/beta/rc tags.
+release = '1.0'
+
+# The language for content autogenerated by Sphinx. Refer to documentation
+# for a list of supported languages.
+#language = None
+
+# There are two options for replacing |today|: either, you set today to some
+# non-false value, then it is used:
+#today = ''
+# Else, today_fmt is used as the format for a strftime call.
+#today_fmt = '%B %d, %Y'
+
+# List of documents that shouldn't be included in the build.
+#unused_docs = []
+
+# List of directories, relative to source directory, that shouldn't be searched
+# for source files.
+exclude_trees = ['_build']
+
+# The reST default role (used for this markup: `text`) to use for all documents.
+#default_role = None
+
+# If true, '()' will be appended to :func: etc. cross-reference text.
+#add_function_parentheses = True
+
+# If true, the current module name will be prepended to all description
+# unit titles (such as .. function::).
+#add_module_names = True
+
+# If true, sectionauthor and moduleauthor directives will be shown in the
+# output. They are ignored by default.
+#show_authors = False
+
+# The name of the Pygments (syntax highlighting) style to use.
+pygments_style = 'sphinx'
+
+
+# Options for HTML output
+# -----------------------
+
+# The style sheet to use for HTML and HTML Help pages. A file of that name
+# must exist either in Sphinx' static/ path, or in one of the custom paths
+# given in html_static_path.
+html_style = 'default.css'
+
+# The name for this set of Sphinx documents.  If None, it defaults to
+# "<project> v<release> documentation".
+#html_title = None
+
+# A shorter title for the navigation bar.  Default is the same as html_title.
+#html_short_title = None
+
+# The name of an image file (relative to this directory) to place at the top
+# of the sidebar.
+#html_logo = None
+
+# The name of an image file (within the static path) to use as favicon of the
+# docs.  This file should be a Windows icon file (.ico) being 16x16 or 32x32
+# pixels large.
+#html_favicon = None
+
+# Add any paths that contain custom static files (such as style sheets) here,
+# relative to this directory. They are copied after the builtin static files,
+# so a file named "default.css" will overwrite the builtin "default.css".
+html_static_path = ['_static']
+
+# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
+# using the given strftime format.
+#html_last_updated_fmt = '%b %d, %Y'
+
+# If true, SmartyPants will be used to convert quotes and dashes to
+# typographically correct entities.
+#html_use_smartypants = True
+
+# Custom sidebar templates, maps document names to template names.
+#html_sidebars = {}
+
+# Additional templates that should be rendered to pages, maps page names to
+# template names.
+#html_additional_pages = {}
+
+# If false, no module index is generated.
+#html_use_modindex = True
+
+# If false, no index is generated.
+#html_use_index = True
+
+# If true, the index is split into individual pages for each letter.
+#html_split_index = False
+
+# If true, the reST sources are included in the HTML build as _sources/<name>.
+#html_copy_source = True
+
+# If true, an OpenSearch description file will be output, and all pages will
+# contain a <link> tag referring to it.  The value of this option must be the
+# base URL from which the finished HTML is served.
+#html_use_opensearch = ''
+
+# If nonempty, this is the file name suffix for HTML files (e.g. ".xhtml").
+#html_file_suffix = ''
+
+# Output file base name for HTML help builder.
+htmlhelp_basename = 'django_authopeniddoc'
+
+
+# Options for LaTeX output
+# ------------------------
+
+# The paper size ('letter' or 'a4').
+#latex_paper_size = 'letter'
+
+# The font size ('10pt', '11pt' or '12pt').
+#latex_font_size = '10pt'
+
+# Grouping the document tree into LaTeX files. List of tuples
+# (source start file, target name, title, author, document class [howto/manual]).
+latex_documents = [
+  ('index', 'django_authopenid.tex', ur'django_authopenid Documentation',
+   ur'Benoît Chesneau', 'manual'),
+]
+
+# The name of an image file (relative to this directory) to place at the top of
+# the title page.
+#latex_logo = None
+
+# For "manual" documents, if this is true, then toplevel headings are parts,
+# not chapters.
+#latex_use_parts = False
+
+# Additional stuff for the LaTeX preamble.
+#latex_preamble = ''
+
+# Documents to append as an appendix to all manuals.
+#latex_appendices = []
+
+# If false, no module index is generated.
+#latex_use_modindex = True

File docs/forms.txt

+.. _forms-ref:
+
+Forms reference
+---------------
+
+.. autoclass:: django_authopenid.forms.OpenidSigninForm
+
+.. autoclass:: django_authopenid.forms.OpenidRegisterForm
+
+.. autoclass:: django_authopenid.forms.AssociateOpenID
+
+.. autoclass:: django_authopenid.forms.OpenidDissociateForm
+
+
+.. seealso:: `django-registration forms documentation <http://bitbucket.org/ubernostrum/django-registration/src/tip/docs/forms.txt>`_ for more informations

File docs/gettingstarted.txt

+.. _gettingstarted:
+
+Getting Started
+===============
+
+This tutorial exposes key features of this library and how to setup the default settings.
+
+If you have not installed django-authopenid yet, the :ref:`installation docs <installation>`
+will get you started.
+
+Basic use
+=========
+
+To use django-authopenid with all the default settings, you will need to do the following:
+
+1. Add `registration` and `django_authopenid` to ``INSTALLED_APPS`` setting of 
+your django project:
+
+.. code-block:: python
+
+	INSTALLED_APPS = (
+	    'django.contrib.auth',
+	    'django.contrib.contenttypes',
+	    'django.contrib.sessions',
+	    'django.contrib.sites',
+	    'django.contrib.admin',
+	    'registration',
+	    'django_authopenid',
+	)
+
+2. Add `django_authopenid.context_processors.authopenid` to ``TEMPLATE_CONTEXT_PROCESSORS`` 
+setting:
+
+.. code-block:: python
+
+	TEMPLATE_CONTEXT_PROCESSORS = (
+	    'django.core.context_processors.auth',
+	    'django.core.context_processors.debug',
+	    'django.core.context_processors.i18n',
+	    'django.core.context_processors.media',
+	    'django.core.context_processors.request',
+	    'django_authopenid.context_processors.authopenid',
+	)
+	
+3. Add `django_authopenid.middleware.OpenIDMiddleware` to ``MIDDLEWARE_CLASSES`` setting:
+
+.. code-block:: python
+
+	MIDDLEWARE_CLASSES = (
+	    'django.middleware.common.CommonMiddleware',
+	    'django.contrib.sessions.middleware.SessionMiddleware',
+	    'django.contrib.auth.middleware.AuthenticationMiddleware',
+	    'django.middleware.doc.XViewMiddleware',
+	    'django_authopenid.middleware.OpenIDMiddleware',
+	)
+
+4. Set `LOGIN_REDIRECT_URL` settings for default redirection of user after user edit. For example `/account/profile` (witch is the default).
+
+5. Create the necessary templates (see the section on templates below
+	   for details).
+	
+6. Add this line to your site's root URLConf::
+
+	(r'^account/', include('django_authopenid.urls')),
+
+7. Link people to ``accounts/signin`` so they can start signing or create a new account.
+
+
+Templates used by django-authopenid
+===================================
+
+The views included in django-authopenid make use of height templates:
+
+
+* ``authopenid/associate.html`` display the form to associate new openids to a registered account.
+
+* ``authopenid/associate_email.txt`` is used for the body of the email sent when you associate an account to a new openid.
+
+* ``authopenid/associate_email_subject.txt`` is used for the subject of the email sent when you associate an account to a new openid.
+
+* ``authopenid/complete.html`` display the final register form for user that signed with their openid.
+
+* ``authopenid/dissociate.html`` display the form to confirm dissociation of an openid from an account.
+
+* ``authopenid/failure.html`` display basic failure page
+
+* ``authopenid/password_change_form.html`` display the form allowing a user to create a password for his account or change the password.
+
+
+You have also to create the `registration` templates :
+
+* ``registration/registration_form.html`` displays the registration
+  form for users to sign up.
+
+* ``registration/registration_complete.html`` is displayed after the
+  activation email has been sent, to tell the new user to check
+  his/her email.
+
+* ``registration/activation_email_subject.txt`` is used for the
+  subject of the activation email.
+
+* ``registration/activation_email.txt`` is used for the body of the
+  activation email.
+
+* ``registration/activate.html`` is displayed when a user attempts to
+  activate his/her account.
+
+
+Examples of all of these templates could be found in example folder from 
+django-authopenid sources.
+
+Additionally, the URLConf provided with django-authopenid includes
+URL patterns for useful views in Django's built-in authentication
+application and django-regisytraion -- this means that a single ``include`` 
+in your root URLConf can wire up registration and the auth application's signin,
+signout, and password change/reset views. 
+
+
+.. seealso:: :ref:`views-ref` and consult `the Django authentication documentation <http://www.djangoproject.com/documentation/authentication/>`_  and `django-registration documentation <http://bitbucket.org/ubernostrum/django-registration/>`_ for details on the templates and contexts used by views of these modules.
+	
+
+How it works
+============
+
+Using the recommanded default configuration, the url `/account/signin` will map to the view ``django_authopenid.views.signin`` which display a signin form using instances of ``django.contrib.auth.forms.AuthenticationForm`` for legacy authentification (username/password) and ``django_authopenid.forms.OpenidSigninForm`` for openid authentidcation. This will ask for a legacy account that could be registred by going on `/account/signup` (which will use django-registration module for registration) or an openid. Signing with openid will redirect the user to its openid provider and after he processed authentification to `/account/complete`
+
+If the user signin with its openid and is already registred he will be finally redirected to its home page (the one defined in `settings.LOGIN_REDIRECT_URL` by default). If not he will be redirected to `account/register` page.
+
+On `account/register` page the user could choose to create a new user or associate this openid to a "legacy" account (one registered with username/password). If he chooses to create a new user a new instance of ``django.contrib.models.auth.User`` is created with a non usable password which mean that at this step the user could only signin to your django project with its openid. He could later add a password if he wants.
+
+.. seealso:: `django-registration documentation <http://bitbucket.org/ubernostrum/django-registration/>`_ for details of legacy account registration.
+
+Where to go from here
+=====================
+
+Full documentation for all included components is bundled in the
+packaged release; see the following files for details:
+
+* :ref:`forms-ref`
+* :ref:`models-ref`
+* :ref:`views-ref`
+
+
+
+

File docs/index.txt

+.. django_authopenid documentation master file, created by sphinx-quickstart on Fri Mar 27 19:15:59 2009.
+   You can adapt this file completely to your liking, but it should at least
+   contain the root `toctree` directive.
+
+Welcome to django-authopenid's documentation!
+=============================================
+
+.. rubric:: Everything you need to know about django-authopenid
+
+**django-authopenid** is a Django_ application that allow you to authenticate your users while using the django auth contrib.
+
+This application allow a user to connect to you website with :
+
+ * legacy account : username/password
+ * openid url
+
+Idee is having workflow to integrate openid and _legacy_ authentification.
+
+If the user connect with an openid he could associate it with its legaccy account or just create a new django account. When the user is connected you could manage him like you usually do with `auth contrib <http://www.djangoproject.com/documentation/authentication/>`_ or `django-registration <http://bitbucket.org/ubernostrum/django-registration/>`_ which is the default.
+
+
+Made by `Enki Multimedia <http://www.e-engura.org>`_ for one of our project and we decided to make it public.
+
+.. _Django: http://www.djangoproject.com/
+
+Contents:
+
+.. toctree::
+   :maxdepth: 2
+ 
+   installation
+   gettingstarted
+   views
+   models
+   forms
+
+* Follow development on `Bitbucket <http://hg.e-engura.org/django-authopenid/>`_.
+* Report bugs, report features and browse the source through `Tracker <http://hg.e-engura.org/django-authopenid/issues/>`_.
+
+
+Indices and tables
+==================
+
+* :ref:`genindex`
+* :ref:`modindex`
+* :ref:`search`
+

File docs/installation.txt

+.. _installation:
+
+Installation
+============
+
+The most recent release is always available in the `cheeseshop`_ and can be
+installed using `easy_install`_::
+
+    easy_install django-authopenid
+
+Alternatly, you can also install the development version from 
+our `Mercurial`_ repository::
+
+    hg clone https://dev.e-engura.org/hg/django-authopenid
+    cd django-authopenid
+    sudo python setup.py install
+
+Last command will install django-authopenid as a package via setuptools. This
+will make it available in your python path. Alternately you can copy or symlink
+the django-authopenid subdirectory into your django project directory or
+anywhere in your PYTHONPATH.
+
+You could also get source from  `Bitbucket`_ ::
+
+    hg clone http://hg.e-engura.org/django-authopenid/
+
+Requirements
+============
+
+To use django-authopenid you will need **Python 2.5** or later, `Django`_ 1.0 or later and
+`django-registration`_ . 
+
+.. _cheeseshop: http://pypi.python.org/pypi/WTForms/
+.. _easy_install: http://peak.telecommunity.com/DevCenter/EasyInstall
+.. _Mercurial: http://www.selenic.com/mercurial/
+.. _Bitbucket: http://hg.e-engura.org/django-authopenid/
+.. _Django: http://www.djangoproject.com/
+.. _django-registration: http://bitbucket.org/ubernostrum/django-registration/
+

File docs/models.txt

+.. _models-ref:
+
+Models reference
+================
+
+User association
+----------------
+
+This class manage association between an openid and a user account.
+
+.. autoclass:: django_authopenid.models.UserAssociation
+
+
+Openid store
+------------
+
+In django-authopenid we create a special openid store (an instance of ``django_authopenid.openid_store.DjangoOpenIDStore`` using Django ORM. It use theses classes to store associations and nonces.
+
+.. autoclass:: django_authopenid.models.Nonce
+
+.. autoclass:: django_authopenid.models.Association
+
+
+.. seealso:: `python-openid documentation <http://openidenabled.com/python-openid/>`_  and `django-registration models documentation <http://bitbucket.org/ubernostrum/django-registration/src/tip/docs/models.txt>`_ for more informations
+
+	

File docs/views.txt

+.. _views-ref:
+
+Views reference
+===============
+
+.. autofunction:: django_authopenid.views.signin_success
+
+.. autofunction:: django_authopenid.views.signin_failure
+
+.. autofunction:: django_authopenid.views.complete_signin
+
+.. autofunction:: django_authopenid.views.signin
+
+.. autofunction:: django_authopenid.views.register
+
+.. autofunction:: django_authopenid.views.signout
+
+.. autofunction:: django_authopenid.views.password_change
+
+.. autofunction:: django_authopenid.views.associate
+
+.. autofunction:: django_authopenid.views.associate_success
+
+.. autofunction:: django_authopenid.views.associate_failure
+
+.. autofunction:: django_authopenid.views.complete_associate
+
+.. autofunction:: django_authopenid.views.dissociate
+
+.. autofunction:: django_authopenid.views.xrdf
+	
+	
+.. seealso:: `django-registration views documentation <http://bitbucket.org/ubernostrum/django-registration/src/tip/docs/views.txt>`_ .