parsav  Artifact [c64d390bdc]

Artifact c64d390bdc1981e7b4f93be585f8db1717885569f8b093cd909473ce55e7131f:


-- vim: ft=terra
wftpl = lib.tpl.mk [[{
	"subject": @$subj,
	"aliases": [ @$href, @$pfp ],
	"links": [
		{ "rel": "self", "type": "application/activity+json", "href": @$href },
		{ "rel": "self",
			"type": "application/ld+json; profile=\"https://www.w3.org/ns/activitystreams\"", "href": @$href },
		{ "rel": "http://webfinger.net/rel/profile-page",
			"type": "text/html", "href": @$pfp }
	]
}]]

local terra 
webfinger(co: &lib.srv.convo)
	var res = co:pgetv('resource')
	if (not res) or not res:startswith 'acct:' then goto err end
	
	var acct = res + 5
	var svp = lib.str.find(acct, '@')
	if svp:ref() then
		acct.ct = (svp.ptr - acct.ptr)
		svp:advance(1)
		if not svp:cmp(co.srv.cfg.domain) then goto err end
	end

	var actor = co.srv:actor_fetch_xid(acct)
	if not actor then goto err end
	do defer actor:free()
		if actor().origin ~= 0 then goto err end
		var href = co:stra(64)
		var pfp = co:stra(64)
		href:lpush'https://':ppush(co.srv.cfg.domain):lpush'/user/':shpush(actor().id)
		pfp:lpush'https://':ppush(co.srv.cfg.domain):lpush'/@':ppush(acct)

		var tp = wftpl {
			subj = res;
			href = href:finalize();
			pfp = pfp:finalize();
		}
		co:json(tp:poolstr(&co.srv.pool))

		return
	end
	-- error conditions
	::err:: do co:json('{}') return end
end
return webfinger