mirror of
https://github.com/YunoHost/check-http.git
synced 2024-09-03 19:56:42 +02:00
Misc fixes / updates for messages
This commit is contained in:
parent
d23290299e
commit
1445a12ab6
1 changed files with 19 additions and 13 deletions
32
server.py
32
server.py
|
@ -57,6 +57,7 @@ async def check_port_is_open(ip, port):
|
|||
return result == 0
|
||||
|
||||
|
||||
# FIXME : remove it ? not used anymore...
|
||||
async def query_dns(host, dns_entry_type):
|
||||
loop = asyncio.get_event_loop()
|
||||
dns_resolver = aiodns.DNSResolver(loop=loop)
|
||||
|
@ -111,7 +112,7 @@ async def check_http(request):
|
|||
try:
|
||||
data = request.json
|
||||
except InvalidUsage:
|
||||
logger.info(f"Invalid json in request, body is : {request.body}")
|
||||
logger.info(f"Invalid json in request, body is: {request.body}")
|
||||
return json_response({
|
||||
"status": "error",
|
||||
"code": "error_bad_json",
|
||||
|
@ -119,21 +120,26 @@ async def check_http(request):
|
|||
}, status=400)
|
||||
|
||||
if not data or "domain" not in data or "nonce" not in data:
|
||||
logger.info(f"Unvalid request didn't specified a domain and a nonce id (body is : {request.body}")
|
||||
logger.info(f"Invalid request: didn't specified a domain and a nonce id (body is: {request.body}")
|
||||
return json_response({
|
||||
"status": "error",
|
||||
"code": "error_no_domain",
|
||||
"code": "error_no_domain_",
|
||||
"content": "Request must specify a domain and a nonce",
|
||||
}, status=400)
|
||||
|
||||
domain = data["domain"]
|
||||
|
||||
# Since now we are only checking the IP itself, it seems
|
||||
# unecessary to also have a rate limit on domains since the
|
||||
# rate limit on IP will be hit first ...
|
||||
# That would simplify some code, for example we could add the
|
||||
# rate limit check in a decorator for each route/check
|
||||
check_rate_limit_domain = check_rate_limit(domain, now)
|
||||
if check_rate_limit_domain:
|
||||
return check_rate_limit_domain
|
||||
|
||||
if not validators.domain(domain):
|
||||
logger.info(f"Invalid request, is not in the right format (domain is : {domain})")
|
||||
logger.info(f"Invalid request, is not in the right format (domain is: {domain})")
|
||||
return json_response({
|
||||
"status": "error",
|
||||
"code": "error_domain_bad_format",
|
||||
|
@ -145,7 +151,7 @@ async def check_http(request):
|
|||
# nonce id is arbitrarily defined to be a
|
||||
# 16-digit hexadecimal string
|
||||
if not re.match(r"^[a-f0-9]{16}$", nonce):
|
||||
logger.info(f"Invalid request, is not in the right format (nonce is : {nonce})")
|
||||
logger.info(f"Invalid request, is not in the right format (nonce is: {nonce})")
|
||||
return json_response({
|
||||
"status": "error",
|
||||
"code": "error_nonce_bad_format",
|
||||
|
@ -172,7 +178,7 @@ async def check_http(request):
|
|||
return json_response({
|
||||
"status": "error",
|
||||
"code": "error_http_check_connection_error",
|
||||
"content": "connection error, could not connect to the requested domain, it's very likely unreachable",
|
||||
"content": "Connection error: could not connect to the requested domain, it's very likely unreachable",
|
||||
}, status=418)
|
||||
except Exception:
|
||||
import traceback
|
||||
|
@ -181,7 +187,7 @@ async def check_http(request):
|
|||
return json_response({
|
||||
"status": "error",
|
||||
"code": "error_http_check_unknown_error",
|
||||
"content": "an error happen while trying to get your domain, it's very likely unreachable",
|
||||
"content": "An error happened while trying to reach your domain, it's very likely unreachable",
|
||||
}, status=400)
|
||||
|
||||
return json_response({"status": "ok"})
|
||||
|
@ -220,11 +226,11 @@ async def check_ports(request):
|
|||
try:
|
||||
data = request.json
|
||||
except InvalidUsage:
|
||||
logger.info(f"Invalid json in request, body is : {request.body}")
|
||||
logger.info(f"Invalid json in request, body is: {request.body}")
|
||||
return json_response({
|
||||
"status": "error",
|
||||
"code": "error_bad_json",
|
||||
"content": "Invalid usage, body isn't proper json",
|
||||
"content": "Invalid usage: body isn't proper json",
|
||||
}, status=400)
|
||||
|
||||
def is_port_number(p):
|
||||
|
@ -232,18 +238,18 @@ async def check_ports(request):
|
|||
|
||||
# Check "ports" exist in request and is a list of port
|
||||
if not data or "ports" not in data:
|
||||
logger.info(f"Unvalid request didn't specified a ports list (body is : {request.body}")
|
||||
logger.info(f"Invalid request didn't specified a ports list (body is: {request.body}")
|
||||
return json_response({
|
||||
"status": "error",
|
||||
"code": "error_no_ports_list",
|
||||
"content": "Request must specify a list of ports to check",
|
||||
}, status=400)
|
||||
elif not isinstance(data["ports"], list) or any(not is_port_number(p) for p in data["ports"]) or len(data["ports"]) > 30 or data["ports"] == []:
|
||||
logger.info(f"Invalid request, ports list is not an actual list of ports, or is too long : {request.body}")
|
||||
logger.info(f"Invalid request, ports list is not an actual list of ports, or is too long: {request.body}")
|
||||
return json_response({
|
||||
"status": "error",
|
||||
"code": "error_invalid_ports_list",
|
||||
"content": "This is not an acceptable port list : ports must be between 0 and 65535 and at most 30 ports can be checked",
|
||||
"content": "This is not an acceptable port list: ports must be between 0 and 65535 and at most 30 ports can be checked",
|
||||
}, status=400)
|
||||
|
||||
ports = set(data["ports"]) # Keep only a set so that we get unique ports
|
||||
|
@ -271,7 +277,7 @@ async def check_smtp(request):
|
|||
|
||||
@app.route("/")
|
||||
async def main(request):
|
||||
return html("You aren't really supposed to use this website using your browser.<br><br>It's a small server to check if a YunoHost instance can be reached by http before trying to instal a LE certificate.")
|
||||
return html("You aren't really supposed to use this website using your browser.<br><br>It's a small server with an API to check if a services running on YunoHost instance can be reached from 'the global internet'.")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
|
Loading…
Reference in a new issue