This commit is contained in:
norohind 2022-10-26 13:14:22 +03:00
commit bf8958d006
Signed by: norohind
GPG Key ID: 01C3BECC26FB59E1
4 changed files with 124 additions and 0 deletions

3
.gitignore vendored Normal file
View File

@ -0,0 +1,3 @@
.idea
intercepts
venv

39
deduplication.py Normal file
View File

@ -0,0 +1,39 @@
from pathlib import Path
from collections import defaultdict
BASE_PATH = 'intercepts'
# As cron record:
# zstd --rm -z intercepts/*/*.json 2>&1 | grep -v "No such file or directory -- ignored" && python3 deduplication.py
def take_hash_from_name(name: str) -> str:
return name.split('.')[2]
def remove_unique(files: dict[str, list[Path]]):
for file_hash in tuple(files.keys()):
files_list = files[file_hash]
if len(files_list) == 1:
del files[file_hash]
def main():
for host_name in Path(BASE_PATH).iterdir():
if host_name.is_dir():
files: dict[str, list[Path]] = defaultdict(list)
for intercept_file in host_name.iterdir():
if intercept_file.is_file():
file_hash = take_hash_from_name(intercept_file.name)
files[file_hash].append(intercept_file)
remove_unique(files)
for duplicated_files in files.values():
for file in duplicated_files[1:]:
print(f'Removing {file.name}')
file.unlink()
if __name__ == '__main__':
main()

51
tm_intercept_script.js Normal file
View File

@ -0,0 +1,51 @@
// ==UserScript==
// @name XHR Requests logger
// @namespace http://tampermonkey.net/
// @version 0.2
// @description None
// @author None
// @match https://myshows.me/*
// @icon data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
// @grant none
// ==/UserScript==
(function() {
'use strict';
(function(open) {
XMLHttpRequest.prototype.open = function() {
this.addEventListener("load", function() {
if (!this.responseURL.includes('/rpc/')) {
return;
}
// Request body
// Response body
// Status code
// Endpoint
// Method
const request = {
"host": document.location.host,
"status_code": this.status,
"endpoint": this.responseURL,
"method": this.__sentry_xhr__.method,
"request_body": this.__sentry_xhr__.body,
"response_body": this.response
};
// console.log(this.responseURL, this.response, this.status);
// console.log(this)
// console.log(JSON.stringify(request))
let xhr = new XMLHttpRequest();
xhr.open("POST", "https://specify.domain/upload");
xhr.setRequestHeader("Accept", "application/json");
xhr.setRequestHeader("Content-Type", "application/json");
xhr.send(JSON.stringify(request));
}, false);
open.apply(this, arguments);
};
})(XMLHttpRequest.prototype.open);
})();

31
web_log_server.py Normal file
View File

@ -0,0 +1,31 @@
import falcon
from pathlib import Path
from datetime import datetime
import hashlib
import json
class Upload:
def on_post(self, req: falcon.request.Request, resp: falcon.response.Response):
resp.status = falcon.HTTP_OK
content = req.bounded_stream.read()
json_content = json.loads(content)
hostname = json_content['host']
content_hash = hashlib.md5(content).hexdigest()
file_path = Path('intercepts').joinpath(hostname)
file_path.mkdir(exist_ok=True, parents=True)
filename = file_path.joinpath(f'{datetime.now().isoformat().replace(":", "-")}.{content_hash}.json')
with open(filename, mode='bw') as file:
file.write(content)
application = falcon.App(cors_enable=True)
application.add_route('/upload', Upload())
if __name__ == '__main__':
import waitress
waitress.serve(application, host='127.0.0.1', port=3241)