Skip to content
This repository has been archived by the owner on Sep 17, 2019. It is now read-only.

Commit

Permalink
better fix kissmanga chko secret
Browse files Browse the repository at this point in the history
resolves #10
  • Loading branch information
pikax committed Jun 20, 2017
1 parent 9d241fe commit 3154376
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 28 deletions.
9 changes: 4 additions & 5 deletions src/sites/kissmanga/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,21 +20,20 @@ export class KissManga extends MangaSite<SiteConfig, Parser, Helper> implements
super(config, new Parser(), new Helper(), strategy);
}

private async getVM(): Promise<Script> {
private async getVM(secret: string): Promise<Script> {
let vm = this.parser.VM;
if (vm) {
if (vm && this.parser.secretAlgorithm === secret) {
return vm;
}

let tkCa = this.request.getHtml(resolve(this.config.site, "/Scripts/ca.js"));

let tkLo = this.request.getHtml(resolve(this.config.site, "/Scripts/lo.js"));
let tkLst = [tkCa
, tkLo];

let lst = await Promise.all(tkLst);

return this.parser.buildVM(lst[0], lst[1]);
return this.parser.buildVM(lst[0], lst[1], secret);
}

mangas(filter?: MangaFilter): Promise<MangaSource[]> {
Expand Down Expand Up @@ -72,7 +71,7 @@ export class KissManga extends MangaSite<SiteConfig, Parser, Helper> implements
let html = await this.getHtml(chapter.src);
let secret = this.parser.getSecret(html);

let vm = await this.getVM();
let vm = await this.getVM(secret);

let imgs = this.parser.imagesList(html, secret, vm);

Expand Down
38 changes: 16 additions & 22 deletions src/sites/kissmanga/parser.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,17 @@ import {
} from "../../declarations";
import {resolve} from "url";

import {config} from "./config";
import {config, debug} from "./config";
import {Script, createContext} from "vm";
import {unescape} from "querystring";
import {sanitize} from "../../common/helper";
import * as _ from "lodash";

export class Parser implements SiteParser {

get secretAlgorithm(): string {
return this._secretAlgorithm;
}
private _secretAlgorithm: string;
private _vm: Script;

private static fixNames: { [id: string]: string; } = {
Expand Down Expand Up @@ -77,27 +80,16 @@ export class Parser implements SiteParser {
/(?:\/)(\d+(-\d{1,3})?)/
];


let chapter = _.reduce(chapRegexes, (result, value) => {
return result || _.head(_.slice(src.match(value), 1, 2));
}, null);


// TODO resolve chapter number or type
if (!chapter) {
chapter = -7;
console.warn("couldn't resolve the chapter for '%s', please refer to %s", src , "https://github.com/pikax/gin-downloader/issues/7" );
}





// chapter = chapter.replace("-", ".");

// console.log(chapter)


chapters[i] = {
name: mangaName,
chap_number: chapter,
Expand Down Expand Up @@ -186,7 +178,6 @@ export class Parser implements SiteParser {
imagesList(html: string, secret: string, vm: Script): string[] {
let lstImages = html.getMatches(/wrapKA\("([^"]*)"/gm, 1);


const sandbox = {
lstImages,
imgs : Array<string>(),
Expand All @@ -200,11 +191,13 @@ export class Parser implements SiteParser {
}

getSecret(html: string): string {
let m = /\["([^"]*)"]; chko[^\[]*\[(\d+)]/gm.exec(html);
if (m) {
return m[1].decodeEscapeSequence();
let matches = [];
let m;
let regex = /(var (_[\da-z]*) = \["([^"]*)"]; chko =([^\[]*\[\d+][^;]*); [^)]*\))/gm;
while (m = regex.exec(html)) {
matches.push(m[1]);
}
return null;
return matches.join(";");
}

imagesPaths(doc: MangaXDoc): string[] {
Expand All @@ -219,16 +212,18 @@ export class Parser implements SiteParser {
return this._vm;
}

buildVM(cajs: string, lojs: string) {
buildVM(cajs: string, lojs: string, algorithm: string) {
let scripts = [cajs
, lojs
, "chko = (secret && chko + secret) || chko; key = CryptoJS.SHA256(chko);"
, algorithm
, "for (var img in lstImages) {" +
"imgs.push(wrapKA(lstImages[img]).toString())" +
"" +
"};"
];

debug("building vm with: %o", algorithm);
this._secretAlgorithm = algorithm;

return this._vm = new Script(scripts.join("\n"));
}

Expand All @@ -242,7 +237,6 @@ export class Parser implements SiteParser {
}



static ResolveChapterVolume(title: string): string {
if (title.indexOf("_vol") < 0)
return;
Expand Down
1 change: 0 additions & 1 deletion src/sites/mangafox/parser.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@ import * as url from "url";
import {config} from "./config";
import {sanitize} from "../../common/helper";
import {strategy} from "../../request/requestRetryStrategy";
import {ancestorWhere} from "tslint";


export class Parser implements SiteParser {
Expand Down

0 comments on commit 3154376

Please sign in to comment.