From: =?utf-8?b?SsOpcsO0bWUgQ2hhcmFvdWk=?= <jerome@riseup.net>
Date: Fri, 23 Dec 2022 19:25:51 -0500
Subject: Remove com.cognitec.aws.* dependencies

Not packaged in Debian, and not core functionality.

Forwarded: not-needed
---
 pom.xml                                            |  15 ---
 src/main/clojure/clojure/tools/deps/util/maven.clj |   3 +-
 .../clojure/tools/deps/util/s3_aws_client.clj      |  42 ------
 .../clojure/tools/deps/util/s3_transporter.clj     | 149 ---------------------
 .../tools/deps/util/S3TransporterFactory.java      |  57 --------
 .../tools/deps/util/test_s3_transporter.clj        |  39 ------
 6 files changed, 1 insertion(+), 304 deletions(-)
 delete mode 100644 src/main/clojure/clojure/tools/deps/util/s3_aws_client.clj
 delete mode 100644 src/main/clojure/clojure/tools/deps/util/s3_transporter.clj
 delete mode 100644 src/main/java/clojure/tools/deps/util/S3TransporterFactory.java
 delete mode 100644 src/test/clojure/clojure/tools/deps/util/test_s3_transporter.clj

diff --git a/pom.xml b/pom.xml
index 5983703..e789213 100644
--- a/pom.xml
+++ b/pom.xml
@@ -120,21 +120,6 @@
       <artifactId>tools.cli</artifactId>
       <version>1.0.214</version>
     </dependency>
-    <dependency>
-      <groupId>com.cognitect.aws</groupId>
-      <artifactId>api</artifactId>
-      <version>0.8.612</version>
-    </dependency>
-    <dependency>
-      <groupId>com.cognitect.aws</groupId>
-      <artifactId>endpoints</artifactId>
-      <version>1.1.12.321</version>
-    </dependency>
-    <dependency>
-      <groupId>com.cognitect.aws</groupId>
-      <artifactId>s3</artifactId>
-      <version>822.2.1145.0</version>
-    </dependency>
     <dependency>
       <groupId>javax.inject</groupId>
       <artifactId>javax.inject</artifactId>
diff --git a/src/main/clojure/clojure/tools/deps/util/maven.clj b/src/main/clojure/clojure/tools/deps/util/maven.clj
index f5182af..b44d356 100644
--- a/src/main/clojure/clojure/tools/deps/util/maven.clj
+++ b/src/main/clojure/clojure/tools/deps/util/maven.clj
@@ -11,8 +11,7 @@
   (:require
     [clojure.java.io :as jio]
     [clojure.string :as str]
-    [clojure.tools.deps.util.io :refer [printerrln]]
-    clojure.tools.deps.util.s3-transporter)
+    [clojure.tools.deps.util.io :refer [printerrln]])
   (:import
     ;; maven-resolver-api
     [org.eclipse.aether RepositorySystem RepositorySystemSession DefaultRepositoryCache DefaultRepositorySystemSession ConfigurationProperties]
diff --git a/src/main/clojure/clojure/tools/deps/util/s3_aws_client.clj b/src/main/clojure/clojure/tools/deps/util/s3_aws_client.clj
deleted file mode 100644
index abe9ee2..0000000
--- a/src/main/clojure/clojure/tools/deps/util/s3_aws_client.clj
+++ /dev/null
@@ -1,42 +0,0 @@
-;   Copyright (c) Rich Hickey. All rights reserved.
-;   The use and distribution terms for this software are covered by the
-;   Eclipse Public License 1.0 (http://opensource.org/licenses/eclipse-1.0.php)
-;   which can be found in the file epl-v10.html at the root of this distribution.
-;   By using this software in any fashion, you are agreeing to be bound by
-;   the terms of this license.
-;   You must not remove this notice, or any other, from this software.
-
-(ns ^{:skip-wiki true}
-  clojure.tools.deps.util.s3-aws-client
-  (:require
-    [cognitect.aws.client.api :as aws]
-    [cognitect.aws.credentials :as creds]))
-
-(defn- aws-creds-provider
-  [user pw]
-  (reify creds/CredentialsProvider
-    (fetch [_]
-      {:aws/access-key-id user
-       :aws/secret-access-key pw})))
-
-(defn- get-bucket-loc
-  [config bucket]
-  (let [s3-client (aws/client (merge {:region "us-east-1"} config))
-        resp (try
-               (aws/invoke s3-client {:op :GetBucketLocation
-                                      :request {:Bucket bucket}})
-               (catch Throwable _ nil))
-        region (:LocationConstraint resp)]
-    (cond
-      (nil? region) nil
-      (= region "") "us-east-1"
-      :else region)))
-
-(defn new-s3-client
-  [user pw region bucket]
-  (let [cred-provider (when (and user pw)
-                        (aws-creds-provider user pw))
-        config (cond-> {:api :s3}
-                 cred-provider (assoc :credentials-provider cred-provider))
-        use-region (or region (get-bucket-loc config bucket) "us-east-1")]
-    (aws/client (assoc config :region use-region))))
\ No newline at end of file
diff --git a/src/main/clojure/clojure/tools/deps/util/s3_transporter.clj b/src/main/clojure/clojure/tools/deps/util/s3_transporter.clj
deleted file mode 100644
index f6167c2..0000000
--- a/src/main/clojure/clojure/tools/deps/util/s3_transporter.clj
+++ /dev/null
@@ -1,149 +0,0 @@
-;   Copyright (c) Rich Hickey. All rights reserved.
-;   The use and distribution terms for this software are covered by the
-;   Eclipse Public License 1.0 (http://opensource.org/licenses/eclipse-1.0.php)
-;   which can be found in the file epl-v10.html at the root of this distribution.
-;   By using this software in any fashion, you are agreeing to be bound by
-;   the terms of this license.
-;   You must not remove this notice, or any other, from this software.
-
-(ns ^{:skip-wiki true}
-  clojure.tools.deps.util.s3-transporter
-  (:refer-clojure :exclude [peek get])
-  (:require
-    [clojure.string :as str])
-  (:import
-    [java.io InputStream OutputStream IOException]
-    [java.net URI]
-    [java.nio ByteBuffer]
-    [org.eclipse.aether RepositorySystemSession]
-    [org.eclipse.aether.repository RemoteRepository AuthenticationContext]
-    [org.eclipse.aether.spi.connector.transport Transporter PeekTask GetTask]))
-
-(set! *warn-on-reflection* true)
-
-(defn s3-peek
-  "Returns nil if path exists, anomaly category otherwise"
-  [s3-client bucket path]
-  (let [s3-response ((requiring-resolve 'cognitect.aws.client.api/invoke) s3-client
-                      {:op :HeadObject,
-                       :request {:Bucket bucket, :Key path}})]
-    (:cognitect.anomalies/category s3-response)))
-
-(defn stream-copy
-  [^OutputStream os ^InputStream is ^long offset on-read]
-  (let [bb (ByteBuffer/allocate 32768)
-        ba (.array bb)]
-    (when (pos? offset)
-      (let [skipped (.skip is offset)]
-        (when-not (= skipped offset)
-          (throw (IOException. (str "Failed skipping " offset ", only skipped " skipped))))))
-    (try
-      (loop []
-        (let [read (.read is ba)]
-          (when (<= 0 read)
-            (.write os ba 0 read)
-            (.rewind bb)
-            (.limit bb read)
-            (on-read bb)
-            (recur))))
-      (finally
-        (.close is)
-        (.close os)))))
-
-(defn s3-get-object
-  [s3-client bucket path ^OutputStream output-stream offset on-read]
-  (let [s3-response ((requiring-resolve 'cognitect.aws.client.api/invoke) s3-client {:op :GetObject, :request {:Bucket bucket, :Key path}})
-        is ^InputStream (:Body s3-response)]
-    (if is
-      (stream-copy output-stream is offset on-read)
-      (let [{:keys [cognitect.anomalies/category cognitect.http-client/throwable cognitect.anomalies/message]} s3-response]
-        (if (#{:cognitect.anomalies/forbidden :cognitect.anomalies/not-found} category)
-          (throw (ex-info "Artifact not found" {:bucket bucket, :path path, :reason category}))
-          (throw (ex-info (format "Unexpected error downloading artifact from %s" bucket)
-                   {:bucket bucket, :path path, :reason category} throwable)))))))
-
-;; s3://BUCKET/PATH?region=us-east-1
-(defn parse-url
-  [^RemoteRepository repo]
-  (let [u (URI/create (.getUrl repo))
-        host (.getHost u)
-        path (str/join "/" (remove str/blank? (str/split (.getPath u) #"/")))
-        query (.getQuery u)
-        kvs (when query (str/split query #"&"))
-        {:strs [region]} (reduce (fn [m kv] (let [[k v] (str/split kv #"=")] (assoc m k v))) {} kvs)]
-    {:bucket host, :region region, :repo-path path}))
-
-(let [lock (Object.)]
-  (defn- dynaload-s3-client
-    [client-atom user pw region bucket]
-    (locking lock (require 'clojure.tools.deps.util.s3-aws-client))
-    (let [f (requiring-resolve 'clojure.tools.deps.util.s3-aws-client/new-s3-client)]
-      (swap! client-atom #(if % % (f user pw region bucket)))
-      @client-atom)))
-
-(defn new-transporter
-  [^RepositorySystemSession session ^RemoteRepository repository]
-  (let [auth-context (AuthenticationContext/forRepository session repository)
-        user (when auth-context (.get auth-context AuthenticationContext/USERNAME))
-        pw (when auth-context (.get auth-context AuthenticationContext/PASSWORD))
-        on-close #(when auth-context (.close auth-context))
-        {:keys [bucket region repo-path]} (parse-url repository)
-        s3-client-holder (atom nil)] ;; defer creation till needed
-    (reify Transporter
-      (^void peek [_ ^PeekTask peek-task]
-        (let [path (.. peek-task getLocation toString)
-              full-path (str repo-path "/" path)
-              s3-client (dynaload-s3-client s3-client-holder user pw region bucket)
-              res (s3-peek s3-client bucket full-path)]
-          (when res
-            (throw (ex-info "Artifact not found" {:bucket bucket, :path path, :reason res})))))
-      (^void get [_ ^GetTask get-task]
-        (let [path (.. get-task getLocation toString)
-              full-path (str repo-path "/" path)
-              offset (.getResumeOffset get-task)
-              os (.newOutputStream get-task (> offset 0))
-              listener (.getListener get-task)
-              s3-client (dynaload-s3-client s3-client-holder user pw region bucket)]
-          (.transportStarted listener offset -1)
-          (s3-get-object s3-client bucket full-path os offset #(.transportProgressed listener %))))
-      (classify [_ throwable]
-        (if (#{:cognitect.anomalies/forbidden :cognitect.anomalies/not-found} (-> throwable ex-data :reason))
-          Transporter/ERROR_NOT_FOUND
-          Transporter/ERROR_OTHER))
-      ;;(put [_ ^PutTask put-task])   ;; not supported
-      (close [_]
-        (when on-close (on-close))))))
-
-(comment
-  (require '[cognitect.aws.client.api :as aws] 'clojure.repl)
-  ;; use ambient creds
-  (def s3-client (aws/client {:api :s3 :region :us-east-1}))
-
-
-  (def resp (aws/invoke s3-client {:op :GetObject
-                                   :request {:Bucket "datomic-releases-1fc2183a"
-                                             :Key "maven/releases/com/datomic/ion/0.9.35/ion-0.9.35.pom"}}))
-
-  (aws/invoke s3-client {:op :GetBucketLocation
-                         :request {:Bucket "datomic-releases-1fc2183a"}})
-
-  (aws/invoke s3-client {:op :GetObject
-                         :request {:Bucket "datomic-releases-1fc2183a"
-                                   :Key "/maven/releases/com/datomic/ion/0.9.35/ion-0.9.35.pom"}})
-
-  (s3-peek s3-client "datomic-releases-1fc2183a" "/maven/releases/com/datomic/ion/0.9.35/ion-0.9.35.pom")
-
-  (with-open [os (java.io.FileOutputStream. "download.pom")]
-    (s3-get-object s3-client "datomic-releases-1fc2183a" "/maven/releases/com/datomic/ion/0.9.35/ion-0.9.35.pom"
-      os 0 #(println "read data" %)))
-
-  (def ann (s3-peek s3-client "datomic-releases-1fc2183a" "/maven/releases/com/datomic/ion/0.9.35/ion-0.9.35.foo"))
-
-  (aws/ops s3-client)
-  (aws/invoke s3-client {:op :GetBucketAcl, :request {:Bucket "datomic-releases-1fc2183a"}})
-  (aws/validate-requests s3-client true)
-  (aws/request-spec-key s3-client :GetObject)
-  (clojure.repl/doc :cognitect.aws.s3/GetObjectRequest)
-  (aws/doc s3-client :cognitect.aws.s3/GetBucketLocation)
-  (clojure.repl/doc aws/request-spec-key)
-  )
diff --git a/src/main/java/clojure/tools/deps/util/S3TransporterFactory.java b/src/main/java/clojure/tools/deps/util/S3TransporterFactory.java
deleted file mode 100644
index 75c9a68..0000000
--- a/src/main/java/clojure/tools/deps/util/S3TransporterFactory.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Copyright (c) Rich Hickey. All rights reserved.
- * The use and distribution terms for this software are covered by the
- * Eclipse Public License 1.0 (http://opensource.org/licenses/eclipse-1.0.php)
- * which can be found in the file epl-v10.html at the root of this distribution.
- * By using this software in any fashion, you are agreeing to be bound by
- * the terms of this license.
- * You must not remove this notice, or any other, from this software.
- */
-package clojure.tools.deps.util;
-
-import javax.inject.Named;
-import org.eclipse.aether.RepositorySystemSession;
-import org.eclipse.aether.repository.RemoteRepository;
-import org.eclipse.aether.spi.connector.transport.Transporter;
-import org.eclipse.aether.spi.connector.transport.TransporterFactory;
-import org.eclipse.aether.spi.locator.Service;
-import org.eclipse.aether.spi.locator.ServiceLocator;
-import clojure.java.api.Clojure;
-import clojure.lang.IFn;
-import org.eclipse.aether.transfer.NoTransporterException;
-
-/**
- * Transporter factory for repositories using the s3 protocol.
- */
-@Named("s3")
-public final class S3TransporterFactory implements TransporterFactory, Service {
-
-    private static class DelayedInstance {
-        private static final IFn NEW_TRANSPORTER;
-
-        static {
-            IFn REQUIRE = Clojure.var("clojure.core", "require");
-            REQUIRE.invoke(Clojure.read("clojure.tools.deps.util.s3-transporter"));
-            NEW_TRANSPORTER = Clojure.var("clojure.tools.deps.util.s3-transporter", "new-transporter");
-        }
-    }
-
-    private S3TransporterFactory() {}
-
-    public void initService(ServiceLocator locator) {
-    }
-
-    public Transporter newInstance(RepositorySystemSession session, RemoteRepository repository) throws NoTransporterException {
-        String protocol = repository.getProtocol();
-        if("s3".equals(protocol)) {
-            return (Transporter) DelayedInstance.NEW_TRANSPORTER.invoke(session, repository);
-        } else {
-            throw new NoTransporterException(repository);
-        }
-    }
-
-    public float getPriority() {
-        return 5.0f;
-    }
-
-}
diff --git a/src/test/clojure/clojure/tools/deps/util/test_s3_transporter.clj b/src/test/clojure/clojure/tools/deps/util/test_s3_transporter.clj
deleted file mode 100644
index a4b0a76..0000000
--- a/src/test/clojure/clojure/tools/deps/util/test_s3_transporter.clj
+++ /dev/null
@@ -1,39 +0,0 @@
-(ns clojure.tools.deps.util.test-s3-transporter
-  (:require
-    [clojure.test :refer [are deftest]]
-    [clojure.tools.deps.util.s3-transporter :as s3t]
-    [clojure.tools.deps.util.maven :as mvn])
-  (:import
-    [java.io File]
-    [java.net URI]
-    [org.eclipse.aether.spi.connector.transport Transporter GetTask TransportListener]))
-
-(set! *warn-on-reflection* true)
-
-(deftest test-parse
-  (are [u r b p] (= (merge {:region nil, :bucket nil, :repo-path nil}
-                      (s3t/parse-url (mvn/remote-repo [nil {:url u}])))
-                   {:region r :bucket b :repo-path p})
-    "s3://BUCKET/PATH1/PATH2" nil "BUCKET" "PATH1/PATH2"
-    "s3://BUCKET/PATH1/PATH2?region=REGION" "REGION" "BUCKET" "PATH1/PATH2"))
-
-(defn downloader
-  [repo url path]
-  (let [system (mvn/make-system)
-        settings (mvn/get-settings)
-        session (mvn/make-session system settings "/Users/alex/.m2/repository")
-        remote-repo (mvn/remote-repo [repo {:url url}])
-        transporter (s3t/new-transporter session remote-repo)
-        task (GetTask. (URI/create path))
-        temp (File/createTempFile "dload-" nil)]
-    (.setDataFile task temp)
-    (.setListener task (proxy [TransportListener] []
-                         (transportStarted [_ _])
-                         (transportProgressed [_])))
-    (.get ^Transporter transporter task)
-    (slurp temp)))
-
-(comment
-  (downloader "datomic" "s3://datomic-releases-1fc2183a/maven/releases" "com/datomic/ion/0.9.35/ion-0.9.35.pom")
-  (downloader "datomic" "s3://datomic-releases-1fc2183a/maven/releases?region=us-east-1" "com/datomic/ion/0.9.35/ion-0.9.35.pom")
-  )
\ No newline at end of file
