From 166cae8079dd333235036dba5e9cb3a2240bbbd0 Mon Sep 17 00:00:00 2001 From: Sam Adams Date: Tue, 23 Apr 2019 02:16:28 -0700 Subject: [PATCH] Clojure implementation (#174) * clojure implementation * gf --> boss * newlines --- clojure/coffee.clj | 39 +++++++++++++++++++++++++ clojure/hangover.clj | 28 ++++++++++++++++++ clojure/kumar.clj | 68 ++++++++++++++++++++++++++++++++++++++++++++ clojure/smack.clj | 28 ++++++++++++++++++ 4 files changed, 163 insertions(+) create mode 100644 clojure/coffee.clj create mode 100644 clojure/hangover.clj create mode 100644 clojure/kumar.clj create mode 100644 clojure/smack.clj diff --git a/clojure/coffee.clj b/clojure/coffee.clj new file mode 100644 index 0000000..96d87eb --- /dev/null +++ b/clojure/coffee.clj @@ -0,0 +1,39 @@ +(ns hacker-scripts.coffee + (:require [environ.core :refer [env]]) + (:import + (java.net Socket) + (java.io BufferedReader PrintWriter InputStreamReader))) + +(def my-username "my-username") +(def my-password "my-password") + +(def coffee-machine-ip "10.10.42.42") +(def password-prompt "Password: ") +(def connection-port 23) + +(def sec-delay-before-brew 17) +(def sec-delay-before-pour 24) + +(defn logged-in? [] (= (:USER env) my-username)) + +(defn auth [in-stream out-stream] + (if (= (.readLine in-stream) password-prompt) + (.println out-stream my-password) + (throw (RuntimeException. + "Failed to authenticate with coffee machine")))) + +(defn command-brew-pour [out-stream] + (do + (Thread/sleep (* 1000 sec-delay-before-brew)) + (.println out-stream "sys brew") + (Thread/sleep (* 1000 sec-delay-before-pour)) + (.println out-stream "sys pour"))) + +(defn coffee [] + (if (logged-in?) + (with-open [socket (Socket. coffee-machine-ip connection-port) + out-stream (PrintWriter. (.getOutputStream socket) true) + in-stream (BufferedReader. (InputStreamReader. (.getInputStream socket)))] + (do + (auth in-stream out-stream) + (command-brew-pour out-stream))))) diff --git a/clojure/hangover.clj b/clojure/hangover.clj new file mode 100644 index 0000000..7a71372 --- /dev/null +++ b/clojure/hangover.clj @@ -0,0 +1,28 @@ +(ns hacker-scripts.hangover + (:import + (com.twilio Twilio) + (com.twilio.rest.api.v2010.account Message) + (com.twilio.type PhoneNumber))) + +(def acc-sid "my twilio account SID") +(def acc-tkn "my twilio secret token") + +(def my-num (PhoneNumber. "+10001112222")) +(def boss-num (PhoneNumber. "+19998887777")) + +(def reasons ["Receiving delivery" + "Waiting for repairman" + "Nasty cold"]) + +(defn twilio-init [] + (Twilio/init acc-sid acc-tkn)) + +(defn send-sms [to-num from-num message] + (.. Message (creator to-num from-num message) create)) + +(def send-sms-boss (partial send-sms boss-num my-num)) + +(defn hangover [] + (twilio-init) + (let [message (rand-nth reasons)] + (send-sms-boss message))) diff --git a/clojure/kumar.clj b/clojure/kumar.clj new file mode 100644 index 0000000..e406ce9 --- /dev/null +++ b/clojure/kumar.clj @@ -0,0 +1,68 @@ +(ns hacker-scripts.kumar + (:import + (java.util Properties) + (javax.mail Session Authenticator PasswordAuthentication Message$RecipientType Transport Folder Flags Flags$Flag) + (javax.mail.internet MimeMessage InternetAddress) + (javax.mail.search FlagTerm FromTerm AndTerm OrTerm SubjectTerm BodyTerm SearchTerm))) + +(def host "smtp.gmail.com") +(def my-email "my-email@gmail.com") +(def my-password "my-gmail-password") +(def kumar-email "kumar@gmail.com") + +(def seen-flag (Flags. (Flags$Flag/SEEN))) + +(def unread-term (FlagTerm. seen-flag false)) + +(defn get-session [] + (let [authenticator (proxy [Authenticator] [] + (getPasswordAuthentication [] + (PasswordAuthentication. my-email my-password))) + props (Properties.)] + (.put props "mail.smtp.host" "smtp.gmail.com") + (.put props "mail.smtp.port" "587") + (.put props "mail.smtp.auth" "true") + (.put props "mail.smtp.starttls.enable" "true") + (.. Session (getInstance props authenticator)))) + +(defn get-inbox [session] + (let [store (.getStore session "imaps") + inbox (do + (.connect store host my-email my-password) + (.getFolder store "inbox"))] + (.open inbox Folder/READ_WRITE) + inbox)) + +(defn get-no-worries-message [session] + (let [message (MimeMessage. session)] + (.setFrom message (InternetAddress. my-email)) + (.addRecipient message Message$RecipientType/TO (InternetAddress. kumar-email)) + (.setSubject message "Database fixes") + (.setText message "No worries mate, be careful next time") + message)) + +(defn search-term [pattern] + (OrTerm. (into-array SearchTerm [(SubjectTerm. pattern) (BodyTerm. pattern)]))) + +(defn any-of-search-term [& patterns] + (OrTerm. (into-array (map search-term patterns)))) + +(defn from-term [addr] + (FromTerm. (InternetAddress. addr))) + +(defn get-unread-sos-from-kumar [inbox] + (let [flag (AndTerm. (into-array SearchTerm [unread-term + (from-term kumar-email) + (any-of-search-term "help" "sorry" "trouble")]))] + (.search inbox flag))) + +(defn mark-as-read [inbox messages] + (.setFlags inbox messages seen-flag true)) + +(defn kumar-asshole [] + (let [session (get-session) + inbox (get-inbox session) + unread-sos-from-kumar (get-unread-sos-from-kumar inbox)] + (when (seq unread-sos-from-kumar) + (mark-as-read inbox unread-sos-from-kumar) + (Transport/send (get-no-worries-message session))))) diff --git a/clojure/smack.clj b/clojure/smack.clj new file mode 100644 index 0000000..232a0b1 --- /dev/null +++ b/clojure/smack.clj @@ -0,0 +1,28 @@ +(ns hacker-scripts.smack + (:import + (com.twilio Twilio) + (com.twilio.rest.api.v2010.account Message) + (com.twilio.type PhoneNumber))) + +(def acc-sid "my twilio account SID") +(def acc-tkn "my twilio secret token") + +(def my-num (PhoneNumber. "+10001112222")) +(def her-num (PhoneNumber. "+19998887777")) + +(def reasons ["Working hard" + "Gotta ship this feature" + "Someone fucked the system again"]) + +(defn twilio-init [] + (Twilio/init acc-sid acc-tkn)) + +(defn send-sms [to-num from-num message] + (.. Message (creator to-num from-num message) create)) + +(def send-sms-girlfriend (partial send-sms her-num my-num)) + +(defn smack [] + (twilio-init) + (let [message (rand-nth reasons)] + (send-sms-girlfriend message)))