-- -- Author: Alexey Melnichuk -- -- Copyright (C) 2014-2016 Alexey Melnichuk -- -- Licensed according to the included 'LICENSE' document -- -- This file is part of Lua-cURL library. -- --- Returns path to cURL ca bundle -- -- @tparam[opt="curl-ca-bundle.crt"] string name name of bundle -- @treturn string path to file (CURLOPT_CAINFO) -- @treturn string path to ssl dir path (CURLOPT_CAPATH) -- -- @usage -- local file, path = find_ca_bundle() -- if file then e:setopt_cainfo(file) end -- if path then e:setopt_capath(path) end -- local function find_ca_bundle(name) name = name or "curl-ca-bundle.crt" local path = require "path" local env = setmetatable({},{__index = function(_, name) return os.getenv(name) end}) local function split(str, sep, plain) local b, res = 1, {} while b <= #str do local e, e2 = string.find(str, sep, b, plain) if e then table.insert(res, (string.sub(str, b, e-1))) b = e2 + 1 else table.insert(res, (string.sub(str, b))) break end end return res end if env.CURL_CA_BUNDLE and path.isfile(env.CURL_CA_BUNDLE) then return env.CURL_CA_BUNDLE end if env.SSL_CERT_DIR and path.isdir(env.SSL_CERT_DIR) then return nil, env.SSL_CERT_DIR end if env.SSL_CERT_FILE and path.isfile(env.SSL_CERT_FILE) then return env.SSL_CERT_FILE end if not path.IS_WINDOWS then return end local paths = { '.', path.join(env.windir, "System32"), path.join(env.windir, "SysWOW64"), env.windir, } for _, p in ipairs(split(env.path, ';')) do paths[#paths + 1] = p end for _, p in ipairs(paths) do p = path.fullpath(p) if path.isdir(p) then p = path.join(p, name) if path.isfile(p) then return p end end end end return { find_ca_bundle = find_ca_bundle; }