Rename matrix.factory.* -> matrix.httpclient.*

The old name didn't really make much sense after all...
This commit is contained in:
Adrian Perez de Castro
2016-07-01 05:10:22 +03:00
parent e128366f7f
commit bd811c859e
4 changed files with 14 additions and 14 deletions

View File

@@ -0,0 +1,69 @@
#! /usr/bin/env lua
--
-- chttp.lua
-- Copyright (C) 2016 Adrian Perez <aperez@igalia.com>
--
-- Distributed under terms of the MIT license.
--
local request = require "http.request"
local headers = require "http.headers"
local dict_to_query = require "http.util" .dict_to_query
local httpclient = {
quote = require "http.util" .encodeURI,
unquote = require "http.util" .decodeURI,
}
httpclient.__name = "matrix.client.chttp"
httpclient.__index = httpclient
function httpclient:__tostring()
return self.__name
end
local function headers_to_dict(h)
local headers = {}
for name, value in pairs(h) do
if name:sub(1, 1) ~= ":" then
headers[name] = value
end
end
return headers
end
function httpclient:request(log, method, url, query_args, body, headers)
do
local qs = dict_to_query(query_args)
if #qs > 0 then
url = url .. "?" .. qs
end
end
log(">~> %s %s", method, url)
log(">>> %s", body)
local req = request.new_from_uri(url)
for name, value in pairs(headers) do
req.headers:append(name, value)
end
req.headers:upsert(":method", method)
if body then
req:set_body(body)
end
local h, s = req:go()
if not h then
log("<!< error: %s", s)
return 0, {}, s
end
local status = tonumber(h:get(":status"))
local response = s:get_body_as_string()
log("<~< %d", status)
log("<<< %s", response)
return status, headers_to_dict(h), response
end
return function ()
return setmetatable({}, httpclient)
end

View File

@@ -0,0 +1,85 @@
#! /usr/bin/env lua
--
-- luasocket.lua
-- Copyright (C) 2016 Adrian Perez <aperez@igalia.com>
--
-- Distributed under terms of the MIT license.
--
local urlescape = require "socket.url" .escape
local stringsource = require "ltn12" .source.string
local tablesink = require "ltn12" .sink.table
local request_https = function (...)
request_https = require "ssl.https" .request
return request_https(...)
end
local request_http = function (...)
request_http = require "socket.http" .request
return request_http(...)
end
local function make_request(t)
if t.url:sub(1, #"https://") == "https://" then
return request_https(t)
else
return request_http(t)
end
end
local function dict_to_query(d)
local r, i = {}, 0
for name, value in pairs(d) do
i = i + 1
r[i] = urlescape(name) .. "=" .. urlescape(value)
end
return table.concat(r, "&", 1, i)
end
local httpclient = {
quote = require "socket.url" .escape,
unquote = require "socket.url" .unescape,
}
httpclient.__name = "matrix.client.luasocket"
httpclient.__index = httpclient
function httpclient:__tostring()
return self.__name
end
function httpclient:request(log, method, url, query_args, body, headers)
do
local qs = dict_to_query(query_args)
if #qs > 0 then
url = url .. "?" .. qs
end
end
log(">~> %s %s", method, url)
log(">>> %s", body)
local source
if body and #body > 0 then
headers["content-length"] = #body
source = stringsource(body)
end
local result = {}
local r, c, h = make_request {
url = url,
method = method,
headers = headers,
source = source,
sink = tablesink(result),
}
local response = table.concat(result)
log("<~< %d", c)
log("<<< %s", response)
return c, h, response
end
return function ()
return setmetatable({}, httpclient)
end