From ef508047bfc015fcb491010ef5482e99f42b3ae1 Mon Sep 17 00:00:00 2001 From: Ruslan Mustakov Date: Mon, 27 Feb 2017 16:42:51 +0700 Subject: [PATCH] Ensure default SSL context is always initialized --- lib/pure/httpclient.nim | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/lib/pure/httpclient.nim b/lib/pure/httpclient.nim index 59918f766c..662e754714 100644 --- a/lib/pure/httpclient.nim +++ b/lib/pure/httpclient.nim @@ -337,8 +337,16 @@ proc parseResponse(s: Socket, getBody: bool, timeout: int): Response = when not defined(ssl): type SSLContext = ref object var defaultSSLContext {.threadvar.}: SSLContext + when defined(ssl): defaultSSLContext = newContext(verifyMode = CVerifyNone) + template contextOrDefault(ctx: SSLContext): SSLContext = + var result = ctx + if ctx == nil: + if defaultSSLContext == nil: + defaultSSLContext = newContext(verifyMode = CVerifyNone) + result = defaultSSLContext + result proc newProxy*(url: string, auth = ""): Proxy = ## Constructs a new ``TProxy`` object. @@ -805,7 +813,7 @@ proc newHttpClient*(userAgent = defUserAgent, result.bodyStream = newStringStream() result.getBody = true when defined(ssl): - result.sslContext = sslContext + result.sslContext = contextOrDefault(sslContext) type AsyncHttpClient* = HttpClientBase[AsyncSocket] @@ -837,7 +845,7 @@ proc newAsyncHttpClient*(userAgent = defUserAgent, result.bodyStream = newFutureStream[string]("newAsyncHttpClient") result.getBody = true when defined(ssl): - result.sslContext = sslContext + result.sslContext = contextOrDefault(sslContext) proc close*(client: HttpClient | AsyncHttpClient) = ## Closes any connections held by the HTTP client.