icynet-auth-server/src/tools/migrate-old-icynet/migrate.ts

86 lines
2.8 KiB
TypeScript

import { AppDataSource } from 'src/datasource';
import * as fs from 'fs/promises';
import { join } from 'path';
import { User } from 'src/modules/objects/user/user.entity';
import { OAuth2Client } from 'src/modules/objects/oauth2-client/oauth2-client.entity';
import { UserToken } from 'src/modules/objects/user-token/user-token.entity';
import { AuditLog } from 'src/modules/objects/audit/audit.entity';
import { Upload } from 'src/modules/objects/upload/upload.entity';
import { OAuth2ClientURL } from 'src/modules/objects/oauth2-client/oauth2-client-url.entity';
async function run() {
await AppDataSource.initialize();
const dumpFile = await fs.readFile(join(__dirname, 'output.json'), {
encoding: 'utf-8',
});
const dump = JSON.parse(dumpFile);
const userRepo = AppDataSource.getRepository(User);
const uploadRepo = AppDataSource.getRepository(Upload);
const oauth2Repo = AppDataSource.getRepository(OAuth2Client);
const oauth2URLRepo = AppDataSource.getRepository(OAuth2ClientURL);
const tokenRepo = AppDataSource.getRepository(UserToken);
const auditRepo = AppDataSource.getRepository(AuditLog);
const users: User[] = [];
console.log('Saving users...');
for (const user of dump.users) {
const newUser = new User();
Object.assign(newUser, user);
await userRepo.save(newUser);
users.push(newUser);
}
console.log('Saving user uploads...');
for (const user of dump.users.filter(({ picture }) => picture)) {
const belonging = users.find(({ id }) => id === user.id);
const newUpload = new Upload();
Object.assign(newUpload, user.picture);
newUpload.uploader = belonging;
await uploadRepo.save(newUpload);
belonging.picture = newUpload;
await userRepo.save(belonging);
}
console.log('Saving OAuth2 clients...');
for (const client of dump.clients) {
const owner = users.find(({ id }) => id === client.ownerId);
const newClient = new OAuth2Client();
Object.assign(newClient, client);
newClient.owner = owner;
await oauth2Repo.save(newClient);
for (const url of client.urls || []) {
const newURL = new OAuth2ClientURL();
Object.assign(newURL, url);
newURL.client = newClient;
await oauth2URLRepo.save(newURL);
}
}
console.log('Saving tokens...');
for (const token of dump.totp) {
const owner = users.find(({ id }) => id === token.userId);
const newTOTP = new UserToken();
Object.assign(newTOTP, token);
newTOTP.user = owner;
await tokenRepo.save(newTOTP);
}
console.log('Saving audit logs...');
for (const audit of dump.auditLogs) {
const owner = users.find(({ id }) => id === audit.actorId);
const newAudit = new AuditLog();
Object.assign(newAudit, audit);
newAudit.actor = owner;
await auditRepo.save(newAudit);
}
}
run()
.catch(console.error)
.then(() => process.exit(0));