parent
							
								
									c56b94ae96
								
							
						
					
					
						commit
						0a0aa0e2db
					
				
					 7 changed files with 35 additions and 14 deletions
				
			
		
							
								
								
									
										21
									
								
								src/misc/convert-host.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								src/misc/convert-host.ts
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,21 @@
 | 
				
			||||||
 | 
					import config from '../config';
 | 
				
			||||||
 | 
					import { toUnicode, toASCII } from 'punycode';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export function getFullApAccount(username: string, host: string) {
 | 
				
			||||||
 | 
						return host ? `${username}@${toApHost(host)}` : `${username}@${toApHost(config.host)}`;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export function isSelfHost(host: string) {
 | 
				
			||||||
 | 
						if (host == null) return true;
 | 
				
			||||||
 | 
						return toApHost(config.host) === toApHost(host);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export function toDbHost(host: string) {
 | 
				
			||||||
 | 
						if (host == null) return null;
 | 
				
			||||||
 | 
						return toUnicode(host.toLowerCase());
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export function toApHost(host: string) {
 | 
				
			||||||
 | 
						if (host == null) return null;
 | 
				
			||||||
 | 
						return toASCII(host.toLowerCase());
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -8,7 +8,7 @@ import addFile from '../../../services/drive/add-file';
 | 
				
			||||||
import User from '../../../models/user';
 | 
					import User from '../../../models/user';
 | 
				
			||||||
import dateFormat = require('dateformat');
 | 
					import dateFormat = require('dateformat');
 | 
				
			||||||
import Blocking from '../../../models/blocking';
 | 
					import Blocking from '../../../models/blocking';
 | 
				
			||||||
import config from '../../../config';
 | 
					import { getFullApAccount } from '../../../misc/convert-host';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const logger = queueLogger.createSubLogger('export-blocking');
 | 
					const logger = queueLogger.createSubLogger('export-blocking');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -56,7 +56,7 @@ export async function exportBlocking(job: Bull.Job, done: any): Promise<void> {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		for (const block of blockings) {
 | 
							for (const block of blockings) {
 | 
				
			||||||
			const u = await User.findOne({ _id: block.blockeeId }, { fields: { username: true, host: true } });
 | 
								const u = await User.findOne({ _id: block.blockeeId }, { fields: { username: true, host: true } });
 | 
				
			||||||
			const content = u.host ? `${u.username}@${u.host}` : `${u.username}@${config.host}`;
 | 
								const content = getFullApAccount(u.username, u.host);
 | 
				
			||||||
			await new Promise((res, rej) => {
 | 
								await new Promise((res, rej) => {
 | 
				
			||||||
				stream.write(content + '\n', err => {
 | 
									stream.write(content + '\n', err => {
 | 
				
			||||||
					if (err) {
 | 
										if (err) {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -8,7 +8,7 @@ import addFile from '../../../services/drive/add-file';
 | 
				
			||||||
import User from '../../../models/user';
 | 
					import User from '../../../models/user';
 | 
				
			||||||
import dateFormat = require('dateformat');
 | 
					import dateFormat = require('dateformat');
 | 
				
			||||||
import Following from '../../../models/following';
 | 
					import Following from '../../../models/following';
 | 
				
			||||||
import config from '../../../config';
 | 
					import { getFullApAccount } from '../../../misc/convert-host';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const logger = queueLogger.createSubLogger('export-following');
 | 
					const logger = queueLogger.createSubLogger('export-following');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -56,7 +56,7 @@ export async function exportFollowing(job: Bull.Job, done: any): Promise<void> {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		for (const following of followings) {
 | 
							for (const following of followings) {
 | 
				
			||||||
			const u = await User.findOne({ _id: following.followeeId }, { fields: { username: true, host: true } });
 | 
								const u = await User.findOne({ _id: following.followeeId }, { fields: { username: true, host: true } });
 | 
				
			||||||
			const content = u.host ? `${u.username}@${u.host}` : `${u.username}@${config.host}`;
 | 
								const content = getFullApAccount(u.username, u.host);
 | 
				
			||||||
			await new Promise((res, rej) => {
 | 
								await new Promise((res, rej) => {
 | 
				
			||||||
				stream.write(content + '\n', err => {
 | 
									stream.write(content + '\n', err => {
 | 
				
			||||||
					if (err) {
 | 
										if (err) {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -8,7 +8,7 @@ import addFile from '../../../services/drive/add-file';
 | 
				
			||||||
import User from '../../../models/user';
 | 
					import User from '../../../models/user';
 | 
				
			||||||
import dateFormat = require('dateformat');
 | 
					import dateFormat = require('dateformat');
 | 
				
			||||||
import Mute from '../../../models/mute';
 | 
					import Mute from '../../../models/mute';
 | 
				
			||||||
import config from '../../../config';
 | 
					import { getFullApAccount } from '../../../misc/convert-host';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const logger = queueLogger.createSubLogger('export-mute');
 | 
					const logger = queueLogger.createSubLogger('export-mute');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -56,7 +56,7 @@ export async function exportMute(job: Bull.Job, done: any): Promise<void> {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		for (const mute of mutes) {
 | 
							for (const mute of mutes) {
 | 
				
			||||||
			const u = await User.findOne({ _id: mute.muteeId }, { fields: { username: true, host: true } });
 | 
								const u = await User.findOne({ _id: mute.muteeId }, { fields: { username: true, host: true } });
 | 
				
			||||||
			const content = u.host ? `${u.username}@${u.host}` : `${u.username}@${config.host}`;
 | 
								const content = getFullApAccount(u.username, u.host);
 | 
				
			||||||
			await new Promise((res, rej) => {
 | 
								await new Promise((res, rej) => {
 | 
				
			||||||
				stream.write(content + '\n', err => {
 | 
									stream.write(content + '\n', err => {
 | 
				
			||||||
					if (err) {
 | 
										if (err) {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -7,8 +7,8 @@ import { queueLogger } from '../../logger';
 | 
				
			||||||
import addFile from '../../../services/drive/add-file';
 | 
					import addFile from '../../../services/drive/add-file';
 | 
				
			||||||
import User from '../../../models/user';
 | 
					import User from '../../../models/user';
 | 
				
			||||||
import dateFormat = require('dateformat');
 | 
					import dateFormat = require('dateformat');
 | 
				
			||||||
import config from '../../../config';
 | 
					 | 
				
			||||||
import UserList from '../../../models/user-list';
 | 
					import UserList from '../../../models/user-list';
 | 
				
			||||||
 | 
					import { getFullApAccount } from '../../../misc/convert-host';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const logger = queueLogger.createSubLogger('export-user-lists');
 | 
					const logger = queueLogger.createSubLogger('export-user-lists');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -46,7 +46,7 @@ export async function exportUserLists(job: Bull.Job, done: any): Promise<void> {
 | 
				
			||||||
		});
 | 
							});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		for (const u of users) {
 | 
							for (const u of users) {
 | 
				
			||||||
			const acct = u.host ? `${u.username}@${u.host}` : `${u.username}@${config.host}`;
 | 
								const acct = getFullApAccount(u.username, u.host);
 | 
				
			||||||
			const content = `${list.title},${acct}`;
 | 
								const content = `${list.title},${acct}`;
 | 
				
			||||||
			await new Promise((res, rej) => {
 | 
								await new Promise((res, rej) => {
 | 
				
			||||||
				stream.write(content + '\n', err => {
 | 
									stream.write(content + '\n', err => {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -3,13 +3,13 @@ import * as mongo from 'mongodb';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import { queueLogger } from '../../logger';
 | 
					import { queueLogger } from '../../logger';
 | 
				
			||||||
import User from '../../../models/user';
 | 
					import User from '../../../models/user';
 | 
				
			||||||
import config from '../../../config';
 | 
					 | 
				
			||||||
import follow from '../../../services/following/create';
 | 
					import follow from '../../../services/following/create';
 | 
				
			||||||
import DriveFile from '../../../models/drive-file';
 | 
					import DriveFile from '../../../models/drive-file';
 | 
				
			||||||
import { getOriginalUrl } from '../../../misc/get-drive-file-url';
 | 
					import { getOriginalUrl } from '../../../misc/get-drive-file-url';
 | 
				
			||||||
import parseAcct from '../../../misc/acct/parse';
 | 
					import parseAcct from '../../../misc/acct/parse';
 | 
				
			||||||
import resolveUser from '../../../remote/resolve-user';
 | 
					import resolveUser from '../../../remote/resolve-user';
 | 
				
			||||||
import { downloadTextFile } from '../../../misc/download-text-file';
 | 
					import { downloadTextFile } from '../../../misc/download-text-file';
 | 
				
			||||||
 | 
					import { isSelfHost, toDbHost } from '../../../misc/convert-host';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const logger = queueLogger.createSubLogger('import-following');
 | 
					const logger = queueLogger.createSubLogger('import-following');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -31,11 +31,11 @@ export async function importFollowing(job: Bull.Job, done: any): Promise<void> {
 | 
				
			||||||
	for (const line of csv.trim().split('\n')) {
 | 
						for (const line of csv.trim().split('\n')) {
 | 
				
			||||||
		const { username, host } = parseAcct(line.trim());
 | 
							const { username, host } = parseAcct(line.trim());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		let target = host === config.host ? await User.findOne({
 | 
							let target = isSelfHost(host) ? await User.findOne({
 | 
				
			||||||
			host: null,
 | 
								host: null,
 | 
				
			||||||
			usernameLower: username.toLowerCase()
 | 
								usernameLower: username.toLowerCase()
 | 
				
			||||||
		}) : await User.findOne({
 | 
							}) : await User.findOne({
 | 
				
			||||||
			host: host,
 | 
								host: toDbHost(host),
 | 
				
			||||||
			usernameLower: username.toLowerCase()
 | 
								usernameLower: username.toLowerCase()
 | 
				
			||||||
		});
 | 
							});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -3,7 +3,6 @@ import * as mongo from 'mongodb';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import { queueLogger } from '../../logger';
 | 
					import { queueLogger } from '../../logger';
 | 
				
			||||||
import User from '../../../models/user';
 | 
					import User from '../../../models/user';
 | 
				
			||||||
import config from '../../../config';
 | 
					 | 
				
			||||||
import UserList from '../../../models/user-list';
 | 
					import UserList from '../../../models/user-list';
 | 
				
			||||||
import DriveFile from '../../../models/drive-file';
 | 
					import DriveFile from '../../../models/drive-file';
 | 
				
			||||||
import { getOriginalUrl } from '../../../misc/get-drive-file-url';
 | 
					import { getOriginalUrl } from '../../../misc/get-drive-file-url';
 | 
				
			||||||
| 
						 | 
					@ -11,6 +10,7 @@ import parseAcct from '../../../misc/acct/parse';
 | 
				
			||||||
import resolveUser from '../../../remote/resolve-user';
 | 
					import resolveUser from '../../../remote/resolve-user';
 | 
				
			||||||
import { pushUserToUserList } from '../../../services/user-list/push';
 | 
					import { pushUserToUserList } from '../../../services/user-list/push';
 | 
				
			||||||
import { downloadTextFile } from '../../../misc/download-text-file';
 | 
					import { downloadTextFile } from '../../../misc/download-text-file';
 | 
				
			||||||
 | 
					import { isSelfHost, toDbHost } from '../../../misc/convert-host';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const logger = queueLogger.createSubLogger('import-user-lists');
 | 
					const logger = queueLogger.createSubLogger('import-user-lists');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -47,11 +47,11 @@ export async function importUserLists(job: Bull.Job, done: any): Promise<void> {
 | 
				
			||||||
			});
 | 
								});
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		let target = host === config.host ? await User.findOne({
 | 
							let target = isSelfHost(host) ? await User.findOne({
 | 
				
			||||||
			host: null,
 | 
								host: null,
 | 
				
			||||||
			usernameLower: username.toLowerCase()
 | 
								usernameLower: username.toLowerCase()
 | 
				
			||||||
		}) : await User.findOne({
 | 
							}) : await User.findOne({
 | 
				
			||||||
			host: host,
 | 
								host: toDbHost(host),
 | 
				
			||||||
			usernameLower: username.toLowerCase()
 | 
								usernameLower: username.toLowerCase()
 | 
				
			||||||
		});
 | 
							});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue