diff --git a/src/ingestor.ts b/src/ingestor.ts index 5a503251..893125ef 100644 --- a/src/ingestor.ts +++ b/src/ingestor.ts @@ -143,6 +143,7 @@ export default async function ingestor(req) { body: message.body, discussion: message.discussion || '', choices: message.choices, + privacy: message.privacy || '', labels: message.labels || [], start: message.start, end: message.end, @@ -169,6 +170,7 @@ export default async function ingestor(req) { name: message.title, body: message.body, discussion: message.discussion || '', + privacy: message.privacy || '', choices: message.choices, labels: message.labels || [], metadata: { diff --git a/src/writer/proposal.ts b/src/writer/proposal.ts index 59fdd79d..f3b28ad8 100644 --- a/src/writer/proposal.ts +++ b/src/writer/proposal.ts @@ -103,6 +103,10 @@ export async function verify(body): Promise { if (msg.payload.type !== space.voting.type) return Promise.reject('invalid voting type'); } + if (space.voting?.privacy !== 'any' && msg.payload.privacy) { + return Promise.reject('not allowed to set privacy'); + } + try { if (await isMalicious(msg.payload, space.id)) { return Promise.reject('invalid proposal content'); @@ -207,6 +211,10 @@ export async function action(body, ipfs, receipt, id): Promise { const plugins = JSON.stringify(metadata.plugins || {}); const spaceNetwork = spaceSettings.network; const proposalSnapshot = parseInt(msg.payload.snapshot || '0'); + let privacy = spaceSettings.voting?.privacy || ''; + if (privacy === 'any') { + privacy = msg.payload.privacy; + } let quorum = spaceSettings.voting?.quorum || 0; if (!quorum && spaceSettings.plugins?.quorum) { @@ -238,7 +246,7 @@ export async function action(body, ipfs, receipt, id): Promise { end: parseInt(msg.payload.end || '0'), quorum, quorum_type: (quorum && spaceSettings.voting?.quorumType) || '', - privacy: spaceSettings.voting?.privacy || '', + privacy, snapshot: proposalSnapshot || 0, app: kebabCase(msg.payload.app || ''), scores: JSON.stringify([]), diff --git a/src/writer/update-proposal.ts b/src/writer/update-proposal.ts index 2f63463b..8d187786 100644 --- a/src/writer/update-proposal.ts +++ b/src/writer/update-proposal.ts @@ -49,6 +49,10 @@ export async function verify(body): Promise { if (proposal.author !== body.address) return Promise.reject('Not the author'); + if (space.voting?.privacy !== 'any' && msg.payload.privacy) { + return Promise.reject('not allowed to set privacy'); + } + const spaceUpdateError = getSpaceUpdateError({ type: msg.payload.type, space @@ -63,6 +67,11 @@ export async function action(body, ipfs): Promise { const updated = parseInt(msg.timestamp); const metadata = msg.payload.metadata || {}; const plugins = JSON.stringify(metadata.plugins || {}); + const spaceSettings = await getSpace(msg.space); + let privacy = spaceSettings.voting?.privacy || ''; + if (privacy === 'any') { + privacy = msg.payload.privacy; + } const proposal = { ipfs, @@ -74,6 +83,7 @@ export async function action(body, ipfs): Promise { discussion: msg.payload.discussion, choices: JSON.stringify(msg.payload.choices), labels: msg.payload.labels?.length ? JSON.stringify(msg.payload.labels) : null, + privacy, scores: JSON.stringify([]), scores_by_strategy: JSON.stringify([]), flagged: +containsFlaggedLinks(msg.payload.body)