Added --oauth flag to authorize a bot for another account.

This commit is contained in:
John Wiseman 2020-10-15 22:12:00 -07:00
parent d5c325493e
commit 3a68965f11
3 changed files with 63 additions and 1 deletions

13
package-lock.json generated
View File

@ -1273,6 +1273,11 @@
"resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
"integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0="
},
"oauth": {
"version": "0.9.15",
"resolved": "https://registry.npmjs.org/oauth/-/oauth-0.9.15.tgz",
"integrity": "sha1-vR/vr2hslrdUda7VGWQS/2DPucE="
},
"oauth-sign": {
"version": "0.9.0",
"resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
@ -1923,6 +1928,14 @@
}
}
},
"twitter-pin": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/twitter-pin/-/twitter-pin-1.0.0.tgz",
"integrity": "sha1-nVnamDwASzLG/rCFvPE1781ZNQ4=",
"requires": {
"oauth": "^0.9.13"
}
},
"typedarray": {
"version": "0.0.6",
"resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",

View File

@ -16,6 +16,7 @@
"sqlite": "^3.0.3",
"tmp-promise": "^3.0.2",
"twit": "^2.2.11",
"twitter-pin": "^1.0.0",
"winston": "^3.3.3"
}
}

View File

@ -17,7 +17,8 @@
[lemondronor.advisorycircular.pelias :as pelias]
[lemondronor.advisorycircular.twitter :as twitter]
[lemondronor.advisorycircular.util :as util]
["sqlite" :as sqlite]))
["sqlite" :as sqlite]
["twitter-pin" :as twitter-pin]))
(declare logger log-debug log-verbose log-info log-warn log-error)
(logging/deflog "advisorycircular" logger)
@ -848,6 +849,50 @@
(println (:num-followers stats) "Twitter followers"))
(defn read-line []
(p/promise [resolve]
(.once js/process.stdin
"data"
#(resolve (.trim (str %))))))
(defn twitter-pin-get-url [tp]
(p/promise [resolve reject]
(.getUrl tp (fn [err url]
(if err
(reject err)
(resolve url))))))
(defn twitter-pin-authorize [tp pin]
(p/promise [resolve reject]
(.authorize tp pin (fn [err result]
(when err
(reject err))
(resolve
{:user-id (.-user_id result)
:screen-name (.-screen_name result)
:token (.-token result)
:secret (.-secret result)})))))
(defn do-oauth-authorization []
(p/let [_ (println "Enter the bot app's consumer key:")
consumer-key (read-line)
_ (println "Enter the bot app's consumer secret:")
consumer-secret (read-line)
_ (println consumer-key consumer-secret twitter-pin)
pin-getter (twitter-pin consumer-key consumer-secret)
auth-url (twitter-pin-get-url pin-getter)
_ (println "1. Open this URL and get the PIN:" auth-url)
_ (println "2. Enter the PIN you got from the URL above:")
pin (read-line)
authorization (twitter-pin-authorize pin-getter (.trim (str pin)))]
(println "Authorizing account:" (:screen-name authorization))
(println "Token:" (:token authorization))
(println "Secret:" (:secret authorization))))
(defn main [& args]
(-> commander
(.option "--lat <lat>" "Latitude of the circle of region of interest" parse-number)
@ -865,6 +910,7 @@
(.option "--airport-geojson" "Generate airport GEOJSON and exit")
(.option "--create-aircraft-info-db-from-json <json path>" "Generate aircraft info DB and exit")
(.option "--stats" "Show bot stats and exit")
(.option "--oauth" "Run the oauth authorization process for the bot and a twitter account")
(.parse (.-argv js/process)))
(logging/set-log-prefix! (or (.-logPrefix commander) ""))
(reset! log-prefix (or (.-logPrefix commander) ""))
@ -880,6 +926,8 @@
(p/let [config (get-config commander)
stats (get-stats config)]
(print-stats stats))
(.-oauth commander)
(do-oauth-authorization)
:else
(let [start-time (current-time)]
;; If --config-path is specified, definitely try to read that