release / 1.0.0

This commit is contained in:
Dominik Winter
2019-06-06 23:10:28 +02:00
parent 46cd30d54c
commit 03febdf0d4
11 changed files with 3236 additions and 2049 deletions

9
.eslintrc Normal file
View File

@@ -0,0 +1,9 @@
{
"extends": [
"eslint:recommended",
"plugin:node/recommended"
],
"parserOptions": {
"sourceType": "module"
}
}

0
.gitignore vendored Normal file → Executable file
View File

2
README.md Normal file → Executable file
View File

@@ -43,6 +43,8 @@ $ npm test
## Release Notes ## Release Notes
- ```1.0.0```
- Release
- ```0.1.0``` - ```0.1.0```
- Add the new API-Usage from [decrypt-dlc](https://github.com/sydev/decrypt-dlc) - Add the new API-Usage from [decrypt-dlc](https://github.com/sydev/decrypt-dlc)
- Add more endpoints - Add more endpoints

View File

@@ -1,70 +1,43 @@
#!/usr/bin/env node #!/usr/bin/env node
const decrypt = require('decrypt-dlc'); const decrypt = require('decrypt-dlc');
const fs = require('fs'); const fs = require('fs-extra');
const isFile = require('is-file'); const isFile = require('is-file');
const isUrl = require('is-url'); const isUrl = require('is-url');
const path = require('path'); const path = require('path');
const program = require('commander'); const program = require('commander');
const signale = require('signale');
program program
.version('1.0.0') .version('1.0.0')
.usage('[options] <file>') .usage('[options] <file|url>')
.option('-o, --output <file>', 'File to store decrypted urls in. (Default: urls.txt)', path.join(process.cwd(), 'urls.txt')) .option('-o, --output <file>', 'File to store decrypted urls in. (Default: urls.txt)', path.join(process.cwd(), 'urls.txt'))
.parse(process.argv); .parse(process.argv);
let urls = null;
/** /**
* Store the string containing the urls in a file. * Check if a filepath has an allowed extension. Allowed are `.dlc`, `.ccf` and `.rsdf`.
* @param {String} urls String of urls * @param {String} filepath The filepath to check
* @returns {Boolean}
*/ */
function storeUrlsInFile(urls) { const hasAllowedExtension = (filepath = '') => ['.dlc', '.ccf', '.rsdf'].indexOf(path.extname(filepath)) > -1;
fs.writeFile(program.output, urls, (err) => {
if (err) throw err; const run = async () => {
console.log(`Successfully stored urls in ${program.output}`); const filepath = path.isAbsolute(program.output) ? program.output : path.resolve(process.cwd(), program.output);
}); const input = program.args[0];
let links = [];
try {
if (isFile(input) && hasAllowedExtension(input)) links = await decrypt.upload(input);
else if (isUrl(input)) links = await decrypt.container(input);
else throw new Error('Positional argument must be a filepath or an url.');
await fs.outputFile(filepath, links.join('\n'));
signale.success(`Urls stored at ${filepath}`);
} catch (err) {
signale.fatal(err);
} }
};
/** run();
* Check if file has a .dlc extension
* @param {String} file path to a file
* @return {Boolean} Checks wether if the file is a .dlc file or not
*/
function isDLCFile(file) {
let ext = path.extname(file);
return (ext === '.dlc');
}
if (isFile(program.args[0]) && isDLCFile(program.args[0])) {
decrypt.upload(program.args[0], (err, response) => {
if (err) throw err;
urls = response.success.links.join('\n');
storeUrlsInFile(urls);
});
} else if (isFile(program.args[0]) && !isDLCFile(program.args[0])) {
fs.readFile(program.args[0], 'utf-8', (err, content) => {
if (err) throw err;
decrypt.paste(content, (err, response) => {
if (err) throw err;
urls = response.success.links.join('\n');
storeUrlsInFile(urls);
});
});
} else if (isUrl(program.args[0])) {
decrypt.container(program.args[0], (err, response) => {
if (err) throw err;
urls = response.success.links.join('\n');
storeUrlsInFile(urls);
});
} else {
console.error('Parameter must be url or path to a file.');
}

23
package.json Normal file → Executable file
View File

@@ -1,6 +1,6 @@
{ {
"name": "decrypt-dlc-cli", "name": "decrypt-dlc-cli",
"version": "0.1.0", "version": "1.0.0",
"description": "", "description": "",
"main": "lib/index.js", "main": "lib/index.js",
"bin": { "bin": {
@@ -24,21 +24,22 @@
], ],
"author": "Dominik Winter <dominik.winter92@gmail.com>", "author": "Dominik Winter <dominik.winter92@gmail.com>",
"license": "MIT", "license": "MIT",
"eslintConfig": { "engines": {
"parserOptions": { "node": ">=10.0.0"
"ecmaVersion": 7,
"sourceType": "module"
}
}, },
"dependencies": { "dependencies": {
"commander": "^2.9.0", "commander": "^2.20.0",
"decrypt-dlc": "^1.0.0", "decrypt-dlc": "^2.0.0",
"fs-extra": "^8.0.1",
"is-file": "^1.0.0", "is-file": "^1.0.0",
"is-url": "^1.2.2" "is-url": "^1.2.4",
"signale": "^1.4.0"
}, },
"devDependencies": { "devDependencies": {
"ava": "^0.17.0", "ava": "^2.0.0",
"execa": "^0.5.0" "eslint": "^5.16.0",
"eslint-plugin-node": "^9.1.0",
"execa": "^1.0.0"
}, },
"ava": { "ava": {
"files": [ "files": [

0
test/test.dlc Normal file → Executable file
View File

33
test/test.js Normal file → Executable file
View File

@@ -3,10 +3,8 @@ import execa from 'execa';
const BIN_FILE = 'bin/decrypt-dlc'; const BIN_FILE = 'bin/decrypt-dlc';
const TEST_FILE = 'test/test.dlc'; const TEST_FILE = 'test/test.dlc';
const TEST_FILE_NON_DLC = 'test/test.txt';
const TEST_CONTAINER = 'https://raw.githubusercontent.com/sydev/decrypt-dlc/master/test/test.dlc'; const TEST_CONTAINER = 'https://raw.githubusercontent.com/sydev/decrypt-dlc/master/test/test.dlc';
const TEST_FILE_CORRUPTED = 'test/test_corrupted.dlc'; const TEST_FILE_CORRUPTED = 'test/test_corrupted.dlc';
const TEST_FILE_CORRUPTED_NON_DLC = 'test/test_corrupted.txt';
const TEST_CONTAINER_CORRUPTED = 'https://raw.githubusercontent.com/sydev/decrypt-dlc/master/test/test_corrupted.dlc' const TEST_CONTAINER_CORRUPTED = 'https://raw.githubusercontent.com/sydev/decrypt-dlc/master/test/test_corrupted.dlc'
const TEST_OUTPUT = 'test/urls.txt'; const TEST_OUTPUT = 'test/urls.txt';
@@ -14,50 +12,35 @@ const TEST_OUTPUT = 'test/urls.txt';
// decrypt local file // decrypt local file
test('decrypt local file', async t => { test('decrypt local file', async t => {
const dlc = await execa(BIN_FILE, [TEST_FILE]); const dlc = await execa(BIN_FILE, [TEST_FILE]);
t.regex(dlc.stdout, /Successfully/); t.regex(dlc.stdout, /Urls stored at /);
}); });
test('decrypt local file with ouput parameter', async t => { test('decrypt local file with ouput parameter', async t => {
const dlc = await execa(BIN_FILE, [TEST_FILE, '-o', TEST_OUTPUT]); const dlc = await execa(BIN_FILE, [TEST_FILE, '-o', TEST_OUTPUT]);
t.regex(dlc.stdout, /Successfully/); t.regex(dlc.stdout, /Urls stored at /);
}); });
// decrypt remote container // decrypt remote container
test('decrypt remote container', async t => { test('decrypt remote container', async t => {
const dlc = await execa(BIN_FILE, [TEST_CONTAINER]); const dlc = await execa(BIN_FILE, [TEST_CONTAINER]);
t.regex(dlc.stdout, /Successfully/); t.regex(dlc.stdout, /Urls stored at /);
}); });
test('decrypt remote container with output parameter', async t => { test('decrypt remote container with output parameter', async t => {
const dlc = await execa(BIN_FILE, [TEST_CONTAINER, '-o', TEST_OUTPUT]); const dlc = await execa(BIN_FILE, [TEST_CONTAINER, '-o', TEST_OUTPUT]);
t.regex(dlc.stdout, /Successfully/); t.regex(dlc.stdout, /Urls stored at /);
});
// decrypt from non-DLC file
test('decrypt non DLC-file', async t => {
const dlc = await execa(BIN_FILE, [TEST_FILE_NON_DLC]);
t.regex(dlc.stdout, /Successfully/);
});
test('decrypt non DLC-file with output parameter', async t => {
const dlc = await execa(BIN_FILE, [TEST_FILE_NON_DLC, '-o', TEST_OUTPUT]);
t.regex(dlc.stdout, /Successfully/);
}); });
// decrypt corrupted local file // decrypt corrupted local file
test('decrypt corrupted local file', async t => { test('decrypt corrupted local file', async t => {
t.throws(execa(BIN_FILE, [TEST_FILE_CORRUPTED])); const { stdout } = await execa(BIN_FILE, [TEST_FILE_CORRUPTED]);
t.regex(stdout, /fatal/);
}); });
// decrypt corrupted remote container // decrypt corrupted remote container
test('decrypt corrupted remote file', async t => { test('decrypt corrupted remote file', async t => {
t.throws(execa(BIN_FILE, [TEST_CONTAINER_CORRUPTED])); const { stdout } = await execa(BIN_FILE, [TEST_CONTAINER_CORRUPTED]);
}); t.regex(stdout, /fatal/);
// decrypt corrupted non-DLC file
test('decrypt corrupted non-DLC file', async t => {
t.throws(execa(BIN_FILE, [TEST_FILE_CORRUPTED_NON_DLC]));
}); });

View File

@@ -1 +0,0 @@
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

0
test/test_corrupted.dlc Normal file → Executable file
View File

0
test/test_corrupted.txt Normal file → Executable file
View File

5114
yarn.lock Normal file → Executable file

File diff suppressed because it is too large Load Diff