1
1
python-cas-client
2
2
=================
3
3
4
- A python CAS client
4
+ A Python CAS (Central Authentication Service) client for interfacing with a CAS
5
+ service implementation, such as https://github.com/rbCAS/CASino or
6
+ https://github.com/apereo/cas.
7
+
8
+ This project provides tools for building well-formed CAS-related URLs, parsing
9
+ CAS XML payloads and managing the server-side session stores necessary for
10
+ handling SLO (single logout).
5
11
6
12
Installation
7
13
------------
@@ -18,6 +24,60 @@ Supports Python 2.7 and 3.4.
18
24
Testing
19
25
-------
20
26
27
+ ``cas_client `` uses ``tox `` to run its unit tests under Python 2.7 and 3.4.
28
+
21
29
::
22
30
23
31
python-cas-client$ tox
32
+
33
+ Example
34
+ -------
35
+
36
+ The following un-tested pseudo-code shows how you might use ``cas_client `` in a
37
+ Flask project.
38
+
39
+ ::
40
+
41
+ from cas_client import CASClient
42
+ from flask import Flask, redirect, request, session, url_for
43
+
44
+ app = Flask(__name__)
45
+
46
+ app_login_url = 'http://www.my-app.com/login'
47
+ cas_url = 'http://cas.my-app.com'
48
+ cas_client = CASClient(cas_url, auth_prefix='')
49
+
50
+ @app.route('/login')
51
+ def login():
52
+ ticket = request.args.get('ticket')
53
+ if ticket:
54
+ try:
55
+ cas_response = cas_client.perform_service_validate(
56
+ ticket=ticket,
57
+ service_url=app_login_url,
58
+ )
59
+ except:
60
+ # CAS server is currently broken, try again later.
61
+ return redirect(url_for('root'))
62
+ if cas_response and cas_response.success:
63
+ session['logged-in'] = True
64
+ return redirect(url_for('root'))
65
+ del(session['logged-in'])
66
+ cas_login_url = cas_client.get_login_url(service_url=app_login_url)
67
+ return redirect(cas_login_url)
68
+
69
+ @app.route('/logout')
70
+ def logout():
71
+ del(session['logged-in'])
72
+ cas_logout_url = cas_client.get_logout_url(service_url=app_login_url)
73
+ return redirect(cas_logout_url)
74
+
75
+ @app.route('/')
76
+ def root():
77
+ if session.get('logged-in'):
78
+ return 'You Are Logged In'
79
+ else:
80
+ return 'You Are Not Logged In'
81
+
82
+ This pseudo-code does not handle server-side session stores or single logout,
83
+ only the bare minimum for standard login and logout.
0 commit comments