mirror of
https://github.com/YunoHost/moulinette.git
synced 2024-09-03 20:06:31 +02:00
[enh] Allow to select hooks names to execute in hook_callback
This commit is contained in:
parent
ba02319915
commit
d1b31d5f33
8 changed files with 43 additions and 14 deletions
|
@ -1161,6 +1161,10 @@ hook:
|
||||||
arguments:
|
arguments:
|
||||||
action:
|
action:
|
||||||
help: Action name
|
help: Action name
|
||||||
|
-n:
|
||||||
|
full: --hooks
|
||||||
|
help: List of hooks names to execute
|
||||||
|
nargs: '*'
|
||||||
-a:
|
-a:
|
||||||
full: --args
|
full: --args
|
||||||
help: Ordered list of arguments to pass to the script
|
help: Ordered list of arguments to pass to the script
|
||||||
|
|
6
app.py
6
app.py
|
@ -591,7 +591,7 @@ def app_addaccess(auth, apps, users):
|
||||||
new_users = new_users +','+ allowed_user
|
new_users = new_users +','+ allowed_user
|
||||||
|
|
||||||
app_setting(app, 'allowed_users', new_users.strip())
|
app_setting(app, 'allowed_users', new_users.strip())
|
||||||
hook_callback('post_app_addaccess', [app, new_users])
|
hook_callback('post_app_addaccess', args=[app, new_users])
|
||||||
|
|
||||||
app_ssowatconf(auth)
|
app_ssowatconf(auth)
|
||||||
|
|
||||||
|
@ -644,7 +644,7 @@ def app_removeaccess(auth, apps, users):
|
||||||
new_users=new_users+','+user['username']
|
new_users=new_users+','+user['username']
|
||||||
|
|
||||||
app_setting(app, 'allowed_users', new_users.strip())
|
app_setting(app, 'allowed_users', new_users.strip())
|
||||||
hook_callback('post_app_removeaccess', [app, new_users])
|
hook_callback('post_app_removeaccess', args=[app, new_users])
|
||||||
|
|
||||||
app_ssowatconf(auth)
|
app_ssowatconf(auth)
|
||||||
|
|
||||||
|
@ -677,7 +677,7 @@ def app_clearaccess(auth, apps):
|
||||||
if 'allowed_users' in app_settings:
|
if 'allowed_users' in app_settings:
|
||||||
app_setting(app, 'allowed_users', delete=True)
|
app_setting(app, 'allowed_users', delete=True)
|
||||||
|
|
||||||
hook_callback('post_app_clearaccess', [app])
|
hook_callback('post_app_clearaccess', args=[app])
|
||||||
|
|
||||||
app_ssowatconf(auth)
|
app_ssowatconf(auth)
|
||||||
|
|
||||||
|
|
|
@ -146,7 +146,7 @@ def backup_create(name=None, description=None, output_directory=None,
|
||||||
|
|
||||||
# Run hooks
|
# Run hooks
|
||||||
msignals.display(m18n.n('backup_running_hooks'))
|
msignals.display(m18n.n('backup_running_hooks'))
|
||||||
hook_callback('backup', [tmp_dir])
|
hook_callback('backup', args=[tmp_dir])
|
||||||
|
|
||||||
# Create backup info file
|
# Create backup info file
|
||||||
with open("%s/info.json" % tmp_dir, 'w') as f:
|
with open("%s/info.json" % tmp_dir, 'w') as f:
|
||||||
|
@ -278,7 +278,7 @@ def backup_restore(name, ignore_apps=False, force=False):
|
||||||
|
|
||||||
# Run hooks
|
# Run hooks
|
||||||
msignals.display(m18n.n('restore_running_hooks'))
|
msignals.display(m18n.n('restore_running_hooks'))
|
||||||
hook_callback('restore', [tmp_dir])
|
hook_callback('restore', args=[tmp_dir])
|
||||||
|
|
||||||
# Remove temporary directory
|
# Remove temporary directory
|
||||||
os.system('rm -rf %s' % tmp_dir)
|
os.system('rm -rf %s' % tmp_dir)
|
||||||
|
|
|
@ -186,7 +186,8 @@ def firewall_reload():
|
||||||
for port in firewall['ipv4'][protocol]:
|
for port in firewall['ipv4'][protocol]:
|
||||||
os.system("iptables -A INPUT -p %s --dport %d -j ACCEPT" % (protocol, port))
|
os.system("iptables -A INPUT -p %s --dport %d -j ACCEPT" % (protocol, port))
|
||||||
|
|
||||||
hook_callback('post_iptable_rules', [upnp, os.path.exists("/proc/net/if_inet6")])
|
hook_callback('post_iptable_rules',
|
||||||
|
args=[upnp, os.path.exists("/proc/net/if_inet6")])
|
||||||
|
|
||||||
os.system("iptables -A INPUT -i lo -j ACCEPT")
|
os.system("iptables -A INPUT -i lo -j ACCEPT")
|
||||||
os.system("iptables -A INPUT -p icmp -j ACCEPT")
|
os.system("iptables -A INPUT -p icmp -j ACCEPT")
|
||||||
|
|
35
hook.py
35
hook.py
|
@ -165,20 +165,40 @@ def hook_list(action, list_by='name', show_info=False):
|
||||||
return { 'hooks': result }
|
return { 'hooks': result }
|
||||||
|
|
||||||
|
|
||||||
def hook_callback(action, args=None):
|
def hook_callback(action, hooks=[], args=None):
|
||||||
"""
|
"""
|
||||||
Execute all scripts binded to an action
|
Execute all scripts binded to an action
|
||||||
|
|
||||||
Keyword argument:
|
Keyword argument:
|
||||||
action -- Action name
|
action -- Action name
|
||||||
|
hooks -- List of hooks names to execute
|
||||||
args -- Ordered list of arguments to pass to the script
|
args -- Ordered list of arguments to pass to the script
|
||||||
|
|
||||||
"""
|
"""
|
||||||
result = { 'succeed': list(), 'failed': list() }
|
result = { 'succeed': list(), 'failed': list() }
|
||||||
|
hooks_dict = {}
|
||||||
|
|
||||||
# Retrieve hooks by priority
|
# Retrieve hooks
|
||||||
hooks = hook_list(action, list_by='priority', show_info=True)['hooks']
|
|
||||||
if not hooks:
|
if not hooks:
|
||||||
|
hooks_dict = hook_list(action, list_by='priority',
|
||||||
|
show_info=True)['hooks']
|
||||||
|
else:
|
||||||
|
hooks_names = hook_list(action, list_by='name',
|
||||||
|
show_info=True)['hooks']
|
||||||
|
# Iterate over given hooks names list
|
||||||
|
for n in hooks:
|
||||||
|
try:
|
||||||
|
hl = hooks_names[n]
|
||||||
|
except KeyError:
|
||||||
|
raise MoulinetteError(errno.EINVAL,
|
||||||
|
m18n.n('hook_name_unknown', n))
|
||||||
|
# Iterate over hooks with this name
|
||||||
|
for h in hl:
|
||||||
|
# Update hooks dict
|
||||||
|
d = hooks_dict.get(h['priority'], dict())
|
||||||
|
d.update({ n: { 'path': h['path'] }})
|
||||||
|
hooks_dict[h['priority']] = d
|
||||||
|
if not hooks_dict:
|
||||||
return result
|
return result
|
||||||
|
|
||||||
# Format arguments
|
# Format arguments
|
||||||
|
@ -188,16 +208,17 @@ def hook_callback(action, args=None):
|
||||||
args = [args]
|
args = [args]
|
||||||
|
|
||||||
# Iterate over hooks and execute them
|
# Iterate over hooks and execute them
|
||||||
for priority in sorted(hooks):
|
for priority in sorted(hooks_dict):
|
||||||
for name, info in iter(hooks[priority].items()):
|
for name, info in iter(hooks_dict[priority].items()):
|
||||||
|
filename = '%s-%s' % (priority, name)
|
||||||
try:
|
try:
|
||||||
hook_exec(info['path'], args=args)
|
hook_exec(info['path'], args=args)
|
||||||
except:
|
except:
|
||||||
logger.exception("error while executing hook '%s'",
|
logger.exception("error while executing hook '%s'",
|
||||||
info['path'])
|
info['path'])
|
||||||
result['failed'].append(name)
|
result['failed'].append(filename)
|
||||||
else:
|
else:
|
||||||
result['succeed'].append(name)
|
result['succeed'].append(filename)
|
||||||
return result
|
return result
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -79,6 +79,7 @@
|
||||||
"firewall_reloaded" : "Firewall successfully reloaded",
|
"firewall_reloaded" : "Firewall successfully reloaded",
|
||||||
|
|
||||||
"hook_list_by_invalid" : "Invalid property to list hook by",
|
"hook_list_by_invalid" : "Invalid property to list hook by",
|
||||||
|
"hook_name_unknown" : "Unknown hook name '{:s}'",
|
||||||
"hook_choice_invalid" : "Invalid choice '{:s}'",
|
"hook_choice_invalid" : "Invalid choice '{:s}'",
|
||||||
"hook_argument_missing" : "Missing argument '{:s}'",
|
"hook_argument_missing" : "Missing argument '{:s}'",
|
||||||
|
|
||||||
|
|
|
@ -79,6 +79,7 @@
|
||||||
"firewall_reloaded" : "Pare-feu rechargé avec succès",
|
"firewall_reloaded" : "Pare-feu rechargé avec succès",
|
||||||
|
|
||||||
"hook_list_by_invalid" : "Propriété pour lister les scripts incorrecte",
|
"hook_list_by_invalid" : "Propriété pour lister les scripts incorrecte",
|
||||||
|
"hook_name_unknown" : "Nom de script '{:s}' inconnu",
|
||||||
"hook_choice_invalid" : "Choix incorrect : '{:s}'",
|
"hook_choice_invalid" : "Choix incorrect : '{:s}'",
|
||||||
"hook_argument_missing" : "Argument manquant : '{:s}'",
|
"hook_argument_missing" : "Argument manquant : '{:s}'",
|
||||||
|
|
||||||
|
|
3
user.py
3
user.py
|
@ -186,7 +186,8 @@ def user_create(auth, username, firstname, lastname, mail, password):
|
||||||
app_ssowatconf(auth)
|
app_ssowatconf(auth)
|
||||||
#TODO: Send a welcome mail to user
|
#TODO: Send a welcome mail to user
|
||||||
msignals.display(m18n.n('user_created'), 'success')
|
msignals.display(m18n.n('user_created'), 'success')
|
||||||
hook_callback('post_user_create', [username, mail, password, firstname, lastname])
|
hook_callback('post_user_create',
|
||||||
|
args=[username, mail, password, firstname, lastname])
|
||||||
|
|
||||||
return { 'fullname' : fullname, 'username' : username, 'mail' : mail }
|
return { 'fullname' : fullname, 'username' : username, 'mail' : mail }
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue