mirror of https://github.com/evilhero/mylar
implement torznab test
This commit is contained in:
parent
d1ff6079a0
commit
b3921381a2
|
@ -892,9 +892,11 @@
|
||||||
torznab_enabled = "checked"
|
torznab_enabled = "checked"
|
||||||
else:
|
else:
|
||||||
torznab_enabled = ""
|
torznab_enabled = ""
|
||||||
|
if torznab[2] == '1' or torznab[2] == 1:
|
||||||
|
torznab_verify = "checked"
|
||||||
|
else:
|
||||||
|
torznab_verify = ""
|
||||||
%>
|
%>
|
||||||
|
|
||||||
<div class="config" id="torznab${torznab_number}">
|
<div class="config" id="torznab${torznab_number}">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<label>Torznab Name</label>
|
<label>Torznab Name</label>
|
||||||
|
@ -904,13 +906,18 @@
|
||||||
<label>Torznab Host</label>
|
<label>Torznab Host</label>
|
||||||
<input type="text" name="torznab_host${torznab_number}" id="torznab_host${torznab_number}" value="${torznab[1]}" size="30">
|
<input type="text" name="torznab_host${torznab_number}" id="torznab_host${torznab_number}" value="${torznab[1]}" size="30">
|
||||||
</div>
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<label>Verify SSL</label>
|
||||||
|
<input type="checkbox" name="torznab_verify${torznab_number}" id="torznab_verify${torznab_number}" value="${torznab[2]}">
|
||||||
|
</div>
|
||||||
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<label>Torznab API</label>
|
<label>Torznab API</label>
|
||||||
<input type="text" name="torznab_apikey${torznab_number}" id="torznab_apikey${torznab_number}" value="${torznab[2]}" size="36">
|
<input type="text" name="torznab_apikey${torznab_number}" id="torznab_apikey${torznab_number}" value="${torznab[3]}" size="36">
|
||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<label>Torznab Category</label>
|
<label>Torznab Category</label>
|
||||||
<input type="text" name="torznab_category${torznab_number}" id="torznab_category${torznab_number}" value="${torznab[3]}" size="12">
|
<input type="text" name="torznab_category${torznab_number}" id="torznab_category${torznab_number}" value="${torznab[4]}" size="12">
|
||||||
</div>
|
</div>
|
||||||
<div class="row checkbox">
|
<div class="row checkbox">
|
||||||
<input id="torznab_enabled${torznab_number}" type="checkbox" name="torznab_enabled${torznab_number}" value="1" ${torznab_enabled} /><label>Enabled</label>
|
<input id="torznab_enabled${torznab_number}" type="checkbox" name="torznab_enabled${torznab_number}" value="1" ${torznab_enabled} /><label>Enabled</label>
|
||||||
|
@ -2179,7 +2186,7 @@
|
||||||
|
|
||||||
$("#add_torznab").click(function() {
|
$("#add_torznab").click(function() {
|
||||||
var intId = $("#torznab_providers > div").size() + deletedTorznabs + 1;
|
var intId = $("#torznab_providers > div").size() + deletedTorznabs + 1;
|
||||||
var torformfields = $("<div class=\"config\" id=\"torznab" + intId + "\"><div class=\"row\"><label>Torznab Name</label><input type=\"text\" id=\"torznab_name" + intId + "\" name=\"torznab_name" + intId + "\" size=\"36\"></div><div class=\"row\"><label>Torznab Host</label><input type=\"text\" id=\"torznab_host" + intId + "\" name=\"torznab_host" + intId + "\" + value=\"http://\" + size=\"30\"></div><div class=\"row\"><label>Torznab API</label><input type=\"text\" id=\"torznab_apikey" + intId + "\" name=\"torznab_apikey" + intId + "\" size=\"36\"></div><div class=\"row\"><label>Torznab Category</label><input type=\"text\" id=\"torznab_category" + intId + "\" name=\"torznab_category" + intId + "\" size=\"36\"></div><div class=\"row checkbox\"><input type=\"checkbox\" name=\"torznab_enabled" + intId + "\" value=\"1\" checked /><label>Enabled</label></div>");
|
var torformfields = $("<div class=\"config\" id=\"torznab" + intId + "\"><div class=\"row\"><label>Torznab Name</label><input type=\"text\" id=\"torznab_name" + intId + "\" name=\"torznab_name" + intId + "\" size=\"36\"></div><div class=\"row\"><label>Torznab Host</label><input type=\"text\" id=\"torznab_host" + intId + "\" name=\"torznab_host" + intId + "\" + value=\"http://\" + size=\"30\"></div><div class=\"row checkbox\"><input id=\"torznab_verify" + intId + "\" type=\"checkbox\" name=\"torznab_verify" + intId + "\" value=\"1\"/><label>Verify SSL</label></div><div class=\"row\"><label>Torznab API</label><input type=\"text\" id=\"torznab_apikey" + intId + "\" name=\"torznab_apikey" + intId + "\" size=\"36\"></div><div class=\"row\"><label>Torznab Category</label><input type=\"text\" id=\"torznab_category" + intId + "\" name=\"torznab_category" + intId + "\" size=\"36\"></div><div class=\"row checkbox\"><input type=\"checkbox\" name=\"torznab_enabled" + intId + "\" value=\"1\" checked /><label>Enabled</label></div>");
|
||||||
var tortestButton = $("<div class=\"row\"><img name=\"torznabstatus" + intId + "\" id=\"torznabstatus" + intId + "\" src=\"interfaces/default/images/success.png\" style=\"float:right;visibility:hidden;\" height=\"20\" width=\"20\" /><input type=\"button\" class=\"torznabtest\" value=\"Test\" id=\"torznab_test" + intId + "\" name=\"torznab_test" + intId + "\" style=\"float:right;margin-right:10px;\" /></div>");
|
var tortestButton = $("<div class=\"row\"><img name=\"torznabstatus" + intId + "\" id=\"torznabstatus" + intId + "\" src=\"interfaces/default/images/success.png\" style=\"float:right;visibility:hidden;\" height=\"20\" width=\"20\" /><input type=\"button\" class=\"torznabtest\" value=\"Test\" id=\"torznab_test" + intId + "\" name=\"torznab_test" + intId + "\" style=\"float:right;margin-right:10px;\" /></div>");
|
||||||
var torremoveButton = $("<div class=\"row\"><input type=\"button\" class=\"remove\" value=\"Remove\" /></div>");
|
var torremoveButton = $("<div class=\"row\"><input type=\"button\" class=\"remove\" value=\"Remove\" /></div>");
|
||||||
torremoveButton.click(function() {
|
torremoveButton.click(function() {
|
||||||
|
@ -2322,10 +2329,11 @@
|
||||||
|
|
||||||
$(".torznabtest").click(function () {
|
$(".torznabtest").click(function () {
|
||||||
var torznab = this.attributes["name"].value.replace('torznab_test', '');
|
var torznab = this.attributes["name"].value.replace('torznab_test', '');
|
||||||
var imagechk = document.getElementById("tornabstatus"+torznab);
|
var imagechk = document.getElementById("torznabstatus"+torznab);
|
||||||
var name = document.getElementById("torznab_name"+torznab).value;
|
var name = document.getElementById("torznab_name"+torznab).value;
|
||||||
var host = document.getElementById("torznab_host"+torznab).value;
|
var host = document.getElementById("torznab_host"+torznab).value;
|
||||||
var apikey = document.getElementById("torznab_api"+torznab).value;
|
var ssl = document.getElementById("torznab_verify"+torznab).checked;
|
||||||
|
var apikey = document.getElementById("torznab_apikey"+torznab).value;
|
||||||
$.get("testtorznab",
|
$.get("testtorznab",
|
||||||
{ name: name, host: host, ssl: ssl, apikey: apikey },
|
{ name: name, host: host, ssl: ssl, apikey: apikey },
|
||||||
function(data){
|
function(data){
|
||||||
|
|
|
@ -9,6 +9,7 @@ import shutil
|
||||||
import threading
|
import threading
|
||||||
import re
|
import re
|
||||||
import ConfigParser
|
import ConfigParser
|
||||||
|
import errno
|
||||||
import mylar
|
import mylar
|
||||||
from mylar import logger, helpers, encrypted
|
from mylar import logger, helpers, encrypted
|
||||||
|
|
||||||
|
@ -555,7 +556,7 @@ class Config(object):
|
||||||
if self.CONFIG_VERSION < 8:
|
if self.CONFIG_VERSION < 8:
|
||||||
print('Checking for existing torznab configuration...')
|
print('Checking for existing torznab configuration...')
|
||||||
if not any([self.TORZNAB_NAME is None, self.TORZNAB_HOST is None, self.TORZNAB_APIKEY is None, self.TORZNAB_CATEGORY is None]):
|
if not any([self.TORZNAB_NAME is None, self.TORZNAB_HOST is None, self.TORZNAB_APIKEY is None, self.TORZNAB_CATEGORY is None]):
|
||||||
torznabs =[(self.TORZNAB_NAME, self.TORZNAB_HOST, self.TORZNAB_APIKEY, self.TORZNAB_CATEGORY, str(int(self.ENABLE_TORZNAB)))]
|
torznabs =[(self.TORZNAB_NAME, self.TORZNAB_HOST, self.TORZNAB_VERIFY, self.TORZNAB_APIKEY, self.TORZNAB_CATEGORY, str(int(self.ENABLE_TORZNAB)))]
|
||||||
setattr(self, 'EXTRA_TORZNABS', torznabs)
|
setattr(self, 'EXTRA_TORZNABS', torznabs)
|
||||||
config.set('Torznab', 'EXTRA_TORZNABS', str(torznabs))
|
config.set('Torznab', 'EXTRA_TORZNABS', str(torznabs))
|
||||||
print('Successfully converted existing torznab for multiple configuration allowance. Removing old references.')
|
print('Successfully converted existing torznab for multiple configuration allowance. Removing old references.')
|
||||||
|
@ -563,9 +564,9 @@ class Config(object):
|
||||||
print('No existing torznab configuration found. Just removing config references at this point..')
|
print('No existing torznab configuration found. Just removing config references at this point..')
|
||||||
config.remove_option('Torznab', 'torznab_name')
|
config.remove_option('Torznab', 'torznab_name')
|
||||||
config.remove_option('Torznab', 'torznab_host')
|
config.remove_option('Torznab', 'torznab_host')
|
||||||
|
config.remove_option('Torznab', 'torznab_verify')
|
||||||
config.remove_option('Torznab', 'torznab_apikey')
|
config.remove_option('Torznab', 'torznab_apikey')
|
||||||
config.remove_option('Torznab', 'torznab_category')
|
config.remove_option('Torznab', 'torznab_category')
|
||||||
config.remove_option('Torznab', 'torznab_verify')
|
|
||||||
print('Successfully removed outdated config entries.')
|
print('Successfully removed outdated config entries.')
|
||||||
if self.newconfig < 9:
|
if self.newconfig < 9:
|
||||||
#rejig rtorrent settings due to change.
|
#rejig rtorrent settings due to change.
|
||||||
|
@ -1111,7 +1112,7 @@ class Config(object):
|
||||||
return extra_newznabs
|
return extra_newznabs
|
||||||
|
|
||||||
def get_extra_torznabs(self):
|
def get_extra_torznabs(self):
|
||||||
extra_torznabs = zip(*[iter(self.EXTRA_TORZNABS.split(', '))]*5)
|
extra_torznabs = zip(*[iter(self.EXTRA_TORZNABS.split(', '))]*6)
|
||||||
return extra_torznabs
|
return extra_torznabs
|
||||||
|
|
||||||
def provider_sequence(self):
|
def provider_sequence(self):
|
||||||
|
@ -1154,7 +1155,7 @@ class Config(object):
|
||||||
|
|
||||||
if self.ENABLE_TORZNAB:
|
if self.ENABLE_TORZNAB:
|
||||||
for ets in self.EXTRA_TORZNABS:
|
for ets in self.EXTRA_TORZNABS:
|
||||||
if str(ets[4]) == '1': # if torznabs are enabled
|
if str(ets[5]) == '1': # if torznabs are enabled
|
||||||
if ets[0] == "":
|
if ets[0] == "":
|
||||||
et_name = ets[1]
|
et_name = ets[1]
|
||||||
else:
|
else:
|
||||||
|
|
|
@ -3657,6 +3657,42 @@ def newznab_test(name, host, ssl, apikey):
|
||||||
logger.info('[ERROR:%s] - %s' % (code, description))
|
logger.info('[ERROR:%s] - %s' % (code, description))
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
def torznab_test(name, host, ssl, apikey):
|
||||||
|
from xml.dom.minidom import parseString, Element
|
||||||
|
params = {'t': 'search',
|
||||||
|
'apikey': apikey,
|
||||||
|
'o': 'xml'}
|
||||||
|
|
||||||
|
if host[-1:] == '/':
|
||||||
|
host = host[:-1]
|
||||||
|
headers = {'User-Agent': str(mylar.USER_AGENT)}
|
||||||
|
logger.info('host: %s' % host)
|
||||||
|
try:
|
||||||
|
r = requests.get(host, params=params, headers=headers, verify=bool(ssl))
|
||||||
|
except Exception as e:
|
||||||
|
logger.warn('Unable to connect: %s' % e)
|
||||||
|
return
|
||||||
|
else:
|
||||||
|
try:
|
||||||
|
data = parseString(r.content)
|
||||||
|
except Exception as e:
|
||||||
|
logger.warn('[WARNING] Error attempting to test: %s' % e)
|
||||||
|
|
||||||
|
try:
|
||||||
|
error_code = data.getElementsByTagName('error')[0].attributes['code'].value
|
||||||
|
except Exception as e:
|
||||||
|
logger.info('Connected - Status code returned: %s' % r.status_code)
|
||||||
|
if r.status_code == 200:
|
||||||
|
return True
|
||||||
|
else:
|
||||||
|
logger.warn('Received response - Status code returned: %s' % r.status_code)
|
||||||
|
return False
|
||||||
|
|
||||||
|
code = error_code
|
||||||
|
description = data.getElementsByTagName('error')[0].attributes['description'].value
|
||||||
|
logger.info('[ERROR:%s] - %s' % (code, description))
|
||||||
|
return False
|
||||||
|
|
||||||
def get_free_space(folder):
|
def get_free_space(folder):
|
||||||
min_threshold = 100000000 #threshold for minimum amount of freespace available (#100mb)
|
min_threshold = 100000000 #threshold for minimum amount of freespace available (#100mb)
|
||||||
if platform.system() == "Windows":
|
if platform.system() == "Windows":
|
||||||
|
|
|
@ -5008,7 +5008,7 @@ class WebInterface(object):
|
||||||
"dognzb_verify": helpers.checked(mylar.CONFIG.DOGNZB_VERIFY),
|
"dognzb_verify": helpers.checked(mylar.CONFIG.DOGNZB_VERIFY),
|
||||||
"experimental": helpers.checked(mylar.CONFIG.EXPERIMENTAL),
|
"experimental": helpers.checked(mylar.CONFIG.EXPERIMENTAL),
|
||||||
"enable_torznab": helpers.checked(mylar.CONFIG.ENABLE_TORZNAB),
|
"enable_torznab": helpers.checked(mylar.CONFIG.ENABLE_TORZNAB),
|
||||||
"extra_torznabs": sorted(mylar.CONFIG.EXTRA_TORZNABS, key=itemgetter(4), reverse=True),
|
"extra_torznabs": sorted(mylar.CONFIG.EXTRA_TORZNABS, key=itemgetter(5), reverse=True),
|
||||||
"newznab": helpers.checked(mylar.CONFIG.NEWZNAB),
|
"newznab": helpers.checked(mylar.CONFIG.NEWZNAB),
|
||||||
"extra_newznabs": sorted(mylar.CONFIG.EXTRA_NEWZNABS, key=itemgetter(5), reverse=True),
|
"extra_newznabs": sorted(mylar.CONFIG.EXTRA_NEWZNABS, key=itemgetter(5), reverse=True),
|
||||||
"enable_ddl": helpers.checked(mylar.CONFIG.ENABLE_DDL),
|
"enable_ddl": helpers.checked(mylar.CONFIG.ENABLE_DDL),
|
||||||
|
@ -5426,6 +5426,10 @@ class WebInterface(object):
|
||||||
if torznab_name == "":
|
if torznab_name == "":
|
||||||
continue
|
continue
|
||||||
torznab_host = helpers.clean_url(kwargs['torznab_host' + torznab_number])
|
torznab_host = helpers.clean_url(kwargs['torznab_host' + torznab_number])
|
||||||
|
try:
|
||||||
|
torznab_verify = kwargs['torznab_verify' + torznab_number]
|
||||||
|
except:
|
||||||
|
torznab_verify = 0
|
||||||
torznab_api = kwargs['torznab_apikey' + torznab_number]
|
torznab_api = kwargs['torznab_apikey' + torznab_number]
|
||||||
torznab_category = kwargs['torznab_category' + torznab_number]
|
torznab_category = kwargs['torznab_category' + torznab_number]
|
||||||
try:
|
try:
|
||||||
|
@ -5435,7 +5439,7 @@ class WebInterface(object):
|
||||||
|
|
||||||
del kwargs[kwarg]
|
del kwargs[kwarg]
|
||||||
|
|
||||||
mylar.CONFIG.EXTRA_TORZNABS.append((torznab_name, torznab_host, torznab_api, torznab_category, torznab_enabled))
|
mylar.CONFIG.EXTRA_TORZNABS.append((torznab_name, torznab_host, torznab_verify, torznab_api, torznab_category, torznab_enabled))
|
||||||
|
|
||||||
mylar.CONFIG.process_kwargs(kwargs)
|
mylar.CONFIG.process_kwargs(kwargs)
|
||||||
|
|
||||||
|
@ -6006,6 +6010,24 @@ class WebInterface(object):
|
||||||
return 'Error - failed running test for %s' % name
|
return 'Error - failed running test for %s' % name
|
||||||
testnewznab.exposed = True
|
testnewznab.exposed = True
|
||||||
|
|
||||||
|
def testtorznab(self, name, host, ssl, apikey):
|
||||||
|
logger.fdebug('ssl/verify: %s' % ssl)
|
||||||
|
if 'ssl' == '0' or ssl == '1':
|
||||||
|
ssl = bool(int(ssl))
|
||||||
|
else:
|
||||||
|
if ssl == 'false':
|
||||||
|
ssl = False
|
||||||
|
else:
|
||||||
|
ssl = True
|
||||||
|
result = helpers.torznab_test(name, host, ssl, apikey)
|
||||||
|
if result is True:
|
||||||
|
logger.info('Successfully tested %s [%s] - valid api response received' % (name, host))
|
||||||
|
return 'Successfully tested %s!' % name
|
||||||
|
else:
|
||||||
|
print result
|
||||||
|
logger.warn('Testing failed to %s [HOST:%s][SSL:%s]' % (name, host, bool(ssl)))
|
||||||
|
return 'Error - failed running test for %s' % name
|
||||||
|
testtorznab.exposed = True
|
||||||
|
|
||||||
def orderThis(self, **kwargs):
|
def orderThis(self, **kwargs):
|
||||||
return
|
return
|
||||||
|
|
Loading…
Reference in New Issue