diff --git a/indexer.py b/indexer.py index 0e9fa39..ec66e1b 100644 --- a/indexer.py +++ b/indexer.py @@ -15,33 +15,48 @@ LANGUAGES = ['en', 'de'] settings = None -def get_categories(): - cats = settings["categories"] - for c in cats: - c["label"] = str(lazy_gettext(c["label"])) - for s in c["subcategories"]: - s["label"] = str(lazy_gettext(s["label"])) - return cats + +class Categories(): + def __init__(self): + + self.categories = settings["categories"] + for c in self.categories: + c["label"] = str(lazy_gettext(c["label"])) + for s in c["subcategories"]: + s["label"] = str(lazy_gettext(s["label"])) + + def find(self, category, subcategory = None): + cat_name = "" + sub_name = "" + for cat in self.categories: + if cat["id"] == category: + cat_name = cat["label"] + if subcategory != None: + for sub in cat["subcategories"]: + if sub["id"] == subcategory: + sub_name = sub["label"] + return (cat_name, sub_name) + @app.route("/") def index(): - return render_template("search.html", categories=get_categories()) + return render_template("search.html", categories=categories.categories) @app.route("/categories") def categorys(): - return render_template("categories.html", categories=get_categories()) + return render_template("categories.html", categories=categories.categories) @app.route("/create", methods=['GET','POST']) def create(): if request.method == "GET": - return render_template("create.html", categories=get_categories(), errors=None) + return render_template("create.html", categories=categories.categories, errors=None) elif request.method == "POST": newTorrent = createNewTorrent(request) if len(newTorrent.errors) == 0: message = _("Successfully created torrent {}").format(newTorrent.fileid, newTorrent.fileid[:-20]) - return render_template("create.html", categories=get_categories(), messages=[message]) + return render_template("create.html", categories=categories.categories, messages=[message]) else: - return render_template("create.html", categories=get_categories(), errors=newTorrent.errors) + return render_template("create.html", categories=categories.categories, errors=newTorrent.errors) @app.route("/download/") def download(filename): @@ -86,17 +101,17 @@ def search(): r = row[0:2] + (size(float(row[2])) , ) + row[3:] results.append(r) - return render_template("result.html", results=results, categories=get_categories()) + return render_template("result.html", results=results, categories=categories.categories) @app.route("/details", methods=['GET']) def details(): info_hash = request.args["h"] tf = TorrentFile(fileid=info_hash) tf.fromDb() - return render_template("details.html", categories=get_categories(), torrent=tf) + return render_template("details.html", categories=categories.categories, torrent=tf) def scrapeAll(): - TRACKER_URL = "http://tracker.lootbox.cf:6969/" + TRACKER_URL = "" statedump = requests.get(TRACKER_URL + "stats" + "?mode=statedump") return @@ -106,6 +121,8 @@ def init(): with open("settings.json") as settingsJson: settings = json.load(settingsJson) initDb() + global categories + categories = Categories() #scrapeAll() def initDb(): @@ -142,10 +159,11 @@ def createNewTorrent(reuqest): is_ours = False for a in announce: - if a in [b'udp://tracker.lootbox.cf:6969/announce', b'udp://tracker.lootbox.cf:6969/announce/',b'udp://tracker.lootbox.cf/announce',b'udp://tracker.lootbox.cf/announce/']: + a = a.decode("utf-8", "ignore") + if a in settings["valid_tracker"]: is_ours = True break - + if not is_ours: newTFile.errors = ["Rejecting torrent {}, as it does not use our tracker".format(info_hash, info_hash[:-20])] return newTFile @@ -195,13 +213,13 @@ class Metadata(): return self.fileid = fileid self.bcoded = bencoder.decode(torrent) - self.created_by = self.bcoded.get(b'created by', b"") - self.creation_date = self.bcoded.get(b'creation date', b"") + self.created_by = self.bcoded.get(b'created by', b"").decode("utf-8", "ignore") + self.creation_date = self.bcoded.get(b'creation date', b"").decode("utf-8", "ignore") self.announce_url = self.bcoded.get(b'info', dict()).get(b'', "") self.source = self.bcoded.get(b'info', dict()).get(b'source', b"") self.torrentsize = ((len(self.bcoded.get(b'info', dict()).get(b'pieces', "")) / 20) * self.bcoded.get(b'info', dict()).get(b'piece length')) self.torrentsize_human = size(self.torrentsize) - self.name = self.bcoded.get(b'info', dict()).get(b'name', b"") + self.name = self.bcoded.get(b'info', dict()).get(b'name', b"").decode("utf-8", "ignore") self.private = self.bcoded.get(b'info', dict()).get(b'private', b"") def writeToDb(self, cursor): @@ -256,6 +274,7 @@ class TorrentFile(): self.name = (base64.b64decode(res["name"])).decode() self.category = res["category"] self.subcategory = res["subcategory"] + self.category_string, self.subcategory_string = categories.find(int(self.category), int(self.subcategory)) self.description = (base64.b64decode(res["description"])).decode() self.audioquality_description = (base64.b64decode(res["audioquality_description"])).decode() self.videoquality_description = (base64.b64decode(res["videoquality_description"])).decode() @@ -269,6 +288,6 @@ if __name__ == "__main__": init() app.jinja_env.globals.update(json=json) app.jinja_env.globals.update(sorted=sorted) - app.run(debug=True, host="127.0.0.1") + app.run(debug=False, host="127.0.0.1") # vim: set ts=2 sts=2 sw=2 noexpandtab: diff --git a/settings.json b/settings.json index 8463f41..6997ccb 100644 --- a/settings.json +++ b/settings.json @@ -184,6 +184,11 @@ } ] } + ], + + "valid_tracker" : [ + "udp://tracker.lootbox.cf:6969/announce", + "udp://tracker.lootbox.cf:6969/announce/" ] } diff --git a/templates/details.html b/templates/details.html index 1efcb6a..b7aff67 100644 --- a/templates/details.html +++ b/templates/details.html @@ -8,7 +8,7 @@ vim: ts=2 noexpandtab
-

{{ torrent.category }} » {{ torrent.subcategory}} » {{ torrent.name }}

+

{{ torrent.category_string }} » {{ torrent.subcategory_string }} » {{ torrent.name }}

.torrent-file: