Skip to content
This repository was archived by the owner on Feb 1, 2023. It is now read-only.

Commit 59becee

Browse files
committed
feat: allow to skip ssl validation
1 parent c3b7249 commit 59becee

File tree

3 files changed

+68
-8
lines changed

3 files changed

+68
-8
lines changed

build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ plugins {
66

77
group = "io.snyk.code.sdk"
88
archivesBaseName = "snyk-code-client"
9-
version = "2.1.9"
9+
version = "2.1.10"
1010

1111
repositories {
1212
mavenCentral()

src/main/java/ai/deepcode/javaclient/DeepCodeRestApi.java

Lines changed: 50 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,11 @@
33
*/
44
package ai.deepcode.javaclient;
55

6+
import javax.net.ssl.SSLContext;
7+
import javax.net.ssl.SSLSocketFactory;
8+
import javax.net.ssl.TrustManager;
9+
import javax.net.ssl.X509TrustManager;
10+
611
import ai.deepcode.javaclient.requests.*;
712
import ai.deepcode.javaclient.responses.*;
813

@@ -16,6 +21,10 @@
1621
import retrofit2.http.*;
1722

1823
import java.io.IOException;
24+
import java.security.KeyManagementException;
25+
import java.security.NoSuchAlgorithmException;
26+
import java.security.SecureRandom;
27+
import java.security.cert.X509Certificate;
1928
import java.util.List;
2029
import java.util.concurrent.TimeUnit;
2130

@@ -31,29 +40,64 @@ private DeepCodeRestApi() {}
3140

3241
private static final String API_URL = "https://www.deepcode.ai/";
3342

34-
private static Retrofit retrofit = buildRetrofit(API_URL);
43+
private static Retrofit retrofit = buildRetrofit(API_URL, false);
3544

3645
// Create simple REST adapter which points the baseUrl.
37-
private static Retrofit buildRetrofit(String baseUrl) {
38-
OkHttpClient client = new OkHttpClient.Builder()
46+
private static Retrofit buildRetrofit(String baseUrl, boolean disableSslVerification) {
47+
OkHttpClient.Builder builder = new OkHttpClient.Builder()
3948
.connectTimeout(100, TimeUnit.SECONDS)
4049
.writeTimeout(100, TimeUnit.SECONDS)
41-
.readTimeout(100, TimeUnit.SECONDS).build();
50+
.readTimeout(100, TimeUnit.SECONDS);
51+
if (disableSslVerification) {
52+
X509TrustManager x509TrustManager = buildUnsafeTrustManager();
53+
final TrustManager[] trustAllCertificates = new TrustManager[]{ x509TrustManager };
54+
55+
try {
56+
SSLContext sslContext = SSLContext.getInstance("SSL");
57+
sslContext.init(null, trustAllCertificates, new SecureRandom());
58+
SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory();
59+
builder.sslSocketFactory(sslSocketFactory, x509TrustManager);
60+
} catch (NoSuchAlgorithmException | KeyManagementException e) {
61+
//TODO(pavel): extract Retrofit and OkHttpClient into configuration object to simplify API client building.
62+
e.printStackTrace();
63+
}
64+
}
65+
OkHttpClient client = builder.build();
4266
return new Retrofit.Builder()
4367
.baseUrl(baseUrl + "publicapi/")
44-
.client(client)
68+
.client(client)
4569
.addConverterFactory(GsonConverterFactory.create())
4670
.build();
4771
}
4872

73+
@NotNull
74+
private static X509TrustManager buildUnsafeTrustManager() {
75+
return new X509TrustManager() {
76+
@Override
77+
public void checkClientTrusted(X509Certificate[] chain, String authType) {}
78+
79+
@Override
80+
public void checkServerTrusted(X509Certificate[] chain, String authType) {}
81+
82+
@Override
83+
public X509Certificate[] getAcceptedIssuers() {
84+
return new X509Certificate[]{};
85+
}
86+
};
87+
}
88+
4989
/**
5090
* Re-set baseUrl for retrofit instance
5191
*
5292
* @param baseUrl new baseUrl. <b>Null</b> or empty "" value will reset to default {@code
5393
* #API_URL}
5494
*/
5595
public static void setBaseUrl(@Nullable String baseUrl) {
56-
retrofit = buildRetrofit((baseUrl == null || baseUrl.isEmpty()) ? API_URL : baseUrl);
96+
setBaseUrl(baseUrl, false);
97+
}
98+
99+
public static void setBaseUrl(@Nullable String baseUrl, boolean disableSslVerification) {
100+
retrofit = buildRetrofit((baseUrl == null || baseUrl.isEmpty()) ? API_URL : baseUrl, disableSslVerification);
57101
}
58102

59103
private interface LoginCall {

src/main/java/ai/deepcode/javaclient/core/DeepCodeParamsBase.java

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ public abstract class DeepCodeParamsBase {
88
// Settings
99
private boolean isEnable;
1010
private String apiUrl;
11+
private boolean disableSslVerification;
1112
private boolean useLinter;
1213
private int minSeverity;
1314
private String sessionToken;
@@ -19,13 +20,15 @@ public abstract class DeepCodeParamsBase {
1920
protected DeepCodeParamsBase(
2021
boolean isEnable,
2122
String apiUrl,
23+
boolean disableSslVerification,
2224
boolean useLinter,
2325
int minSeverity,
2426
String sessionToken,
2527
String loginUrl,
2628
String ideProductName) {
2729
this.isEnable = isEnable;
2830
this.apiUrl = apiUrl;
31+
this.disableSslVerification = disableSslVerification;
2932
this.useLinter = useLinter;
3033
this.minSeverity = minSeverity;
3134
this.sessionToken = sessionToken;
@@ -78,11 +81,24 @@ public String getApiUrl() {
7881
}
7982

8083
public void setApiUrl(@NotNull String apiUrl) {
84+
setApiUrl(apiUrl, false);
85+
}
86+
87+
public void setApiUrl(@NotNull String apiUrl, boolean disableSslVerification) {
8188
if (apiUrl.isEmpty()) apiUrl = "https://www.deepcode.ai/";
8289
if (!apiUrl.endsWith("/")) apiUrl += "/";
8390
if (apiUrl.equals(this.apiUrl)) return;
8491
this.apiUrl = apiUrl;
85-
DeepCodeRestApi.setBaseUrl(apiUrl);
92+
this.disableSslVerification = disableSslVerification;
93+
DeepCodeRestApi.setBaseUrl(apiUrl, disableSslVerification);
94+
}
95+
96+
public boolean isDisableSslVerification() {
97+
return disableSslVerification;
98+
}
99+
100+
public void setDisableSslVerification(boolean disableSslVerification) {
101+
this.disableSslVerification = disableSslVerification;
86102
}
87103

88104
public boolean isEnable() {

0 commit comments

Comments
 (0)