| 
50 | 50 | (defn ^SSLConnectionSocketFactory SSLGenericSocketFactory  | 
51 | 51 |   "Given a function that returns a new socket, create an  | 
52 | 52 |   SSLConnectionSocketFactory that will use that socket."  | 
53 |  | -  [socket-factory]  | 
54 |  | -  (proxy [SSLConnectionSocketFactory] [(SSLContexts/createDefault)]  | 
55 |  | -    (connectSocket [timeout socket host remoteAddress localAddress context]  | 
56 |  | -      (let [^SSLConnectionSocketFactory this this] ;; avoid reflection  | 
57 |  | -        (proxy-super connectSocket timeout (socket-factory) host remoteAddress  | 
58 |  | -                     localAddress context)))))  | 
 | 53 | +  ([socket-factory] (SSLGenericSocketFactory socket-factory (SSLContexts/createDefault)))  | 
 | 54 | +  ([socket-factory ^SSLContext ssl-context]  | 
 | 55 | +   (proxy [SSLConnectionSocketFactory] [ssl-context]  | 
 | 56 | +     (connectSocket [timeout socket host remoteAddress localAddress context]  | 
 | 57 | +       (let [^SSLConnectionSocketFactory this this] ;; avoid reflection  | 
 | 58 | +         (proxy-super connectSocket timeout (socket-factory) host remoteAddress  | 
 | 59 | +                      localAddress context))))))  | 
59 | 60 | 
 
  | 
60 | 61 | (defn ^PlainConnectionSocketFactory PlainGenericSocketFactory  | 
61 | 62 |   "Given a Function that returns a new socket, create a  | 
 | 
70 | 71 |   [^String hostname ^Integer port]  | 
71 | 72 |   (Socket. (Proxy. Proxy$Type/SOCKS (InetSocketAddress. hostname port))))  | 
72 | 73 | 
 
  | 
73 |  | -(defn make-socks-proxied-conn-manager  | 
74 |  | -  "Given an optional hostname and a port, create a connection manager that's  | 
75 |  | -  proxied using a SOCKS proxy."  | 
76 |  | -  [^String hostname ^Integer port]  | 
77 |  | -  (let [socket-factory #(socks-proxied-socket hostname port)  | 
78 |  | -        reg (-> (RegistryBuilder/create)  | 
79 |  | -                (.register "http" (PlainGenericSocketFactory socket-factory))  | 
80 |  | -                (.register "https" (SSLGenericSocketFactory socket-factory))  | 
81 |  | -                (.build))]  | 
82 |  | -    (PoolingHttpClientConnectionManager. reg)))  | 
83 |  | - | 
84 |  | -(def insecure-scheme-registry  | 
85 |  | -  (-> (RegistryBuilder/create)  | 
86 |  | -      (.register "http" PlainConnectionSocketFactory/INSTANCE)  | 
87 |  | -      (.register "https" insecure-socket-factory)  | 
88 |  | -      (.build)))  | 
89 |  | - | 
90 |  | -(def insecure-strategy-registry  | 
91 |  | -  (-> (RegistryBuilder/create)  | 
92 |  | -      (.register "http" NoopIOSessionStrategy/INSTANCE)  | 
93 |  | -      (.register "https" insecure-strategy)  | 
94 |  | -      (.build)))  | 
95 |  | - | 
96 |  | -(def regular-scheme-registry  | 
97 |  | -  (-> (RegistryBuilder/create)  | 
98 |  | -      (.register "http" (PlainConnectionSocketFactory/getSocketFactory))  | 
99 |  | -      (.register "https" secure-ssl-socket-factory)  | 
100 |  | -      (.build)))  | 
101 |  | - | 
102 |  | -(def regular-strategy-registry  | 
103 |  | -  (-> (RegistryBuilder/create)  | 
104 |  | -      (.register "http" NoopIOSessionStrategy/INSTANCE)  | 
105 |  | -      (.register "https" secure-strategy)  | 
106 |  | -      (.build)))  | 
107 |  | - | 
108 | 74 | (defn ^KeyStore get-keystore*  | 
109 | 75 |   [keystore-file keystore-type ^String keystore-pass]  | 
110 | 76 |   (when keystore-file  | 
 | 
139 | 105 |                  NoopHostnameVerifier/INSTANCE  | 
140 | 106 |                  (DefaultHostnameVerifier.))}))  | 
141 | 107 | 
 
  | 
 | 108 | +(defn make-socks-proxied-conn-manager  | 
 | 109 | +  "Given an optional hostname and a port, create a connection manager that's  | 
 | 110 | +  proxied using a SOCKS proxy."  | 
 | 111 | +  ([^String hostname ^Integer port] (make-socks-proxied-conn-manager hostname port {}))  | 
 | 112 | +  ([^String hostname ^Integer port {:keys [keystore keystore-type keystore-pass trust-store trust-store-type trust-store-pass] :as opts}]  | 
 | 113 | +   (let [socket-factory #(socks-proxied-socket hostname port)  | 
 | 114 | +         ssl-context (when (some (complement nil?) [keystore keystore-type keystore-pass trust-store trust-store-type trust-store-pass])  | 
 | 115 | +                           (-> opts get-keystore-context-verifier :context))  | 
 | 116 | +         reg (-> (RegistryBuilder/create)  | 
 | 117 | +                 (.register "http" (PlainGenericSocketFactory socket-factory))  | 
 | 118 | +                 (.register "https" (SSLGenericSocketFactory socket-factory ssl-context))  | 
 | 119 | +                 (.build))]  | 
 | 120 | +     (PoolingHttpClientConnectionManager. reg))))  | 
 | 121 | + | 
 | 122 | +(def insecure-scheme-registry  | 
 | 123 | +  (-> (RegistryBuilder/create)  | 
 | 124 | +      (.register "http" PlainConnectionSocketFactory/INSTANCE)  | 
 | 125 | +      (.register "https" insecure-socket-factory)  | 
 | 126 | +      (.build)))  | 
 | 127 | + | 
 | 128 | +(def insecure-strategy-registry  | 
 | 129 | +  (-> (RegistryBuilder/create)  | 
 | 130 | +      (.register "http" NoopIOSessionStrategy/INSTANCE)  | 
 | 131 | +      (.register "https" insecure-strategy)  | 
 | 132 | +      (.build)))  | 
 | 133 | + | 
 | 134 | +(def regular-scheme-registry  | 
 | 135 | +  (-> (RegistryBuilder/create)  | 
 | 136 | +      (.register "http" (PlainConnectionSocketFactory/getSocketFactory))  | 
 | 137 | +      (.register "https" secure-ssl-socket-factory)  | 
 | 138 | +      (.build)))  | 
 | 139 | + | 
 | 140 | +(def regular-strategy-registry  | 
 | 141 | +  (-> (RegistryBuilder/create)  | 
 | 142 | +      (.register "http" NoopIOSessionStrategy/INSTANCE)  | 
 | 143 | +      (.register "https" secure-strategy)  | 
 | 144 | +      (.build)))  | 
 | 145 | + | 
142 | 146 | (defn ^Registry get-keystore-scheme-registry  | 
143 | 147 |   [req]  | 
144 | 148 |   (let [{:keys [context verifier]} (get-keystore-context-verifier req)  | 
 | 
0 commit comments