From ae6893f025bbe0cf718d1f162b061ae6a128e878 Mon Sep 17 00:00:00 2001 From: Sigurd Meldgaard Date: Fri, 7 Mar 2025 11:06:50 +0000 Subject: [PATCH 1/4] Don't validate moderation status when moderating user --- app/lib/admin/actions/moderate_user.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/lib/admin/actions/moderate_user.dart b/app/lib/admin/actions/moderate_user.dart index 9d23b18832..208803f31a 100644 --- a/app/lib/admin/actions/moderate_user.dart +++ b/app/lib/admin/actions/moderate_user.dart @@ -51,7 +51,7 @@ The active web sessions of the user will be expired. final refCase = await adminBackend.loadAndVerifyModerationCaseForAdminAction( caseId, - status: ModerationStatus.pending, + status: null, ); User? user; From 749dd04bddf05d2b6ac2a78e67b4e78f7d6d7498 Mon Sep 17 00:00:00 2001 From: Sigurd Meldgaard Date: Fri, 7 Mar 2025 11:09:09 +0000 Subject: [PATCH 2/4] Make moderation lenient wrt. moderationcase status --- app/lib/admin/actions/moderate_package.dart | 5 +---- app/lib/admin/actions/moderate_package_versions.dart | 5 +---- app/lib/admin/actions/moderate_publisher.dart | 5 +---- app/lib/admin/actions/moderate_user.dart | 5 +---- app/lib/admin/backend.dart | 9 ++------- 5 files changed, 6 insertions(+), 23 deletions(-) diff --git a/app/lib/admin/actions/moderate_package.dart b/app/lib/admin/actions/moderate_package.dart index fdfebc1e33..e0d0948a8c 100644 --- a/app/lib/admin/actions/moderate_package.dart +++ b/app/lib/admin/actions/moderate_package.dart @@ -52,10 +52,7 @@ Note: the action may take a longer time to complete as the public archive bucket final note = options['note']; final refCase = - await adminBackend.loadAndVerifyModerationCaseForAdminAction( - caseId, - status: ModerationStatus.pending, - ); + await adminBackend.loadAndVerifyModerationCaseForAdminAction(caseId); final p = await packageBackend.lookupPackage(package!); if (p == null) { diff --git a/app/lib/admin/actions/moderate_package_versions.dart b/app/lib/admin/actions/moderate_package_versions.dart index a9bbede027..601c26d810 100644 --- a/app/lib/admin/actions/moderate_package_versions.dart +++ b/app/lib/admin/actions/moderate_package_versions.dart @@ -62,10 +62,7 @@ Set the moderated flag on a package version (updating the flag and the timestamp final note = options['note']; final refCase = - await adminBackend.loadAndVerifyModerationCaseForAdminAction( - caseId, - status: ModerationStatus.pending, - ); + await adminBackend.loadAndVerifyModerationCaseForAdminAction(caseId); final p = await packageBackend.lookupPackage(package!); if (p == null) { diff --git a/app/lib/admin/actions/moderate_publisher.dart b/app/lib/admin/actions/moderate_publisher.dart index 1953ceb14f..02d379b14c 100644 --- a/app/lib/admin/actions/moderate_publisher.dart +++ b/app/lib/admin/actions/moderate_publisher.dart @@ -54,10 +54,7 @@ can't be updated, administrators must not be able to update publisher options. final note = options['note']; final refCase = - await adminBackend.loadAndVerifyModerationCaseForAdminAction( - caseId, - status: ModerationStatus.pending, - ); + await adminBackend.loadAndVerifyModerationCaseForAdminAction(caseId); Publisher? publisher2; if (valueToSet != null) { diff --git a/app/lib/admin/actions/moderate_user.dart b/app/lib/admin/actions/moderate_user.dart index 208803f31a..d25a7d5856 100644 --- a/app/lib/admin/actions/moderate_user.dart +++ b/app/lib/admin/actions/moderate_user.dart @@ -49,10 +49,7 @@ The active web sessions of the user will be expired. final note = options['note']; final refCase = - await adminBackend.loadAndVerifyModerationCaseForAdminAction( - caseId, - status: null, - ); + await adminBackend.loadAndVerifyModerationCaseForAdminAction(caseId); User? user; if (looksLikeUserId(userIdOrEmail!)) { diff --git a/app/lib/admin/backend.dart b/app/lib/admin/backend.dart index 5e129578af..7d5fd28ce7 100644 --- a/app/lib/admin/backend.dart +++ b/app/lib/admin/backend.dart @@ -754,9 +754,8 @@ class AdminBackend { /// /// Throws exceptions otherwise. Future loadAndVerifyModerationCaseForAdminAction( - String? caseId, { - required String? status, - }) async { + String? caseId, + ) async { InvalidInputException.check( caseId != null && caseId.isNotEmpty, 'case must be given', @@ -769,10 +768,6 @@ class AdminBackend { if (refCase == null) { throw NotFoundException.resource(caseId); } - if (status != null && refCase.status != status) { - throw InvalidInputException( - 'ModerationCase.status ("${refCase.status}") != "$status".'); - } return refCase; } From b4b8a2da6c4299d5f3a4f2fdb80416a0142e9686 Mon Sep 17 00:00:00 2001 From: Sigurd Meldgaard Date: Fri, 7 Mar 2025 12:04:38 +0000 Subject: [PATCH 3/4] lints --- app/lib/admin/actions/moderate_user.dart | 1 - app/lib/admin/backend.dart | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/app/lib/admin/actions/moderate_user.dart b/app/lib/admin/actions/moderate_user.dart index d25a7d5856..88bbea4dff 100644 --- a/app/lib/admin/actions/moderate_user.dart +++ b/app/lib/admin/actions/moderate_user.dart @@ -13,7 +13,6 @@ import '../../publisher/backend.dart'; import '../../shared/datastore.dart'; import '../backend.dart'; -import '../models.dart'; import 'actions.dart'; diff --git a/app/lib/admin/backend.dart b/app/lib/admin/backend.dart index 7d5fd28ce7..bb687f338a 100644 --- a/app/lib/admin/backend.dart +++ b/app/lib/admin/backend.dart @@ -749,7 +749,7 @@ class AdminBackend { dbService.emptyKey.append(ModerationCase, id: caseId)); } - /// Returns a valid [ModerationCase] if it exists and [status] is matching. + /// Returns a valid [ModerationCase] if it exists. /// Returns `null` if [caseId] is `none`. /// /// Throws exceptions otherwise. From d5bcf2d685187c181ed9c7e78e4a55b86d01361e Mon Sep 17 00:00:00 2001 From: Sigurd Meldgaard Date: Fri, 7 Mar 2025 12:09:17 +0000 Subject: [PATCH 4/4] Remove tests --- app/test/admin/moderate_package_test.dart | 16 ---------------- app/test/admin/moderate_publisher_test.dart | 16 ---------------- 2 files changed, 32 deletions(-) diff --git a/app/test/admin/moderate_package_test.dart b/app/test/admin/moderate_package_test.dart index f5377d4485..bff6ee16df 100644 --- a/app/test/admin/moderate_package_test.dart +++ b/app/test/admin/moderate_package_test.dart @@ -398,22 +398,6 @@ void main() { }, ); - testWithProfile('status already closed', fn: () async { - final mc = await _report('oxygen'); - await dbService.commit(inserts: [ - mc - ..resolved = clock.now() - ..status = ModerationStatus.noAction - ]); - - await expectApiException( - _moderate('oxygen', state: true, caseId: mc.caseId), - code: 'InvalidInput', - status: 400, - message: 'ModerationCase.status ("no-action") != "pending".', - ); - }); - testWithProfile( 'cleanup deletes datastore entities and canonical archive file', expectedLogMessages: [ diff --git a/app/test/admin/moderate_publisher_test.dart b/app/test/admin/moderate_publisher_test.dart index dd8922a653..104b1a5259 100644 --- a/app/test/admin/moderate_publisher_test.dart +++ b/app/test/admin/moderate_publisher_test.dart @@ -191,22 +191,6 @@ void main() { expect(docs3!.where((d) => d.package == 'neon'), isNotEmpty); }); - testWithProfile('status already closed', fn: () async { - final mc = await _report('example.com'); - await dbService.commit(inserts: [ - mc - ..resolved = clock.now() - ..status = ModerationStatus.noAction - ]); - - await expectApiException( - _moderate('example.com', state: true, caseId: mc.caseId), - code: 'InvalidInput', - status: 400, - message: 'ModerationCase.status ("no-action") != "pending".', - ); - }); - testWithProfile('cleanup deletes datastore entities and abandons packages', fn: () async { // moderate and cleanup