summaryrefslogtreecommitdiff
path: root/library/hysteria.py
diff options
context:
space:
mode:
Diffstat (limited to 'library/hysteria.py')
-rw-r--r--library/hysteria.py66
1 files changed, 66 insertions, 0 deletions
diff --git a/library/hysteria.py b/library/hysteria.py
new file mode 100644
index 00000000..99f67871
--- /dev/null
+++ b/library/hysteria.py
@@ -0,0 +1,66 @@
+#!/usr/local/bin/python3
+
+from __future__ import absolute_import, division, print_function
+__metaclass__ = type
+
+from ansible.module_utils.basic import AnsibleModule
+import json, shlex, os
+from datetime import datetime
+
+HYSTERIA_CONFIG_FILE = "/var/reactance/hysteria/etc/config.json"
+SALAMANDER_PASSWD_FILE = "/var/reactance/hysteria/salamander_password"
+
+def exec_shell(cmd, module):
+ rc, stdout, stderr= module.run_command(cmd, environ_update={'TERM': 'dumb'})
+ if rc != 0:
+ module.fail_json(stderr)
+ return stdout.rstrip()
+
+def hysteria_get_users():
+ with open(HYSTERIA_CONFIG_FILE, "r") as f:
+ hysteria_config_dict = json.loads(f.read())
+ previous_users = hysteria_config_dict["auth"]["userpass"]
+ return previous_users, hysteria_config_dict
+
+def hysteria_user_control(update_password, module):
+ previous_users, hysteria_config_dict = hysteria_get_users()
+ selected_users = set(update_password.keys())
+ user_pass_dict = {}
+ new_users_dict = {}
+ for user in selected_users:
+ if user in previous_users and not update_password[user]:
+ user_pass_dict[user] = {"hysteria": previous_users[user]}
+ else:
+ user_pass_dict[user] = {"hysteria": exec_shell("openssl rand -hex 32", module)}
+ new_users_dict[user] = user_pass_dict[user]
+
+ with open(HYSTERIA_CONFIG_FILE, "w") as f:
+ hysteria_config_dict["auth"]["userpass"] = user_pass_dict
+ f.write(json.dumps(hysteria_config_dict, indent=1))
+
+ return new_users_dict
+
+def run_module():
+ module = AnsibleModule(
+ argument_spec=dict(
+ users = dict(type='list', required=True)
+ ),
+ supports_check_mode=True
+ )
+ users = module.params["users"]
+ update_password = {}
+
+ for user in users:
+ if 'regen' in user.keys() and user['regen']:
+ update_password[user['user']] = True
+ else:
+ update_password[user['user']] = False
+
+ user_pass_dict = hysteria_user_control(update_password, module)
+ module.exit_json(changed=True, msg=user_pass_dict)
+
+def main():
+ run_module()
+
+if __name__ == "__main__":
+ main()