mirror of
https://github.com/YunoHost/yunohost.git
synced 2024-09-03 20:06:10 +02:00
Added an optionnal "password" argument
to the "yunohost dyndns subscribe" command
This commit is contained in:
parent
8895aee7a3
commit
f9afc19ed4
3 changed files with 19 additions and 3 deletions
|
@ -356,6 +356,8 @@
|
||||||
"dyndns_key_generating": "Generating DNS key... It may take a while.",
|
"dyndns_key_generating": "Generating DNS key... It may take a while.",
|
||||||
"dyndns_key_not_found": "DNS key not found for the domain",
|
"dyndns_key_not_found": "DNS key not found for the domain",
|
||||||
"dyndns_no_domain_registered": "No domain registered with DynDNS",
|
"dyndns_no_domain_registered": "No domain registered with DynDNS",
|
||||||
|
"dyndns_no_recovery_password": "No recovery password specified! In case you loose control of this domain, you will need to contact an administrator in the YunoHost team!",
|
||||||
|
"dyndns_added_password": "Remember your recovery password, you can use it to delete this domain record.",
|
||||||
"dyndns_provider_unreachable": "Unable to reach DynDNS provider {provider}: either your YunoHost is not correctly connected to the internet or the dynette server is down.",
|
"dyndns_provider_unreachable": "Unable to reach DynDNS provider {provider}: either your YunoHost is not correctly connected to the internet or the dynette server is down.",
|
||||||
"dyndns_registered": "DynDNS domain registered",
|
"dyndns_registered": "DynDNS domain registered",
|
||||||
"dyndns_registration_failed": "Could not register DynDNS domain: {error}",
|
"dyndns_registration_failed": "Could not register DynDNS domain: {error}",
|
||||||
|
@ -685,4 +687,4 @@
|
||||||
"yunohost_installing": "Installing YunoHost...",
|
"yunohost_installing": "Installing YunoHost...",
|
||||||
"yunohost_not_installed": "YunoHost is not correctly installed. Please run 'yunohost tools postinstall'",
|
"yunohost_not_installed": "YunoHost is not correctly installed. Please run 'yunohost tools postinstall'",
|
||||||
"yunohost_postinstall_end_tip": "The post-install completed! To finalize your setup, please consider:\n - adding a first user through the 'Users' section of the webadmin (or 'yunohost user create <username>' in command-line);\n - diagnose potential issues through the 'Diagnosis' section of the webadmin (or 'yunohost diagnosis run' in command-line);\n - reading the 'Finalizing your setup' and 'Getting to know YunoHost' parts in the admin documentation: https://yunohost.org/admindoc."
|
"yunohost_postinstall_end_tip": "The post-install completed! To finalize your setup, please consider:\n - adding a first user through the 'Users' section of the webadmin (or 'yunohost user create <username>' in command-line);\n - diagnose potential issues through the 'Diagnosis' section of the webadmin (or 'yunohost diagnosis run' in command-line);\n - reading the 'Finalizing your setup' and 'Getting to know YunoHost' parts in the admin documentation: https://yunohost.org/admindoc."
|
||||||
}
|
}
|
||||||
|
|
|
@ -1406,6 +1406,12 @@ dyndns:
|
||||||
-k:
|
-k:
|
||||||
full: --key
|
full: --key
|
||||||
help: Public DNS key
|
help: Public DNS key
|
||||||
|
-p:
|
||||||
|
full: --password
|
||||||
|
help: Password used to later delete the domain
|
||||||
|
extra:
|
||||||
|
pattern: *pattern_password
|
||||||
|
comment: dyndns_added_password
|
||||||
|
|
||||||
### dyndns_update()
|
### dyndns_update()
|
||||||
update:
|
update:
|
||||||
|
|
|
@ -29,6 +29,7 @@ import json
|
||||||
import glob
|
import glob
|
||||||
import base64
|
import base64
|
||||||
import subprocess
|
import subprocess
|
||||||
|
import hashlib
|
||||||
|
|
||||||
from moulinette import m18n
|
from moulinette import m18n
|
||||||
from moulinette.core import MoulinetteError
|
from moulinette.core import MoulinetteError
|
||||||
|
@ -75,15 +76,19 @@ def _dyndns_available(domain):
|
||||||
|
|
||||||
|
|
||||||
@is_unit_operation()
|
@is_unit_operation()
|
||||||
def dyndns_subscribe(operation_logger, domain=None, key=None):
|
def dyndns_subscribe(operation_logger, domain=None, key=None, password=None):
|
||||||
"""
|
"""
|
||||||
Subscribe to a DynDNS service
|
Subscribe to a DynDNS service
|
||||||
|
|
||||||
Keyword argument:
|
Keyword argument:
|
||||||
domain -- Full domain to subscribe with
|
domain -- Full domain to subscribe with
|
||||||
key -- Public DNS key
|
key -- Public DNS key
|
||||||
|
password -- Password that will be used to delete the domain
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
if password is None:
|
||||||
|
logger.warning(m18n.n('dyndns_no_recovery_password'))
|
||||||
|
|
||||||
if _guess_current_dyndns_domain() != (None, None):
|
if _guess_current_dyndns_domain() != (None, None):
|
||||||
raise YunohostValidationError("domain_dyndns_already_subscribed")
|
raise YunohostValidationError("domain_dyndns_already_subscribed")
|
||||||
|
|
||||||
|
@ -138,9 +143,12 @@ def dyndns_subscribe(operation_logger, domain=None, key=None):
|
||||||
try:
|
try:
|
||||||
# Yeah the secret is already a base64-encoded but we double-bas64-encode it, whatever...
|
# Yeah the secret is already a base64-encoded but we double-bas64-encode it, whatever...
|
||||||
b64encoded_key = base64.b64encode(secret.encode()).decode()
|
b64encoded_key = base64.b64encode(secret.encode()).decode()
|
||||||
|
data = {"subdomain": domain}
|
||||||
|
if password:
|
||||||
|
data["recovery_password"]=hashlib.sha256((domain+":"+password.strip()).encode('utf-8')).hexdigest()
|
||||||
r = requests.post(
|
r = requests.post(
|
||||||
f"https://{DYNDNS_PROVIDER}/key/{b64encoded_key}?key_algo=hmac-sha512",
|
f"https://{DYNDNS_PROVIDER}/key/{b64encoded_key}?key_algo=hmac-sha512",
|
||||||
data={"subdomain": domain},
|
data=data,
|
||||||
timeout=30,
|
timeout=30,
|
||||||
)
|
)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
|
|
Loading…
Add table
Reference in a new issue