From a63a376ad2dba93bc2028498f54f4e9f05e07214 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mike=20F=C3=A4hrmann?= Date: Sun, 8 Mar 2020 23:01:51 +0100 Subject: [PATCH] [mangoxo] fix login --- gallery_dl/extractor/hentainexus.py | 2 +- gallery_dl/extractor/mangoxo.py | 35 +++++++++++++++++------------ test/test_results.py | 3 --- 3 files changed, 22 insertions(+), 18 deletions(-) diff --git a/gallery_dl/extractor/hentainexus.py b/gallery_dl/extractor/hentainexus.py index 193cadf9..ad97eba4 100644 --- a/gallery_dl/extractor/hentainexus.py +++ b/gallery_dl/extractor/hentainexus.py @@ -22,7 +22,7 @@ class HentainexusGalleryExtractor(GalleryExtractor): test = ( ("https://hentainexus.com/view/5688", { "url": "746d0043e20030f1171aae5ea113176607302517", - "keyword": "c1b7091e2bc2f733f6401711e072ad11cf93dd69", + "keyword": "77702b42f8f76ecfe5d8a14cfbbcbd855eb14d7f", }), ("https://hentainexus.com/read/5688"), ) diff --git a/gallery_dl/extractor/mangoxo.py b/gallery_dl/extractor/mangoxo.py index 114a48ea..8cd7fa53 100644 --- a/gallery_dl/extractor/mangoxo.py +++ b/gallery_dl/extractor/mangoxo.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- -# Copyright 2019 Mike Fährmann +# Copyright 2019-2020 Mike Fährmann # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as @@ -12,6 +12,7 @@ from .common import Extractor, Message from .. import text, exception from ..cache import cache import hashlib +import time class MangoxoExtractor(Extractor): @@ -35,27 +36,33 @@ class MangoxoExtractor(Extractor): def _login_impl(self, username, password): self.log.info("Logging in as %s", username) - page = self.request(self.root + "/login/").text - token = text.extract(page, 'id="loginToken" value="', '"')[0] - if not token: - self.log.debug("failed to extract 'loginToken'") - - url = self.root + "/login/loginxmm" + url = self.root + "/api/login" headers = { "X-Requested-With": "XMLHttpRequest", "Referer": self.root + "/login", } - data = { - "name": username, - "password": hashlib.md5(password.encode()).hexdigest(), - "loginToken": token, - } + data = self._sign_by_md5(username, password) response = self.request(url, method="POST", headers=headers, data=data) - if response.json().get("result") != "1": - raise exception.AuthenticationError() + data = response.json() + if str(data.get("result")) != "1": + raise exception.AuthenticationError(data.get("msg")) return {"SESSION": self.session.cookies.get("SESSION")} + @staticmethod + def _sign_by_md5(username, password): + # https://dns.mangoxo.com/libs/plugins/phoenix-ui/js/phoenix-ui.js + params = [ + ("username" , username), + ("password" , password), + ("timestamp", str(int(time.time()))), + ] + query = "&".join("=".join(item) for item in sorted(params)) + query += "&secretKey=996293536" + sign = hashlib.md5(query.encode()).hexdigest() + params.append(("sign", sign.upper())) + return params + @staticmethod def _total_pages(page): return text.parse_int(text.extract(page, "total :", ",")[0]) diff --git a/test/test_results.py b/test/test_results.py index 91f0b069..02f01c82 100644 --- a/test/test_results.py +++ b/test/test_results.py @@ -28,10 +28,7 @@ TRAVIS_SKIP = { # temporary issues, etc. BROKEN = { "35photo", - "dokireader", - "furaffinity", "mangapark", - "mangoxo", "photobucket", }