File tree Expand file tree Collapse file tree
src/hyperspace/server/database Expand file tree Collapse file tree Original file line number Diff line number Diff line change 44 [clj-liquibase " 0.5.2" ]
55 [com.h2database/h2 " 1.3.173" ]
66 [crypto-password " 0.1.3" ]
7+ [crypto-random " 1.2.0" ]
78 [log4j/log4j " 1.2.17" ]
89 [metosin/ring-swagger " 0.13.0" ]
910 [metosin/compojure-api " 0.16.0" ]
Original file line number Diff line number Diff line change 77 [(ch/create-table :users
88 [[:id :int :null false :pk true :autoinc true ]
99 [:login [:varchar 128 ] :unique true :null false ]
10- [:password [:varchar 128 ] :null false ]])
10+ [:password [:varchar 128 ] :null false ]
11+ [:session [:varchar 16 ] :null true :unique true ]])
1112 (ch/create-index :users [:login ])]])
1213
1314(defchangelog changelog " hyperspace-server" [add-users-table])
Original file line number Diff line number Diff line change 11(ns hyperspace.server.database.user
2- (:require [crypto.password.scrypt :as password])
3- (:use [azql.core :only [select from insert! values]]
2+ (:import (java.util UUID))
3+ (:require [crypto.password.scrypt :as password]
4+ [crypto.random :as random])
5+ (:use [azql.core]
46 [hyperspace.server.database.datasource :only [db-spec]]))
57
68(defn create [{login :login password :password }]
79 (insert! db-spec :users
810 (values [{:login login
911 :password (password/encrypt password)}])))
1012
13+ (defn- generate-session []
14+ ; ; 8 random bytes = 16 hex digits should be enough for duplicates to be almost impossible with probability of about
15+ ; ; 10^-12
16+ (random/hex 8 ))
17+
1118(defn login [{login :login password :password }]
12- ; ; TODO: log in and save session
13- nil )
19+ (with-connection [c db-spec]
20+ (transaction c
21+ (let [user (fetch-one c
22+ (select (fields [:login :password ])
23+ (from :u :users )
24+ (where (= :u.login login))))
25+ user-id (:id user)]
26+ (if (password/check password (:password user))
27+ (let [session (generate-session )]
28+ (update! c :users
29+ (setf :session session)
30+ (where (= :id user-id)))
31+ session)
32+ nil )))))
You can’t perform that action at this time.
0 commit comments