mirror of https://github.com/evilhero/mylar
FIX: Fixed NMA & Pushbullet test notification options so that saving the configuration is no longer required prior to testing, FIX: NMA was using incorrect response codes due to xml usage
This commit is contained in:
parent
4d5b384c82
commit
5ccd402460
|
@ -1159,7 +1159,7 @@
|
|||
<input type="checkbox" name="nma_onsnatch" value="1" ${config['nma_onsnatch']} /><label>Notify on snatch?</label>
|
||||
</div>
|
||||
<label>NotifyMyAndroid API Key</label>
|
||||
<input type="text" name="nma_apikey" value="${config['nma_apikey']}" size="30">
|
||||
<input type="text" name="nma_apikey" id="nma_apikey" value="${config['nma_apikey']}" size="30">
|
||||
<small>Separate multiple api keys with commas</small>
|
||||
</div>
|
||||
<div class="row">
|
||||
|
@ -1187,8 +1187,9 @@
|
|||
%endfor
|
||||
</select>
|
||||
</div>
|
||||
<div class="row">
|
||||
<input type="button" value="Test NMA" id="nma_test" />
|
||||
<div align="center" class="row">
|
||||
<input type="button" value="Test NMA" id="nma_test" style="float:center" /></br>
|
||||
<input type="text" name="nmastatus" style="text-align:center; font-size:11px;" id="nmastatus" size="55" DISABLED />
|
||||
</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
|
@ -1246,7 +1247,7 @@
|
|||
<input type="checkbox" name="pushbullet_onsnatch" value="1" ${config['pushbullet_onsnatch']} /><label>Notify on snatch?</label>
|
||||
</div>
|
||||
<div class="row">
|
||||
<label>API Key</label><input type="text" name="pushbullet_apikey" value="${config['pushbullet_apikey']}" size="50">
|
||||
<label>API Key</label><input type="text" name="pushbullet_apikey" id="pushbullet_apikey" value="${config['pushbullet_apikey']}" size="50">
|
||||
<small>Warning: Will send to ALL your pushbullet devices</small>
|
||||
</div>
|
||||
<div class="row">
|
||||
|
@ -1257,9 +1258,10 @@
|
|||
<input type="button" class="btn" value="Update device list" id="getPushbulletDevices" />
|
||||
-->
|
||||
</div>
|
||||
<div class="row">
|
||||
<input type="button" value="Test Pushbullet" id="pushbullet_test" />
|
||||
</div>
|
||||
<div align="center" class="row">
|
||||
<input type="button" value="Test Pushbullet" id="pushbullet_test" style="float:center" /></br>
|
||||
<input type="text" name="pbstatus" style="text-align:center; font-size:11px;" id="pbstatus" size="55" DISABLED />
|
||||
</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
|
@ -1732,10 +1734,18 @@
|
|||
function addAction() {
|
||||
$('#autoadd').append('<input type="hidden" name="tsab" value=1 />');
|
||||
};
|
||||
|
||||
$('#nma_test').click(function () {
|
||||
var apikey = document.getElementById('nma_apikey').value;
|
||||
$.get("testNMA",
|
||||
function (data) { $('#ajaxMsg').html("<div class='msg'><span class='ui-icon ui-icon-check'></span>"+data+"</div>"); });
|
||||
{ apikey: apikey },
|
||||
function(data){
|
||||
if (data.error != undefined) {
|
||||
alert(data.error);
|
||||
return;
|
||||
}
|
||||
$('#nmastatus').val(data);
|
||||
$('#ajaxMsg').html("<div class='msg'><span class='ui-icon ui-icon-check'></span>"+data+"</div>");
|
||||
});
|
||||
$('#ajaxMsg').addClass('success').fadeIn().delay(3000).fadeOut();
|
||||
});
|
||||
|
||||
|
@ -1758,8 +1768,17 @@
|
|||
});
|
||||
|
||||
$('#pushbullet_test').click(function () {
|
||||
var apikey = document.getElementById('pushbullet_apikey').value;
|
||||
$.get("testpushbullet",
|
||||
function (data) { $('#ajaxMsg').html("<div class='msg'><span class='ui-icon ui-icon-check'></span>"+data+"</div>"); });
|
||||
{ apikey: apikey },
|
||||
function(data){
|
||||
if (data.error != undefined) {
|
||||
alert(data.error);
|
||||
return;
|
||||
}
|
||||
$('#pbstatus').val(data);
|
||||
$('#ajaxMsg').html("<div class='msg'><span class='ui-icon ui-icon-check'></span>"+data+"</div>");
|
||||
});
|
||||
$('#ajaxMsg').addClass('success').fadeIn().delay(3000).fadeOut();
|
||||
});
|
||||
|
||||
|
|
|
@ -82,10 +82,14 @@ class PROWL:
|
|||
|
||||
class NMA:
|
||||
|
||||
def __init__(self):
|
||||
def __init__(self, test_apikey=None):
|
||||
|
||||
self.NMA_URL = "https://www.notifymyandroid.com/publicapi/notify"
|
||||
self.apikey = mylar.NMA_APIKEY
|
||||
self.TEST_NMA_URL = "https://www.notifymyandroid.com/publicapi/verify"
|
||||
if test_apikey is None:
|
||||
self.apikey = mylar.NMA_APIKEY
|
||||
else:
|
||||
self.apikey = test_apikey
|
||||
self.priority = mylar.NMA_PRIORITY
|
||||
|
||||
self._session = requests.Session()
|
||||
|
@ -95,18 +99,36 @@ class NMA:
|
|||
r = self._session.post(self.NMA_URL, data=data, verify=True)
|
||||
except requests.exceptions.RequestException as e:
|
||||
logger.error(module + '[' + str(e) + '] Unable to send via NMA. Aborting notification for this item.')
|
||||
return False
|
||||
return {'status': False,
|
||||
'message': str(e)}
|
||||
|
||||
logger.fdebug('[NMA] Status code returned: ' + str(r.status_code))
|
||||
if r.status_code == 200:
|
||||
logger.info(module + ' NotifyMyAndroid notifications sent.')
|
||||
return True
|
||||
from xml.dom.minidom import parseString
|
||||
dom = parseString(r.content)
|
||||
try:
|
||||
success_info = dom.getElementsByTagName('success')
|
||||
success_code = success_info[0].getAttribute('code')
|
||||
except:
|
||||
error_info = dom.getElementsByTagName('error')
|
||||
error_code = error_info[0].getAttribute('code')
|
||||
error_message = error_info[0].childNodes[0].nodeValue
|
||||
logger.info(module + '[' + str(error_code) + '] ' + error_message)
|
||||
return {'status': False,
|
||||
'message': '[' + str(error_code) + '] ' + error_message}
|
||||
|
||||
else:
|
||||
logger.info(module + '[' + str(success_code) + '] NotifyMyAndroid apikey valid. Test notification sent successfully.')
|
||||
return {'status': True,
|
||||
'message': 'APIKEY verified OK / notification sent'}
|
||||
elif r.status_code >= 400 and r.status_code < 500:
|
||||
logger.error(module + ' NotifyMyAndroid request failed: %s' % r.content)
|
||||
return False
|
||||
return {'status': False,
|
||||
'message': 'APIKEY verified OK / failure to send notification'}
|
||||
else:
|
||||
logger.error(module + ' NotifyMyAndroid notification failed serverside.')
|
||||
return False
|
||||
logger.error(module + ' NotifyMyAndroid notification failed serverside.')
|
||||
return {'status': False,
|
||||
'message': 'APIKEY verified OK / failure to send notification'}
|
||||
|
||||
def notify(self, snline=None, prline=None, prline2=None, snatched_nzb=None, sent_to=None, prov=None, module=None):
|
||||
|
||||
|
@ -134,6 +156,40 @@ class NMA:
|
|||
logger.warn(module + ' Error sending notification request to NotifyMyAndroid')
|
||||
|
||||
def test_notify(self):
|
||||
module = '[TEST-NOTIFIER]'
|
||||
try:
|
||||
r = self._session.get(self.TEST_NMA_URL, params={'apikey': self.apikey}, verify=True)
|
||||
except requests.exceptions.RequestException as e:
|
||||
logger.error(module + '[' + str(e) + '] Unable to send via NMA. Aborting test notification - something is probably wrong...')
|
||||
return {'status': False,
|
||||
'message': str(e)}
|
||||
|
||||
logger.fdebug('[NMA] Status code returned: ' + str(r.status_code))
|
||||
if r.status_code == 200:
|
||||
from xml.dom.minidom import parseString
|
||||
dom = parseString(r.content)
|
||||
try:
|
||||
success_info = dom.getElementsByTagName('success')
|
||||
success_code = success_info[0].getAttribute('code')
|
||||
except:
|
||||
error_info = dom.getElementsByTagName('error')
|
||||
error_code = error_info[0].getAttribute('code')
|
||||
error_message = error_info[0].childNodes[0].nodeValue
|
||||
logger.info(module + '[' + str(error_code) + '] ' + error_message)
|
||||
return {'status': False,
|
||||
'message': '[' + str(error_code) + '] ' + error_message}
|
||||
|
||||
else:
|
||||
logger.info(module + '[' + str(success_code) + '] NotifyMyAndroid apikey valid. Testing notification service with it.')
|
||||
elif r.status_code >= 400 and r.status_code < 500:
|
||||
logger.error(module + ' NotifyMyAndroid request failed: %s' % r.content)
|
||||
return {'status': False,
|
||||
'message': 'Unable to send request to NMA - check your connection.'}
|
||||
else:
|
||||
logger.error(module + ' NotifyMyAndroid notification failed serverside.')
|
||||
return {'status': False,
|
||||
'message': 'Internal Server Error. Try again later.'}
|
||||
|
||||
event = 'Test Message'
|
||||
description = 'ZOMG Lazors PewPewPew!'
|
||||
data = {'apikey': self.apikey, 'application': 'Mylar', 'event': event.encode('utf-8'), 'description': description.encode('utf-8'), 'priority': 2}
|
||||
|
@ -271,12 +327,15 @@ class BOXCAR:
|
|||
|
||||
class PUSHBULLET:
|
||||
|
||||
def __init__(self):
|
||||
def __init__(self, test_apikey=None):
|
||||
self.PUSH_URL = "https://api.pushbullet.com/v2/pushes"
|
||||
self.apikey = mylar.PUSHBULLET_APIKEY
|
||||
if test_apikey is None:
|
||||
self.apikey = mylar.PUSHBULLET_APIKEY
|
||||
else:
|
||||
self.apikey = test_apikey
|
||||
self.deviceid = mylar.PUSHBULLET_DEVICEID
|
||||
self._json_header = {'Content-Type': 'application/json',
|
||||
'Authorization': 'Basic %s' % base64.b64encode(mylar.PUSHBULLET_APIKEY + ":")}
|
||||
'Authorization': 'Basic %s' % base64.b64encode(self.apikey + ":")}
|
||||
self._session = requests.Session()
|
||||
self._session.headers.update(self._json_header)
|
||||
|
||||
|
@ -284,8 +343,6 @@ class PUSHBULLET:
|
|||
return self.notify(method="GET")
|
||||
|
||||
def notify(self, snline=None, prline=None, prline2=None, snatched=None, sent_to=None, prov=None, module=None, method=None):
|
||||
if not mylar.PUSHBULLET_ENABLED:
|
||||
return
|
||||
if module is None:
|
||||
module = ''
|
||||
module += '[NOTIFIER]'
|
||||
|
@ -317,19 +374,22 @@ class PUSHBULLET:
|
|||
'body': message.encode('utf-8')}
|
||||
|
||||
r = self._session.post(self.PUSH_URL, data=json.dumps(data))
|
||||
|
||||
dt = r.json()
|
||||
if r.status_code == 200:
|
||||
if method == 'GET':
|
||||
return r.json()
|
||||
return dt
|
||||
else:
|
||||
logger.info(module + ' PushBullet notifications sent.')
|
||||
return True
|
||||
return {'status': True,
|
||||
'message': 'APIKEY verified OK / notification sent'}
|
||||
elif r.status_code >= 400 and r.status_code < 500:
|
||||
logger.error(module + ' PushBullet request failed: %s' % r.content)
|
||||
return False
|
||||
return {'status': False,
|
||||
'message': '[' + str(r.status_code) + '] ' + dt['error']['message']}
|
||||
else:
|
||||
logger.error(module + ' PushBullet notification failed serverside.')
|
||||
return False
|
||||
logger.error(module + ' PushBullet notification failed serverside: %s' % r.content)
|
||||
return {'status': False,
|
||||
'message': '[' + str(r.status_code) + '] ' + dt['error']['message']}
|
||||
|
||||
def test_notify(self):
|
||||
return self.notify(prline='Test Message', prline2='Release the Ninjas!')
|
||||
|
|
|
@ -5153,13 +5153,14 @@ class WebInterface(object):
|
|||
return mylar.rsscheck.torrents(pickfeed='4', seriesname=search)
|
||||
search_32p.exposed = True
|
||||
|
||||
def testNMA(self):
|
||||
nma = notifiers.NMA()
|
||||
def testNMA(self, apikey):
|
||||
nma = notifiers.NMA(test_apikey=apikey)
|
||||
result = nma.test_notify()
|
||||
if result == True:
|
||||
return "Successfully sent NMA test - check to make sure it worked"
|
||||
if result['status'] == True:
|
||||
return result['message']
|
||||
else:
|
||||
return "Error sending test message to NMA"
|
||||
logger.warn('APIKEY used for test was : %s' % apikey)
|
||||
return result['message']
|
||||
testNMA.exposed = True
|
||||
|
||||
def testprowl(self):
|
||||
|
@ -5189,13 +5190,14 @@ class WebInterface(object):
|
|||
return "Error sending test message to Pushover"
|
||||
testpushover.exposed = True
|
||||
|
||||
def testpushbullet(self):
|
||||
pushbullet = notifiers.PUSHBULLET()
|
||||
def testpushbullet(self, apikey):
|
||||
pushbullet = notifiers.PUSHBULLET(test_apikey=apikey)
|
||||
result = pushbullet.test_notify()
|
||||
if result == True:
|
||||
return "Successfully sent Pushbullet test - check to make sure it worked"
|
||||
if result['status'] == True:
|
||||
return result['message']
|
||||
else:
|
||||
return "Error sending test message to Pushbullet"
|
||||
logger.warn('APIKEY used for test was : %s' % apikey)
|
||||
return result['message']
|
||||
testpushbullet.exposed = True
|
||||
|
||||
def testtelegram(self):
|
||||
|
|
Loading…
Reference in New Issue