diff --git a/lib/atom-io-client.coffee b/lib/atom-io-client.coffee index f5ce0da1..54805a35 100644 --- a/lib/atom-io-client.coffee +++ b/lib/atom-io-client.coffee @@ -13,6 +13,13 @@ class AtomIoClient @expiry = 1000 * 60 * 60 * 12 @createAvatarCache() @expireAvatarCache() + @packageManager?.isStrictSsl() + .then (resolve) => + @strictSsl = resolve + @packageManager?.getHttpsProxy() + .then (resolve) => + @httpsProxy = resolve + # Public: Get an avatar image from the filesystem, fetching it first if necessary avatar: (login, callback) -> @@ -70,6 +77,10 @@ class AtomIoClient url: "#{@baseURL}#{path}" headers: {'User-Agent': navigator.userAgent} } + if @httpsProxy? + options.proxy = @httpsProxy + if @strictSsl is false + options.rejectUnauthorized = false request options, (err, res, body) => try diff --git a/lib/package-manager.coffee b/lib/package-manager.coffee index 1a717bbf..0efc6cd7 100644 --- a/lib/package-manager.coffee +++ b/lib/package-manager.coffee @@ -214,6 +214,45 @@ class PackageManager handleProcessErrors(apmProcess, errorMessage, callback) + isStrictSsl: -> + new Promise (resolve, reject) => + args = ['config' , 'get', 'strict-ssl'] + errorMessage = 'Checking strict-ssl configuration failed' + apmProcess = @runCommand args, (code, stdout, stderr) -> + if code is 0 + if stdout.trim() is 'false' + resolve(false) + else + resolve(true) + else + error = new Error(errorMessage) + error.stdout = stdout + error.stderr = stderr + reject(error) + + handleProcessErrors apmProcess, errorMessage, (error) -> + reject(error) + + getHttpsProxy: -> + new Promise (resolve, reject) => + args = ['config' , 'get', 'https-proxy'] + errorMessage = 'Checking https-proxy configuration failed' + apmProcess = @runCommand args, (code, stdout, stderr) -> + if code is 0 + result = stdout.trim() + if result isnt 'null' + resolve(result) + else + resolve(null) + else + error = new Error(errorMessage) + error.stdout = stdout + error.stderr = stderr + reject(error) + + handleProcessErrors apmProcess, errorMessage, (error) -> + reject(error) + getInstalled: -> new Promise (resolve, reject) => @loadInstalled (error, result) ->