summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--db/0-create.psql9
-rw-r--r--docs/reserved_nicks.txt1
-rw-r--r--src/admin.clj20
-rw-r--r--src/rooms.clj23
-rw-r--r--src/site.clj16
-rw-r--r--template/roomlist.st53
6 files changed, 101 insertions, 21 deletions
diff --git a/db/0-create.psql b/db/0-create.psql
index 649d74f..68f9bfd 100644
--- a/db/0-create.psql
+++ b/db/0-create.psql
@@ -29,10 +29,17 @@ CREATE TABLE rooms (
created_on timestamp NOT NULL DEFAULT now(),
admin_only bool NOT NULL DEFAULT false,
active bool NOT NULL DEFAULT true,
- history_size integer NOT NULL DEFAULT 25
+ history_size integer NOT NULL DEFAULT 25,
+ max_file_size integer NOT NULL DEFAULT 1048576,
+ max_image_width integer NOT NULL DEFAULT 2000,
+ max_image_height integer NOT NULL DEFAULT 2000
);
+
-- ALTER TABLE rooms ADD COLUMN history_size integer NOT NULL DEFAULT 25;
+-- ALTER TABLE rooms ADD COLUMN max_file_size integer NOT NULL DEFAULT 1048576;
+-- ALTER TABLE rooms ADD COLUMN max_image_width integer NOT NULL DEFAULT 2000;
+-- ALTER TABLE rooms ADD COLUMN max_image_height integer NOT NULL DEFAULT 2000;
CREATE TABLE messages (
message_id SERIAL PRIMARY KEY,
diff --git a/docs/reserved_nicks.txt b/docs/reserved_nicks.txt
index 83be5fd..b11c615 100644
--- a/docs/reserved_nicks.txt
+++ b/docs/reserved_nicks.txt
@@ -73,6 +73,7 @@ reports
reset
room
rooms
+roomlist
search
shop
stickers
diff --git a/src/admin.clj b/src/admin.clj
index 7c7721e..9dbc65c 100644
--- a/src/admin.clj
+++ b/src/admin.clj
@@ -4,9 +4,29 @@
(:use compojure
email
scheduled-agent
+ rooms
user
utils))
+;; Rooms
+
+(defn count-room-users [key]
+ (if-let [r (rooms/lookup-room key)]
+ (count @(:users r))
+ 0))
+
+
+(defn show-rooms [session]
+ (if-vip
+ (let [rooms (do-select ["SELECT * FROM ROOMS ORDER BY CREATED_ON ASC"])
+ st (fetch-template "roomlist" session)]
+ (.setAttribute st "rooms" (for [r rooms]
+ (stringify-and-escape
+ (assoc r
+ :created_on (format-yyyy-mm-dd (:created_on r))
+ :users (count-room-users (:key r))))))
+ (.toString st))))
+
;; Muting
(def *mute-refresh-period-sec* 60)
diff --git a/src/rooms.clj b/src/rooms.clj
index 4f7d6c4..e919557 100644
--- a/src/rooms.clj
+++ b/src/rooms.clj
@@ -1,6 +1,7 @@
(ns rooms
(:import java.util.Date)
(:use clojure.contrib.str-utils
+ clojure.contrib.def
utils
user))
@@ -68,15 +69,18 @@
(do-select [query room-id *dumps-per-page* offset]))))
(defn build-room-map-from-db [room-db]
- {:admin_only (room-db :admin_only)
- :room_id (room-db :room_id)
- :key (room-db :key)
- :name (room-db :name)
- :description (room-db :description)
- :history_size (room-db :history_size)
- :users (ref {})
- :messages (ref (fetch-messages-by-room (room-db :room_id) false))
- :topic (ref nil)
+ {:admin_only (room-db :admin_only)
+ :room_id (room-db :room_id)
+ :key (room-db :key)
+ :name (room-db :name)
+ :description (room-db :description)
+ :max_file_size (room-db :max_file_size)
+ :max_image_width (room-db :max_image_width)
+ :max_image_height (room-db :max_image_height)
+ :history_size (room-db :history_size)
+ :users (ref {})
+ :messages (ref (fetch-messages-by-room (room-db :room_id) false))
+ :topic (ref nil)
})
@@ -97,7 +101,6 @@
(defn build-msg [nick content msg-id]
(struct message-struct nick content (new Date) msg-id))
-
(def message-count-limit 200)
(defn add-message [msg room]
diff --git a/src/site.clj b/src/site.clj
index 30aa90e..560565a 100644
--- a/src/site.clj
+++ b/src/site.clj
@@ -1096,10 +1096,7 @@ WHERE u.user_id = ANY(?)"
;; Upload
-(def max-upload-dimensions [2000 2000])
(def max-avatar-dimensions [800 800])
-(def max-vip-file-size (mbytes 5)) ; don't be nuts guys
-(def max-file-size (mbytes 1))
(def max-avatar-size (kbytes 500))
(defn is-file-too-big? [f limit]
@@ -1125,12 +1122,10 @@ WHERE u.user_id = ANY(?)"
(defn image-url-from-file [dir date file]
(str-join "/" [*server-url* dir date (.getName file)]))
-(defn validate-upload-file [f vip]
- (let [file-limit (if vip
- max-vip-file-size
- max-file-size)]
- (or (is-file-too-big? f file-limit)
- (invalid-image-dimensions? f max-upload-dimensions))))
+(defn validate-upload-file [f room]
+ (or (is-file-too-big? f (:max_file_size room))
+ (invalid-image-dimensions? f [(:max_image_width room)
+ (:max_image_height room)])))
(defn validate-avatar-file [f]
(or (is-file-too-big? f max-avatar-size)
@@ -1145,7 +1140,7 @@ WHERE u.user_id = ANY(?)"
; responses. Therefore, return strings should not be JSON-encoded.
(defn do-upload [session image room]
- (if-let [err (validate-upload-file (image :tempfile) (is-vip? session))]
+ (if-let [err (validate-upload-file (image :tempfile) room)]
(resp-error err)
(let [filename (format-filename (:filename image) (session :nick))
date (today)
@@ -1290,6 +1285,7 @@ WHERE u.user_id = ANY(?)"
(GET "/debug" (debug-page session flash))
(POST "/debug" (debug-commmand! session params))
(GET "/mutes" (show-mutes session))
+ (GET "/roomlist" (show-rooms session))
(POST "/mute" (mute! session params))
(POST "/cancel-mute" (handle-cancel-mute! session params))
(GET "/profile-test/:t" (profile session "ryder" (params :t)))
diff --git a/template/roomlist.st b/template/roomlist.st
new file mode 100644
index 0000000..6dadf6a
--- /dev/null
+++ b/template/roomlist.st
@@ -0,0 +1,53 @@
+<html>
+ <head>
+ <title>dump.fm rooms</title>
+ <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
+ <script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.0/jquery-ui.min.js"
+ type="text/javascript"></script>
+ <script src="/static/js/jquery.tablesorter.min.js"
+ type="text/javascript"></script>
+ <link rel="stylesheet" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/themes/ui-lightness/jquery-ui.css"
+ <script src="/static/js/admin.js" type="text/javascript"></script>
+ <link rel="stylesheet" type="text/css" href="/static/tsort/style.css">
+ <style>
+ body { font-family: Monaco, "Courier New", Courier, monospace; }
+ </style>
+ <script>
+ jQuery(function() { jQuery('.tablesorter').tablesorter({}); });
+ </script>
+</head>
+ <body>
+ <h1>dump.fm rooms</h1>
+ <table class="tablesorter">
+ <thead>
+ <tr>
+ <th>Name</th>
+ <th>VIP?</th>
+ <th>Active?</th>
+ <th>Created On</th>
+ <th>Current Users</th>
+ <th>History Size</th>
+ <th>Max Filesize</th>
+ <th>Max Imagesize</th>
+ </tr>
+ </thead>
+ <tbody>
+ $rooms: { r |
+ <tr>
+ <td>$r.key$</td>
+ <td>$r.admin_only$</td>
+ <td>$r.active$</td>
+ <td>$r.created_on$</td>
+ <td>$r.users$</td>
+ <td>$r.history_size$</td>
+ <td>$r.max_file_size$</td>
+ <td>$r.max_image_size_x$x$r.max_image_size_y$</td>
+ </tr>
+ }$
+ </tbody>
+ </table>
+ </body>
+</html>
+
+
+