summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authortim b <timb@camcompu.home>2010-04-03 21:11:45 -0700
committertim b <timb@camcompu.home>2010-04-03 21:11:45 -0700
commit7114b29dca66ac9032a74255fa9c7bb37e333fdc (patch)
tree60153fb300568b34f173cf3c230e197b84cd8415 /src
parentd32d26065494ccbd4a9ddba0789003e3daa5fa28 (diff)
parent4479097093127a20a40a9dceb604bf4290c09a2d (diff)
committing stuff so i can merge pulled repo
Diffstat (limited to 'src')
-rw-r--r--src/email.clj68
-rw-r--r--src/site.clj38
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))