From c6958de973e47039eac1bfff93d563f9a75ebcce Mon Sep 17 00:00:00 2001 From: Niko Date: Sat, 5 Mar 2022 20:55:12 +0100 Subject: [PATCH] Added API method to create "Note" with different visibilities --- api/src/api/me.js | 74 +++++++++++++++++++++++++++++++---------------- 1 file changed, 49 insertions(+), 25 deletions(-) diff --git a/api/src/api/me.js b/api/src/api/me.js index c7bc1d5..c870658 100644 --- a/api/src/api/me.js +++ b/api/src/api/me.js @@ -111,11 +111,57 @@ async function getQuizs(toActor, filters, proj) { return quizs } +async function sendNote(from, to, html, modc) { + modc = modc || function(a){ return a } + const actor = await apex.store.getObject(from, true) + if (actor === null) + return false + + const topublic = to === 'public' + const tounlisted = to === 'unlisted' + const tofollowers = to === 'followers' + if (typeof to === 'string') + to = (tofollowers || topublic || tounlisted) + ? { url: utils.firstIfArray(actor.followers) } + : await api.accounts.getAccount(to) + if ([false, undefined, null].includes(to)) + return false + + const id = utils.apRandomURL() + var payload = { + id: id+'#activity', + type: 'Create', + actor: actor.id, + to: [ to.url ], + object: { + id, + type: 'Note', + content: html, + attributedTo: actor.id, + to: [ to.url ], + }, + } + if (typeof to.acct === 'string') + payload.object.tag = [{ + type: 'Mention', href: to.url, name: to.acct, + }] + if (tounlisted || topublic) + payload.cc = ['as:Public'] + if (topublic) + payload.object.to.unshift('as:Public') + + payload = modc(payload) + await apex.addToOutbox(actor, payload) + await apex.store.saveObject(payload.object) + return true +} + module.exports = { quizParse, quizCreate, isFediloveQuiz, getQuizs, + sendNote, quizs: { get: [auth.enforceSession, async (req, res) => { var filters = {} @@ -135,7 +181,7 @@ module.exports = { if ([false, undefined, null].includes(quiz)) return res.json({ error: 'invalid_params' }) - if (quiz.responses !== undefined) + if (false && quiz.responses !== undefined) return res.json({ error: 'already_sent_quiz' }) var responses = [] @@ -154,30 +200,8 @@ module.exports = { if (html === false) return res.json({ error: 'invalid_params' }) - const id = utils.apRandomURL() - const actor = await apex.store.getObject( - apID(res.locals.user.username), true) - const payload = { - id: id+'#activity', - type: 'Create', - actor: actor.id, - to: quiz.from.url, - object: { - id, - type: 'Note', - content: html, - to: quiz.from.url, - attributedTo: actor.id, - inReplyTo: quiz.replyTo, - tag: [{ - type: 'Mention', - href: quiz.from.url, - name: quiz.from.acct, - }], - }, - } - await apex.addToOutbox(actor, payload) - await apex.store.saveObject(payload.object) + await sendNote(apID(res.locals.user.username), quiz.from, html, + function(o){ o.object.inReplyTo = quiz.replyTo; return o }) return res.json({ result: 1 }) }], },