     (if-let [timer-id (:timer-id args)] ;; Necessary b/c validation hasn't happened yet
       (if (timers.db/owns? connection google-id timer-id)
         (func channel google-id connection args)
-        (send-error! channel "Unauthorized"))
+        (do
+          (log/warn {:event     ::unauthorized-timer-action
+                     :google-id google-id
+                     :timer-id  timer-id})
+          (send-error! channel "Unauthorized")))
       (send-invalid-args! channel))))
 
 (defn- wrap-can-create-timer

(defn add-channel!
  "Adds a channel to the map of active connections."
  [channel google-id]
  (swap! active-connections update google-id conj-to-set channel))

(defn on-close!
  "Called when a channel is closed."
  [channel google-id status]
  ;; TODO: Use status in logging
  (swap! active-connections update google-id disj channel))

;; Utils ----------------------


  [channel google-id command-data]
  (if-let [command-fn (command-map (get command-data :command))]
    (command-fn channel google-id (dissoc command-data :command))
    (send! channel (json/encode
                    {:error "Invalid command"}))))
