upd: add IPs to data export

This commit is contained in:
Mar0xy 2023-11-07 12:20:46 +01:00
parent 739f958842
commit 42ecde475e
No known key found for this signature in database
GPG key ID: 56569BBE47D2C828

View file

@ -1,6 +1,3 @@
/* eslint-disable no-constant-condition */
/* eslint-disable @typescript-eslint/no-unnecessary-condition */
import * as fs from 'node:fs'; import * as fs from 'node:fs';
import { Inject, Injectable } from '@nestjs/common'; import { Inject, Injectable } from '@nestjs/common';
import { In, IsNull, MoreThan, Not } from 'typeorm'; import { In, IsNull, MoreThan, Not } from 'typeorm';
@ -8,7 +5,7 @@ import { format as dateFormat } from 'date-fns';
import mime from 'mime-types'; import mime from 'mime-types';
import archiver from 'archiver'; import archiver from 'archiver';
import { DI } from '@/di-symbols.js'; import { DI } from '@/di-symbols.js';
import type { AntennasRepository, BlockingsRepository, DriveFilesRepository, FollowingsRepository, MiBlocking, MiFollowing, MiMuting, MiNote, MiNoteFavorite, MiPoll, MiUser, MutingsRepository, NoteFavoritesRepository, NotesRepository, PollsRepository, UserListMembershipsRepository, UserListsRepository, UserProfilesRepository, UsersRepository } from '@/models/_.js'; import type { AntennasRepository, BlockingsRepository, DriveFilesRepository, FollowingsRepository, MiBlocking, MiFollowing, MiMuting, MiNote, MiNoteFavorite, MiPoll, MiUser, MutingsRepository, NoteFavoritesRepository, NotesRepository, PollsRepository, SigninsRepository, UserListMembershipsRepository, UserListsRepository, UserProfilesRepository, UsersRepository } from '@/models/_.js';
import type { Config } from '@/config.js'; import type { Config } from '@/config.js';
import type Logger from '@/logger.js'; import type Logger from '@/logger.js';
import { DriveService } from '@/core/DriveService.js'; import { DriveService } from '@/core/DriveService.js';
@ -19,9 +16,9 @@ import { bindThis } from '@/decorators.js';
import { Packed } from '@/misc/json-schema.js'; import { Packed } from '@/misc/json-schema.js';
import { UtilityService } from '@/core/UtilityService.js'; import { UtilityService } from '@/core/UtilityService.js';
import { DownloadService } from '@/core/DownloadService.js'; import { DownloadService } from '@/core/DownloadService.js';
import { EmailService } from '@/core/EmailService.js';
import { QueueLoggerService } from '../QueueLoggerService.js'; import { QueueLoggerService } from '../QueueLoggerService.js';
import type * as Bull from 'bullmq'; import type * as Bull from 'bullmq';
import { EmailService } from '@/core/EmailService.js';
@Injectable() @Injectable()
export class ExportAccountDataProcessorService { export class ExportAccountDataProcessorService {
@ -67,6 +64,9 @@ export class ExportAccountDataProcessorService {
@Inject(DI.userListMembershipsRepository) @Inject(DI.userListMembershipsRepository)
private userListMembershipsRepository: UserListMembershipsRepository, private userListMembershipsRepository: UserListMembershipsRepository,
@Inject(DI.signinsRepository)
private signinsRepository: SigninsRepository,
private utilityService: UtilityService, private utilityService: UtilityService,
private driveService: DriveService, private driveService: DriveService,
private idService: IdService, private idService: IdService,
@ -160,6 +160,43 @@ export class ExportAccountDataProcessorService {
profileStream.end(); profileStream.end();
// Stored IPs export
const signins = await this.signinsRepository.findBy({ userId: user.id });
const ipPath = path + '/ips.json';
fs.writeFileSync(ipPath, '', 'utf-8');
const ipStream = fs.createWriteStream(ipPath, { flags: 'a' });
const writeIPs = (text: string): Promise<void> => {
return new Promise<void>((res, rej) => {
ipStream.write(text, err => {
if (err) {
this.logger.error(err);
rej(err);
} else {
res();
}
});
});
};
await writeIPs(`{"metaVersion":1,"host":"${this.config.host}","exportedAt":"${new Date().toString()}","ips":[`);
for (const signin of signins) {
// eslint-disable-next-line @typescript-eslint/no-unused-vars
const { userId, id, headers, user, ...signinTrimmed } = signin;
const isFirst = signins.indexOf(signin) === 0;
await writeIPs(isFirst ? JSON.stringify(signinTrimmed) : ',\n' + JSON.stringify(signinTrimmed));
}
await writeIPs(']}');
ipStream.end();
// Note Export // Note Export
const notesPath = path + '/notes.json'; const notesPath = path + '/notes.json';