luci-app-radicale2: Add v2 of CalDAV/CardDAV server
[project/luci.git] / libs / rpcd-mod-rad2-enc / files / rad2-enc
diff --git a/libs/rpcd-mod-rad2-enc/files/rad2-enc b/libs/rpcd-mod-rad2-enc/files/rad2-enc
new file mode 100755 (executable)
index 0000000..43bc493
--- /dev/null
@@ -0,0 +1,50 @@
+#!/usr/bin/python3
+
+import base64
+import sys
+import json
+from passlib import hash
+
+def main():
+
+    if len(sys.argv) < 2:
+        return -1
+
+    if sys.argv[1] == 'list':
+        print('{ "encrypt": { "type": "str", "plainpass": "str" } }\n')
+        return 0
+
+    if sys.argv[1] == 'call':
+        if len(sys.argv) < 3:
+            return -1
+
+    if sys.argv[2] != 'encrypt':
+        return -1
+
+    encpass = ""
+    try:
+        jsonin = json.loads(sys.stdin.readline())
+        enctype = jsonin['type'].strip()
+        plainpass = jsonin['plainpass']
+
+        if enctype == 'ssha':
+            encpass = hash.ldap_salted_sha1.hash(plainpass)
+        elif enctype == 'sha1':
+            encpass = hash.ldap_sha1.hash(plainpass)
+        elif enctype == 'plain':
+            encpass = plainpass
+        elif enctype == 'md5':
+            encpass = hash.apr_md5_crypt.hash(plainpass)
+        elif enctype == 'bcrypt':
+            encpass = hash.bcrypt.hash(plainpass)
+        elif enctype == 'crypt':
+            encpass = hash.des_crypt.hash(plainpass)
+
+    except:
+        encpass = ""
+
+    print(json.dumps({ "encrypted_password": encpass}))
+
+    return 0
+
+main()