mirror of
https://notabug.org/scuti/pleroma-comments
synced 2025-02-04 16:09:35 +05:30
merged branch 'auth' for instances that require auth to access API
This commit is contained in:
parent
c4cd40a0de
commit
e955d42525
@ -1,24 +1,30 @@
|
||||
|
||||
local json = require("cjson")
|
||||
|
||||
pleroma_avatar_save_path = nil -- location of downloaded images
|
||||
pleroma_avatar_path = nil -- prepended to image file, written on page
|
||||
-- to configure, put above vars in a file named 'config.lua'
|
||||
-- GLOBAL VARIABLES
|
||||
-- & meant to be assigned in config.lua
|
||||
--------------------
|
||||
-- location of downloaded images
|
||||
pleroma_avatar_save_path = nil
|
||||
-- prepended to image file, written on page
|
||||
pleroma_avatar_path = nil
|
||||
|
||||
-- instances may require auth to access api
|
||||
pleroma_auth = {}
|
||||
-- pleroma_auth["instance.tld"] = "your_auth_key"
|
||||
|
||||
pcall(
|
||||
function ()
|
||||
dofile("config.lua")
|
||||
end
|
||||
)
|
||||
|
||||
--[[
|
||||
|
||||
if these variables are still `nil` after `dofile()` then
|
||||
the script will look for it in the yaml header.
|
||||
if `pleroma_avatar_*` are still `nil` after `dofile()` then the script will look for it in the yaml header.
|
||||
|
||||
note: lua filters can not access variables defined on the command line,
|
||||
e.g `pandoc -V foo="bar"`
|
||||
and it may not be ideal to define paths in yaml headers,
|
||||
i.e changing the path for avatars on a website would involve editing each
|
||||
manuscript.
|
||||
if they are still nil afterwards, then the script
|
||||
will hotlink.
|
||||
|
||||
]]--
|
||||
|
||||
@ -54,34 +60,50 @@ function tokenizeString(inputString, delimiter)
|
||||
return tokens
|
||||
end
|
||||
|
||||
function get(link, filename)
|
||||
function get(link, filename, auth)
|
||||
print("http/s GET: ".. link)
|
||||
|
||||
local filename = filename or nil
|
||||
local auth = auth or nil
|
||||
|
||||
local args = {}
|
||||
if filename then
|
||||
if filename then -- when requesting avatars
|
||||
args = {
|
||||
"--timeout=10",
|
||||
"-qO",
|
||||
filename,
|
||||
link
|
||||
}
|
||||
else
|
||||
else -- when requesting json
|
||||
args = {
|
||||
"-qO-",
|
||||
"--timeout=10",
|
||||
link
|
||||
}
|
||||
end
|
||||
-- don't use auth bearer for downloading images'
|
||||
-- its either not needed OR
|
||||
-- there should be an extra check on the host
|
||||
if auth and not filename then
|
||||
local h = "--header=\"Authorization: Bearer %s\" "
|
||||
table.insert(
|
||||
args, 1, string.format(h, auth)
|
||||
)
|
||||
end
|
||||
|
||||
local command = "wget " .. table.concat(args, ' ')
|
||||
print(command)
|
||||
local success, retval = pcall(
|
||||
function ()
|
||||
-- print("!: ".. table.concat(args))
|
||||
return pandoc.pipe("wget", args, "")
|
||||
local handle = io.popen(command)
|
||||
local result = handle:read("*a")
|
||||
handle:close()
|
||||
return result
|
||||
end
|
||||
)
|
||||
if not success then
|
||||
print("warning: error while performing http/s GET")
|
||||
print(retval)
|
||||
print("\treturned: " .. tostring(retval))
|
||||
end
|
||||
return retval
|
||||
end
|
||||
@ -328,16 +350,27 @@ function get_url_from_pandoc_str(pandoc_str)
|
||||
return link, host, id
|
||||
end
|
||||
|
||||
function get_status(host, post_id)
|
||||
function get_status(host, post_id, auth)
|
||||
local url = "https://" .. host .. "/api/v1/statuses/" .. post_id
|
||||
-- print(url)
|
||||
return json.decode(get(url))
|
||||
local success, retval = pcall(
|
||||
function ()
|
||||
local got = get(url, nil, auth)
|
||||
-- print(got)
|
||||
return json.decode(got)
|
||||
end
|
||||
)
|
||||
-- if an error occurred in retrieving a status
|
||||
-- it will cause errors in write_comments
|
||||
--consider skipping over statuses later
|
||||
assert(success)
|
||||
assert(not retval["error"])
|
||||
return retval
|
||||
end
|
||||
|
||||
function get_replies(host, id)
|
||||
function get_replies(host, id, auth)
|
||||
local url = "https://" .. host .. "/api/v1/statuses/" .. id .. "/context"
|
||||
-- print(url)
|
||||
local got = json.decode(get(url))
|
||||
local got = json.decode(get(url, nil, auth))
|
||||
return got["descendants"]
|
||||
end
|
||||
|
||||
@ -382,7 +415,6 @@ function Meta(meta)
|
||||
-- if pleroma_avatar_save_path and pleroma_avatar_path then
|
||||
-- is_hotlink = false
|
||||
-- end
|
||||
|
||||
local all_replies = {}
|
||||
local hrefs = {}
|
||||
local host = ""
|
||||
@ -390,12 +422,25 @@ function Meta(meta)
|
||||
for _, v in pairs(pleroma_urls) do
|
||||
local link, domain, id = get_url_from_pandoc_str(v)
|
||||
host = domain
|
||||
|
||||
-- list of links people can reply using
|
||||
local reply_href = link
|
||||
if type(pleroma_reply_href) == "string" then
|
||||
local temp = "https://%s%s%s"
|
||||
reply_href = string.format(
|
||||
temp, host, pleroma_reply_href, id)
|
||||
end
|
||||
table.insert(hrefs,
|
||||
{link = link, id = id}
|
||||
{link = reply_href, id = id}
|
||||
)
|
||||
local op = get_status(host, id)
|
||||
|
||||
local auth_key = nil
|
||||
if pleroma_auth[host] then
|
||||
auth_key = pleroma_auth[host]
|
||||
end
|
||||
local op = get_status(host, id, auth_key)
|
||||
table.insert(all_replies, op)
|
||||
local replies = get_replies(host, id)
|
||||
local replies = get_replies(host, id, auth_key)
|
||||
combine_tables(all_replies, replies)
|
||||
end
|
||||
table.sort(all_replies,
|
||||
@ -418,5 +463,3 @@ function Meta(meta)
|
||||
meta["pleroma"] = hrefs
|
||||
return meta
|
||||
end
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user