2
0
mirror of https://github.com/narkoz/hacker-scripts synced 2025-08-23 19:07:33 +00:00

Clojure implementation (#174)

* clojure implementation

* gf --> boss

* newlines
This commit is contained in:
Sam Adams 2019-04-23 02:16:28 -07:00 committed by Nihad Abbasov
parent 64f2d1b7dc
commit 166cae8079
4 changed files with 163 additions and 0 deletions

39
clojure/coffee.clj Normal file
View File

@ -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)))))

28
clojure/hangover.clj Normal file
View File

@ -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)))

68
clojure/kumar.clj Normal file
View File

@ -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)))))

28
clojure/smack.clj Normal file
View File

@ -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)))