diff --git a/index.html b/index.html index c906a83a..5528664d 100644 --- a/index.html +++ b/index.html @@ -38,7 +38,7 @@
$DESCRIPTION
iTunes search disabled. No plist server configured.
+ Configure now +No iTunes results.
'; return; } const info = obj.results[0]; @@ -207,10 +212,10 @@ function randomIPA(specificId) { var imgStr = ''; if (imgs1 && imgs1.length > 0) { - imgStr += 'iPhone Screenshots:
' + urlsToImgs(imgs1); + imgStr += 'iPhone Screenshots:
' + urlsToImgs(redirectUrl, imgs1); } if (imgs2 && imgs2.length > 0) { - imgStr += 'iPad Screenshots:
' + urlsToImgs(imgs2); + imgStr += 'iPad Screenshots:
' + urlsToImgs(redirectUrl, imgs2); } output.innerHTML += renderTemplate(getTemplate('.itunes'), { @@ -386,7 +391,7 @@ function setPlistGen() { alert('Server did not respond with a Plist file.'); return; } - plistGeneratorUrl = testURL; + plistServerUrl = testURL; document.getElementById('overlay').hidden = true; saveConfig(); }); @@ -400,8 +405,8 @@ function utoa(data) { return btoa(unescape(encodeURIComponent(data))); } -function installIpa(idx) { - if (!plistGeneratorUrl) { +function installIPA(idx) { + if (!plistServerUrl) { document.getElementById('overlay').hidden = false; return; } @@ -423,7 +428,7 @@ function installIpa(idx) { while (b64.slice(-1) === '=') { b64 = b64.slice(0, -1); } - // window.open(plistGeneratorUrl + '?d=' + b64); - const plistUrl = plistGeneratorUrl + '%3Fd%3D' + b64; // url encoded "?d=" + // window.open(plistServerUrl + '?d=' + b64); + const plistUrl = plistServerUrl + '%3Fd%3D' + b64; // url encoded "?d=" window.open('itms-services://?action=download-manifest&url=' + plistUrl); } diff --git a/style.css b/style.css index ad8223b0..ffa21848 100644 --- a/style.css +++ b/style.css @@ -83,7 +83,7 @@ h4 { margin-left: 8px; } .itunes { - max-width: 600px; + max-width: 650px; margin: 40px auto; } .carousel { @@ -99,6 +99,10 @@ h4 { .itunes p { white-space: pre-wrap; } +.no-itunes { + color: #777; + text-align: center; +} /* Pagination */ .shortpage { diff --git a/tools/plist_server.py b/tools/plist_server.py index d153223a..83b87394 100755 --- a/tools/plist_server.py +++ b/tools/plist_server.py @@ -1,5 +1,6 @@ #!/usr/bin/env python3 from http.server import BaseHTTPRequestHandler, HTTPServer +from urllib.request import urlopen from base64 import b64decode import socket import json @@ -24,20 +25,38 @@ def generatePlist(data: dict) -> str: class PlistServer(BaseHTTPRequestHandler): - def do_GET(self): - try: - b64 = self.path.split('?d=')[-1] + '==' - data = json.loads(b64decode(b64)) # type: dict - rv = generatePlist(data) - except Exception as e: - print(e) - rv = '' + def makeHeader(self, contentType): self.send_response(200) self.send_header('Access-Control-Allow-Origin', '*') - if rv: - self.send_header('Content-type', 'application/xml') + if contentType: + self.send_header('Content-type', contentType) self.end_headers() - self.wfile.write(bytes(rv, 'utf-8') if rv else b'Parsing error') + + def do_GET(self): + try: + action, value = self.path.split('?', 1)[-1].split('=', 1) + if action == 'r': + # http.client.HTTPResponse + with urlopen(value) as response: + mimeType = response.headers.get('Content-Type') + self.makeHeader(mimeType) + + while True: + tmp = response.read(8096) + if not tmp: + break + self.wfile.write(tmp) + + elif action == 'd': + data = json.loads(b64decode(value + '==')) # type: dict + rv = bytes(generatePlist(data), 'utf-8') + self.makeHeader('application/xml') + self.wfile.write(rv) + + else: + return + except Exception as e: + print(e) def getLocalIp(): diff --git a/tools/plist_server/index.php b/tools/plist_server/index.php index f1df1fc9..5437a9ec 100644 --- a/tools/plist_server/index.php +++ b/tools/plist_server/index.php @@ -1,9 +1,12 @@ u) { - header('Content-Type: application/xml'); - echo ' +if ($_GET['r']) { + echo stream_get_contents(fopen($_GET['r'], "rb")); +} elseif ($_GET['d']) { + $X = json_decode(base64_decode($_GET['d'])); + if ($X->u) { + header('Content-Type: application/xml'); + echo '