git.fiddlerwoaroof.com
Browse code

Trying to separate out site-specific parts

fiddlerwoaroof authored on 30/08/2015 01:48:28
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
+    ))