summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorsostler <sbostler@gmail.com>2010-02-27 18:28:23 -0500
committersostler <sbostler@gmail.com>2010-02-27 18:28:23 -0500
commit99fa8c4569988c27203dc821809f408491fc76e0 (patch)
tree0377c3335cf9aff9bdfa95c8d46986fcc39241a5 /src
parent28df6c268853e12e04975f217222a61e118050bf (diff)
parentfa8c89b543bb6e23cc7cac5983cb61818a4e3139 (diff)
Merge branch 'master' of ssh://sostler@192.168.0.194/~/dumpfm
Diffstat (limited to 'src')
-rwxr-xr-xsrc/site.clj82
-rwxr-xr-xsrc/utils.clj24
2 files changed, 74 insertions, 32 deletions
diff --git a/src/site.clj b/src/site.clj
index 2ea60a6..f039703 100755
--- a/src/site.clj
+++ b/src/site.clj
@@ -148,19 +148,14 @@
(map process-user (sort-by #(% :nick)
(vals @(room :users)))))
-(defn updates [room since]
+(defn updates [room since]
{"users" (prepare-user-list room)
"messages" (map process-message-for-json
- (new-messages room since))})
+ (new-messages room since))
+ "topic" @(room :topic)})
(def *dumps-per-page* 20)
-(defn maybe-parse-int [s f]
- (if s (Integer/parseInt s) f))
-
-(defn maybe-parse-long [s f]
- (if s (Long/parseLong s) f))
-
(defn count-messages-by-room [room-id image-only]
(let [query (str "SELECT COUNT(*) "
"FROM messages m, users u "
@@ -206,17 +201,23 @@
:name (room-db :name)
:description (room-db :description)
:users (ref {})
- :messages (ref (fetch-messages-by-room (room-db :room_id) false))})
+ :messages (ref (fetch-messages-by-room (room-db :room_id) false))
+ :topic (ref nil)
+ })
;; Templates
-(defn fetch-template [template-name session]
- (let [st (.getInstanceOf template-group template-name)]
- (if (and st (session :nick))
+;; TODO: avoid exception
+(defn fetch-template [template session]
+ (let [st (.getInstanceOf template-group template)]
+ (if (session :nick)
(do (.setAttribute st "user_nick" (session :nick))
(.setAttribute st "isadmin" (session :is_admin))))
st))
+(defn serve-template [template session]
+ (.toString (fetch-template template session)))
+
;; Login code
(defn session-map-from-db
@@ -301,7 +302,7 @@
invalid-nick-reason (is-invalid-nick? nick)]
(cond invalid-nick-reason (resp-error invalid-nick-reason)
(fetch-nick nick) (resp-error "NICK_TAKEN")
- :else (with-connection db
+ :else (with-connection *db*
(insert-values :users
[:nick :hash :email]
[nick hash email])
@@ -320,15 +321,16 @@
dump-offset (* offset *dumps-per-page*)
dumps (fetch-messages-by-nick profile-nick true dump-offset)
dump-count (count-messages-by-nick profile-nick true)
- st (fetch-template "profile" session)]
+ st (fetch-template "profile" session)
+ dumps (to-array (map process-message-for-output dumps))]
(do
(.setAttribute st "is_home" is-home)
(doseq [a [:nick :avatar :contact :bio]]
(let [v (user-info a)]
(.setAttribute st (name a)
(if (non-empty-string? v) (escape-html v)))))
- (.setAttribute st "dumps"
- (to-array (map process-message-for-output dumps)))
+ (if (> (count dumps) 0)
+ (.setAttribute st "dumps" dumps))
(if (< (+ dump-offset *dumps-per-page*) dump-count)
(.setAttribute st "next" (inc offset)))
(if (not= offset 0)
@@ -338,13 +340,13 @@
(defn update-user-db [user-id attr val]
- (with-connection db
+ (with-connection *db*
(update-values "users" ["user_id = ?" user-id] {attr val})))
-(defn download-avatar [session url]
- (let [url false]
- (update-user-db (session :user_id) "avatar" url)
- (resp-success url)))
+(defn update-avatar [session url]
+ (update-user-db (session :user_id) "avatar" url)
+ [(session-assoc :avatar url)
+ (resp-success url)])
(defn update-profile [session params]
(let [user-id (session :user_id)
@@ -354,10 +356,36 @@
(cond (not user-id) (resp-error "MUST_LOGIN")
(not (and user-id attr val)) (resp-error "BAD_REQUEST")
(not (contains? attr-set attr)) (resp-error "BAD_REQUEST")
- (= attr "avatar") (download-avatar session val)
+ (= attr "avatar") (update-avatar session val)
:else (do (update-user-db user-id attr val)
(resp-success "OK")))))
+;; Topics
+
+(defn valid-topic? [topic]
+ topic)
+
+(defn valid-deadline? [deadline]
+ deadline)
+
+(defn set-topic! [room topic deadline maker]
+ (ref-set (room :topic)
+ {:topic topic
+ :deadline deadline
+ :maker maker}))
+
+(defn validate-set-topic [session params]
+ (let [room (@rooms (params :room))
+ topic (params :topic)
+ deadline (params :deadline)]
+ (cond (not (session :is_admin)) (resp-error "NOT_VIP")
+ (not (valid-topic? topic)) (resp-error "INVALID_TOPIC")
+ (not (valid-deadline? deadline)) (resp-error "INVALID_DEADLINE")
+ (not room) (resp-error "INVALID_ROOM")
+ :else (do
+ (dosync (set-topic! room topic deadline (session :nick)))
+ (resp-success "OK")))))
+
;; Chat
(defn validate-room-access [room-key session]
@@ -430,7 +458,7 @@
(let [is-image (is-image? content)
qry (str "INSERT INTO messages (user_id, room_id, content, is_image) "
"VALUES (?, ?, ?, ?) RETURNING message_id")]
- (with-connection db
+ (with-connection *db*
((first (do-select [qry user-id room-id content is-image]))
:message_id))))
@@ -596,7 +624,7 @@
(defroutes pichat
(GET "/" (no-cache (landing session)))
(GET "/favicon.ico" (serve-static "static" "favicon.ico"))
- (GET "/u/:nick" (profile session (params :nick) "0"))
+ (GET "/u/:nick" (profile session (params :nick) "0"))
(GET "/u/:nick/" (profile session (params :nick) "0"))
(GET "/u/:nick/:offset" (profile session
(params :nick)
@@ -621,6 +649,12 @@
(POST "/msg" (validated-msg session params))
(POST "/submit-registration" (register session params))
(POST "/update-profile" (update-profile session params))
+ (POST "/set-topic" (validate-set-topic session params))
+ (GET "/about_us" (serve-template "about_us" session))
+ (GET "/goodies" (serve-template "goodies" session))
+ (GET "/help" (serve-template "help" session))
+ (GET "/privacy" (serve-template "privacy" session))
+ (GET "/terms" (serve-template "terms" session))
(ANY "*" (unknown-page params)))
(defroutes multipart
diff --git a/src/utils.clj b/src/utils.clj
index 3ffd54b..33a247f 100755
--- a/src/utils.clj
+++ b/src/utils.clj
@@ -7,11 +7,11 @@
(let [db-host "localhost"
db-port 5432
db-name "dumpfm"]
- (def db {:classname "org.postgresql.Driver"
- :subprotocol "postgresql"
- :subname (str "//" db-host ":" db-port "/" db-name)
- :user "postgres"
- :password "root"}))
+ (def *db* {:classname "org.postgresql.Driver"
+ :subprotocol "postgresql"
+ :subname (str "//" db-host ":" db-port "/" db-name)
+ :user "postgres"
+ :password "root"}))
;; JSON responses
@@ -30,12 +30,12 @@
;; Database
(defn do-select [query]
- (with-connection db
+ (with-connection *db*
(with-query-results rs query
(doall rs))))
(defn do-count [query]
- ((first (with-connection db
+ ((first (with-connection *db*
(with-query-results rs query
(doall rs))))
:count))
@@ -72,4 +72,12 @@
(defn validated-stats [session params]
(if (session :is_admin)
(stats session params)
- (resp-error "BAD_REQUEST"))) \ No newline at end of file
+ (resp-error "BAD_REQUEST")))
+
+;; Parsing
+
+(defn maybe-parse-int [s f]
+ (if s (Integer/parseInt s) f))
+
+(defn maybe-parse-long [s f]
+ (if s (Long/parseLong s) f)) \ No newline at end of file