mirror of
https://github.com/sydev/decrypt-dlc-cli
synced 2026-01-08 10:48:01 +00:00
Compare commits
27 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e5fad1df74 | ||
|
|
c8d98bf41d | ||
|
|
2bc11bacb9 | ||
|
|
61b463af6c | ||
|
|
4f422d4ec1 | ||
|
|
d4eae99740 | ||
|
|
d393684b30 | ||
|
|
fde873e461 | ||
|
|
f9066bd063 | ||
|
|
1b8c917613 | ||
|
|
e923c2ec93 | ||
|
|
345f093a44 | ||
|
|
3b19bda61c | ||
|
|
cd6728b337 | ||
|
|
f3838db9a3 | ||
|
|
1fc5f651c0 | ||
|
|
03febdf0d4 | ||
|
|
46cd30d54c | ||
|
|
a63048a9df | ||
|
|
4c03587cab | ||
|
|
7a2b3b5ac0 | ||
|
|
0f1fa0f895 | ||
|
|
ef19d696fa | ||
|
|
1075039798 | ||
|
|
94b9b965d1 | ||
|
|
b16e35dcfa | ||
|
|
c8ae67b735 |
9
.eslintrc
Normal file
9
.eslintrc
Normal file
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"extends": [
|
||||
"eslint:recommended",
|
||||
"plugin:node/recommended"
|
||||
],
|
||||
"parserOptions": {
|
||||
"sourceType": "module"
|
||||
}
|
||||
}
|
||||
2
.gitignore
vendored
Normal file → Executable file
2
.gitignore
vendored
Normal file → Executable file
@@ -1,3 +1,3 @@
|
||||
*.log
|
||||
node_modules/
|
||||
*.txt
|
||||
urls.txt
|
||||
|
||||
10
README.md
Normal file → Executable file
10
README.md
Normal file → Executable file
@@ -43,6 +43,16 @@ $ npm test
|
||||
|
||||
## Release Notes
|
||||
|
||||
- ```1.0.3```
|
||||
- Update [minimist](https://www.npmjs.com/package/minimist) to `^1.2.2`
|
||||
- ```1.0.2```
|
||||
- Update [acorn](https://www.npmjs.com/package/acorn) to `^6.4.1`
|
||||
- ```1.0.0```
|
||||
- Release
|
||||
- ```0.1.0```
|
||||
- Add the new API-Usage from [decrypt-dlc](https://github.com/sydev/decrypt-dlc)
|
||||
- Add more endpoints
|
||||
- Add more test cases
|
||||
- ```0.0.1``` - Initial Release
|
||||
|
||||
## Related
|
||||
|
||||
@@ -1,27 +1,43 @@
|
||||
#! /usr/bin/env node
|
||||
#!/usr/bin/env node
|
||||
|
||||
const decrypt = require('decrypt-dlc');
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
const fs = require('fs-extra');
|
||||
const isFile = require('is-file');
|
||||
const isUrl = require('is-url');
|
||||
const path = require('path');
|
||||
const program = require('commander');
|
||||
const signale = require('signale');
|
||||
|
||||
|
||||
program
|
||||
.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'))
|
||||
.parse(process.argv);
|
||||
.parse(process.argv);
|
||||
|
||||
/**
|
||||
* Check if a filepath has an allowed extension. Allowed are `.dlc`, `.ccf` and `.rsdf`.
|
||||
* @param {String} filepath The filepath to check
|
||||
* @returns {Boolean}
|
||||
*/
|
||||
const hasAllowedExtension = (filepath = '') => ['.dlc', '.ccf', '.rsdf'].indexOf(path.extname(filepath)) > -1;
|
||||
|
||||
const run = async () => {
|
||||
const filepath = path.isAbsolute(program.output) ? program.output : path.resolve(process.cwd(), program.output);
|
||||
const input = program.args[0];
|
||||
|
||||
decrypt(program.args[0], (err, content) => {
|
||||
let urls = null;
|
||||
let links = [];
|
||||
|
||||
if (content.hasOwnProperty('success')) {
|
||||
urls = content.success.links.slice(1).join('\n');
|
||||
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);
|
||||
}
|
||||
};
|
||||
|
||||
fs.writeFile(program.output, urls, (err) => {
|
||||
if (err) throw err;
|
||||
console.log(`Successfully stored urls in ${program.output}`);
|
||||
});
|
||||
}
|
||||
});
|
||||
run();
|
||||
|
||||
41
package.json
Normal file → Executable file
41
package.json
Normal file → Executable file
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "decrypt-dlc-cli",
|
||||
"version": "0.0.1",
|
||||
"version": "1.0.3",
|
||||
"description": "",
|
||||
"main": "lib/index.js",
|
||||
"bin": {
|
||||
@@ -9,22 +9,41 @@
|
||||
"scripts": {
|
||||
"test": "ava"
|
||||
},
|
||||
"keywords": [],
|
||||
"keywords": [
|
||||
"dlc",
|
||||
"DLC",
|
||||
"decrypt",
|
||||
"read",
|
||||
"download",
|
||||
"container",
|
||||
"links",
|
||||
"url",
|
||||
"cli",
|
||||
"command",
|
||||
"line"
|
||||
],
|
||||
"author": "Dominik Winter <dominik.winter92@gmail.com>",
|
||||
"license": "MIT",
|
||||
"eslintConfig": {
|
||||
"parserOptions": {
|
||||
"ecmaVersion": 7,
|
||||
"sourceType": "module"
|
||||
}
|
||||
"engines": {
|
||||
"node": ">=10.0.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"commander": "^2.9.0",
|
||||
"decrypt-dlc": "^0.0.1"
|
||||
"commander": "^2.20.0",
|
||||
"decrypt-dlc": "^2.0.0",
|
||||
"fs-extra": "^8.0.1",
|
||||
"is-file": "^1.0.0",
|
||||
"is-url": "^1.2.4",
|
||||
"signale": "^1.4.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"ava": "^0.17.0",
|
||||
"execa": "^0.5.0"
|
||||
"ava": "^2.0.0",
|
||||
"eslint": "^5.16.0",
|
||||
"eslint-plugin-node": "^9.1.0",
|
||||
"execa": "^1.0.0"
|
||||
},
|
||||
"resolutions": {
|
||||
"acorn": "^6.4.1",
|
||||
"minimist": "^1.2.2"
|
||||
},
|
||||
"ava": {
|
||||
"files": [
|
||||
|
||||
0
test/test.dlc
Normal file → Executable file
0
test/test.dlc
Normal file → Executable file
45
test/test.js
Normal file → Executable file
45
test/test.js
Normal file → Executable file
@@ -1,7 +1,46 @@
|
||||
import test from 'ava';
|
||||
import execa from 'execa';
|
||||
|
||||
test('decrypt', async t => {
|
||||
const dlc = await execa('bin/decrypt-dlc', ['test/test.dlc', '-o', 'test/urls.txt']);
|
||||
t.regex(dlc.stdout, /Successfully/);
|
||||
const BIN_FILE = 'bin/decrypt-dlc';
|
||||
const TEST_FILE = '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_CONTAINER_CORRUPTED = 'https://raw.githubusercontent.com/sydev/decrypt-dlc/master/test/test_corrupted.dlc'
|
||||
const TEST_OUTPUT = 'test/urls.txt';
|
||||
|
||||
|
||||
// decrypt local file
|
||||
test('decrypt local file', async t => {
|
||||
const dlc = await execa(BIN_FILE, [TEST_FILE]);
|
||||
t.regex(dlc.stdout, /Urls stored at /);
|
||||
});
|
||||
|
||||
test('decrypt local file with ouput parameter', async t => {
|
||||
const dlc = await execa(BIN_FILE, [TEST_FILE, '-o', TEST_OUTPUT]);
|
||||
t.regex(dlc.stdout, /Urls stored at /);
|
||||
});
|
||||
|
||||
|
||||
// decrypt remote container
|
||||
test('decrypt remote container', async t => {
|
||||
const dlc = await execa(BIN_FILE, [TEST_CONTAINER]);
|
||||
t.regex(dlc.stdout, /Urls stored at /);
|
||||
});
|
||||
|
||||
test('decrypt remote container with output parameter', async t => {
|
||||
const dlc = await execa(BIN_FILE, [TEST_CONTAINER, '-o', TEST_OUTPUT]);
|
||||
t.regex(dlc.stdout, /Urls stored at /);
|
||||
});
|
||||
|
||||
|
||||
// decrypt corrupted local file
|
||||
test('decrypt corrupted local file', async t => {
|
||||
const { stdout } = await execa(BIN_FILE, [TEST_FILE_CORRUPTED]);
|
||||
t.regex(stdout, /fatal/);
|
||||
});
|
||||
|
||||
// decrypt corrupted remote container
|
||||
test('decrypt corrupted remote file', async t => {
|
||||
const { stdout } = await execa(BIN_FILE, [TEST_CONTAINER_CORRUPTED]);
|
||||
t.regex(stdout, /fatal/);
|
||||
});
|
||||
|
||||
1
test/test_corrupted.dlc
Executable file
1
test/test_corrupted.dlc
Executable file
@@ -0,0 +1 @@
|
||||
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
|
||||
1
test/test_corrupted.txt
Executable file
1
test/test_corrupted.txt
Executable file
@@ -0,0 +1 @@
|
||||
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
|
||||
Reference in New Issue
Block a user