embulk-output-ftp 0.1.7 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 94a88449e154fbbfecf92cd8485a113593f18a25
4
- data.tar.gz: aa3623b5ecbf40b048c64d45048e4701ecaf0a2f
3
+ metadata.gz: 174e14d80670723ddaceb63c1a1e509c1470b00b
4
+ data.tar.gz: dd8e77c8aaf86c32fda61afd3fec7795ef97963a
5
5
  SHA512:
6
- metadata.gz: fff7e207c69d760a2eaf7928c804719396a21d0d45895e9f35331304608d5c69294784ed601f7a64ac087abedb3923b9b5e5e154f43da35e7db04142757ddfa5
7
- data.tar.gz: 8947a389dc42ca8a90b15b6b9856b3a4bb22b52307431cfb0916238830ba056d7c9853d902f9a45c1a6a9a0be7592d8a3cd17136be15a27136c6af224f37b712
6
+ metadata.gz: ac46b66aa680cf73dc5f171d14de403d45d375201ade7a950dc5983b6ee67cfcfd6662de15260e88234fdaa494ec08482cb3d419a7d3eb94f4b653269577e291
7
+ data.tar.gz: f387f775895d3f523f27ec4d8ef902e644960b98e9fdd0096705c1e7ef757e1742ec6731339418ab6086abceb7e040e97ed7c42c3994fe7a17c008ea27a47bd5
data/.travis.yml CHANGED
@@ -2,8 +2,6 @@ language: java
2
2
 
3
3
  jdk:
4
4
  - oraclejdk8
5
- - oraclejdk7
6
- - openjdk7
7
5
 
8
6
  script:
9
7
  - ./gradlew gem
data/CHANGELOG.md CHANGED
@@ -1,3 +1,7 @@
1
+ ## 0.1.8 - 2018-07-04
2
+ * [maintenance] Only support Java8 [#16](https://github.com/embulk/embulk-output-ftp/pull/16)
3
+ * [maintenance] Use embulk-util-ftp from Bintray [#15](https://github.com/embulk/embulk-output-ftp/pull/15)
4
+
1
5
  ## 0.1.7 - 2017-02-24
2
6
 
3
7
  * [maintenance] Don't retry when Code:550(Permission denied) error happens [#13](https://github.com/embulk/embulk-output-ftp/pull/13)
data/build.gradle CHANGED
@@ -1,5 +1,5 @@
1
1
  plugins {
2
- id "com.jfrog.bintray" version "1.1"
2
+ id "com.jfrog.bintray" version "1.7"
3
3
  id "com.github.jruby-gradle.base" version "0.1.5"
4
4
  id "java"
5
5
  id "checkstyle"
@@ -9,20 +9,24 @@ import com.github.jrubygradle.JRubyExec
9
9
  repositories {
10
10
  mavenCentral()
11
11
  jcenter()
12
+ maven {
13
+ url 'https://dl.bintray.com/embulk-input-ftp/maven'
14
+ }
12
15
  }
13
16
  configurations {
14
17
  provided
15
18
  }
16
19
 
17
- version = "0.1.7"
20
+ version = "0.2.0"
18
21
 
19
- sourceCompatibility = 1.7
20
- targetCompatibility = 1.7
22
+ sourceCompatibility = 1.8
23
+ targetCompatibility = 1.8
21
24
 
22
25
  dependencies {
23
26
  compile "org.embulk:embulk-core:0.8.9"
24
27
  provided "org.embulk:embulk-core:0.8.9"
25
28
  compile files("libs/ftp4j-1.7.2.jar")
29
+ compile 'org.embulk.input.ftp:embulk-util-ftp:0.1.6'
26
30
  compile "org.bouncycastle:bcpkix-jdk15on:1.52"
27
31
  testCompile "junit:junit:4.+"
28
32
  testCompile "org.embulk:embulk-core:0.8.9:tests"
Binary file
@@ -1,6 +1,6 @@
1
- #Wed Jan 13 12:41:02 JST 2016
1
+ #Sun Jan 08 00:35:58 PST 2017
2
2
  distributionBase=GRADLE_USER_HOME
3
3
  distributionPath=wrapper/dists
4
4
  zipStoreBase=GRADLE_USER_HOME
5
5
  zipStorePath=wrapper/dists
6
- distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-bin.zip
6
+ distributionUrl=https\://services.gradle.org/distributions/gradle-3.2.1-bin.zip
@@ -19,13 +19,14 @@ import org.embulk.config.Task;
19
19
  import org.embulk.config.TaskReport;
20
20
  import org.embulk.config.TaskSource;
21
21
  import org.embulk.config.UserDataException;
22
- import org.embulk.output.ftp.SSLPlugins.SSLPluginConfig;
23
22
  import org.embulk.spi.Buffer;
24
23
  import org.embulk.spi.Exec;
25
24
  import org.embulk.spi.FileOutputPlugin;
26
25
  import org.embulk.spi.TransactionalFileOutput;
27
26
  import org.embulk.spi.util.RetryExecutor.RetryGiveupException;
28
27
  import org.embulk.spi.util.RetryExecutor.Retryable;
28
+ import org.embulk.util.ftp.SSLPlugins;
29
+ import org.embulk.util.ftp.SSLPlugins.SSLPluginConfig;
29
30
  import org.slf4j.Logger;
30
31
  import static org.embulk.spi.util.RetryExecutor.retryExecutor;
31
32
 
@@ -20,6 +20,8 @@ import org.embulk.spi.OutputPlugin;
20
20
  import org.embulk.spi.Schema;
21
21
  import org.embulk.spi.TransactionalFileOutput;
22
22
  import org.embulk.standards.CsvParserPlugin;
23
+ import org.embulk.util.ftp.SSLPlugins;
24
+ import org.embulk.util.ftp.SSLPlugins.SSLPluginConfig;
23
25
 
24
26
  import org.junit.Before;
25
27
  import org.junit.BeforeClass;
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: embulk-output-ftp
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.7
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Satoshi Akama
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-02-24 00:00:00.000000000 Z
11
+ date: 2018-07-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  requirement: !ruby/object:Gem::Requirement
@@ -60,15 +60,14 @@ files:
60
60
  - lib/embulk/output/ftp.rb
61
61
  - libs/ftp4j-1.7.2.jar
62
62
  - src/main/java/org/embulk/output/ftp/FtpFileOutputPlugin.java
63
- - src/main/java/org/embulk/output/ftp/SSLPlugins.java
64
- - src/main/java/org/embulk/output/ftp/TrustManagers.java
65
63
  - src/test/java/org/embulk/output/ftp/TestFtpFileOutputPlugin.java
66
64
  - src/test/resources/sample_01.csv
67
65
  - src/test/resources/sample_02.csv
68
66
  - classpath/bcpkix-jdk15on-1.52.jar
69
67
  - classpath/bcprov-jdk15on-1.52.jar
70
- - classpath/embulk-output-ftp-0.1.7.jar
71
68
  - classpath/ftp4j-1.7.2.jar
69
+ - classpath/embulk-util-ftp-0.1.6.jar
70
+ - classpath/embulk-output-ftp-0.2.0.jar
72
71
  homepage: https://github.com/embulk/embulk-output-ftp
73
72
  licenses:
74
73
  - Apache 2.0
@@ -1,260 +0,0 @@
1
- package org.embulk.output.ftp;
2
-
3
- import com.fasterxml.jackson.annotation.JsonCreator;
4
- import com.fasterxml.jackson.annotation.JsonIgnore;
5
- import com.fasterxml.jackson.annotation.JsonProperty;
6
- import com.google.common.base.Function;
7
- import com.google.common.base.Optional;
8
- import com.google.common.collect.ImmutableList;
9
- import com.google.common.collect.Lists;
10
- import org.embulk.config.Config;
11
- import org.embulk.config.ConfigDefault;
12
- import org.embulk.config.ConfigException;
13
-
14
- import javax.net.ssl.SSLSocketFactory;
15
- import javax.net.ssl.X509TrustManager;
16
-
17
- import java.io.ByteArrayInputStream;
18
- import java.io.FileReader;
19
- import java.io.IOException;
20
- import java.io.Reader;
21
- import java.io.StringReader;
22
- import java.security.GeneralSecurityException;
23
- import java.security.KeyManagementException;
24
- import java.security.cert.CertificateEncodingException;
25
- import java.security.cert.CertificateException;
26
- import java.security.cert.CertificateFactory;
27
- import java.security.cert.X509Certificate;
28
- import java.util.List;
29
-
30
- public class SSLPlugins
31
- {
32
- // SSLPlugins is only for SSL clients. SSL server implementation is out ouf scope.
33
-
34
- private SSLPlugins()
35
- {
36
- }
37
-
38
- public interface SSLPluginTask
39
- {
40
- @Config("ssl_verify")
41
- @ConfigDefault("null")
42
- Optional<Boolean> getSslVerify();
43
-
44
- @Config("ssl_verify_hostname")
45
- @ConfigDefault("true")
46
- boolean getSslVerifyHostname();
47
-
48
- @Config("ssl_trusted_ca_cert_file")
49
- @ConfigDefault("null")
50
- Optional<String> getSslTrustedCaCertFile();
51
-
52
- @Config("ssl_trusted_ca_cert_data")
53
- @ConfigDefault("null")
54
- Optional<String> getSslTrustedCaCertData();
55
- }
56
-
57
- private static enum VerifyMode
58
- {
59
- NO_VERIFY,
60
- CERTIFICATES,
61
- JVM_DEFAULT;
62
- }
63
-
64
- public static class SSLPluginConfig
65
- {
66
- static SSLPluginConfig NO_VERIFY = new SSLPluginConfig(VerifyMode.NO_VERIFY, false, ImmutableList.<byte[]>of());
67
-
68
- private final VerifyMode verifyMode;
69
- private final boolean verifyHostname;
70
- private final List<X509Certificate> certificates;
71
-
72
- @JsonCreator
73
- private SSLPluginConfig(
74
- @JsonProperty("verifyMode") VerifyMode verifyMode,
75
- @JsonProperty("verifyHostname") boolean verifyHostname,
76
- @JsonProperty("certificates") List<byte[]> certificates)
77
- {
78
- this.verifyMode = verifyMode;
79
- this.verifyHostname = verifyHostname;
80
- this.certificates = ImmutableList.copyOf(
81
- Lists.transform(certificates, new Function<byte[], X509Certificate>() {
82
- public X509Certificate apply(byte[] data)
83
- {
84
- try (ByteArrayInputStream in = new ByteArrayInputStream(data)) {
85
- CertificateFactory cf = CertificateFactory.getInstance("X.509");
86
- return (X509Certificate) cf.generateCertificate(in);
87
- }
88
- catch (IOException | CertificateException ex) {
89
- throw new RuntimeException(ex);
90
- }
91
- }
92
- })
93
- );
94
- }
95
-
96
- SSLPluginConfig(List<X509Certificate> certificates, boolean verifyHostname)
97
- {
98
- this.verifyMode = VerifyMode.CERTIFICATES;
99
- this.verifyHostname = verifyHostname;
100
- this.certificates = certificates;
101
- }
102
-
103
- static SSLPluginConfig useJvmDefault(boolean verifyHostname)
104
- {
105
- return new SSLPluginConfig(VerifyMode.JVM_DEFAULT, verifyHostname, ImmutableList.<byte[]>of());
106
- }
107
-
108
- @JsonProperty("verifyMode")
109
- private VerifyMode getVerifyMode()
110
- {
111
- return verifyMode;
112
- }
113
-
114
- @JsonProperty("verifyHostname")
115
- private boolean getVerifyHostname()
116
- {
117
- return verifyHostname;
118
- }
119
-
120
- @JsonProperty("certificates")
121
- private List<byte[]> getCertData()
122
- {
123
- return Lists.transform(certificates, new Function<X509Certificate, byte[]>() {
124
- public byte[] apply(X509Certificate cert)
125
- {
126
- try {
127
- return cert.getEncoded();
128
- }
129
- catch (CertificateEncodingException ex) {
130
- throw new RuntimeException(ex);
131
- }
132
- }
133
- });
134
- }
135
-
136
- @JsonIgnore
137
- public X509TrustManager[] newTrustManager()
138
- {
139
- try {
140
- switch (verifyMode) {
141
- case NO_VERIFY:
142
- return new X509TrustManager[] { getNoVerifyTrustManager() };
143
- case CERTIFICATES:
144
- return TrustManagers.newTrustManager(certificates);
145
- default: // JVM_DEFAULT
146
- return TrustManagers.newDefaultJavaTrustManager();
147
- }
148
- }
149
- catch (IOException | GeneralSecurityException ex) {
150
- throw new RuntimeException(ex);
151
- }
152
- }
153
- }
154
-
155
- public static enum DefaultVerifyMode
156
- {
157
- VERIFY_BY_JVM_TRUSTED_CA_CERTS,
158
- NO_VERIFY;
159
- }
160
-
161
- public static SSLPluginConfig configure(SSLPluginTask task)
162
- {
163
- return configure(task, DefaultVerifyMode.VERIFY_BY_JVM_TRUSTED_CA_CERTS);
164
- }
165
-
166
- public static SSLPluginConfig configure(SSLPluginTask task, DefaultVerifyMode defaultVerifyMode)
167
- {
168
- boolean verify = task.getSslVerify().or(defaultVerifyMode != DefaultVerifyMode.NO_VERIFY);
169
- if (verify) {
170
- Optional<List<X509Certificate>> certs = readTrustedCertificates(task);
171
- if (certs.isPresent()) {
172
- return new SSLPluginConfig(certs.get(), task.getSslVerifyHostname());
173
- }
174
- else {
175
- return SSLPluginConfig.useJvmDefault(task.getSslVerifyHostname());
176
- }
177
- }
178
- else {
179
- return SSLPluginConfig.NO_VERIFY;
180
- }
181
- }
182
-
183
- private static Optional<List<X509Certificate>> readTrustedCertificates(SSLPluginTask task)
184
- {
185
- String optionName;
186
- Reader reader;
187
- if (task.getSslTrustedCaCertData().isPresent()) {
188
- optionName = "ssl_trusted_ca_cert_data";
189
- reader = new StringReader(task.getSslTrustedCaCertData().get());
190
- }
191
- else if (task.getSslTrustedCaCertFile().isPresent()) {
192
- optionName = "ssl_trusted_ca_cert_file '" + task.getSslTrustedCaCertFile().get() + "'";
193
- try {
194
- reader = new FileReader(task.getSslTrustedCaCertFile().get());
195
- }
196
- catch (IOException ex) {
197
- throw new ConfigException(String.format("Failed to open %s", optionName), ex);
198
- }
199
- }
200
- else {
201
- return Optional.absent();
202
- }
203
-
204
- List<X509Certificate> certs;
205
- try (Reader r = reader) {
206
- certs = TrustManagers.readPemEncodedX509Certificates(r);
207
- if (certs.isEmpty()) {
208
- throw new ConfigException(String.format("%s does not include valid X.509 PEM certificates", optionName));
209
- }
210
- }
211
- catch (CertificateException | IOException ex) {
212
- throw new ConfigException(String.format("Failed to read %s", optionName), ex);
213
- }
214
-
215
- return Optional.of(certs);
216
- }
217
-
218
- public static SSLSocketFactory newSSLSocketFactory(SSLPluginConfig config, String hostname)
219
- {
220
- try {
221
- return TrustManagers.newSSLSocketFactory(
222
- null, // TODO sending client certificate is not implemented yet
223
- config.newTrustManager(),
224
- config.getVerifyHostname() ? hostname : null);
225
- }
226
- catch (KeyManagementException ex) {
227
- throw new RuntimeException(ex);
228
- }
229
- }
230
-
231
- private static class NoVerifyTrustManager implements X509TrustManager
232
- {
233
- static final NoVerifyTrustManager INSTANCE = new NoVerifyTrustManager();
234
-
235
- private NoVerifyTrustManager()
236
- {
237
- }
238
-
239
- @Override
240
- public X509Certificate[] getAcceptedIssuers()
241
- {
242
- return null;
243
- }
244
-
245
- @Override
246
- public void checkClientTrusted(X509Certificate[] certs, String authType)
247
- {
248
- }
249
-
250
- @Override
251
- public void checkServerTrusted(X509Certificate[] certs, String authType)
252
- {
253
- }
254
- }
255
-
256
- private static X509TrustManager getNoVerifyTrustManager()
257
- {
258
- return NoVerifyTrustManager.INSTANCE;
259
- }
260
- }
@@ -1,285 +0,0 @@
1
- package org.embulk.output.ftp;
2
-
3
- import org.bouncycastle.cert.X509CertificateHolder;
4
- import org.bouncycastle.cert.jcajce.JcaX509CertificateConverter;
5
- import org.bouncycastle.openssl.PEMException;
6
- import org.bouncycastle.openssl.PEMParser;
7
- import sun.security.ssl.SSLSocketImpl;
8
-
9
- import javax.net.ssl.KeyManager;
10
- import javax.net.ssl.SSLContext;
11
- import javax.net.ssl.SSLParameters;
12
- import javax.net.ssl.SSLSocket;
13
- import javax.net.ssl.SSLSocketFactory;
14
- import javax.net.ssl.TrustManager;
15
- import javax.net.ssl.TrustManagerFactory;
16
- import javax.net.ssl.X509TrustManager;
17
-
18
- import java.io.File;
19
- import java.io.FileInputStream;
20
- import java.io.IOException;
21
- import java.io.Reader;
22
- import java.net.InetAddress;
23
- import java.net.Socket;
24
- import java.net.UnknownHostException;
25
- import java.security.InvalidAlgorithmParameterException;
26
- import java.security.KeyManagementException;
27
- import java.security.KeyStore;
28
- import java.security.KeyStoreException;
29
- import java.security.NoSuchAlgorithmException;
30
- import java.security.SecureRandom;
31
- import java.security.cert.CertificateException;
32
- import java.security.cert.CertificateParsingException;
33
- import java.security.cert.PKIXParameters;
34
- import java.security.cert.TrustAnchor;
35
- import java.security.cert.X509Certificate;
36
- import java.util.ArrayList;
37
- import java.util.List;
38
-
39
- public class TrustManagers
40
- {
41
- private TrustManagers()
42
- {
43
- }
44
-
45
- public static KeyStore readDefaultJavaKeyStore()
46
- throws IOException, KeyStoreException, CertificateException
47
- {
48
- String path = (System.getProperty("java.home") + "/lib/security/cacerts").replace('/', File.separatorChar);
49
- try {
50
- KeyStore keyStore = KeyStore.getInstance("JKS");
51
- try (FileInputStream in = new FileInputStream(path)) {
52
- keyStore.load(in, null); // password=null because cacerts file is not encrypted
53
- }
54
- return keyStore;
55
- }
56
- catch (NoSuchAlgorithmException ex) {
57
- throw new RuntimeException(ex); // TODO assertion exception?
58
- }
59
- }
60
-
61
- public static List<X509Certificate> readDefaultJavaTrustedCertificates()
62
- throws IOException, CertificateException, KeyStoreException, InvalidAlgorithmParameterException
63
- {
64
- KeyStore keyStore = readDefaultJavaKeyStore();
65
- PKIXParameters params = new PKIXParameters(keyStore);
66
- List<X509Certificate> certs = new ArrayList<>();
67
- for (TrustAnchor trustAnchor : params.getTrustAnchors()) {
68
- certs.add(trustAnchor.getTrustedCert());
69
- }
70
- return certs;
71
- }
72
-
73
- public static List<X509Certificate> readPemEncodedX509Certificates(Reader reader)
74
- throws IOException, CertificateException
75
- {
76
- // this method abuses CertificateParsingException because its javadoc says
77
- // CertificateParsingException is only for DER-encoded formats.
78
-
79
- JcaX509CertificateConverter conv = new JcaX509CertificateConverter();
80
- List<X509Certificate> certs = new ArrayList<>();
81
-
82
- try {
83
- PEMParser pemParser = new PEMParser(reader);
84
- // PEMParser#close is unnecessary because it just closes underlying reader
85
-
86
- while (true) {
87
- Object pem = pemParser.readObject();
88
-
89
- if (pem == null) {
90
- break;
91
- }
92
-
93
- if (pem instanceof X509CertificateHolder) {
94
- X509Certificate cert = conv.getCertificate((X509CertificateHolder) pem);
95
- certs.add(cert);
96
- }
97
- }
98
- }
99
- catch (PEMException ex) {
100
- // throw when parsing PemObject to Object fails
101
- throw new CertificateParsingException(ex);
102
- }
103
- catch (IOException ex) {
104
- if (ex.getClass().equals(IOException.class)) {
105
- String message = ex.getMessage();
106
- if (message.startsWith("unrecognised object: ")) {
107
- // thrown at org.bouncycastle.openssl.PemParser.readObject when key type (header of a pem) is
108
- // unknown.
109
- throw new CertificateParsingException(ex);
110
- }
111
- else if (message.startsWith("-----END ") && message.endsWith(" not found")) {
112
- // thrown at org.bouncycastle.util.io.pem.PemReader.loadObject when a pem file format is invalid
113
- throw new CertificateParsingException(ex);
114
- }
115
- }
116
- else {
117
- throw ex;
118
- }
119
- }
120
-
121
- return certs;
122
- }
123
-
124
- public static KeyStore buildKeyStoreFromTrustedCertificates(List<X509Certificate> certificates)
125
- throws KeyStoreException
126
- {
127
- KeyStore keyStore = KeyStore.getInstance("JKS");
128
- try {
129
- keyStore.load(null);
130
- }
131
- catch (IOException | CertificateException | NoSuchAlgorithmException ex) {
132
- throw new RuntimeException(ex);
133
- }
134
- int i = 0;
135
- for (X509Certificate cert : certificates) {
136
- keyStore.setCertificateEntry("cert_" + i, cert);
137
- i++;
138
- }
139
- return keyStore;
140
- }
141
-
142
- public static X509TrustManager[] newTrustManager(List<X509Certificate> trustedCertificates)
143
- throws KeyStoreException
144
- {
145
- try {
146
- TrustManagerFactory factory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
147
- KeyStore keyStore = buildKeyStoreFromTrustedCertificates(trustedCertificates);
148
- factory.init(keyStore);
149
- List<X509TrustManager> tms = new ArrayList<>();
150
- for (TrustManager tm : factory.getTrustManagers()) {
151
- if (tm instanceof X509TrustManager) {
152
- tms.add((X509TrustManager) tm);
153
- }
154
- }
155
- return tms.toArray(new X509TrustManager[tms.size()]);
156
- }
157
- catch (NoSuchAlgorithmException ex) {
158
- throw new RuntimeException(ex); // TODO assertion exception?
159
- }
160
- }
161
-
162
- public static X509TrustManager[] newDefaultJavaTrustManager()
163
- throws IOException, CertificateException, KeyStoreException, InvalidAlgorithmParameterException
164
- {
165
- return newTrustManager(readDefaultJavaTrustedCertificates());
166
- }
167
-
168
- public static SSLContext newSSLContext(KeyManager[] keyManager, X509TrustManager[] trustManager)
169
- throws KeyManagementException
170
- {
171
- try {
172
- SSLContext context = SSLContext.getInstance("TLS");
173
- context.init(
174
- keyManager,
175
- trustManager,
176
- new SecureRandom());
177
- return context;
178
- }
179
- catch (NoSuchAlgorithmException ex) {
180
- throw new RuntimeException(ex);
181
- }
182
- }
183
-
184
- public static SSLSocketFactory newSSLSocketFactory(KeyManager[] keyManager, X509TrustManager[] trustManager, String verifyHostname)
185
- throws KeyManagementException
186
- {
187
- SSLContext context = newSSLContext(keyManager, trustManager);
188
- SSLSocketFactory factory = context.getSocketFactory();
189
- if (verifyHostname == null) {
190
- return factory;
191
- }
192
- else {
193
- return new VerifyHostNameSSLSocketFactory(factory, verifyHostname);
194
- }
195
- }
196
-
197
- private static class VerifyHostNameSSLSocketFactory
198
- extends SSLSocketFactory
199
- {
200
- private final SSLSocketFactory next;
201
- private final String hostname;
202
-
203
- public VerifyHostNameSSLSocketFactory(SSLSocketFactory next, String hostname)
204
- {
205
- this.next = next;
206
- this.hostname = hostname;
207
- }
208
-
209
- @Override
210
- public String[] getDefaultCipherSuites()
211
- {
212
- return next.getDefaultCipherSuites();
213
- }
214
-
215
- @Override
216
- public String[] getSupportedCipherSuites()
217
- {
218
- return next.getSupportedCipherSuites();
219
- }
220
-
221
- @Override
222
- public Socket createSocket(Socket s, String host, int port, boolean autoClose)
223
- throws IOException
224
- {
225
- Socket sock = next.createSocket(s, host, port, autoClose);
226
- setSSLParameters(sock, false);
227
- return sock;
228
- }
229
-
230
- @Override
231
- public Socket createSocket(String host, int port)
232
- throws IOException, UnknownHostException
233
- {
234
- Socket sock = next.createSocket(host, port);
235
- setSSLParameters(sock, false);
236
- return sock;
237
- }
238
-
239
- @Override
240
- public Socket createSocket(String host, int port, InetAddress localHost, int localPort)
241
- throws IOException, UnknownHostException
242
- {
243
- Socket sock = next.createSocket(host, port, localHost, localPort);
244
- setSSLParameters(sock, false);
245
- return sock;
246
- }
247
-
248
- @Override
249
- public Socket createSocket(InetAddress host, int port)
250
- throws IOException
251
- {
252
- Socket sock = next.createSocket(host, port);
253
- setSSLParameters(sock, true);
254
- return sock;
255
- }
256
-
257
- @Override
258
- public Socket createSocket(InetAddress address, int port, InetAddress localAddress, int localPort)
259
- throws IOException
260
- {
261
- Socket sock = next.createSocket(address, port, localAddress, localPort);
262
- setSSLParameters(sock, true);
263
- return sock;
264
- }
265
-
266
- private void setSSLParameters(Socket sock, boolean setHostname)
267
- {
268
- if (sock instanceof SSLSocket) {
269
- SSLSocket s = (SSLSocket) sock;
270
- String identAlgorithm = s.getSSLParameters().getEndpointIdentificationAlgorithm();
271
- if (identAlgorithm != null && identAlgorithm.equalsIgnoreCase("HTTPS")) {
272
- // hostname verification is already configured.
273
- } else {
274
- if (setHostname && s instanceof SSLSocketImpl) {
275
- ((SSLSocketImpl) s).setHost(hostname);
276
- }
277
- SSLParameters params = s.getSSLParameters();
278
- params.setEndpointIdentificationAlgorithm("HTTPS");
279
- s.setSSLParameters(params);
280
- // s.startHandshake
281
- }
282
- }
283
- }
284
- }
285
- }