diff options
author | 2023-10-24 18:24:18 +0200 | |
---|---|---|
committer | 2023-10-24 18:24:18 +0200 | |
commit | edac3bc3615d833c5996996f9de7d1c230570174 (patch) | |
tree | 4b4b81c5a55c5eed21cbb099e2b289c76bac3173 /web/source/settings/lib/query/admin/domain-permissions/process.ts | |
parent | [bugfix] serialize instance terms via API (#2293) (diff) | |
download | gotosocial-edac3bc3615d833c5996996f9de7d1c230570174.tar.xz |
[bugfix/frontend] Export/import CSV correctly (#2294)
* [bugfix/frontend] Export/import CSV correctly
* export mastodon style
Diffstat (limited to 'web/source/settings/lib/query/admin/domain-permissions/process.ts')
-rw-r--r-- | web/source/settings/lib/query/admin/domain-permissions/process.ts | 35 |
1 files changed, 28 insertions, 7 deletions
diff --git a/web/source/settings/lib/query/admin/domain-permissions/process.ts b/web/source/settings/lib/query/admin/domain-permissions/process.ts index 017d02bb4..10ba88cc3 100644 --- a/web/source/settings/lib/query/admin/domain-permissions/process.ts +++ b/web/source/settings/lib/query/admin/domain-permissions/process.ts @@ -27,7 +27,7 @@ import { isValidDomainPermission, hasBetterScope } from "../../../util/domain-pe import { gtsApi } from "../../gts-api"; import { - isDomainPerms, + validateDomainPerms, type DomainPerm, } from "../../../types/domain-permission"; @@ -43,19 +43,39 @@ function parseDomainList(list: string): DomainPerm[] { if (list.startsWith("[")) { // Assume JSON array. const data = JSON.parse(list); - if (!isDomainPerms(data)) { - throw "parsed JSON was not array of DomainPermission"; + + const validateRes = validateDomainPerms(data); + if (!validateRes.success) { + throw `parsed JSON was not array of DomainPermission: ${JSON.stringify(validateRes.errors)}`; } return data; } else if (list.startsWith("#domain") || list.startsWith("domain,severity")) { // Assume Mastodon-style CSV. const csvParseCfg: CSVParseConfig = { + // Key by header. header: true, - // Remove leading '#' if present. + // Remove leading '#' from headers if present. transformHeader: (header) => header.startsWith("#") ? header.slice(1) : header, + // Massage weird boolean values. + transform: (value, _field) => { + if (value == "False" || value == "True") { + return value.toLowerCase(); + } else { + return value; + } + }, skipEmptyLines: true, - dynamicTyping: true + // Only dynamic type boolean values, + // leave the rest as strings. + dynamicTyping: { + "domain": false, + "severity": false, + "reject_media": true, + "reject_reports": true, + "public_comment": false, + "obfuscate": true, + } }; const { data, errors } = csvParse(list, csvParseCfg); @@ -67,8 +87,9 @@ function parseDomainList(list: string): DomainPerm[] { throw error; } - if (!isDomainPerms(data)) { - throw "parsed CSV was not array of DomainPermission"; + const validateRes = validateDomainPerms(data); + if (!validateRes.success) { + throw `parsed CSV was not array of DomainPermission: ${JSON.stringify(validateRes.errors)}`; } return data; |