From fb3d930d1fec2cb87a0c9498cdff84c5a22200fe Mon Sep 17 00:00:00 2001 From: Fernando <fernandog@users.noreply.github.com> Date: Mon, 30 Nov 2015 08:41:34 -0200 Subject: [PATCH] Notify user when user log in SR --- gui/slick/views/config_general.mako | 10 ++++++++++ sickbeard/__init__.py | 6 +++++- sickbeard/common.py | 6 +++++- sickbeard/helpers.py | 7 +++++++ sickbeard/notifiers/__init__.py | 5 +++++ sickbeard/notifiers/boxcar2.py | 6 ++++++ sickbeard/notifiers/emailnotify.py | 3 +++ sickbeard/notifiers/freemobile.py | 6 ++++++ sickbeard/notifiers/growl.py | 6 ++++++ sickbeard/notifiers/kodi.py | 6 ++++++ sickbeard/notifiers/libnotify.py | 6 ++++++ sickbeard/notifiers/nma.py | 8 ++++++++ sickbeard/notifiers/nmj.py | 3 +++ sickbeard/notifiers/nmjv2.py | 3 +++ sickbeard/notifiers/plex.py | 7 +++++++ sickbeard/notifiers/prowl.py | 6 ++++++ sickbeard/notifiers/pushalot.py | 8 ++++++++ sickbeard/notifiers/pushbullet.py | 4 ++++ sickbeard/notifiers/pushover.py | 6 ++++++ sickbeard/notifiers/pytivo.py | 3 +++ sickbeard/notifiers/synoindex.py | 3 +++ sickbeard/notifiers/synologynotifier.py | 6 ++++++ sickbeard/notifiers/trakt.py | 3 +++ sickbeard/notifiers/tweet.py | 6 ++++++ sickbeard/webserve.py | 7 +++++-- 25 files changed, 136 insertions(+), 4 deletions(-) diff --git a/gui/slick/views/config_general.mako b/gui/slick/views/config_general.mako index f369fcce3..682614802 100644 --- a/gui/slick/views/config_general.mako +++ b/gui/slick/views/config_general.mako @@ -431,6 +431,16 @@ </label> </div> + <div class="field-pair"> + <label for="notify_on_login"> + <span class="component-title">Notify on login</span> + <span class="component-desc"> + <input type="checkbox" name="notify_on_login" class="enabler" id="notify_on_login" ${('', 'checked="checked"')[bool(sickbeard.NOTIFY_ON_LOGIN)]}/> + <p>enable to be notified when a new login happens in webserver</p> + </span> + </label> + </div> + <div class="field-pair"> <label for="web_ipv6"> <span class="component-title">Listen on IPv6</span> diff --git a/sickbeard/__init__.py b/sickbeard/__init__.py index dfe627411..8cd96b162 100644 --- a/sickbeard/__init__.py +++ b/sickbeard/__init__.py @@ -180,6 +180,7 @@ API_KEY = None API_ROOT = None ENABLE_HTTPS = False +NOTIFY_ON_LOGIN = False HTTPS_CERT = None HTTPS_KEY = None @@ -575,7 +576,7 @@ def initialize(consoleLogging=True): with INIT_LOCK: global BRANCH, GIT_RESET, GIT_REMOTE, GIT_REMOTE_URL, CUR_COMMIT_HASH, CUR_COMMIT_BRANCH, GIT_NEWVER, ACTUAL_LOG_DIR, LOG_DIR, LOG_NR, LOG_SIZE, WEB_PORT, WEB_LOG, ENCRYPTION_VERSION, ENCRYPTION_SECRET, WEB_ROOT, WEB_USERNAME, WEB_PASSWORD, WEB_HOST, WEB_IPV6, WEB_COOKIE_SECRET, WEB_USE_GZIP, API_KEY, ENABLE_HTTPS, HTTPS_CERT, HTTPS_KEY, \ - HANDLE_REVERSE_PROXY, USE_NZBS, USE_TORRENTS, NZB_METHOD, NZB_DIR, DOWNLOAD_PROPERS, RANDOMIZE_PROVIDERS, CHECK_PROPERS_INTERVAL, ALLOW_HIGH_PRIORITY, SAB_FORCED, TORRENT_METHOD, \ + HANDLE_REVERSE_PROXY, USE_NZBS, USE_TORRENTS, NZB_METHOD, NZB_DIR, DOWNLOAD_PROPERS, RANDOMIZE_PROVIDERS, CHECK_PROPERS_INTERVAL, ALLOW_HIGH_PRIORITY, SAB_FORCED, TORRENT_METHOD, NOTIFY_ON_LOGIN, \ SAB_USERNAME, SAB_PASSWORD, SAB_APIKEY, SAB_CATEGORY, SAB_CATEGORY_BACKLOG, SAB_CATEGORY_ANIME, SAB_CATEGORY_ANIME_BACKLOG, SAB_HOST, \ NZBGET_USERNAME, NZBGET_PASSWORD, NZBGET_CATEGORY, NZBGET_CATEGORY_BACKLOG, NZBGET_CATEGORY_ANIME, NZBGET_CATEGORY_ANIME_BACKLOG, NZBGET_PRIORITY, NZBGET_HOST, NZBGET_USE_HTTPS, backlogSearchScheduler, \ TORRENT_USERNAME, TORRENT_PASSWORD, TORRENT_HOST, TORRENT_PATH, TORRENT_SEED_TIME, TORRENT_PAUSED, TORRENT_HIGH_BANDWIDTH, TORRENT_LABEL, TORRENT_LABEL_ANIME, TORRENT_VERIFY_CERT, TORRENT_RPCURL, TORRENT_AUTH_TYPE, \ @@ -815,6 +816,8 @@ def initialize(consoleLogging=True): ENABLE_HTTPS = bool(check_setting_int(CFG, 'General', 'enable_https', 0)) + NOTIFY_ON_LOGIN = bool(check_setting_int(CFG, 'General', 'notify_on_login', 0)) + HTTPS_CERT = check_setting_str(CFG, 'General', 'https_cert', 'server.crt') HTTPS_KEY = check_setting_str(CFG, 'General', 'https_key', 'server.key') @@ -1688,6 +1691,7 @@ def save_config(): new_config['General']['debug'] = int(DEBUG) new_config['General']['default_page'] = DEFAULT_PAGE new_config['General']['enable_https'] = int(ENABLE_HTTPS) + new_config['General']['notify_on_login'] = int(NOTIFY_ON_LOGIN) new_config['General']['https_cert'] = HTTPS_CERT new_config['General']['https_key'] = HTTPS_KEY new_config['General']['handle_reverse_proxy'] = int(HANDLE_REVERSE_PROXY) diff --git a/sickbeard/common.py b/sickbeard/common.py index 731aaa848..3af49f8ce 100644 --- a/sickbeard/common.py +++ b/sickbeard/common.py @@ -78,13 +78,17 @@ NOTIFY_DOWNLOAD = 2 NOTIFY_SUBTITLE_DOWNLOAD = 3 NOTIFY_GIT_UPDATE = 4 NOTIFY_GIT_UPDATE_TEXT = 5 +NOTIFY_LOGIN = 6 +NOTIFY_LOGIN_TEXT = 7 notifyStrings = NumDict({ NOTIFY_SNATCH: "Started Download", NOTIFY_DOWNLOAD: "Download Finished", NOTIFY_SUBTITLE_DOWNLOAD: "Subtitle Download Finished", NOTIFY_GIT_UPDATE: "SickRage Updated", - NOTIFY_GIT_UPDATE_TEXT: "SickRage Updated To Commit#: " + NOTIFY_GIT_UPDATE_TEXT: "SickRage Updated To Commit#: ", + NOTIFY_LOGIN : "SickRage new login", + NOTIFY_LOGIN_TEXT : "New login from IP: {0}. http://geomaplookup.net/?ip={0}" }) # Episode statuses diff --git a/sickbeard/helpers.py b/sickbeard/helpers.py index 5aa6f95c1..4d86695a3 100644 --- a/sickbeard/helpers.py +++ b/sickbeard/helpers.py @@ -1757,3 +1757,10 @@ def getTVDBFromID(indexer_id, indexer): return tvdb_id else: return tvdb_id + +def is_ip_private(ip): + priv_lo = re.compile("^127\.\d{1,3}\.\d{1,3}\.\d{1,3}$") + priv_24 = re.compile("^10\.\d{1,3}\.\d{1,3}\.\d{1,3}$") + priv_20 = re.compile("^192\.168\.\d{1,3}.\d{1,3}$") + priv_16 = re.compile("^172.(1[6-9]|2[0-9]|3[0-1]).[0-9]{1,3}.[0-9]{1,3}$") + return priv_lo.match(ip) or priv_24.match(ip) or priv_20.match(ip) or priv_16.match(ip) diff --git a/sickbeard/notifiers/__init__.py b/sickbeard/notifiers/__init__.py index 4ed59e1f7..ab4472ec4 100644 --- a/sickbeard/notifiers/__init__.py +++ b/sickbeard/notifiers/__init__.py @@ -107,3 +107,8 @@ def notify_snatch(ep_name): def notify_git_update(new_version=""): for n in notifiers: n.notify_git_update(new_version) + + +def notify_login(ipaddress): + for n in notifiers: + n.notify_login(ipaddress) diff --git a/sickbeard/notifiers/boxcar2.py b/sickbeard/notifiers/boxcar2.py index 5bb79cd74..28fadc43e 100644 --- a/sickbeard/notifiers/boxcar2.py +++ b/sickbeard/notifiers/boxcar2.py @@ -104,6 +104,12 @@ class Boxcar2Notifier(object): title = notifyStrings[NOTIFY_GIT_UPDATE] self._notifyBoxcar2(title, update_text + new_version) + def notify_login(self, ipaddress=""): + if sickbeard.USE_BOXCAR2: + update_text = common.notifyStrings[common.NOTIFY_LOGIN_TEXT] + title = common.notifyStrings[common.NOTIFY_LOGIN] + self._notifyBoxcar2(title, update_text.format(ipaddress)) + def _notifyBoxcar2(self, title, message, accesstoken=None): """ Sends a boxcar2 notification based on the provided info or SB config diff --git a/sickbeard/notifiers/emailnotify.py b/sickbeard/notifiers/emailnotify.py index 34249c92d..ce8d4ead9 100644 --- a/sickbeard/notifiers/emailnotify.py +++ b/sickbeard/notifiers/emailnotify.py @@ -170,6 +170,9 @@ class EmailNotifier(object): def notify_git_update(self, new_version="??"): pass + def notify_login(self, ipaddress=""): + pass + def _generate_recipients(self, show): addrs = [] myDB = db.DBConnection() diff --git a/sickbeard/notifiers/freemobile.py b/sickbeard/notifiers/freemobile.py index dc040d819..bf9ac00b4 100644 --- a/sickbeard/notifiers/freemobile.py +++ b/sickbeard/notifiers/freemobile.py @@ -102,6 +102,12 @@ class FreeMobileNotifier(object): title = notifyStrings[NOTIFY_GIT_UPDATE] self._notifyFreeMobile(title, update_text + new_version) + def notify_login(self, ipaddress=""): + if sickbeard.USE_FREEMOBILE: + update_text = common.notifyStrings[common.NOTIFY_LOGIN_TEXT] + title = common.notifyStrings[common.NOTIFY_LOGIN] + self._notifyFreeMobile(title, update_text.format(ipaddress)) + def _notifyFreeMobile(self, title, message, cust_id=None, apiKey=None, force=False): """ Sends a SMS notification diff --git a/sickbeard/notifiers/growl.py b/sickbeard/notifiers/growl.py index a1a234c44..aa86c8aa6 100644 --- a/sickbeard/notifiers/growl.py +++ b/sickbeard/notifiers/growl.py @@ -52,6 +52,12 @@ class GrowlNotifier(object): title = common.notifyStrings[common.NOTIFY_GIT_UPDATE] self._sendGrowl(title, update_text + new_version) + def notify_login(self, ipaddress=""): + if sickbeard.USE_GROWL: + update_text = common.notifyStrings[common.NOTIFY_LOGIN_TEXT] + title = common.notifyStrings[common.NOTIFY_LOGIN] + self._sendGrowl(title, update_text.format(ipaddress)) + def _send_growl(self, options, message=None): # Send Notification diff --git a/sickbeard/notifiers/kodi.py b/sickbeard/notifiers/kodi.py index aeb35c7a8..2e9f36b02 100644 --- a/sickbeard/notifiers/kodi.py +++ b/sickbeard/notifiers/kodi.py @@ -531,6 +531,12 @@ class KODINotifier(object): title = common.notifyStrings[common.NOTIFY_GIT_UPDATE] self._notify_kodi(update_text + new_version, title) + def notify_login(self, ipaddress=""): + if sickbeard.USE_KODI: + update_text = common.notifyStrings[common.NOTIFY_LOGIN_TEXT] + title = common.notifyStrings[common.NOTIFY_LOGIN] + self._notify_kodi(update_text.format(ipaddress), title) + def test_notify(self, host, username, password): return self._notify_kodi("Testing KODI notifications from SickRage", "Test Notification", host, username, password, force=True) diff --git a/sickbeard/notifiers/libnotify.py b/sickbeard/notifiers/libnotify.py index ab4efff67..40a6c1c69 100644 --- a/sickbeard/notifiers/libnotify.py +++ b/sickbeard/notifiers/libnotify.py @@ -102,6 +102,12 @@ class LibnotifyNotifier(object): title = common.notifyStrings[common.NOTIFY_GIT_UPDATE] self._notify(title, update_text + new_version) + def notify_login(self, ipaddress=""): + if sickbeard.USE_LIBNOTIFY: + update_text = common.notifyStrings[common.NOTIFY_LOGIN_TEXT] + title = common.notifyStrings[common.NOTIFY_LOGIN] + self._notify(title, update_text.format(ipaddress)) + def test_notify(self): return self._notify('Test notification', "This is a test notification from SickRage", force=True) diff --git a/sickbeard/notifiers/nma.py b/sickbeard/notifiers/nma.py index d34e11089..ad5ea24d4 100644 --- a/sickbeard/notifiers/nma.py +++ b/sickbeard/notifiers/nma.py @@ -32,6 +32,14 @@ class NMA_Notifier(object): title = common.notifyStrings[common.NOTIFY_GIT_UPDATE] self._sendNMA(nma_api=None, nma_priority=None, event=title, message=update_text + new_version) + + def notify_login(self, ipaddress=""): + if sickbeard.USE_NMA: + update_text = common.notifyStrings[common.NOTIFY_LOGIN_TEXT] + title = common.notifyStrings[common.NOTIFY_LOGIN] + self._sendNMA(nma_api=None, nma_priority=None, event=title, message=update_text.format(ipaddress)) + + def _sendNMA(self, nma_api=None, nma_priority=None, event=None, message=None, force=False): title = 'SickRage' diff --git a/sickbeard/notifiers/nmj.py b/sickbeard/notifiers/nmj.py index 8b8be5144..47e8309f1 100644 --- a/sickbeard/notifiers/nmj.py +++ b/sickbeard/notifiers/nmj.py @@ -101,6 +101,9 @@ class NMJNotifier(object): return False # Not implemented, no reason to start scanner. + def notify_login(self, ipaddress=""): + return False + def test_notify(self, host, database, mount): return self._sendNMJ(host, database, mount) diff --git a/sickbeard/notifiers/nmjv2.py b/sickbeard/notifiers/nmjv2.py index a99b8c92f..9a4d57fdd 100644 --- a/sickbeard/notifiers/nmjv2.py +++ b/sickbeard/notifiers/nmjv2.py @@ -47,6 +47,9 @@ class NMJv2Notifier(object): return False # Not implemented, no reason to start scanner. + def notify_login(self, ipaddress=""): + return False + def test_notify(self, host): return self._sendNMJ(host) diff --git a/sickbeard/notifiers/plex.py b/sickbeard/notifiers/plex.py index 941b8223c..e0e0987b1 100644 --- a/sickbeard/notifiers/plex.py +++ b/sickbeard/notifiers/plex.py @@ -156,6 +156,13 @@ class PLEXNotifier(object): if update_text and title and new_version: self._notify_pmc(update_text + new_version, title) + def notify_login(self, ipaddress=""): + if sickbeard.USE_PLEX: + update_text = common.notifyStrings[common.NOTIFY_LOGIN_TEXT] + title = common.notifyStrings[common.NOTIFY_LOGIN] + if update_text and title and new_version: + self._notify_pmc(update_text.format(ipaddress), title) + def test_notify_pmc(self, host, username, password): return self._notify_pmc('This is a test notification from SickRage', 'Test Notification', host, username, password, force=True) diff --git a/sickbeard/notifiers/prowl.py b/sickbeard/notifiers/prowl.py index 8f1bde751..fd47d5a63 100644 --- a/sickbeard/notifiers/prowl.py +++ b/sickbeard/notifiers/prowl.py @@ -86,6 +86,12 @@ class ProwlNotifier(object): self._send_prowl(prowl_api=None, prowl_priority=None, event=title, message=update_text + new_version) + def notify_login(self, ipaddress=""): + if sickbeard.USE_PROWL: + update_text = common.notifyStrings[common.NOTIFY_LOGIN_TEXT] + title = common.notifyStrings[common.NOTIFY_LOGIN] + self._send_prowl(prowl_api=None, prowl_priority=None, + event=title, message=update_text.format(ipaddress)) @staticmethod def _generate_recipients(show=None): diff --git a/sickbeard/notifiers/pushalot.py b/sickbeard/notifiers/pushalot.py index 77c0ea714..6a3c82b02 100644 --- a/sickbeard/notifiers/pushalot.py +++ b/sickbeard/notifiers/pushalot.py @@ -57,6 +57,14 @@ class PushalotNotifier(object): event=title, message=update_text + new_version) + def notify_login(self, ipaddress=""): + if sickbeard.USE_PUSHALOT: + update_text = common.notifyStrings[common.NOTIFY_LOGIN_TEXT] + title = common.notifyStrings[common.NOTIFY_LOGIN] + self._sendPushalot(pushalot_authorizationtoken=None, + event=title, + message=update_text.format(ipaddress)) + def _sendPushalot(self, pushalot_authorizationtoken=None, event=None, message=None, force=False): if not sickbeard.USE_PUSHALOT and not force: diff --git a/sickbeard/notifiers/pushbullet.py b/sickbeard/notifiers/pushbullet.py index 0e633b81e..2a218ba86 100644 --- a/sickbeard/notifiers/pushbullet.py +++ b/sickbeard/notifiers/pushbullet.py @@ -63,6 +63,10 @@ class PushbulletNotifier(object): if sickbeard.USE_PUSHBULLET: self._sendPushbullet(pushbullet_api=None, event=notifyStrings[NOTIFY_GIT_UPDATE], message=notifyStrings[NOTIFY_GIT_UPDATE_TEXT] + new_version) + def notify_login(self, ipaddress=""): + if sickbeard.USE_PUSHBULLET: + self._sendPushbullet(pushbullet_api=None, event=notifyStrings[NOTIFY_LOGIN], message=notifyStrings[NOTIFY_LOGIN_TEXT].format(ipaddress)) + def _sendPushbullet(self, pushbullet_api=None, pushbullet_device=None, event=None, message=None): if not (sickbeard.USE_PUSHBULLET or event == 'Test' or event is None): diff --git a/sickbeard/notifiers/pushover.py b/sickbeard/notifiers/pushover.py index 3d6ca648c..a0914e7dd 100644 --- a/sickbeard/notifiers/pushover.py +++ b/sickbeard/notifiers/pushover.py @@ -151,6 +151,12 @@ class PushoverNotifier(object): title = notifyStrings[NOTIFY_GIT_UPDATE] self._notifyPushover(title, update_text + new_version) + def notify_login(self, ipaddress=""): + if sickbeard.USE_PUSHOVER: + update_text = common.notifyStrings[common.NOTIFY_LOGIN_TEXT] + title = common.notifyStrings[common.NOTIFY_LOGIN] + self._notifyPushover(title, update_text.format(ipaddress)) + def _notifyPushover(self, title, message, sound=None, userKey=None, apiKey=None, force=False): """ Sends a pushover notification based on the provided info or SR config diff --git a/sickbeard/notifiers/pytivo.py b/sickbeard/notifiers/pytivo.py index dfdc8ab89..c6fd68d61 100644 --- a/sickbeard/notifiers/pytivo.py +++ b/sickbeard/notifiers/pytivo.py @@ -42,6 +42,9 @@ class pyTivoNotifier(object): def notify_git_update(self, new_version): pass + def notify_login(self, ipaddress=""): + pass + def update_library(self, ep_obj): # Values from config diff --git a/sickbeard/notifiers/synoindex.py b/sickbeard/notifiers/synoindex.py index b1275ce95..30c844feb 100644 --- a/sickbeard/notifiers/synoindex.py +++ b/sickbeard/notifiers/synoindex.py @@ -41,6 +41,9 @@ class synoIndexNotifier(object): def notify_git_update(self, new_version): pass + def notify_login(self, ipaddress=""): + pass + def moveFolder(self, old_path, new_path): self.moveObject(old_path, new_path) diff --git a/sickbeard/notifiers/synologynotifier.py b/sickbeard/notifiers/synologynotifier.py index 2f3f62d26..cadac287d 100644 --- a/sickbeard/notifiers/synologynotifier.py +++ b/sickbeard/notifiers/synologynotifier.py @@ -47,6 +47,12 @@ class synologyNotifier(object): title = common.notifyStrings[common.NOTIFY_GIT_UPDATE] self._send_synologyNotifier(update_text + new_version, title) + def notify_login(self, ipaddress=""): + if sickbeard.USE_SYNOLOGYNOTIFIER: + update_text = common.notifyStrings[common.NOTIFY_LOGIN_TEXT] + title = common.notifyStrings[common.NOTIFY_LOGIN] + self._send_synologyNotifier(update_text.format(ipaddress), title) + def _send_synologyNotifier(self, message, title): synodsmnotify_cmd = ["/usr/syno/bin/synodsmnotify", "@administrators", title, message] logger.log(u"Executing command " + str(synodsmnotify_cmd)) diff --git a/sickbeard/notifiers/trakt.py b/sickbeard/notifiers/trakt.py index 6733c5d1b..33c4a2873 100644 --- a/sickbeard/notifiers/trakt.py +++ b/sickbeard/notifiers/trakt.py @@ -43,6 +43,9 @@ class TraktNotifier(object): def notify_git_update(self, new_version): pass + def notify_login(self, ipaddress=""): + pass + def update_library(self, ep_obj): """ Sends a request to trakt indicating that the given episode is part of our library. diff --git a/sickbeard/notifiers/tweet.py b/sickbeard/notifiers/tweet.py index 99f6554c0..0f1147580 100644 --- a/sickbeard/notifiers/tweet.py +++ b/sickbeard/notifiers/tweet.py @@ -60,6 +60,12 @@ class TwitterNotifier(object): title = common.notifyStrings[common.NOTIFY_GIT_UPDATE] self._notifyTwitter(title + " - " + update_text + new_version) + def notify_login(self, ipaddress=""): + if sickbeard.USE_TWITTER: + update_text = common.notifyStrings[common.NOTIFY_LOGIN_TEXT] + title = common.notifyStrings[common.NOTIFY_LOGIN] + self._notifyTwitter(title + " - " + update_text.format(ipaddress)) + def test_notify(self): return self._notifyTwitter("This is a test notification from SickRage", force=True) diff --git a/sickbeard/webserve.py b/sickbeard/webserve.py index 30f166731..4dd00180c 100644 --- a/sickbeard/webserve.py +++ b/sickbeard/webserve.py @@ -298,6 +298,9 @@ class LoginHandler(BaseHandler): and (self.get_argument('password') == password or not password): api_key = sickbeard.API_KEY + if sickbeard.NOTIFY_ON_LOGIN and not helpers.is_ip_private(self.request.remote_ip): + notifiers.notify_login(self.request.remote_ip) + if api_key: remember_me = int(self.get_argument('remember_me', default=0) or 0) self.set_secure_cookie('sickrage_user', api_key, expires_days=30 if remember_me > 0 else None) @@ -3756,7 +3759,7 @@ class ConfigGeneral(Config): sickbeard.save_config() - def saveGeneral(self, log_dir=None, log_nr=5, log_size=1048576, web_port=None, web_log=None, encryption_version=None, web_ipv6=None, + def saveGeneral(self, log_dir=None, log_nr=5, log_size=1048576, web_port=None, notify_on_login=None, web_log=None, encryption_version=None, web_ipv6=None, trash_remove_show=None, trash_rotate_logs=None, update_frequency=None, skip_removed_files=None, indexerDefaultLang='en', ep_default_deleted_status=None, launch_browser=None, showupdate_hour=3, web_username=None, api_key=None, indexer_default=None, timezone_display=None, cpu_preset='NORMAL', @@ -3809,7 +3812,7 @@ class ConfigGeneral(Config): # sickbeard.LOG_DIR is set in config.change_LOG_DIR() sickbeard.COMING_EPS_MISSED_RANGE = try_int(coming_eps_missed_range, 7) sickbeard.DISPLAY_ALL_SEASONS = config.checkbox_to_value(display_all_seasons) - + sickbeard.NOTIFY_ON_LOGIN = config.checkbox_to_value(notify_on_login) sickbeard.WEB_PORT = try_int(web_port) sickbeard.WEB_IPV6 = config.checkbox_to_value(web_ipv6) # sickbeard.WEB_LOG is set in config.change_LOG_DIR() -- GitLab