kopia lustrzana https://github.com/dgtlmoon/changedetection.io
54 wiersze
1.8 KiB
Python
54 wiersze
1.8 KiB
Python
import os
|
|
from changedetectionio.strtobool import strtobool
|
|
from flask_restful import abort, Resource
|
|
from flask import request
|
|
import validators
|
|
from . import auth, validate_openapi_request
|
|
|
|
|
|
class Import(Resource):
|
|
def __init__(self, **kwargs):
|
|
# datastore is a black box dependency
|
|
self.datastore = kwargs['datastore']
|
|
|
|
@auth.check_token
|
|
@validate_openapi_request('importWatches')
|
|
def post(self):
|
|
"""Import a list of watched URLs."""
|
|
|
|
extras = {}
|
|
|
|
if request.args.get('proxy'):
|
|
plist = self.datastore.proxy_list
|
|
if not request.args.get('proxy') in plist:
|
|
return "Invalid proxy choice, currently supported proxies are '{}'".format(', '.join(plist)), 400
|
|
else:
|
|
extras['proxy'] = request.args.get('proxy')
|
|
|
|
dedupe = strtobool(request.args.get('dedupe', 'true'))
|
|
|
|
tags = request.args.get('tag')
|
|
tag_uuids = request.args.get('tag_uuids')
|
|
|
|
if tag_uuids:
|
|
tag_uuids = tag_uuids.split(',')
|
|
|
|
urls = request.get_data().decode('utf8').splitlines()
|
|
added = []
|
|
allow_simplehost = not strtobool(os.getenv('BLOCK_SIMPLEHOSTS', 'False'))
|
|
for url in urls:
|
|
url = url.strip()
|
|
if not len(url):
|
|
continue
|
|
|
|
# If hosts that only contain alphanumerics are allowed ("localhost" for example)
|
|
if not validators.url(url, simple_host=allow_simplehost):
|
|
return f"Invalid or unsupported URL - {url}", 400
|
|
|
|
if dedupe and self.datastore.url_exists(url):
|
|
continue
|
|
|
|
new_uuid = self.datastore.add_watch(url=url, extras=extras, tag=tags, tag_uuids=tag_uuids)
|
|
added.append(new_uuid)
|
|
|
|
return added |