diff --git a/packages/moderation/data/messages/reupload/identity_verification.md b/packages/moderation/data/messages/reupload/identity_verification.md new file mode 100644 index 000000000..198504cd1 --- /dev/null +++ b/packages/moderation/data/messages/reupload/identity_verification.md @@ -0,0 +1,6 @@ +## Identity Verification + +**Welcome to Modrinth!** We're happy to see you here, we just want to make sure you're you. + +Since this project already exists on the internet we ask that you provide evidence you are the rightful owner of this content. +For instance, by submitting a screenshot accessing the settings of the project's existing pages such as %PLATFORM%. diff --git a/packages/moderation/data/messages/status-alerts/tec/source_request-bins.md b/packages/moderation/data/messages/status-alerts/tec/source_request-bins.md new file mode 100644 index 000000000..5e1731902 --- /dev/null +++ b/packages/moderation/data/messages/status-alerts/tec/source_request-bins.md @@ -0,0 +1,5 @@ +## Source Code Requested + +To ensure the safety of all Modrinth users, we ask that you provide the source code for this project before resubmission so that it can be reviewed by our Moderation Team. +We also ask that you provide the source for any included binary files, as well as detailed build instructions allowing us to verify that the compiled code you are distributing matches the provided source. +We understand that you may not want to publish the source code for this project, so you are welcome to share it privately to the [Modrinth Content Moderation Team](https://github.com/ModrinthModeration) on GitHub. diff --git a/packages/moderation/data/messages/status-alerts/tec/source_request-obfs.md b/packages/moderation/data/messages/status-alerts/tec/source_request-obfs.md new file mode 100644 index 000000000..37f486a4a --- /dev/null +++ b/packages/moderation/data/messages/status-alerts/tec/source_request-obfs.md @@ -0,0 +1,4 @@ +## Source Code Requested + +To ensure the safety of all Modrinth users, we ask that you provide the source code for this project and the process you used to obfuscate it before resubmission so that it can be reviewed by our Moderation Team. +We understand that you may not want to publish the source code for this project, so you are welcome to share it privately to the [Modrinth Content Moderation Team](https://github.com/ModrinthModeration) on GitHub. diff --git a/packages/moderation/data/stages/links.ts b/packages/moderation/data/stages/links.ts index 73d6209e4..5cea34b5b 100644 --- a/packages/moderation/data/stages/links.ts +++ b/packages/moderation/data/stages/links.ts @@ -61,7 +61,8 @@ const links: Stage = { { id: 'links_unaccessible_options', type: 'multi-select-chips', - label: 'Warn of unaccessible link?', + label: 'Warn of inaccessible link?', + shouldShow: (project) => Boolean(project.source_url || project.discord_url), options: [ { label: 'Source', diff --git a/packages/moderation/data/stages/reupload.ts b/packages/moderation/data/stages/reupload.ts index 24c637669..d7a49d45e 100644 --- a/packages/moderation/data/stages/reupload.ts +++ b/packages/moderation/data/stages/reupload.ts @@ -20,6 +20,7 @@ const reupload: Stage = { 'reupload_unclear_fork', 'reupload_insufficient_fork', 'reupload_request_proof', + 'reupload_identity_verification', ], relevantExtraInput: [ { @@ -44,11 +45,12 @@ const reupload: Stage = { suggestedStatus: 'rejected', severity: 'high', message: async () => (await import('../messages/reupload/fork.md?raw')).default, - // disablesActions: [ - // 'reupload_reupload', - // 'reupload_insufficient_fork', - // 'reupload_request_proof', - // ], + disablesActions: [ + 'reupload_reupload', + 'reupload_insufficient_fork', + 'reupload_request_proof', + 'reupload_identity_verification', + ], } as ButtonAction, { id: 'reupload_insufficient_fork', @@ -58,7 +60,12 @@ const reupload: Stage = { suggestedStatus: 'rejected', severity: 'high', message: async () => (await import('../messages/reupload/insufficient_fork.md?raw')).default, - // disablesActions: ['reupload_unclear_fork', 'reupload_reupload', 'reupload_request_proof'], + disablesActions: [ + 'reupload_unclear_fork', + 'reupload_reupload', + 'reupload_request_proof', + 'reupload_identity_verification', + ], } as ButtonAction, { id: 'reupload_request_proof', @@ -69,7 +76,34 @@ const reupload: Stage = { severity: 'high', message: async () => (await import('../messages/reupload/proof_of_permissions.md?raw')).default, - // disablesActions: ['reupload_reupload', 'reupload_unclear_fork', 'reupload_insufficient_fork'], + disablesActions: [ + 'reupload_reupload', + 'reupload_unclear_fork', + 'reupload_insufficient_fork', + 'reupload_identity_verification', + ], + }, + { + id: 'reupload_identity_verification', + type: 'button', + label: 'Verify Identity', + weight: 1100, + suggestedStatus: 'rejected', + severity: 'high', + message: async () => + (await import('../messages/reupload/identity_verification.md?raw')).default, + relevantExtraInput: [ + { + label: 'Where else can the project be found?', + variable: 'PLATFORM', + required: true, + }, + ], + disablesActions: [ + 'reupload_reupload', + 'reupload_insufficient_fork', + 'reupload_request_proof', + ], }, ], } diff --git a/packages/moderation/data/stages/status-alerts.ts b/packages/moderation/data/stages/status-alerts.ts index fd6d1c63d..628c08470 100644 --- a/packages/moderation/data/stages/status-alerts.ts +++ b/packages/moderation/data/stages/status-alerts.ts @@ -1,5 +1,5 @@ import type { Stage } from '../../types/stage' -import type { ButtonAction } from '../../types/actions' +import type { ButtonAction, DropdownAction, DropdownActionOption } from '../../types/actions' import { TriangleAlertIcon } from '@modrinth/assets' const statusAlerts: Stage = { @@ -39,6 +39,39 @@ const statusAlerts: Stage = { message: async () => (await import('../messages/status-alerts/account_issues.md?raw')).default, } as ButtonAction, + { + id: 'status_tec_source_request', + type: 'button', + label: `Request Source`, + suggestedStatus: 'rejected', + severity: 'critical', + disablesActions: ['status_corrections_applied', 'status_private_use'], + shouldShow: (project) => + project.project_type === 'mod' || + project.project_type === 'shader' || + project.project_type.toString() === 'plugin', + enablesActions: [ + { + id: 'status_tec_source_request_options', + type: 'dropdown', + label: 'Why are you requesting source?', + options: [ + { + label: 'Obfuscated', + weight: 999999, + message: async () => + (await import('../messages/status-alerts/tec/source_request-obfs.md?raw')).default, + } as DropdownActionOption, + { + label: 'Binaries', + weight: 999000, + message: async () => + (await import('../messages/status-alerts/tec/source_request-bins.md?raw')).default, + } as DropdownActionOption, + ], + } as DropdownAction, + ], + } as ButtonAction, { id: 'status_automod_confusion', type: 'button', diff --git a/packages/moderation/data/stages/versions.ts b/packages/moderation/data/stages/versions.ts index e93840adc..8e31873b6 100644 --- a/packages/moderation/data/stages/versions.ts +++ b/packages/moderation/data/stages/versions.ts @@ -110,7 +110,7 @@ const versions: Stage = { weight: 1002, suggestedStatus: 'rejected', severity: 'high', - shouldShow: (project) => project.project_type === `modpack`, + shouldShow: (project) => project.project_type === 'modpack', message: async () => (await import('../messages/versions/alternate_versions-zip.md?raw')).default, } as DropdownActionOption,