diff --git a/data/interfaces/default/notification_config.html b/data/interfaces/default/notification_config.html
index 70762667..d56049b9 100644
--- a/data/interfaces/default/notification_config.html
+++ b/data/interfaces/default/notification_config.html
@@ -152,24 +152,6 @@
return false;
});
- function disableTwitterVerify() {
- if ($('#twitter_key').val() != '') { $('#twitterStep2').prop('disabled', false); }
- else { $('#twitterStep2').prop('disabled', true); }
- }
- disableTwitterVerify();
- $('#twitter_key').on('change', function () {
- disableTwitterVerify()
- });
-
- $('#twitterStep1').click(function () {
- $.get('twitterStep1', function (data) {window.open(data); })
- .done(function () { showMsg(' Confirm Authorization. Check pop-up blocker if no response.', false, true, 3000); });
- });
- $('#twitterStep2').click(function () {
- var twitter_key = $('#twitter_key').val();
- $.get('twitterStep2', { 'key': twitter_key }, function (data) { showMsg(' ' + data, false, true, 3000); });
- });
-
function disableFacebookRequest() {
if ($('#facebook_app_id').val() != '' && $('#facebook_app_secret').val() != '') { $('#facebookStep1').prop('disabled', false); }
else { $('#facebookStep1').prop('disabled', true); }
diff --git a/plexpy/notifiers.py b/plexpy/notifiers.py
index 11f6150d..b8d2fc60 100644
--- a/plexpy/notifiers.py
+++ b/plexpy/notifiers.py
@@ -13,7 +13,6 @@
# You should have received a copy of the GNU General Public License
# along with PlexPy. If not, see .
-from urlparse import urlparse
import base64
import bleach
import json
@@ -29,17 +28,15 @@ import shlex
import smtplib
import subprocess
import time
-
-from urllib import urlencode
import urllib
+from urllib import urlencode
import urllib2
-from urlparse import parse_qsl
+from urlparse import parse_qsl, urlparse
-from pynma import pynma
import gntp.notifier
-import oauth2 as oauth
-import twitter
import facebook
+import twitter
+import pynma
import plexpy
import database
@@ -678,11 +675,11 @@ class PROWL(object):
http_handler = HTTPSConnection("api.prowlapp.com")
- data = {'apikey': plexpy.CONFIG.PROWL_KEYS,
+ data = {'apikey': self.keys,
'application': 'PlexPy',
'event': event.encode("utf-8"),
'description': message.encode("utf-8"),
- 'priority': plexpy.CONFIG.PROWL_PRIORITY}
+ 'priority': self.priority}
http_handler.request("POST",
"/publicapi/add",
@@ -907,16 +904,14 @@ class Plex(object):
class NMA(object):
def __init__(self):
- self.api = plexpy.CONFIG.NMA_APIKEY
- self.nma_priority = plexpy.CONFIG.NMA_PRIORITY
+ self.apikey = plexpy.CONFIG.NMA_APIKEY
+ self.priority = plexpy.CONFIG.NMA_PRIORITY
def notify(self, subject=None, message=None):
if not subject or not message:
return
title = 'PlexPy'
- api = plexpy.CONFIG.NMA_APIKEY
- nma_priority = plexpy.CONFIG.NMA_PRIORITY
# logger.debug(u"NMA title: " + title)
# logger.debug(u"NMA API: " + api)
@@ -930,13 +925,13 @@ class NMA(object):
batch = False
p = pynma.PyNMA()
- keys = api.split(',')
+ keys = self.apikey.split(',')
p.addkey(keys)
if len(keys) > 1:
batch = True
- response = p.push(title, event, message, priority=nma_priority, batch_mode=batch)
+ response = p.push(title, event, message, priority=self.priority, batch_mode=batch)
if not response[api][u'code'] == u'200':
logger.warn(u"PlexPy Notifiers :: NotifyMyAndroid notification failed.")
@@ -947,13 +942,13 @@ class NMA(object):
def return_config_options(self):
config_option = [{'label': 'NotifyMyAndroid API Key',
- 'value': plexpy.CONFIG.NMA_APIKEY,
+ 'value': self.apikey,
'name': 'nma_apikey',
'description': 'Your NotifyMyAndroid API key. Separate multiple api keys with commas.',
'input_type': 'text'
},
{'label': 'Priority',
- 'value': plexpy.CONFIG.NMA_PRIORITY,
+ 'value': self.priority,
'name': 'nma_priority',
'description': 'Set the priority.',
'input_type': 'select',
@@ -1074,21 +1069,19 @@ class PUSHBULLET(object):
class PUSHALOT(object):
def __init__(self):
- self.api_key = plexpy.CONFIG.PUSHALOT_APIKEY
+ self.apikey = plexpy.CONFIG.PUSHALOT_APIKEY
def notify(self, message, event):
if not message or not event:
return
- pushalot_authorizationtoken = plexpy.CONFIG.PUSHALOT_APIKEY
-
# logger.debug(u"Pushalot event: " + event)
# logger.debug(u"Pushalot message: " + message)
- # logger.debug(u"Pushalot api: " + pushalot_authorizationtoken)
+ # logger.debug(u"Pushalot api: " + self.api_key)
http_handler = HTTPSConnection("pushalot.com")
- data = {'AuthorizationToken': pushalot_authorizationtoken,
+ data = {'AuthorizationToken': self.apikey,
'Title': event.encode('utf-8'),
'Body': message.encode("utf-8")}
@@ -1115,7 +1108,7 @@ class PUSHALOT(object):
def return_config_options(self):
config_option = [{'label': 'Pushalot API Key',
- 'value': plexpy.CONFIG.PUSHALOT_APIKEY,
+ 'value': self.apikey,
'name': 'pushalot_apikey',
'description': 'Your Pushalot API key.',
'input_type': 'text'
@@ -1129,11 +1122,11 @@ class PUSHOVER(object):
def __init__(self):
self.enabled = plexpy.CONFIG.PUSHOVER_ENABLED
- self.application_token = plexpy.CONFIG.PUSHOVER_APITOKEN
+ self.apitoken = plexpy.CONFIG.PUSHOVER_APITOKEN
self.keys = plexpy.CONFIG.PUSHOVER_KEYS
+ self.html_support = plexpy.CONFIG.PUSHOVER_HTML_SUPPORT
self.priority = plexpy.CONFIG.PUSHOVER_PRIORITY
self.sound = plexpy.CONFIG.PUSHOVER_SOUND
- self.html_support = plexpy.CONFIG.PUSHOVER_HTML_SUPPORT
def conf(self, options):
return cherrypy.config['config'].get('Pushover', options)
@@ -1144,13 +1137,13 @@ class PUSHOVER(object):
http_handler = HTTPSConnection("api.pushover.net")
- data = {'token': self.application_token,
- 'user': plexpy.CONFIG.PUSHOVER_KEYS,
+ data = {'token': self.apitoken,
+ 'user': self.keys,
'title': event.encode("utf-8"),
'message': message.encode("utf-8"),
- 'sound': plexpy.CONFIG.PUSHOVER_SOUND,
- 'html': plexpy.CONFIG.PUSHOVER_HTML_SUPPORT,
- 'priority': plexpy.CONFIG.PUSHOVER_PRIORITY}
+ 'sound': self.sound,
+ 'html': self.html_support,
+ 'priority': self.priority}
http_handler.request("POST",
"/1/messages.json",
@@ -1186,9 +1179,9 @@ class PUSHOVER(object):
self.notify('Main Screen Activate', 'Test Message')
def get_sounds(self):
- if plexpy.CONFIG.PUSHOVER_APITOKEN:
+ if self.apitoken:
http_handler = HTTPSConnection("api.pushover.net")
- http_handler.request("GET", "/1/sounds.json?token=" + self.application_token)
+ http_handler.request("GET", "/1/sounds.json?token=" + self.apitoken)
response = http_handler.getresponse()
request_status = response.status
@@ -1209,7 +1202,7 @@ class PUSHOVER(object):
def return_config_options(self):
config_option = [{'label': 'Pushover API Token',
- 'value': plexpy.CONFIG.PUSHOVER_APITOKEN,
+ 'value': self.apitoken,
'name': 'pushover_apitoken',
'description': 'Your Pushover API token.',
'input_type': 'text'
@@ -1277,59 +1270,6 @@ class TwitterNotifier(object):
def test_notify(self):
return self._send_tweet("This is a test notification from PlexPy at " + helpers.now())
- def _get_authorization(self):
-
- oauth_consumer = oauth.Consumer(key=self.consumer_key, secret=self.consumer_secret)
- oauth_client = oauth.Client(oauth_consumer)
-
- logger.info("PlexPy Notifiers :: Requesting temp token from Twitter")
-
- resp, content = oauth_client.request(self.REQUEST_TOKEN_URL, 'GET')
-
- if resp['status'] != '200':
- logger.warn("PlexPy Notifiers :: Invalid respond from Twitter requesting temp token: %s" % resp['status'])
- else:
- request_token = dict(parse_qsl(content))
-
- plexpy.CONFIG.TWITTER_ACCESS_TOKEN = request_token['oauth_token']
- plexpy.CONFIG.TWITTER_ACCESS_TOKEN_SECRET = request_token['oauth_token_secret']
-
- return self.AUTHORIZATION_URL + "?oauth_token=" + request_token['oauth_token']
-
- def _get_credentials(self, key):
- request_token = {}
-
- request_token['oauth_token'] = plexpy.CONFIG.TWITTER_ACCESS_TOKEN
- request_token['oauth_token_secret'] = plexpy.CONFIG.TWITTER_ACCESS_TOKEN_SECRET
- request_token['oauth_callback_confirmed'] = 'true'
-
- token = oauth.Token(request_token['oauth_token'], request_token['oauth_token_secret'])
- token.set_verifier(key)
-
- # logger.debug(u"Generating and signing request for an access token using key " + key)
-
- oauth_consumer = oauth.Consumer(key=self.consumer_key, secret=self.consumer_secret)
- # logger.debug(u"oauth_consumer: " + str(oauth_consumer))
- oauth_client = oauth.Client(oauth_consumer, token)
- # logger.debug(u"oauth_client: " + str(oauth_client))
- resp, content = oauth_client.request(self.ACCESS_TOKEN_URL, method='POST', body='oauth_verifier=%s' % key)
- # logger.debug(u"resp, content: " + str(resp) + ',' + str(content))
-
- access_token = dict(parse_qsl(content))
- # logger.debug(u"access_token: " + str(access_token))
-
- # logger.debug(u"resp[status] = " + str(resp['status']))
- if resp['status'] != '200':
- logger.error(u"PlexPy Notifiers :: The request for a Twitter token did not succeed: " + str(resp['status']), logger.ERROR)
- return False
- else:
- # logger.info(u"PlexPy Notifiers :: Your Twitter Access Token key: %s" % access_token['oauth_token'])
- # logger.info(u"PlexPy Notifiers :: Access Token secret: %s" % access_token['oauth_token_secret'])
- plexpy.CONFIG.TWITTER_ACCESS_TOKEN = access_token['oauth_token']
- plexpy.CONFIG.TWITTER_ACCESS_TOKEN_SECRET = access_token['oauth_token_secret']
- plexpy.CONFIG.write()
- return True
-
def _send_tweet(self, message=None, attachment=None):
consumer_key = self.consumer_key
consumer_secret = self.consumer_secret
@@ -1402,6 +1342,8 @@ class TwitterNotifier(object):
class OSX_NOTIFY(object):
def __init__(self):
+ self.app = plexpy.CONFIG.OSX_NOTIFY_APP
+
try:
self.objc = __import__("objc")
self.AppKit = __import__("AppKit")
@@ -1472,7 +1414,7 @@ class OSX_NOTIFY(object):
def return_config_options(self):
config_option = [{'label': 'Register Notify App',
- 'value': plexpy.CONFIG.OSX_NOTIFY_APP,
+ 'value': self.app,
'name': 'osx_notify_app',
'description': 'Enter the path/application name to be registered with the '
'Notification Center, default is /Applications/PlexPy.',
@@ -1496,10 +1438,10 @@ class BOXCAR(object):
try:
data = urllib.urlencode({
- 'user_credentials': plexpy.CONFIG.BOXCAR_TOKEN,
+ 'user_credentials': self.token,
'notification[title]': title.encode('utf-8'),
'notification[long_message]': message.encode('utf-8'),
- 'notification[sound]': plexpy.CONFIG.BOXCAR_SOUND
+ 'notification[sound]': self.sound
})
req = urllib2.Request(self.url)
@@ -1548,7 +1490,7 @@ class BOXCAR(object):
def return_config_options(self):
config_option = [{'label': 'Boxcar Access Token',
- 'value': plexpy.CONFIG.BOXCAR_TOKEN,
+ 'value': self.token,
'name': 'boxcar_token',
'description': 'Your Boxcar access token.',
'input_type': 'text'
@@ -2063,6 +2005,7 @@ class Scripts(object):
def __init__(self, **kwargs):
self.script_exts = ('.bat', '.cmd', '.exe', '.php', '.pl', '.ps1', '.py', '.pyw', '.rb', '.sh')
+ self.script_folder = plexpy.CONFIG.SCRIPTS_FOLDER
def conf(self, options):
return cherrypy.config['config'].get('Scripts', options)
@@ -2076,7 +2019,7 @@ class Scripts(object):
return
def list_scripts(self):
- scriptdir = plexpy.CONFIG.SCRIPTS_FOLDER
+ scriptdir = self.script_folder
scripts = {'': ''}
if scriptdir and not os.path.exists(scriptdir):
@@ -2106,7 +2049,7 @@ class Scripts(object):
if script_args is None:
script_args = []
- if not plexpy.CONFIG.SCRIPTS_FOLDER:
+ if not self.script_folder:
return
# Make sure we use the correct script..
@@ -2234,7 +2177,7 @@ class Scripts(object):
'input_type': 'help'
},
{'label': 'Script Folder',
- 'value': plexpy.CONFIG.SCRIPTS_FOLDER,
+ 'value': self.script_folder,
'name': 'scripts_folder',
'description': 'Add your script folder.',
'input_type': 'text',
diff --git a/plexpy/webserve.py b/plexpy/webserve.py
index 826b28f5..5b937b0a 100644
--- a/plexpy/webserve.py
+++ b/plexpy/webserve.py
@@ -2629,25 +2629,6 @@ class WebInterface(object):
logger.warn('Unable to retrieve browser notifications.')
return None
- @cherrypy.expose
- @requireAuth(member_of("admin"))
- def twitterStep1(self):
- cherrypy.response.headers['Cache-Control'] = "max-age=0,no-cache,no-store"
- tweet = notifiers.TwitterNotifier()
- return tweet._get_authorization()
-
- @cherrypy.expose
- @requireAuth(member_of("admin"))
- def twitterStep2(self, key):
- cherrypy.response.headers['Cache-Control'] = "max-age=0,no-cache,no-store"
- tweet = notifiers.TwitterNotifier()
- result = tweet._get_credentials(key)
- # logger.info(u"result: " + str(result))
- if result:
- return "Key verification successful"
- else:
- return "Unable to verify key"
-
@cherrypy.expose
@requireAuth(member_of("admin"))
def facebookStep1(self):