aboutsummaryrefslogtreecommitdiffstats
path: root/filter_plugins/znc.py
diff options
context:
space:
mode:
Diffstat (limited to 'filter_plugins/znc.py')
-rw-r--r--filter_plugins/znc.py32
1 files changed, 32 insertions, 0 deletions
diff --git a/filter_plugins/znc.py b/filter_plugins/znc.py
new file mode 100644
index 0000000..243cdd5
--- /dev/null
+++ b/filter_plugins/znc.py
@@ -0,0 +1,32 @@
+# Copyright (c) 2018 Aaron LI <aly@aaronly.me>
+# MIT License
+
+"""
+Custom Ansible template filters for "znc" role.
+"""
+
+import os
+import base64
+import hashlib
+
+
+def znc_makepass(p, method="sha256", saltlen=20):
+ """
+ Generate the salted hashed password for ZNC configuration.
+
+ Implement the "znc --makepass" command.
+
+ ZNC password format: <method>#<hash>#<salt>
+ """
+ salt = os.urandom(saltlen)
+ salt = base64.b64encode(salt)[:saltlen]
+ s = p + salt
+ h = getattr(hashlib, method)(s)
+ return "%s#%s#%s" % (method, h.hexdigest(), salt)
+
+
+class FilterModule(object):
+ def filters(self):
+ return {
+ "znc_makepass": znc_makepass,
+ }