Browse code
Trying to separate out site-specific parts
fiddlerwoaroof authored on 30/08/2015 01:48:28
Showing 2 changed files
Showing 2 changed files
... | ... |
@@ -38,14 +38,15 @@ |
38 | 38 |
(defparameter *oid* (make-instance 'ningle:<app>)) |
39 | 39 |
(setf drakma:*text-content-types* (cons '("application" . "json") drakma:*text-content-types*)) |
40 | 40 |
|
41 |
-(sheeple:defproto =service-info= () |
|
42 |
- ((client-id nil :accessor t) |
|
43 |
- (secret nil :accessor t))) |
|
44 |
- |
|
45 |
-(sheeple:defproto =endpoint-schema= () |
|
46 |
- ((auth-endpoint nil :accessor t) |
|
47 |
- (token-endpoint nil :accessor t) |
|
48 |
- (redirect-uri nil :accessor t))) |
|
41 |
+(setf =service-info= (object :parents '() |
|
42 |
+ :properties '((client-id nil :accessor client-id) |
|
43 |
+ (secret nil :accessor secret)))) |
|
44 |
+ |
|
45 |
+(setf =endpoint-schema= (object :parents '() |
|
46 |
+ :properties '((auth-endpoint nil :accessor auth-endpoint) |
|
47 |
+ (token-endpoint nil :accessor token-endpoint) |
|
48 |
+ (userinfo-endpoint nil :accessor t) |
|
49 |
+ (redirect-uri nil :accessor t)))) |
|
49 | 50 |
(sheeple:defmessage get-user-info (a b)) |
50 | 51 |
(sheeple:defmessage get-access-token (a b)) |
51 | 52 |
|
... | ... |
@@ -62,7 +63,7 @@ |
62 | 63 |
(defproto *fbook-endpoint-schema* (=endpoint-schema= *fbook-info*) |
63 | 64 |
((auth-endpoint "https://www.facebook.com/dialog/oauth") |
64 | 65 |
(token-endpoint "https://graph.facebook.com/v2.3/oauth/access_token") |
65 |
- (userinfo-endpoint "https://graph.facebook.com/v2.3/me" :accessor t) |
|
66 |
+ (userinfo-endpoint "https://graph.facebook.com/v2.3/me") |
|
66 | 67 |
(redirect-uri "http://srv2.elangley.org:9090/oidc_callback/facebook"))) |
67 | 68 |
|
68 | 69 |
(sheeple:defreply get-access-token ((endpoint-schema *fbook-endpoint-schema*) (code sheeple:=string=)) |
... | ... |
@@ -144,12 +145,15 @@ |
144 | 145 |
(progn |
145 | 146 |
,@body) |
146 | 147 |
(progn |
147 |
- (setf (gethash :next-page session) (lack.request:request-path-info *request*)) |
|
148 |
+ (setf (gethash :next-page ,session) (lack.request:request-path-info *request*)) |
|
148 | 149 |
'(302 (:location "/login"))))))) |
149 | 150 |
|
150 | 151 |
(defmacro with-session ((var) &body body) |
151 |
- `(let ((,var (context :session))) |
|
152 |
- ,@body)) |
|
152 |
+ `(progn |
|
153 |
+ (format t "The session var is: ~a it contains: ~a~%" ,(symbol-name var) ,var) |
|
154 |
+ (let ((,var (context :session))) |
|
155 |
+ (format t "The session var is: ~a it now contains: ~a~%" ,(symbol-name var) ,var) |
|
156 |
+ ,@body))) |
|
153 | 157 |
|
154 | 158 |
(defun load-facebook-info (loadfrom) |
155 | 159 |
(with-open-file (fbook-info (truename loadfrom)) |
... | ... |
@@ -187,12 +191,13 @@ |
187 | 191 |
|
188 | 192 |
(defun oauth2-login-middleware (&key google-info facebook-info) |
189 | 193 |
(lambda (app) |
194 |
+ (in-package :cl-oid-connect) |
|
190 | 195 |
(load-facebook-info facebook-info) |
191 | 196 |
(load-goog-endpoint-schema) |
192 | 197 |
(load-google-info google-info) |
193 | 198 |
|
194 | 199 |
(def-route ("/login/google" (params) :app app) |
195 |
- (with-session (session) |
|
200 |
+ (with-session (cl-oid-connect:session) |
|
196 | 201 |
(let ((state (gen-state 36))) |
197 | 202 |
(setf (gethash :state session) state) |
198 | 203 |
(with-endpoints *goog-endpoint-schema* |
... | ... |
@@ -204,7 +209,7 @@ |
204 | 209 |
|
205 | 210 |
|
206 | 211 |
(def-route ("/login/facebook" (params) :app app) |
207 |
- (with-session (session) |
|
212 |
+ (let ((session (ningle:context :session))) |
|
208 | 213 |
(let ((state (gen-state 36))) |
209 | 214 |
(setf (gethash :state session) state) |
210 | 215 |
(with-endpoints *fbook-endpoint-schema* |
... | ... |
@@ -219,7 +224,7 @@ |
219 | 224 |
(let ((received-state (cdr (string-assoc "state" params))) |
220 | 225 |
(code (cdr (string-assoc "code" params)))) |
221 | 226 |
(check-state received-state |
222 |
- (with-session (session) |
|
227 |
+ (with-session (cl-oid-connect:session) |
|
223 | 228 |
(with-endpoints *goog-endpoint-schema* |
224 | 229 |
(let* ((a-t (get-access-token *goog-endpoint-schema* code)) |
225 | 230 |
(id-token (assoc-cdr :id--token a-t)) |
... | ... |
@@ -270,12 +275,10 @@ |
270 | 275 |
(export '(oauth2-login-middleware with-session)) |
271 | 276 |
|
272 | 277 |
(in-package :cl-user) |
273 |
-(import '(cl-oid-connect:redirect-if-necessary cl-oid-connect:def-route cl-oid-connect:require-login)) |
|
274 |
-(import '(cl-oid-connect:oauth2-login-middleware cl-oid-connect:with-session)) |
|
275 | 278 |
|
276 | 279 |
(defparameter *app* (make-instance 'ningle:<app>)) |
277 | 280 |
|
278 |
-(def-route ("/login" (params) :app *app*) |
|
281 |
+(cl-oid-connect:def-route ("/login" (params) :app *app*) |
|
279 | 282 |
(cl-who:with-html-output-to-string (s) |
280 | 283 |
(:html |
281 | 284 |
(:head |
... | ... |
@@ -284,23 +287,27 @@ |
284 | 287 |
(:div (:a :href "/login/facebook" "Facebook")) |
285 | 288 |
(:div (:a :href "/login/google" "Google")))))) |
286 | 289 |
|
287 |
-(def-route ("/" (params) :app *app*) |
|
288 |
- (with-session (session) |
|
289 |
- (redirect-if-necessary session |
|
290 |
- (require-login |
|
291 |
- (anaphora:sunless (gethash :counter session) (setf anaphora:it 0)) |
|
292 |
- (incf (gethash :counter session)) |
|
290 |
+(defvar *smession* nil) |
|
291 |
+ |
|
292 |
+(cl-oid-connect:def-route ("/" (params) :app *app*) |
|
293 |
+ (cl-oid-connect:with-session (*smession*) |
|
294 |
+ (cl-oid-connect:redirect-if-necessary *smession* |
|
295 |
+ (cl-oid-connect:require-login |
|
296 |
+ (anaphora:sunless (gethash :counter *smession*) (setf anaphora:it 0)) |
|
297 |
+ (incf (gethash :counter *smession*)) |
|
293 | 298 |
(format nil "~Ath visit<br/>~a<br/><br/>~S<br/>" |
294 |
- (gethash :counter session) |
|
295 |
- (alexandria:hash-table-alist session) |
|
299 |
+ (gethash :counter *smession*) |
|
300 |
+ (alexandria:hash-table-alist *smession*) |
|
296 | 301 |
(alexandria:hash-table-alist (ningle:context :session))))))) |
297 | 302 |
|
298 | 303 |
(setf *handler* (clack:clackup (lack.builder:builder |
299 | 304 |
:backtrace |
300 | 305 |
:session |
301 | 306 |
(funcall |
302 |
- (oauth2-login-middleware |
|
303 |
- :facebook-info (truename "facebook-secrets.json") |
|
304 |
- :google-info (truename "google-secrets.json")) |
|
307 |
+ (cl-oid-connect:oauth2-login-middleware |
|
308 |
+ :facebook-info |
|
309 |
+ (truename "/home/edwlan/github_repos/cl-oid-connect/facebook-secrets.json") |
|
310 |
+ :google-info |
|
311 |
+ (truename "/home/edwlan/github_repos/cl-oid-connect/google-secrets.json")) |
|
305 | 312 |
*app*)) :port 9090)) |
306 | 313 |
|
... | ... |
@@ -1,15 +1,23 @@ |
1 | 1 |
;;;; package.lisp |
2 |
-;(ql:quickload :ningle) |
|
3 |
-;(ql:quickload :clack) |
|
4 |
-;(ql:quickload :drakma) |
|
5 |
-;(ql:quickload :cljwt) |
|
6 |
-;(ql:quickload :cl-json) |
|
7 |
-;(ql:quickload :anaphora) |
|
8 |
-;(ql:quickload :alexandria) |
|
9 |
-;(ql:quickload :lack-middleware-session) |
|
10 |
-;(ql:quickload :cl-who) |
|
11 |
-;(ql:quickload :sheeple) |
|
12 | 2 |
|
13 | 3 |
(defpackage :cl-oid-connect |
14 |
- (:use #:cl #:drakma #:ningle #:clack #:cljwt #:anaphora #:alexandria #:sheeple)) |
|
15 |
- |
|
4 |
+ (:use |
|
5 |
+ #:cl |
|
6 |
+ #:alexandria |
|
7 |
+ #:anaphora |
|
8 |
+ #:clack |
|
9 |
+ #:cl-json |
|
10 |
+ #:cljwt |
|
11 |
+ #:cl-who |
|
12 |
+ #:drakma |
|
13 |
+ ;#:lack-middleware-session |
|
14 |
+ #:ningle |
|
15 |
+ #:sheeple) |
|
16 |
+ (:export |
|
17 |
+ #:redirect-if-necessary |
|
18 |
+ #:def-route |
|
19 |
+ #:require-login |
|
20 |
+ #:oauth2-login-middleware |
|
21 |
+ #:with-session |
|
22 |
+ #:session ; private!! |
|
23 |
+ )) |