forked from geolba/tethys.backend
initial commit
This commit is contained in:
commit
4fc3bb0a01
202 changed files with 41729 additions and 0 deletions
73
commands/ValidateChecksum.ts
Normal file
73
commands/ValidateChecksum.ts
Normal file
|
@ -0,0 +1,73 @@
|
|||
import { BaseCommand } from '@adonisjs/core/build/standalone';
|
||||
import crypto from 'crypto';
|
||||
import fs from 'fs';
|
||||
|
||||
export default class ValidateChecksum extends BaseCommand {
|
||||
/**
|
||||
* Command name is used to run the command
|
||||
*/
|
||||
public static commandName = 'validate:checksum';
|
||||
|
||||
/**
|
||||
* Command description is displayed in the "help" output
|
||||
*/
|
||||
public static description = '';
|
||||
|
||||
public static settings = {
|
||||
/**
|
||||
* Set the following value to true, if you want to load the application
|
||||
* before running the command. Don't forget to call `node ace generate:manifest`
|
||||
* afterwards.
|
||||
*/
|
||||
loadApp: true,
|
||||
|
||||
/**
|
||||
* Set the following value to true, if you want this command to keep running until
|
||||
* you manually decide to exit the process. Don't forget to call
|
||||
* `node ace generate:manifest` afterwards.
|
||||
*/
|
||||
stayAlive: false,
|
||||
};
|
||||
|
||||
public async run() {
|
||||
// this.logger.info('Hello world!')
|
||||
const { default: File } = await import('App/Models/File');
|
||||
// const { default: HashValue } = await (await (import ('App/Models/HashValue')));
|
||||
|
||||
// query all files from database:
|
||||
const files = await File.query().preload('hashvalues');
|
||||
|
||||
for (var file of files) {
|
||||
let hashValue = await file.related('hashvalues').query().pluck('value', 'type');
|
||||
|
||||
const filePath = '/storage/app/public/' + file.pathName;
|
||||
let calculatedMd5FileHash;
|
||||
try {
|
||||
calculatedMd5FileHash = await this.checksumFile(filePath, 'md5');
|
||||
} catch (exception) {
|
||||
this.logger.error(exception.message);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (hashValue['md5'] == calculatedMd5FileHash) {
|
||||
this.logger.info(
|
||||
`File id ${file.id}: stored md5 checksum: ${calculatedMd5FileHash}, control md5 checksum: ${hashValue['md5']}`,
|
||||
);
|
||||
} else {
|
||||
this.logger.logError(
|
||||
`File id ${file.id}: stored md5 checksum: ${calculatedMd5FileHash}, control md5 checksum: ${hashValue['md5']}`,
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private async checksumFile(path, hashName = 'md5'): Promise<string> {
|
||||
return new Promise((resolve, reject) => {
|
||||
const hash = crypto.createHash(hashName);
|
||||
const stream = fs.createReadStream(path);
|
||||
stream.on('error', (err) => reject(err));
|
||||
stream.on('data', (chunk) => hash.update(chunk));
|
||||
stream.on('end', () => resolve(hash.digest('hex')));
|
||||
});
|
||||
}
|
||||
}
|
19
commands/index.ts
Normal file
19
commands/index.ts
Normal file
|
@ -0,0 +1,19 @@
|
|||
import { listDirectoryFiles } from '@adonisjs/core/build/standalone';
|
||||
import Application from '@ioc:Adonis/Core/Application';
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Exporting an array of commands
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Instead of manually exporting each file from this directory, we use the
|
||||
| helper `listDirectoryFiles` to recursively collect and export an array
|
||||
| of filenames.
|
||||
|
|
||||
| Couple of things to note:
|
||||
|
|
||||
| 1. The file path must be relative from the project root and not this directory.
|
||||
| 2. We must ignore this file to avoid getting into an infinite loop
|
||||
|
|
||||
*/
|
||||
export default listDirectoryFiles(__dirname, Application.appRoot, ['./commands/index']);
|
Loading…
Add table
editor.link_modal.header
Reference in a new issue