mirror of
				https://github.com/superseriousbusiness/gotosocial.git
				synced 2025-10-29 19:02:26 -05:00 
			
		
		
		
	[bugfix/frontend] Export/import CSV correctly (#2294)
* [bugfix/frontend] Export/import CSV correctly * export mastodon style
This commit is contained in:
		
					parent
					
						
							
								cc313f58cb
							
						
					
				
			
			
				commit
				
					
						edac3bc361
					
				
			
		
					 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…
	
	Add table
		Add a link
		
	
		Reference in a new issue