mirror of
https://github.com/Tautulli/Tautulli.git
synced 2025-07-11 15:56:07 -07:00
Some notifiers cleanup
This commit is contained in:
parent
06b684c899
commit
325fa19e46
3 changed files with 36 additions and 130 deletions
|
@ -152,24 +152,6 @@
|
||||||
return false;
|
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('<i class="fa fa-check"></i> 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('<i class="fa fa-check"></i> ' + data, false, true, 3000); });
|
|
||||||
});
|
|
||||||
|
|
||||||
function disableFacebookRequest() {
|
function disableFacebookRequest() {
|
||||||
if ($('#facebook_app_id').val() != '' && $('#facebook_app_secret').val() != '') { $('#facebookStep1').prop('disabled', false); }
|
if ($('#facebook_app_id').val() != '' && $('#facebook_app_secret').val() != '') { $('#facebookStep1').prop('disabled', false); }
|
||||||
else { $('#facebookStep1').prop('disabled', true); }
|
else { $('#facebookStep1').prop('disabled', true); }
|
||||||
|
|
|
@ -13,7 +13,6 @@
|
||||||
# You should have received a copy of the GNU General Public License
|
# You should have received a copy of the GNU General Public License
|
||||||
# along with PlexPy. If not, see <http://www.gnu.org/licenses/>.
|
# along with PlexPy. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
from urlparse import urlparse
|
|
||||||
import base64
|
import base64
|
||||||
import bleach
|
import bleach
|
||||||
import json
|
import json
|
||||||
|
@ -29,17 +28,15 @@ import shlex
|
||||||
import smtplib
|
import smtplib
|
||||||
import subprocess
|
import subprocess
|
||||||
import time
|
import time
|
||||||
|
|
||||||
from urllib import urlencode
|
|
||||||
import urllib
|
import urllib
|
||||||
|
from urllib import urlencode
|
||||||
import urllib2
|
import urllib2
|
||||||
from urlparse import parse_qsl
|
from urlparse import parse_qsl, urlparse
|
||||||
|
|
||||||
from pynma import pynma
|
|
||||||
import gntp.notifier
|
import gntp.notifier
|
||||||
import oauth2 as oauth
|
|
||||||
import twitter
|
|
||||||
import facebook
|
import facebook
|
||||||
|
import twitter
|
||||||
|
import pynma
|
||||||
|
|
||||||
import plexpy
|
import plexpy
|
||||||
import database
|
import database
|
||||||
|
@ -678,11 +675,11 @@ class PROWL(object):
|
||||||
|
|
||||||
http_handler = HTTPSConnection("api.prowlapp.com")
|
http_handler = HTTPSConnection("api.prowlapp.com")
|
||||||
|
|
||||||
data = {'apikey': plexpy.CONFIG.PROWL_KEYS,
|
data = {'apikey': self.keys,
|
||||||
'application': 'PlexPy',
|
'application': 'PlexPy',
|
||||||
'event': event.encode("utf-8"),
|
'event': event.encode("utf-8"),
|
||||||
'description': message.encode("utf-8"),
|
'description': message.encode("utf-8"),
|
||||||
'priority': plexpy.CONFIG.PROWL_PRIORITY}
|
'priority': self.priority}
|
||||||
|
|
||||||
http_handler.request("POST",
|
http_handler.request("POST",
|
||||||
"/publicapi/add",
|
"/publicapi/add",
|
||||||
|
@ -907,16 +904,14 @@ class Plex(object):
|
||||||
class NMA(object):
|
class NMA(object):
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.api = plexpy.CONFIG.NMA_APIKEY
|
self.apikey = plexpy.CONFIG.NMA_APIKEY
|
||||||
self.nma_priority = plexpy.CONFIG.NMA_PRIORITY
|
self.priority = plexpy.CONFIG.NMA_PRIORITY
|
||||||
|
|
||||||
def notify(self, subject=None, message=None):
|
def notify(self, subject=None, message=None):
|
||||||
if not subject or not message:
|
if not subject or not message:
|
||||||
return
|
return
|
||||||
|
|
||||||
title = 'PlexPy'
|
title = 'PlexPy'
|
||||||
api = plexpy.CONFIG.NMA_APIKEY
|
|
||||||
nma_priority = plexpy.CONFIG.NMA_PRIORITY
|
|
||||||
|
|
||||||
# logger.debug(u"NMA title: " + title)
|
# logger.debug(u"NMA title: " + title)
|
||||||
# logger.debug(u"NMA API: " + api)
|
# logger.debug(u"NMA API: " + api)
|
||||||
|
@ -930,13 +925,13 @@ class NMA(object):
|
||||||
batch = False
|
batch = False
|
||||||
|
|
||||||
p = pynma.PyNMA()
|
p = pynma.PyNMA()
|
||||||
keys = api.split(',')
|
keys = self.apikey.split(',')
|
||||||
p.addkey(keys)
|
p.addkey(keys)
|
||||||
|
|
||||||
if len(keys) > 1:
|
if len(keys) > 1:
|
||||||
batch = True
|
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':
|
if not response[api][u'code'] == u'200':
|
||||||
logger.warn(u"PlexPy Notifiers :: NotifyMyAndroid notification failed.")
|
logger.warn(u"PlexPy Notifiers :: NotifyMyAndroid notification failed.")
|
||||||
|
@ -947,13 +942,13 @@ class NMA(object):
|
||||||
|
|
||||||
def return_config_options(self):
|
def return_config_options(self):
|
||||||
config_option = [{'label': 'NotifyMyAndroid API Key',
|
config_option = [{'label': 'NotifyMyAndroid API Key',
|
||||||
'value': plexpy.CONFIG.NMA_APIKEY,
|
'value': self.apikey,
|
||||||
'name': 'nma_apikey',
|
'name': 'nma_apikey',
|
||||||
'description': 'Your NotifyMyAndroid API key. Separate multiple api keys with commas.',
|
'description': 'Your NotifyMyAndroid API key. Separate multiple api keys with commas.',
|
||||||
'input_type': 'text'
|
'input_type': 'text'
|
||||||
},
|
},
|
||||||
{'label': 'Priority',
|
{'label': 'Priority',
|
||||||
'value': plexpy.CONFIG.NMA_PRIORITY,
|
'value': self.priority,
|
||||||
'name': 'nma_priority',
|
'name': 'nma_priority',
|
||||||
'description': 'Set the priority.',
|
'description': 'Set the priority.',
|
||||||
'input_type': 'select',
|
'input_type': 'select',
|
||||||
|
@ -1074,21 +1069,19 @@ class PUSHBULLET(object):
|
||||||
class PUSHALOT(object):
|
class PUSHALOT(object):
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.api_key = plexpy.CONFIG.PUSHALOT_APIKEY
|
self.apikey = plexpy.CONFIG.PUSHALOT_APIKEY
|
||||||
|
|
||||||
def notify(self, message, event):
|
def notify(self, message, event):
|
||||||
if not message or not event:
|
if not message or not event:
|
||||||
return
|
return
|
||||||
|
|
||||||
pushalot_authorizationtoken = plexpy.CONFIG.PUSHALOT_APIKEY
|
|
||||||
|
|
||||||
# logger.debug(u"Pushalot event: " + event)
|
# logger.debug(u"Pushalot event: " + event)
|
||||||
# logger.debug(u"Pushalot message: " + message)
|
# 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")
|
http_handler = HTTPSConnection("pushalot.com")
|
||||||
|
|
||||||
data = {'AuthorizationToken': pushalot_authorizationtoken,
|
data = {'AuthorizationToken': self.apikey,
|
||||||
'Title': event.encode('utf-8'),
|
'Title': event.encode('utf-8'),
|
||||||
'Body': message.encode("utf-8")}
|
'Body': message.encode("utf-8")}
|
||||||
|
|
||||||
|
@ -1115,7 +1108,7 @@ class PUSHALOT(object):
|
||||||
|
|
||||||
def return_config_options(self):
|
def return_config_options(self):
|
||||||
config_option = [{'label': 'Pushalot API Key',
|
config_option = [{'label': 'Pushalot API Key',
|
||||||
'value': plexpy.CONFIG.PUSHALOT_APIKEY,
|
'value': self.apikey,
|
||||||
'name': 'pushalot_apikey',
|
'name': 'pushalot_apikey',
|
||||||
'description': 'Your Pushalot API key.',
|
'description': 'Your Pushalot API key.',
|
||||||
'input_type': 'text'
|
'input_type': 'text'
|
||||||
|
@ -1129,11 +1122,11 @@ class PUSHOVER(object):
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.enabled = plexpy.CONFIG.PUSHOVER_ENABLED
|
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.keys = plexpy.CONFIG.PUSHOVER_KEYS
|
||||||
|
self.html_support = plexpy.CONFIG.PUSHOVER_HTML_SUPPORT
|
||||||
self.priority = plexpy.CONFIG.PUSHOVER_PRIORITY
|
self.priority = plexpy.CONFIG.PUSHOVER_PRIORITY
|
||||||
self.sound = plexpy.CONFIG.PUSHOVER_SOUND
|
self.sound = plexpy.CONFIG.PUSHOVER_SOUND
|
||||||
self.html_support = plexpy.CONFIG.PUSHOVER_HTML_SUPPORT
|
|
||||||
|
|
||||||
def conf(self, options):
|
def conf(self, options):
|
||||||
return cherrypy.config['config'].get('Pushover', options)
|
return cherrypy.config['config'].get('Pushover', options)
|
||||||
|
@ -1144,13 +1137,13 @@ class PUSHOVER(object):
|
||||||
|
|
||||||
http_handler = HTTPSConnection("api.pushover.net")
|
http_handler = HTTPSConnection("api.pushover.net")
|
||||||
|
|
||||||
data = {'token': self.application_token,
|
data = {'token': self.apitoken,
|
||||||
'user': plexpy.CONFIG.PUSHOVER_KEYS,
|
'user': self.keys,
|
||||||
'title': event.encode("utf-8"),
|
'title': event.encode("utf-8"),
|
||||||
'message': message.encode("utf-8"),
|
'message': message.encode("utf-8"),
|
||||||
'sound': plexpy.CONFIG.PUSHOVER_SOUND,
|
'sound': self.sound,
|
||||||
'html': plexpy.CONFIG.PUSHOVER_HTML_SUPPORT,
|
'html': self.html_support,
|
||||||
'priority': plexpy.CONFIG.PUSHOVER_PRIORITY}
|
'priority': self.priority}
|
||||||
|
|
||||||
http_handler.request("POST",
|
http_handler.request("POST",
|
||||||
"/1/messages.json",
|
"/1/messages.json",
|
||||||
|
@ -1186,9 +1179,9 @@ class PUSHOVER(object):
|
||||||
self.notify('Main Screen Activate', 'Test Message')
|
self.notify('Main Screen Activate', 'Test Message')
|
||||||
|
|
||||||
def get_sounds(self):
|
def get_sounds(self):
|
||||||
if plexpy.CONFIG.PUSHOVER_APITOKEN:
|
if self.apitoken:
|
||||||
http_handler = HTTPSConnection("api.pushover.net")
|
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()
|
response = http_handler.getresponse()
|
||||||
request_status = response.status
|
request_status = response.status
|
||||||
|
|
||||||
|
@ -1209,7 +1202,7 @@ class PUSHOVER(object):
|
||||||
|
|
||||||
def return_config_options(self):
|
def return_config_options(self):
|
||||||
config_option = [{'label': 'Pushover API Token',
|
config_option = [{'label': 'Pushover API Token',
|
||||||
'value': plexpy.CONFIG.PUSHOVER_APITOKEN,
|
'value': self.apitoken,
|
||||||
'name': 'pushover_apitoken',
|
'name': 'pushover_apitoken',
|
||||||
'description': 'Your Pushover API token.',
|
'description': 'Your Pushover API token.',
|
||||||
'input_type': 'text'
|
'input_type': 'text'
|
||||||
|
@ -1277,59 +1270,6 @@ class TwitterNotifier(object):
|
||||||
def test_notify(self):
|
def test_notify(self):
|
||||||
return self._send_tweet("This is a test notification from PlexPy at " + helpers.now())
|
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):
|
def _send_tweet(self, message=None, attachment=None):
|
||||||
consumer_key = self.consumer_key
|
consumer_key = self.consumer_key
|
||||||
consumer_secret = self.consumer_secret
|
consumer_secret = self.consumer_secret
|
||||||
|
@ -1402,6 +1342,8 @@ class TwitterNotifier(object):
|
||||||
class OSX_NOTIFY(object):
|
class OSX_NOTIFY(object):
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
|
self.app = plexpy.CONFIG.OSX_NOTIFY_APP
|
||||||
|
|
||||||
try:
|
try:
|
||||||
self.objc = __import__("objc")
|
self.objc = __import__("objc")
|
||||||
self.AppKit = __import__("AppKit")
|
self.AppKit = __import__("AppKit")
|
||||||
|
@ -1472,7 +1414,7 @@ class OSX_NOTIFY(object):
|
||||||
|
|
||||||
def return_config_options(self):
|
def return_config_options(self):
|
||||||
config_option = [{'label': 'Register Notify App',
|
config_option = [{'label': 'Register Notify App',
|
||||||
'value': plexpy.CONFIG.OSX_NOTIFY_APP,
|
'value': self.app,
|
||||||
'name': 'osx_notify_app',
|
'name': 'osx_notify_app',
|
||||||
'description': 'Enter the path/application name to be registered with the '
|
'description': 'Enter the path/application name to be registered with the '
|
||||||
'Notification Center, default is /Applications/PlexPy.',
|
'Notification Center, default is /Applications/PlexPy.',
|
||||||
|
@ -1496,10 +1438,10 @@ class BOXCAR(object):
|
||||||
|
|
||||||
try:
|
try:
|
||||||
data = urllib.urlencode({
|
data = urllib.urlencode({
|
||||||
'user_credentials': plexpy.CONFIG.BOXCAR_TOKEN,
|
'user_credentials': self.token,
|
||||||
'notification[title]': title.encode('utf-8'),
|
'notification[title]': title.encode('utf-8'),
|
||||||
'notification[long_message]': message.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)
|
req = urllib2.Request(self.url)
|
||||||
|
@ -1548,7 +1490,7 @@ class BOXCAR(object):
|
||||||
|
|
||||||
def return_config_options(self):
|
def return_config_options(self):
|
||||||
config_option = [{'label': 'Boxcar Access Token',
|
config_option = [{'label': 'Boxcar Access Token',
|
||||||
'value': plexpy.CONFIG.BOXCAR_TOKEN,
|
'value': self.token,
|
||||||
'name': 'boxcar_token',
|
'name': 'boxcar_token',
|
||||||
'description': 'Your Boxcar access token.',
|
'description': 'Your Boxcar access token.',
|
||||||
'input_type': 'text'
|
'input_type': 'text'
|
||||||
|
@ -2063,6 +2005,7 @@ class Scripts(object):
|
||||||
|
|
||||||
def __init__(self, **kwargs):
|
def __init__(self, **kwargs):
|
||||||
self.script_exts = ('.bat', '.cmd', '.exe', '.php', '.pl', '.ps1', '.py', '.pyw', '.rb', '.sh')
|
self.script_exts = ('.bat', '.cmd', '.exe', '.php', '.pl', '.ps1', '.py', '.pyw', '.rb', '.sh')
|
||||||
|
self.script_folder = plexpy.CONFIG.SCRIPTS_FOLDER
|
||||||
|
|
||||||
def conf(self, options):
|
def conf(self, options):
|
||||||
return cherrypy.config['config'].get('Scripts', options)
|
return cherrypy.config['config'].get('Scripts', options)
|
||||||
|
@ -2076,7 +2019,7 @@ class Scripts(object):
|
||||||
return
|
return
|
||||||
|
|
||||||
def list_scripts(self):
|
def list_scripts(self):
|
||||||
scriptdir = plexpy.CONFIG.SCRIPTS_FOLDER
|
scriptdir = self.script_folder
|
||||||
scripts = {'': ''}
|
scripts = {'': ''}
|
||||||
|
|
||||||
if scriptdir and not os.path.exists(scriptdir):
|
if scriptdir and not os.path.exists(scriptdir):
|
||||||
|
@ -2106,7 +2049,7 @@ class Scripts(object):
|
||||||
if script_args is None:
|
if script_args is None:
|
||||||
script_args = []
|
script_args = []
|
||||||
|
|
||||||
if not plexpy.CONFIG.SCRIPTS_FOLDER:
|
if not self.script_folder:
|
||||||
return
|
return
|
||||||
|
|
||||||
# Make sure we use the correct script..
|
# Make sure we use the correct script..
|
||||||
|
@ -2234,7 +2177,7 @@ class Scripts(object):
|
||||||
'input_type': 'help'
|
'input_type': 'help'
|
||||||
},
|
},
|
||||||
{'label': 'Script Folder',
|
{'label': 'Script Folder',
|
||||||
'value': plexpy.CONFIG.SCRIPTS_FOLDER,
|
'value': self.script_folder,
|
||||||
'name': 'scripts_folder',
|
'name': 'scripts_folder',
|
||||||
'description': 'Add your script folder.',
|
'description': 'Add your script folder.',
|
||||||
'input_type': 'text',
|
'input_type': 'text',
|
||||||
|
|
|
@ -2629,25 +2629,6 @@ class WebInterface(object):
|
||||||
logger.warn('Unable to retrieve browser notifications.')
|
logger.warn('Unable to retrieve browser notifications.')
|
||||||
return None
|
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
|
@cherrypy.expose
|
||||||
@requireAuth(member_of("admin"))
|
@requireAuth(member_of("admin"))
|
||||||
def facebookStep1(self):
|
def facebookStep1(self):
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue