diff options
| author | tim b <timb@camcompu.home> | 2010-04-03 21:11:45 -0700 |
|---|---|---|
| committer | tim b <timb@camcompu.home> | 2010-04-03 21:11:45 -0700 |
| commit | 7114b29dca66ac9032a74255fa9c7bb37e333fdc (patch) | |
| tree | 60153fb300568b34f173cf3c230e197b84cd8415 /src | |
| parent | d32d26065494ccbd4a9ddba0789003e3daa5fa28 (diff) | |
| parent | 4479097093127a20a40a9dceb604bf4290c09a2d (diff) | |
committing stuff so i can merge pulled repo
Diffstat (limited to 'src')
| -rw-r--r-- | src/email.clj | 68 | ||||
| -rw-r--r-- | src/site.clj | 38 |
2 files changed, 97 insertions, 9 deletions
diff --git a/src/email.clj b/src/email.clj new file mode 100644 index 0000000..2a68e7b --- /dev/null +++ b/src/email.clj @@ -0,0 +1,68 @@ +(ns email + (:import org.antlr.stringtemplate.StringTemplateGroup) + (:require [clojure.contrib.str-utils2 :as str-utils2])) + +(defn base-mail [& m] + (let [mail (apply hash-map m) + props (java.util.Properties.)] + + (doto props + (.put "mail.smtp.host" (:host mail)) + (.put "mail.smtp.port" (:port mail)) + (.put "mail.smtp.user" (:user mail)) + (.put "mail.smtp.socketFactory.port" (:port mail)) + (.put "mail.smtp.auth" "true")) + + (if (= (:ssl mail) true) + (doto props + (.put "mail.smtp.starttls.enable" "true") + (.put "mail.smtp.socketFactory.class" + "javax.net.ssl.SSLSocketFactory") + (.put "mail.smtp.socketFactory.fallback" "false"))) + + (let [authenticator (proxy [javax.mail.Authenticator] [] + (getPasswordAuthentication + [] + (javax.mail.PasswordAuthentication. + (:user mail) (:password mail)))) + session (javax.mail.Session/getDefaultInstance props authenticator) + msg (javax.mail.internet.MimeMessage. session)] + + (.setFrom msg (javax.mail.internet.InternetAddress. (:user mail))) + (doseq [to (:to mail)] + (.setRecipients msg + (javax.mail.Message$RecipientType/TO) + (javax.mail.internet.InternetAddress/parse to))) + (.setSubject msg (:subject mail)) + (.setText msg (:text mail)) + (javax.mail.Transport/send msg)))) + +(def mail-templates (new StringTemplateGroup "dumpfm-mail" "template/mail")) +(.setRefreshInterval mail-templates 3) + +(defn parse-mail-template [temp props] + (let [st (.getInstanceOf mail-templates temp)] + (doseq [[k v] props] + (.setAttribute st k v)) + (let [[s b] (.split (.toString st) "\\n" 2)] + [(.trim (.replaceFirst s "SUBJECT: " "")) + (.trim b)]))) + +(defn dump-mail [to subject text] + (base-mail :user "info@dump.fm" + :password "dumprulez7" + :host "smtpout.secureserver.net" + :port 25 + :ssl false + :to to + :subject subject + :text text)) + +(defn send-registration-email [nick email] + (let [[s b] (parse-mail-template "welcome" {"nick" nick})] + (dump-mail [email] s b))) + +(defn send-reset-email [nick email key] + (let [[s b] (parse-mail-template "reset" {"nick" nick "key" key})] + (dump-mail [email] s b))) + diff --git a/src/site.clj b/src/site.clj index 7f8e22c..eb6d153 100644 --- a/src/site.clj +++ b/src/site.clj @@ -15,6 +15,7 @@ clojure.contrib.sql clojure.contrib.str-utils compojure + email utils cookie-login session-sweeper @@ -367,6 +368,7 @@ [:nick :hash :email] [nick hash email]) (let [db-user (fetch-nick nick)] + (send-registration-email nick email) [(session-assoc-from-db db-user) (resp-success "OK")]))))) @@ -433,7 +435,8 @@ (defn directory-search [offset] (let [directory @*directory-listing* users (subvec directory - (* offset *per-directory-page*) + (min (count directory) + (* offset *per-directory-page*)) (min (count directory) (* (inc offset) *per-directory-page*))) user-ids (apply str (interpose ", " (map #(%1 :user_id) users))) @@ -448,17 +451,19 @@ ORDER BY created_on DESC LIMIT 1)")] (when (> (count user-ids) 0) (let [res (do-select [qry]) - keys (map :user_id res) - dict (zipmap keys res)] + keys (map :user_id res) + res-dict (zipmap keys res)] (map (fn [u] (let [u-id (u :user_id)] - (process-directory-listing (merge u (dict u-id))))) + (process-directory-listing (merge u (res-dict u-id))))) users))))) (defn update-directory! [] (let [qry "SELECT u.user_id, COUNT(m) as cnt FROM users u, messages m WHERE u.user_id = m.user_id + AND m.room_id = 1 + AND m.is_image = true GROUP BY u.user_id ORDER BY COUNT(m) DESC" res (vec (do-select [qry]))] @@ -482,6 +487,8 @@ (cond (= offset 0) (.setAttribute st "prev" false) (= offset 1) (.setAttribute st "prev" "") :else (.setAttribute st "prev" (str "/" (dec offset)))) + (if (> offset 0) + (.setAttribute st "cur" offset)) (.setAttribute st "next" (str "/" (inc offset))) (if (zero? (count @*directory-listing*)) (.setAttribute st "notloaded" true)) @@ -711,11 +718,24 @@ (log session (@rooms room-key) offset params) (resp-error "UNKNOWN_ROOM"))) +;; Account resets + +(defn reset-page [session] + ) + +(defn reset-account-request! [session params] + ) + +(defn reset-account! [session key] + ) + ;; Upload (def *max-image-height* 2000) (def *max-image-width* 2000) +(def *max-avatar-height* 2000) +(def *max-avatar-width* 2000) (def *vip-max-file-size* (mbytes 5)) ; don't be nuts guys (def *max-file-size* (kbytes 750)) (def *ignore-size-limit-for-vip* true) @@ -778,10 +798,6 @@ (not (validate-room-access room-key session)) [200 "UNKNOWN_ROOM"] :else (do-upload session image (@rooms room-key))))) -(defn copy-and-resize [image dest] - ; TODO: resize - (copy image dest)) - ;; N.B. -- Upload responses aren't JSON-evaluated (defn do-upload-avatar [session image] (let [filename (format-filename (:filename image) (session :nick)) @@ -789,7 +805,7 @@ dest (open-file [*avatar-directory* date] filename) url (image-url-from-file "avatars" date dest)] (do - (copy-and-resize (:tempfile image) dest) + (copy (:tempfile image) dest) (update-user-db (session :user_id) "avatar" url) [(session-assoc :avatar url) [200 url]]))) @@ -851,6 +867,7 @@ (-> request :route-params :room) (-> request :route-params :offset) params)) + ;; TODO: add form tokens for all destructive actions (POST "/msg" (validated-msg session params)) (POST "/submit-registration" (register session params)) (POST "/update-profile" (update-profile session params)) @@ -860,6 +877,9 @@ (GET "/directory" (directory session 0)) (GET "/directory/:offset" (directory session (maybe-parse-int (-> request :route-params :offset) 0))) + (GET "/reset" (reset-page session)) + (POST "/reset-request" (reset-account-request! session params)) + (POST "/reset/:key" (reset-account! session (-> request :route-params :key))) (GET "/about_us" (serve-template "about_us" session)) (GET "/goodies" (serve-template "goodies" session)) (GET "/help" (serve-template "help" session)) |
