blob: 11e316ed2d6bbaa6b322d93717146599326c8b0b (
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
|
(ns mulk.benki.webutil
(:refer-clojure)
(:use [hiccup core page]
[clojure.core.match :only [match]]
noir.core
[mulk.benki db util])
(:require [noir.session :as session]
[noir.request :as request]
[noir.response :as response]
[clojure.java.jdbc :as sql])
(:import [java.text DateFormat]
[java.math BigDecimal]))
;;;; * Login/authentication
(defn authlink [uri]
(with-dbt
(let [user *user*
dkey (sql/with-query-results results
["SELECT * FROM page_keys WHERE \"user\" = ? AND page = ?"
user uri]
(if-let [rec (first results)]
(:key rec)
(let [key (BigDecimal. (genkey))]
(sql/with-query-results results
["INSERT INTO page_keys(\"user\", page, \"key\")
VALUES (?, ?, ?)
RETURNING \"key\""
user uri key]
(:key (first results))))))
key (.toBigIntegerExact dkey)]
(fmt nil "~A?auth=~A" uri (.toString key 36)))))
(defpartial login-message []
(let [user (and *user*
(with-dbt (sql/with-query-results results
["SELECT * FROM users WHERE id = ?" *user*]
(first results))))]
(if *user*
[:div {:class "logged-in-as"}
(:first_name user) " " (:last_name user)]
[:div {:class "not-logged-in"}
"Browser ID "
[:a#browserid {:href "#"}
[:img {:src (resolve-uri "/3rdparty/browserid/sign_in_orange.png")
:alt "Sign in"}]]
[:div "or:"]
[:a {:href (link :login)} "Sign in normally"]])))
;;;; * Environment/request stuff
(defn referrer []
(get-in (request/ring-request) [:headers "referer"]))
|