Merge branch 'vshulyak' into develop
authorAlex Kamedov <alex@kamedov.ru>
Wed, 27 Apr 2011 15:40:37 +0000 (21:40 +0600)
committerAlex Kamedov <alex@kamedov.ru>
Wed, 27 Apr 2011 15:40:37 +0000 (21:40 +0600)
1  2 
README.rst
cas_provider/admin.py
cas_provider/views.py
setup.py

diff --cc README.rst
@@@ -17,14 -11,12 +11,15 @@@ django-cas-provider is a provider for t
  INSTALLATION
  =============
  
- To install, run the following command from this directory:
+ To install, run the following command from this directory::
  
-       ``python setup.py install``
 -      python setup.py install
++    python setup.py install
  
- Or, put cas_provider somewhere on your Python path.
+ Or, put `cas_provider` somewhere on your Python path.
 +
 +If you want use CAS v.2 protocol or above, you must install `lxml` package to correct work.
 +
+       
  USAGE
  ======
  
  #. In *settings.py*, set ``LOGIN_URL`` to ``'/cas/login/'`` and ``LOGOUT_URL`` to ``'/cas/logout/'``
  #. In *urls.py*, put the following line: ``(r'^cas/', include('cas_provider.urls')),``
  #. Create login/logout templates (or modify the samples)
- Example of generated XML below:
 +#. Use 'cleanuptickets' management command to clean up expired tickets
 +
 +SETTINGS
 +=========
 +
 +CAS_TICKET_EXPIRATION - minutes to tickets expiration. Default is 5 minutes.
 +
 +CAS_CUSTOM_ATTRIBUTES_CALLBACK - name of callback to provide dictionary with 
 +extended user attributes (may be used in CAS v.2 or above). Default is None.
 +
 +CAS_CUSTOM_ATTRIBUTES_FORMAT - name of custom attribute formatter callback will be
 +used to format custom user attributes. This package provide module `attribute_formatters`
 +with formatters for common used formats. Available formats styles are `RubyCAS`, `Jasig`
 +and `Name-Value. Default is Jasig style. See module source code for more details.
 +
 +
 +PROTOCOL DOCUMENTATION
 +=====================
 +
 +* `CAS Protocol <http://www.jasig.org/cas/protocol>`
 +* `CAS 1 Architecture <http://www.jasig.org/cas/cas1-architecture>`
 +* `CAS 2 Architecture <http://www.jasig.org/cas/cas2-architecture>`
 +* `Proxy Authentication <http://www.jasig.org/cas/proxy-authentication>`
 +* `CAS – Central Authentication Service <http://www.jusfortechies.com/cas/overview.html>`
 +* `Proxy CAS Walkthrough <https://wiki.jasig.org/display/CAS/Proxy+CAS+Walkthrough>`
 +
 +PROVIDED VIEWS
 +=============
 +
 +login
 +---------
 +
 +It has not required arguments.
 +
 +Optional arguments:
 +
 +* template_name - login form template name (default is 'cas/login.html')
 +* success_redirect - redirect after successful login if service GET argument is not provided 
 +   (default is settings.LOGIN_REDIRECT_URL)
 +* warn_template_name - warning page template name to allow login user to service if he
 +  already authenticated in SSO (default is 'cas/warn.html')
 +
 +If request.GET has 'warn' argument and user has already authenticated in SSO it shows 
 +warning message instead of generate Service Ticket and redirect.
 +
 +logout
 +-----------
 +
 +This destroys a client's single sign-on CAS session. The ticket-granting cookie is destroyed, 
 +and subsequent requests to login view will not obtain service tickets until the user again
 +presents primary credentials (and thereby establishes a new single sign-on session).
 +
 +It has not required arguments.
 +
 +Optional arguments:
 +
 +* template_name - template name for page with successful logout message (default is 'cas/logout.html')
 +
 +validate
 +-------------
 +
 +It checks the validity of a service ticket. It is part of the CAS 1.0 protocol and thus does
 +not handle proxy authentication.
 +
 +It has not arguments. 
 +
 +service_validate
 +-------------------------
 +
 +It checks the validity of a service ticket and returns an XML-fragment response via CAS 2.0 protocol.
 +Work with proxy is not supported yet.
 +
 +It has not arguments.
 +
 +
 +CUSTOM USER ATTRIBUTES FORMAT
 +===========================
 +
 +Custom attribute format style may be changed in project settings with 
 +CAS_CUSTOM_ATTRIBUTES_FORMAT constant. You can provide your own formatter callback
 +or specify existing in this package in `attribute_formatters` module.
 +
 +Attribute formatter callback takes two arguments:
 +
 +*  `auth_success` - `cas:authenticationSuccess` node. It is `lxml.etree.SubElement`instance;
 +*  `attrs` - dictionary with user attributes received from callback specified in 
 +    CAS_CUSTOM_ATTRIBUTES_CALLBACK in project settings. 
 +
- * Name-Value style (provided in `cas_provider.attribute_formatters.name_value`):
++Example of generated XML below::
 + 
 +     <cas:serviceResponse xmlns:cas='http://www.yale.edu/tp/cas'>
 +         <cas:authenticationSuccess>
 +             <cas:user>jsmith</cas:user>
 +
 +             <!-- extended user attributes wiil be here -->
 +
 +             <cas:proxyGrantingTicket>PGTIOU-84678-8a9d2sfa23casd</cas:proxyGrantingTicket>
 +         </cas:authenticationSuccess>
 +     </cas:serviceResponse>
 +
 +
- *  Jasig Style attributes (provided in `cas_provider.attribute_formatters.jasig`):
++* Name-Value style (provided in `cas_provider.attribute_formatters.name_value`)::
 +
 +    <cas:attribute name='attraStyle' value='Name-Value' />
 +    <cas:attribute name='surname' value='Smith' />
 +    <cas:attribute name='givenName' value='John' />
 +    <cas:attribute name='memberOf' value='CN=Staff,OU=Groups,DC=example,DC=edu' />
 +    <cas:attribute name='memberOf' value='CN=Spanish Department,OU=Departments,OU=Groups,DC=example,DC=edu' />
 +
 +
- * RubyCAS style (provided in `cas_provider.attribute_formatters.ruby_cas`):
++*  Jasig Style attributes (provided in `cas_provider.attribute_formatters.jasig`)::
 +
 +    <cas:attributes>
 +        <cas:attraStyle>Jasig</cas:attraStyle>
 +        <cas:surname>Smith</cas:surname>
 +        <cas:givenName>John</cas:givenName>
 +        <cas:memberOf>CN=Staff,OU=Groups,DC=example,DC=edu</cas:memberOf>
 +        <cas:memberOf>CN=Spanish Department,OU=Departments,OU=Groups,DC=example,DC=edu</cas:memberOf>
 +    </cas:attributes>
 +
 +
++* RubyCAS style (provided in `cas_provider.attribute_formatters.ruby_cas`)::
 +
 +    <cas:attraStyle>RubyCAS</cas:attraStyle>
 +    <cas:surname>Smith</cas:surname>
 +    <cas:givenName>John</cas:givenName>
 +    <cas:memberOf>CN=Staff,OU=Groups,DC=example,DC=edu</cas:memberOf>
 +    <cas:memberOf>CN=Spanish Department,OU=Departments,OU=Groups,DC=example,DC=edu</cas:memberOf>
 +
@@@ -1,13 -1,11 +1,14 @@@
  from django.contrib import admin
 +from models import *
  
 -from cas_provider.models import ServiceTicket, LoginTicket
  class ServiceTicketAdmin(admin.ModelAdmin):
 -    pass
 -admin.site.register(ServiceTicket, ServiceTicketAdmin)
 +    list_display = ('user', 'service', 'created')
 +    list_filter = ('created',)
  
  class LoginTicketAdmin(admin.ModelAdmin):
 -    pass
 -admin.site.register(LoginTicket, LoginTicketAdmin)
 +    list_display = ('ticket', 'created')
 +    list_filter = ('created',)
 +
 +admin.site.register(ServiceTicket, ServiceTicketAdmin)
 +admin.site.register(LoginTicket, LoginTicketAdmin)
@@@ -78,16 -64,7 +78,19 @@@ def validate(request)
              pass
      return HttpResponse("no\n\n")
  
- def logout(request, template_name='cas/logout.html'):
 +
-     auth_logout(request)
++def logout(request, template_name='cas/logout.html', auto_redirect=False):
 +    url = request.GET.get('url', None)
++    if request.user.is_authenticated():
++        auth_logout(request)
++        if url and auto_redirect:
++            return HttpResponseRedirect(url)
 +    return render_to_response(template_name, {'url': url}, \
 +                              context_instance=RequestContext(request))
 +
 +
  def service_validate(request):
 +    """Validate ticket via CAS v.2 protocol"""
      service = request.GET.get('service', None)
      ticket_string = request.GET.get('ticket', None)
      if service is None or ticket_string is None:
diff --cc setup.py
Simple merge