Skip to content

Commit

Permalink
rooms ending with - are now "private", which means they aren't logged…
Browse files Browse the repository at this point in the history
… and don't show up in LIST, WHOIS, etc.
  • Loading branch information
danlarkin committed Jan 4, 2012
1 parent 045d037 commit b11e998
Show file tree
Hide file tree
Showing 6 changed files with 50 additions and 13 deletions.
11 changes: 10 additions & 1 deletion src/subrosa/client.clj
Original file line number Diff line number Diff line change
Expand Up @@ -163,7 +163,10 @@
(defn maybe-create-room! [room-name]
(when-not (room-for-name room-name)
(db/put :room {:name room-name
:topic nil})))
:topic nil
:mode (if (.endsWith room-name "-")
#{:private}
#{})})))

(defn maybe-delete-room! [room-name]
(when-not (seq (db/get :user-in-room :room-name room-name))
Expand Down Expand Up @@ -193,6 +196,12 @@
(defn topic-for-room [room-name]
(:topic (room-for-name room-name)))

(defn mode-for-room [room-name]
(:mode (room-for-name room-name)))

(defn room-is-private? [room-name]
(:private (mode-for-room room-name)))

(defn nicks-in-room [room-name]
(map :user-nick (db/get :user-in-room :room-name room-name)))

Expand Down
13 changes: 9 additions & 4 deletions src/subrosa/commands.clj
Original file line number Diff line number Diff line change
Expand Up @@ -266,7 +266,7 @@
(let [nick (:nick user)
user-name (:user-name user)
real-name (:real-name user)
rooms (rooms-for-nick nick)
rooms (remove room-is-private? (rooms-for-nick nick))
hostname (format-hostname (:channel user))]
(send-to-client channel 311 (format "%s %s * :%s"
user-name
Expand Down Expand Up @@ -299,7 +299,8 @@
;; ":Users" and "Name"
(send-to-client channel 321 "Channel :Users Name")
(doseq [room-name rooms
:when (room-for-name room-name)]
:when (and (room-for-name room-name)
(not (room-is-private? room-name)))]
(send-to-client channel 322 (format "%s %s :%s"
room-name
(count (nicks-in-room room-name))
Expand Down Expand Up @@ -349,8 +350,12 @@
(doseq [{:keys [nick real-name user-name] :as user} users]
(send-to-client channel 352 (format "%s %s %s %s %s H :0 %s"
(if (= room-name-for-reply "*")
room-name-for-reply
(first (rooms-for-nick nick)))
(or
(first
(remove room-is-private?
(rooms-for-nick nick)))
room-name-for-reply)
room-name-for-reply)
user-name
(format-hostname (:channel user))
(hostname)
Expand Down
13 changes: 7 additions & 6 deletions src/subrosa/plugins/fs_logging.clj
Original file line number Diff line number Diff line change
Expand Up @@ -21,12 +21,13 @@
(str log-dir "/" room-name "_" (format-date) ".log")))

(defn append [room-name msg]
(send io-agent
(fn [_]
(io!
(with-open [out (FileWriter. (get-log-name room-name) true)]
(.write out (.toCharArray
(str (format-time) " " msg "\n"))))))))
(when-not (room-is-private? room-name)
(send io-agent
(fn [_]
(io!
(with-open [out (FileWriter. (get-log-name room-name) true)]
(.write out (.toCharArray
(str (format-time) " " msg "\n")))))))))

(defmulti log (fn [& args] (first args)))

Expand Down
2 changes: 1 addition & 1 deletion src/subrosa/server.clj
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

;; database schema:
;; :user => [:nick :real-name :user-name :quit-message :channel :pending?]
;; :room => [:name :topic]
;; :room => [:name :topic :mode]
;; :user-in-room => [:user-nick :room-name]

(defonce server {:host (config :host)
Expand Down
3 changes: 2 additions & 1 deletion test/subrosa/test/connection.clj
Original file line number Diff line number Diff line change
Expand Up @@ -232,11 +232,12 @@
(with-connection s2
(transmit s2 "NICK awesomedan")
(transmit s2 "USER dan2 0 * :Dan Larkin2")
(transmit s2 "JOIN #foo")
(transmit s2 "WHO")
(is (received?
s2 #"352 awesomedan \* dan .* .* superdan H :0 Dan Larkin"))
(is (received?
s2 #"352 awesomedan \* dan2 .* .* awesomedan H :0 Dan Larkin2"))
s2 #"352 awesomedan \#foo dan2 .* .* awesomedan H :0 Dan Larkin2"))
(is (received? s2 #"315 awesomedan \* :End of WHO list")))))

(deftest who-command-for-an-empty-channel
Expand Down
21 changes: 21 additions & 0 deletions test/subrosa/test/rooms.clj
Original file line number Diff line number Diff line change
Expand Up @@ -353,3 +353,24 @@
(transmit s "KICK #supercool dan2")
(is (received?
s #"441 dan dan2 \#supercool :They aren't on that channel")))))

(deftest private-rooms-dont-show-in-list
(with-connection s
(transmit s "NICK dan")
(transmit s "USER dan 0 * :Dan Larkin")
(transmit s "JOIN #foo")
(transmit s "JOIN #foo-")
(transmit s "LIST")
(is (received? s #"322 dan #foo 1 :"))
(is (not-received? s #"322 dan #foo- 1 :"))))

(deftest private-rooms-dont-show-in-whois
(with-connection s
(transmit s "NICK dan")
(transmit s "USER dan 0 * :Dan Larkin")
(transmit s "JOIN #foo")
(transmit s "JOIN #foo-")
(transmit s "WHOIS dan")
(is (received? s #"311 dan dan .* \* :Dan Larkin"))
(is (received? s #"319 dan dan :#foo"))
(is (received? s #":End of WHOIS list"))))

0 comments on commit b11e998

Please sign in to comment.