Advertisement
Guest User

Untitled

a guest
Apr 14th, 2016
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.89 KB | None | 0 0
  1. ;; ; specify S3 repositories with something like
  2. ;;
  3. ;; (set-env!
  4. ;; :wagons '[[s3-wagon-private "1.2.0"]]
  5.  
  6. ;; :repositories #(concat % [["releases" {:url "s3p://your-s3-wagon-bucket/releases/"
  7. ;; :username [:env/aws_access_key :gpg]
  8. ;; :passphrase [:env/aws_secret_key :gpg]}]
  9. ;; ["snapshots" {:url "s3p://your-s3-wagon-bucket/snapshots/"
  10. ;; :username [:env/aws_access_key :gpg]
  11. ;; :passphrase [:env/aws_secret_key :gpg]}]])
  12.  
  13. (configure-repositories!
  14. (let [gpg-creds (atom nil)
  15. with-creds (atom {})
  16.  
  17. gpg-cred-file (some
  18. (fn [f] (when (.exists f) f))
  19. [(clojure.java.io/file
  20. (System/getProperty "user.home") ".lein/credentials.clj.gpg")
  21. (clojure.java.io/file
  22. (System/getProperty "user.home") ".boot/credentials.clj.gpg")])
  23.  
  24. decrypt-gpg-creds (fn []
  25. (cond
  26. @gpg-creds @gpg-creds
  27. gpg-cred-file (reset! gpg-creds (gpg-decrypt gpg-cred-file :as :edn))
  28. :else nil))
  29.  
  30. gpg-creds-for-url (fn [url]
  31. (when url
  32. (some
  33. (fn [[regex cred]]
  34. (if (re-find regex url) cred))
  35. (decrypt-gpg-creds))))
  36.  
  37. fetch-gpg-cred (fn [url k]
  38. (let [cred (-> (gpg-creds-for-url url)
  39. (get k))]
  40. (when cred (println "got GPG cred for: " url k))
  41. cred))
  42.  
  43. fetch-env-cred (fn [url k]
  44. (when-let [[_ ev] (->> k str (re-matches #"^:env/(.+)$"))]
  45. (let [ev (clojure.string/upper-case ev)
  46. cred (System/getenv ev)]
  47. (when cred (println "got EV cred for: " url k))
  48. cred)))
  49.  
  50. make-sequential (fn [v]
  51. (cond (nil? v) nil
  52. (sequential? v) v
  53. :else [v]))
  54.  
  55. choose-creds (fn [{url :url
  56. :as m}]
  57. (let [cks (clojure.set/intersection
  58. #{:username :password :passphrase}
  59. (-> m keys set))]
  60. (if (not-empty cks)
  61. (into
  62. {}
  63. (for [ck cks]
  64. (do
  65. (println "looking for: " url ck)
  66. (let [v (some
  67. identity
  68. (for [cspec (make-sequential (get m ck))]
  69. (do
  70. (cond
  71. (= :gpg cspec)
  72. (fetch-gpg-cred url ck)
  73.  
  74. (re-matches #"^:env/.+$" (some-> cspec str))
  75. (fetch-env-cred url cspec)))))]
  76. (when v [ck v])))))
  77. (gpg-creds-for-url url))))
  78.  
  79. configure-repo (fn [m]
  80. (let [creds (choose-creds m)
  81. m (merge m creds)]
  82. ;; (when creds
  83. ;; (prn "configured: " m))
  84. m))]
  85.  
  86. (fn [{:keys [url] :as m}]
  87.  
  88. (when-not (get @with-creds url)
  89. (swap! with-creds
  90. assoc
  91. url
  92. (configure-repo m)))
  93.  
  94. (get @with-creds url m))))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement