From a10574f8057099d72ec037a1e10817bc5d6c1c8a Mon Sep 17 00:00:00 2001 From: morpheus65535 Date: Thu, 7 Dec 2017 20:03:32 -0500 Subject: [PATCH] Providers authentication implementation --- bazarr.py | 38 +++++++++++++++---- get_subtitle.py | 50 +++++++++++++++++++------ views/settings.tpl | 93 +++++++++++++++++++++++++++++++++++++++++----- 3 files changed, 153 insertions(+), 28 deletions(-) diff --git a/bazarr.py b/bazarr.py index a29123562..775b04d4c 100644 --- a/bazarr.py +++ b/bazarr.py @@ -21,7 +21,7 @@ from fdsend import send_file import urllib from init_db import * -from update_db import * +import update_db from get_languages import * from get_providers import * @@ -278,11 +278,22 @@ def save_settings(): settings_sonarr_ssl = 'True' settings_sonarr_apikey = request.forms.get('settings_sonarr_apikey') c.execute("UPDATE table_settings_sonarr SET ip = ?, port = ?, base_url = ?, ssl = ?, apikey = ?", (settings_sonarr_ip, settings_sonarr_port, settings_sonarr_baseurl, settings_sonarr_ssl, settings_sonarr_apikey)) - + settings_subliminal_providers = request.forms.getall('settings_subliminal_providers') c.execute("UPDATE table_settings_providers SET enabled = 0") for item in settings_subliminal_providers: c.execute("UPDATE table_settings_providers SET enabled = '1' WHERE name = ?", (item,)) + + settings_addic7ed_username = request.forms.get('settings_addic7ed_username') + settings_addic7ed_password = request.forms.get('settings_addic7ed_password') + c.execute("UPDATE table_settings_providers SET username = ?, password = ? WHERE name = 'addic7ed'", (settings_addic7ed_username, settings_addic7ed_password)) + settings_legendastv_username = request.forms.get('settings_legendastv_username') + settings_legendastv_password = request.forms.get('settings_legendastv_password') + c.execute("UPDATE table_settings_providers SET username = ?, password = ? WHERE name = 'legendastv'", (settings_legendastv_username, settings_legendastv_password)) + settings_opensubtitles_username = request.forms.get('settings_opensubtitles_username') + settings_opensubtitles_password = request.forms.get('settings_opensubtitles_password') + c.execute("UPDATE table_settings_providers SET username = ?, password = ? WHERE name = 'opensubtitles'", (settings_opensubtitles_username, settings_opensubtitles_password)) + settings_subliminal_languages = request.forms.getall('settings_subliminal_languages') c.execute("UPDATE table_settings_languages SET enabled = 0") for item in settings_subliminal_languages: @@ -451,16 +462,29 @@ def get_subtitle(): db = sqlite3.connect(os.path.join(os.path.dirname(__file__), 'data/db/bazarr.db'), timeout=30) c = db.cursor() - c.execute("SELECT name FROM table_settings_providers WHERE enabled = 1") - providers = c.fetchall() + c.execute("SELECT * FROM table_settings_providers WHERE enabled = 1") + enabled_providers = c.fetchall() c.close() providers_list = [] - for provider in providers: - providers_list.append(provider[0]) + providers_auth = {} + if len(enabled_providers) > 0: + for provider in enabled_providers: + providers_list.append(provider[0]) + try: + if provider[2] is not '' and provider[3] is not '': + provider_auth = providers_auth.append(provider[0]) + provider_auth.update({'username':providers[2], 'password':providers[3]}) + else: + providers_auth = None + except: + providers_auth = None + else: + providers_list = None + providers_auth = None try: - result = download_subtitle(episodePath, language, hi, providers_list) + result = download_subtitle(episodePath, language, hi, providers_list, providers_auth) if result is not None: history_log(1, sonarrSeriesId, sonarrEpisodeId, result) store_subtitles(episodePath) diff --git a/get_subtitle.py b/get_subtitle.py index 65a26def6..8bad809c1 100644 --- a/get_subtitle.py +++ b/get_subtitle.py @@ -15,9 +15,9 @@ if os.name == 'nt': else: region.configure('dogpile.cache.dbm', arguments={'filename': os.path.join(os.path.dirname(__file__), 'data/cache/cachefile.dbm')}) -def download_subtitle(path, language, hi, providers): +def download_subtitle(path, language, hi, providers, providers_auth): video = scan_video(path) - best_subtitles = download_best_subtitles([video], {Language(language)}, providers=providers, hearing_impaired=hi) + best_subtitles = download_best_subtitles([video], {Language(language)}, providers=providers, hearing_impaired=hi, provider_configs=providers_auth) try: best_subtitle = best_subtitles[video][0] @@ -31,20 +31,33 @@ def download_subtitle(path, language, hi, providers): return None def series_download_subtitles(no): - conn_db = sqlite3.connect(os.path.join(os.path.dirname(__file__), 'data/db/bazarr.db'), tmieout=30) + conn_db = sqlite3.connect(os.path.join(os.path.dirname(__file__), 'data/db/bazarr.db'), timeout=30) c_db = conn_db.cursor() episodes_details = c_db.execute("SELECT path, missing_subtitles, sonarrEpisodeId FROM table_episodes WHERE sonarrSeriesId = ?", (no,)).fetchall() series_details = c_db.execute("SELECT hearing_impaired FROM table_shows WHERE sonarrSeriesId = ?", (no,)).fetchone() - enabled_providers = c_db.execute("SELECT name FROM table_settings_providers WHERE enabled = 1").fetchall() + enabled_providers = c_db.execute("SELECT * FROM table_settings_providers WHERE enabled = 1").fetchall() c_db.close() providers_list = [] - for provider in enabled_providers: - providers_list.append(provider[0]) + providers_auth = {} + if len(enabled_providers) > 0: + for provider in enabled_providers: + providers_list.append(provider[0]) + try: + if provider[2] is not '' and provider[3] is not '': + provider_auth = providers_auth.append(provider[0]) + provider_auth.update({'username':providers[2], 'password':providers[3]}) + else: + providers_auth = None + except: + providers_auth = None + else: + providers_list = None + providers_auth = None for episode in episodes_details: for language in ast.literal_eval(episode[1]): - message = download_subtitle(path_replace(episode[0]), str(pycountry.languages.lookup(language).alpha_3), series_details[0], providers_list) + message = download_subtitle(path_replace(episode[0]), str(pycountry.languages.lookup(language).alpha_3), series_details[0], providers_list, providers_auth) if message is not None: store_subtitles(path_replace(episode[0])) history_log(1, no, episode[2], message) @@ -54,16 +67,29 @@ def wanted_download_subtitles(path): conn_db = sqlite3.connect(os.path.join(os.path.dirname(__file__), 'data/db/bazarr.db'), timeout=30) c_db = conn_db.cursor() episodes_details = c_db.execute("SELECT table_episodes.path, table_episodes.missing_subtitles, table_episodes.sonarrEpisodeId, table_episodes.sonarrSeriesId, table_shows.hearing_impaired FROM table_episodes INNER JOIN table_shows on table_shows.sonarrSeriesId = table_episodes.sonarrSeriesId WHERE table_episodes.path = ? AND missing_subtitles != '[]'", (path_replace_reverse(path),)).fetchall() - enabled_providers = c_db.execute("SELECT name FROM table_settings_providers WHERE enabled = 1").fetchall() + enabled_providers = c_db.execute("SELECT * FROM table_settings_providers WHERE enabled = 1").fetchall() c_db.close() providers_list = [] - for provider in enabled_providers: - providers_list.append(provider[0]) + providers_auth = {} + if len(enabled_providers) > 0: + for provider in enabled_providers: + providers_list.append(provider[0]) + try: + if provider[2] is not '' and provider[3] is not '': + provider_auth = providers_auth.append(provider[0]) + provider_auth.update({'username':providers[2], 'password':providers[3]}) + else: + providers_auth = None + except: + providers_auth = None + else: + providers_list = None + providers_auth = None for episode in episodes_details: for language in ast.literal_eval(episode[1]): - message = download_subtitle(path_replace(episode[0]), str(pycountry.languages.lookup(language).alpha_3), episode[4], providers_list) + message = download_subtitle(path_replace(episode[0]), str(pycountry.languages.lookup(language).alpha_3), episode[4], providers_list, providers_auth) if message is not None: store_subtitles(path_replace(episode[0])) list_missing_subtitles(episode[3]) @@ -81,4 +107,4 @@ def wanted_search_missing_subtitles(): for episode in data: wanted_download_subtitles(episode[0]) - logging.info('Finished searching for missing subtitles. Check history for more information.') \ No newline at end of file + logging.info('Finished searching for missing subtitles. Check history for more information.') diff --git a/views/settings.tpl b/views/settings.tpl index 46a69d3ad..5528b273b 100644 --- a/views/settings.tpl +++ b/views/settings.tpl @@ -230,15 +230,6 @@ - -
-
- -
- -
@@ -337,6 +328,90 @@ + +
Providers authentication (optionnal)
+
+
+
+
+ +
+
+
+

Username

+
+
+
+
+

Password (stored in clear text)

+
+
+
+
+
+ +
+ %for provider in settings_providers: + % if provider[0] == 'addic7ed': + % addic7ed_username = provider[2] + % addic7ed_password = provider[3] + % end + %end +
+
+ +
+
+
+
+ +
+
+
+
+
+ +
+ %for provider in settings_providers: + % if provider[0] == 'legendastv': + % legendastv_username = provider[2] + % legendastv_password = provider[3] + % end + %end +
+
+ +
+
+
+
+ +
+
+
+
+
+ +
+ %for provider in settings_providers: + % if provider[0] == 'opensubtitles': + % opensubtitles_username = provider[2] + % opensubtitles_password = provider[3] + % end + %end +
+
+ +
+
+
+
+ +
+
+
+
+
Subtitles languages