11#!/usr/bin/env python3
22
3- #
43# Copyright (C) 2022 Nethesis S.r.l.
54# SPDX-License-Identifier: GPL-3.0-or-later
6- #
75
86import json
97import sys
108import agent
119import secrets
1210import base64
11+ from agent .ldapproxy import Ldapproxy
1312
1413# Try to parse the stdin as JSON.
15- # If parsing fails, output everything to stderr
1614data = json .load (sys .stdin )
1715
1816# MariaDB config
@@ -35,7 +33,6 @@ agent.write_envfile("database.env", maria_db)
3533SECRET_KEY_BYTES = secrets .token_bytes (32 )
3634SECRET_KEY = base64 .b64encode (SECRET_KEY_BYTES ).decode ('utf-8' )
3735
38- SEMAPHORE_DB_HOST = data .get ("SEMAPHORE_DB_HOST" , "mysql" )
3936SEMAPHORE_ADMIN_PASSWORD = data .get ("SEMAPHORE_ADMIN_PASSWORD" , "password" )
4037SEMAPHORE_ADMIN_NAME = data .get ("SEMAPHORE_ADMIN_NAME" , "admin" )
4138SEMAPHORE_ADMIN_EMAIL = data .get ("SEMAPHORE_ADMIN_EMAIL" , "admin@admin.com" )
@@ -62,6 +59,55 @@ SEMAPHORE_TELEGRAM_ALERT = data.get("SEMAPHORE_TELEGRAM_ALERT", "False")
6259SEMAPHORE_TELEGRAM_CHAT = data .get ("SEMAPHORE_TELEGRAM_CHAT" , "" )
6360SEMAPHORE_TELEGRAM_TOKEN = data .get ("SEMAPHORE_TELEGRAM_TOKEN" , "" )
6461
62+ # LDAP Configuration
63+ ldap_domain = data .get ("ldap_domain" , "" )
64+ agent .set_env ("LDAP_DOMAIN" , ldap_domain )
65+
66+ # Clear old LDAP values
67+ for key in [
68+ "LDAP_HOSTNAME" , "LDAP_PORT" , "LDAP_SEARCH_BIND_DN" , "LDAP_SEARCH_BIND_PASSWORD" ,
69+ "LDAP_USER_BASE_DN" , "LDAP_MEMBER_ATTRIBUTE" , "LDAP_MEMBER_ATTRIBUTE_TYPE" ,
70+ "LDAP_GROUP_BASE_DN" , "LDAP_USERNAME_ATTRIBUTE" , "LDAP_USER_SEARCH_FILTER" ,
71+ "LDAP_GROUP_SEARCH_FILTER" ]:
72+ agent .unset_env (key )
73+
74+ SEMAPHORE_LDAP_ENABLE = "False"
75+ SEMAPHORE_LDAP_BIND_DN = ""
76+ SEMAPHORE_LDAP_BIND_PASSWORD = ""
77+ SEMAPHORE_LDAP_SERVER = ""
78+ SEMAPHORE_LDAP_SEARCH_DN = ""
79+ SEMAPHORE_LDAP_SEARCH_FILTER = ""
80+ SEMAPHORE_LDAP_NEEDTLS = "False"
81+ SEMAPHORE_LDAP_MAPPING_DN = "dn"
82+ SEMAPHORE_LDAP_MAPPING_MAIL = "mail"
83+ SEMAPHORE_LDAP_MAPPING_UID = "uid"
84+ SEMAPHORE_LDAP_MAPPING_CN = "cn"
85+
86+ if ldap_domain :
87+ agent .bind_user_domains ([ldap_domain ])
88+ odom = Ldapproxy ().get_domain (ldap_domain )
89+ base_dn = odom ['base_dn' ]
90+
91+ agent .set_env ("LDAP_HOSTNAME" , "10.0.2.2" )
92+ agent .set_env ("LDAP_PORT" , odom ['port' ])
93+ agent .set_env ("LDAP_SEARCH_BIND_DN" , odom ['bind_dn' ])
94+ agent .set_env ("LDAP_SEARCH_BIND_PASSWORD" , odom ['bind_password' ])
95+
96+ SEMAPHORE_LDAP_ENABLE = "True"
97+ SEMAPHORE_LDAP_BIND_DN = odom ['bind_dn' ]
98+ SEMAPHORE_LDAP_BIND_PASSWORD = odom ['bind_password' ]
99+ SEMAPHORE_LDAP_SERVER = "10.0.2.2"
100+ SEMAPHORE_LDAP_NEEDTLS = "False"
101+
102+ if odom ['schema' ] == "rfc2307" :
103+ SEMAPHORE_LDAP_SEARCH_DN = f"ou=People,{ base_dn } "
104+ elif odom ['schema' ] == "ad" :
105+ SEMAPHORE_LDAP_SEARCH_DN = f"cn=Users,{ base_dn } "
106+ SEMAPHORE_LDAP_SEARCH_FILTER = "(&(objectClass=top)(objectClass=user)(objectClass=person)(objectClass=organizationalPerson))"
107+
108+ else :
109+ agent .bind_user_domains ([])
110+
65111app_config = {
66112 "SEMAPHORE_DB_USER" : MARIADB_USER ,
67113 "SEMAPHORE_DB_PASS" : MARIADB_PASSWORD ,
@@ -75,22 +121,36 @@ app_config = {
75121 "SEMAPHORE_ADMIN" : SEMAPHORE_ADMIN ,
76122 "SEMAPHORE_ACCESS_KEY_ENCRYPTION" : SECRET_KEY ,
77123
78- # SMTP/Email settings
124+ # SMTP
79125 "SEMAPHORE_EMAIL_SENDER" : MAIL_FROM_NAME ,
80126 "SEMAPHORE_EMAIL_HOST" : SMTP_HOST ,
81127 "SEMAPHORE_EMAIL_PORT" : str (SMTP_PORT ),
82128 "SEMAPHORE_EMAIL_USERNAME" : SMTP_USERNAME ,
83129 "SEMAPHORE_EMAIL_PASSWORD" : SMTP_PASSWORD ,
84130
85- # Gotify alerts
131+ # Gotify
86132 "SEMAPHORE_GOTIFY_ALERT" : SEMAPHORE_GOTIFY_ALERT ,
87133 "SEMAPHORE_GOTIFY_URL" : SEMAPHORE_GOTIFY_URL ,
88134 "SEMAPHORE_GOTIFY_TOKEN" : SEMAPHORE_GOTIFY_TOKEN ,
89135
90- # Telegram alerts
136+ # Telegram
91137 "SEMAPHORE_TELEGRAM_ALERT" : SEMAPHORE_TELEGRAM_ALERT ,
92138 "SEMAPHORE_TELEGRAM_CHAT" : SEMAPHORE_TELEGRAM_CHAT ,
93- "SEMAPHORE_TELEGRAM_TOKEN" : SEMAPHORE_TELEGRAM_TOKEN
139+ "SEMAPHORE_TELEGRAM_TOKEN" : SEMAPHORE_TELEGRAM_TOKEN ,
140+
141+ # LDAP
142+ "SEMAPHORE_LDAP_ENABLE" : SEMAPHORE_LDAP_ENABLE ,
143+ "SEMAPHORE_LDAP_BIND_DN" : SEMAPHORE_LDAP_BIND_DN ,
144+ "SEMAPHORE_LDAP_BIND_PASSWORD" : SEMAPHORE_LDAP_BIND_PASSWORD ,
145+ "SEMAPHORE_LDAP_SERVER" : SEMAPHORE_LDAP_SERVER ,
146+ "SEMAPHORE_LDAP_SEARCH_DN" : SEMAPHORE_LDAP_SEARCH_DN ,
147+ "SEMAPHORE_LDAP_SEARCH_FILTER" : SEMAPHORE_LDAP_SEARCH_FILTER ,
148+ "SEMAPHORE_LDAP_NEEDTLS" : SEMAPHORE_LDAP_NEEDTLS ,
149+ "SEMAPHORE_LDAP_MAPPING_DN" : SEMAPHORE_LDAP_MAPPING_DN ,
150+ "SEMAPHORE_LDAP_MAPPING_MAIL" : SEMAPHORE_LDAP_MAPPING_MAIL ,
151+ "SEMAPHORE_LDAP_MAPPING_UID" : SEMAPHORE_LDAP_MAPPING_UID ,
152+ "SEMAPHORE_LDAP_MAPPING_CN" : SEMAPHORE_LDAP_MAPPING_CN
94153}
95154
96- agent .write_envfile ("app.env" , app_config )
155+ agent .write_envfile ("app.env" , app_config )
156+ agent .dump_env ()
0 commit comments