diff options
| author | sostler <sbostler@gmail.com> | 2010-02-27 18:28:23 -0500 |
|---|---|---|
| committer | sostler <sbostler@gmail.com> | 2010-02-27 18:28:23 -0500 |
| commit | 99fa8c4569988c27203dc821809f408491fc76e0 (patch) | |
| tree | 0377c3335cf9aff9bdfa95c8d46986fcc39241a5 /src | |
| parent | 28df6c268853e12e04975f217222a61e118050bf (diff) | |
| parent | fa8c89b543bb6e23cc7cac5983cb61818a4e3139 (diff) | |
Merge branch 'master' of ssh://sostler@192.168.0.194/~/dumpfm
Diffstat (limited to 'src')
| -rwxr-xr-x | src/site.clj | 82 | ||||
| -rwxr-xr-x | src/utils.clj | 24 |
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 |
