git.fiddlerwoaroof.com
Raw Blame History
(ql:quickload :ningle)
(ql:quickload :clack)
(ql:quickload :cl-oid-connect)
(ql:quickload :cl-who)
(ql:quickload :ubiquitous)
(ql:quickload :clack-errors)

(defpackage :cl-oid-connect.demo
  (:use :cl :cl-oid-connect.utils :cl-oid-connect :cl-who))
(in-package :cl-oid-connect.demo)

(defparameter *app* (make-instance 'ningle:<app>))

(def-route ("/login" (params) :app *app*)
  `(200 ()
    ,(with-html-output-to-string (s)
       (:html (:head (:title "Login"))
        (:body
          (:div :class "login-button facebook"
           (:a :href "/login/facebook" "Facebook"))
          (:div :class "login-button google"
           (:a :href "/login/google" "Google")))))))

(def-route ("/" (params) :app *app*)
  (declare (ignore params))
  (ningle:with-context-variables (session)
    (require-login
      (redirect-if-necessary session
        (with-endpoints (gethash :endpoint-schema session)
          `(200 (:content-type "application/json")
            ,(cl-json:encode-json-to-string (gethash :userinfo session))))))))

(cl-oid-connect::setup-oid-connect *app* (userinfo &rest args))

(let ((handler nil))
  (ubiquitous:restore :whitespace)
  (defun stop () (clack:stop (pop handler)))

  (defun start (&optional tmp)
    (cl-oid-connect:initialize-oid-connect
      (ubiquitous:value 'facebook 'secrets)
      (ubiquitous:value 'google 'secrets))
    (let ((server (if (> (length tmp) 1)
                    (intern (string-upcase (elt tmp 1)) 'keyword)
                    :hunchentoot)))
      (push (clack:clackup
              (lack.builder:builder
                :backtrace
                :session
                *app*
                )
              :port 9090
              :server server)
            handler)))

  (defun restart-clack ()
    (do () ((null handler)) (stop))
    (start)))