Added homeassistant, more ldap, transmission fixed.
This commit is contained in:
@@ -0,0 +1,56 @@
|
||||
import sys
|
||||
import json
|
||||
import os
|
||||
from ldap3 import Server, Connection, SUBTREE
|
||||
from ldap3.utils.conv import escape_filter_chars
|
||||
|
||||
username = os.environ.get("username", "").strip()
|
||||
password = os.environ.get("password", "")
|
||||
|
||||
if not username or not password:
|
||||
sys.exit(1)
|
||||
|
||||
LDAP_URL = "ldap://127.0.0.1"
|
||||
LDAP_PORT = 389
|
||||
BASE_DN = "ou=users,dc=zakobar,dc=com"
|
||||
RO_DN = "cn=readonly,dc=zakobar,dc=com"
|
||||
RO_PASS_FILE = "/run/secrets/ldap-ro-password"
|
||||
|
||||
try:
|
||||
with open(RO_PASS_FILE) as f:
|
||||
ro_password = f.read().strip()
|
||||
if not ro_password:
|
||||
sys.exit(1)
|
||||
|
||||
server = Server(LDAP_URL, port=LDAP_PORT)
|
||||
|
||||
# Step 1: search-bind as readonly to find user DN + display name
|
||||
ro_conn = Connection(server, user=RO_DN, password=ro_password)
|
||||
if not ro_conn.bind():
|
||||
sys.exit(1)
|
||||
|
||||
ro_conn.search(
|
||||
BASE_DN,
|
||||
f"(uid={escape_filter_chars(username)})",
|
||||
search_scope=SUBTREE,
|
||||
attributes=["cn", "uid"],
|
||||
)
|
||||
|
||||
if not ro_conn.entries:
|
||||
sys.exit(1)
|
||||
|
||||
user_dn = ro_conn.entries[0].entry_dn
|
||||
display_name = str(ro_conn.entries[0].cn)
|
||||
ro_conn.unbind()
|
||||
|
||||
# Step 2: bind as user to verify password
|
||||
user_conn = Connection(server, user=user_dn, password=password)
|
||||
if not user_conn.bind():
|
||||
sys.exit(1)
|
||||
user_conn.unbind()
|
||||
|
||||
print(json.dumps({"name": display_name}))
|
||||
sys.exit(0)
|
||||
|
||||
except Exception:
|
||||
sys.exit(1)
|
||||
Reference in New Issue
Block a user