diff options
Diffstat (limited to 'libs/rpcd-mod-rad2-enc')
-rw-r--r-- | libs/rpcd-mod-rad2-enc/Makefile | 49 | ||||
-rwxr-xr-x | libs/rpcd-mod-rad2-enc/files/rad2-enc | 50 |
2 files changed, 99 insertions, 0 deletions
diff --git a/libs/rpcd-mod-rad2-enc/Makefile b/libs/rpcd-mod-rad2-enc/Makefile new file mode 100644 index 000000000..4cffc01cd --- /dev/null +++ b/libs/rpcd-mod-rad2-enc/Makefile @@ -0,0 +1,49 @@ +# +# Copyright (C) 2016-2017 Jo-Philipp Wich <jo@mein.io> +# +# Licensed under the Apache License, Version 2.0. +# + +include $(TOPDIR)/rules.mk + +PKG_NAME:=rpcd-mod-rad2-enc +PKG_VERSION:=20190109 +PKG_MAINTAINER:=Daniel Dickinson <cshored@thecshore.com> + +PKG_LICENSE:=Apache-2.0 + +PKG_BUILD_PARALLEL:=1 + +include $(INCLUDE_DIR)/package.mk + +define Build/Prepare + true +endef + +define Build/Compile + true +endef + +define Package/rpcd-mod-rad2-enc + SECTION:=libs + CATEGORY:=Libraries + TITLE:=Radicale 2.x Hashing RPC module + DEPENDS:=+rpcd +python3 +python3-passlib +endef + +define Package/rpcd-mod-rad2-enc/description + Python3 password hashing module for use Radicale 2.x LuCI app +endef + +define Package/rpcd-mod-rad2-enc/install + $(INSTALL_DIR) $(1)/usr/libexec/rpcd + $(INSTALL_BIN) ./files/rad2-enc $(1)/usr/libexec/rpcd +endef + +define Package/rpcd-mod-rad2-enc/postinst +#!/bin/sh +killall -HUP rpcd 2>/dev/null +exit 0 +endef + +$(eval $(call BuildPackage,rpcd-mod-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 index 000000000..43bc49325 --- /dev/null +++ b/libs/rpcd-mod-rad2-enc/files/rad2-enc @@ -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() |