mirror of
https://github.com/superseriousbusiness/gotosocial
synced 2024-11-13 00:07:11 +00:00
[bugfix/frontend] Export/import CSV correctly (#2294)
* [bugfix/frontend] Export/import CSV correctly * export mastodon style
This commit is contained in:
parent
1e632dc411
commit
5fdc005061
3 changed files with 35 additions and 14 deletions
|
@ -56,12 +56,12 @@ function exportProcess(formData: ExportDomainPermsParams): _exportProcess {
|
|||
if (formData.exportType == "csv") {
|
||||
return {
|
||||
transformEntry: (entry) => [
|
||||
entry.domain, // #domain
|
||||
"suspend", // #severity
|
||||
false, // #reject_media
|
||||
false, // #reject_reports
|
||||
entry.public_comment, // #public_comment
|
||||
entry.obfuscate ?? false // #obfuscate
|
||||
entry.domain, // domain
|
||||
"suspend", // severity
|
||||
false, // reject_media
|
||||
false, // reject_reports
|
||||
entry.public_comment ?? "", // public_comment
|
||||
entry.obfuscate ?? false // obfuscate
|
||||
],
|
||||
stringify: (list) => csvUnparse({
|
||||
fields: [
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
|
||||
import typia from "typia";
|
||||
|
||||
export const isDomainPerms = typia.createIs<DomainPerm[]>();
|
||||
export const validateDomainPerms = typia.createValidate<DomainPerm[]>();
|
||||
|
||||
export type PermType = "block" | "allow";
|
||||
|
||||
|
|
Loading…
Reference in a new issue