diff --git a/data/actionsmap/yunohost.yml b/data/actionsmap/yunohost.yml index 8d549ebb3..502d0b7d5 100644 --- a/data/actionsmap/yunohost.yml +++ b/data/actionsmap/yunohost.yml @@ -550,6 +550,7 @@ app: checkport: action_help: Check availability of a local port api: GET /tools/checkport + deprecated: true arguments: port: help: Port to check @@ -1345,6 +1346,16 @@ tools: help: Show private data (domain, IP) action: store_true + ### tools_port_available() + port-available: + action_help: Check availability of a local port + api: GET /tools/portavailable + arguments: + port: + help: Port to check + extra: + pattern: *pattern_port + ############################# # Hook # diff --git a/src/yunohost/app.py b/src/yunohost/app.py index 66e5785da..622e5fb77 100644 --- a/src/yunohost/app.py +++ b/src/yunohost/app.py @@ -29,7 +29,6 @@ import shutil import yaml import time import re -import socket import urlparse import errno import subprocess @@ -955,12 +954,12 @@ def app_checkport(port): port -- Port to check """ - try: - s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) - s.settimeout(1) - s.connect(("localhost", int(port))) - s.close() - except socket.error: + + # This import cannot be moved on top of file because it create a recursive + # import... + from yunohost.tools import tools_portavailable + availability = tools_portavailable(port) + if availability["available"]: logger.success(m18n.n('port_available', port=int(port))) else: raise MoulinetteError(errno.EINVAL, diff --git a/src/yunohost/tools.py b/src/yunohost/tools.py index 8a9cb0664..805eb2c45 100644 --- a/src/yunohost/tools.py +++ b/src/yunohost/tools.py @@ -31,6 +31,7 @@ import errno import logging import subprocess import pwd +import socket from collections import OrderedDict import apt @@ -574,3 +575,22 @@ def tools_diagnosis(auth, private=False): diagnosis['private']['domains'] = domain_list(auth)['domains'] return diagnosis + + +def tools_port_available(port): + """ + Check availability of a local port + + Keyword argument: + port -- Port to check + + """ + try: + s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + s.settimeout(1) + s.connect(("localhost", int(port))) + s.close() + except socket.error: + return True + else: + return False