summaryrefslogtreecommitdiff
path: root/src/mulk/benki/webutil.clj
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"]))