blob: 9105a21322dbfa419aceede9e0b9be9c95311005 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
|
(ns mulk.benki.auth
(:refer-clojure)
(:use [clojure core repl pprint]
[clojure.contrib repl-utils]
[hiccup core page-helpers]
[mulk.benki util]
[clojure.core.match.core
:only [match]]
[noir core])
(:require [noir.session :as session]
[noir.response :as response]
[noir.request :as request])
(:import [org.openid4java.consumer ConsumerManager]
[org.openid4java.message ParameterList]))
(defonce manager (ConsumerManager.))
(defpartial return-from-openid-provider []
(let [parlist (ParameterList. (:query-params (request/ring-request)))
discovered (session/get :discovered)
;; Does the following work for POST requests?
request-uri (str "http://localhost:3001/login/return"
;;(resolve-uri "/login/return")
(let [query-string (:query-string (request/ring-request))]
(if query-string
(str "?" query-string)
"")))
verification (.verify manager request-uri parlist discovered)
id (.getVerifiedId verification)]
(if id
(layout "Authenticated!"
[:p "Authentication result: " [:strong [:code (escape-html (fmt nil "~S" (bean id)))]]
" (identifier: " [:strong [:code (escape-html (.getIdentifier id))]] ")"])
(layout "Authentication Failed"))))
(defpage [:post "/login/return"] []
(return-from-openid-provider))
(defpage "/login/return" []
(return-from-openid-provider))
(defpage "/login/authenticate" {openid :openid}
(let [discoveries (.discover manager openid)
discovered (.associate manager discoveries)
authreq (.authenticate manager discovered ;;(resolve-uri "/login/return")
"http://localhost:3001/login/return"
)]
(session/put! :discovered discovered)
(response/redirect (.getDestinationUrl authreq true))))
(defpage "/login" []
(layout "Benki Login"
[:p "Please enter your OpenID:"]
[:form {:action (resolve-uri "/login/authenticate"),
:method "GET"}
[:input {:type "text", :name "openid"}]
[:input {:type "submit"}]]))
|