Коммит
713b364a79
|
@ -53,6 +53,19 @@ LDAP_BIND_PASSWORD="password"
|
||||||
## Page size for paginating LDAP query (default is 1000 for Active Directory)
|
## Page size for paginating LDAP query (default is 1000 for Active Directory)
|
||||||
LDAP_SEARCH_PAGE_SIZE=1000
|
LDAP_SEARCH_PAGE_SIZE=1000
|
||||||
|
|
||||||
|
## Use ssl. Optional, disabled by default.
|
||||||
|
LDAP_USE_SSL=true
|
||||||
|
## Path to private key file. Optional.
|
||||||
|
LDAP_SSL_PRIVATE_KEY=private.key
|
||||||
|
## Path to server certificate file. Optional.
|
||||||
|
LDAP_SSL_CERTIFICATE=cert.pem
|
||||||
|
## Validate server cert. Optional, requires cert by default.
|
||||||
|
LDAP_SSL_VALIDATE=CERT_REQUIRED
|
||||||
|
## Used SSL version. Optional, uses maximum supported version by default.
|
||||||
|
LDAP_SSL_VERSION=PROTOCOL_TLS
|
||||||
|
## CA certs path. Optional, if doesn't specified system CA used.
|
||||||
|
LDAP_SSL_CA_CERTS=cacert.b64
|
||||||
|
|
||||||
#########################
|
#########################
|
||||||
## Additional settings ##
|
## Additional settings ##
|
||||||
#########################
|
#########################
|
||||||
|
|
|
@ -18,7 +18,7 @@ This utility provides the following functionality:
|
||||||
| --- | --- | --- |
|
| --- | --- | --- |
|
||||||
| Sync Users | Yes | Add or remove users from `Teams` in GitHub to keep in sync with Active Directory groups |
|
| Sync Users | Yes | Add or remove users from `Teams` in GitHub to keep in sync with Active Directory groups |
|
||||||
| Dynamic Config | Yes | Utilize a `settings` file to derive Active Directory and GitHub settings |
|
| Dynamic Config | Yes | Utilize a `settings` file to derive Active Directory and GitHub settings |
|
||||||
| LDAP SSL | No | SSL or TLS connections. This is a WIP |
|
| LDAP SSL | Yes | SSL or TLS connections. |
|
||||||
| Failure notifications | Yes | Presently supports opening a GitHub issue when sync failed. The repo is configurable. |
|
| Failure notifications | Yes | Presently supports opening a GitHub issue when sync failed. The repo is configurable. |
|
||||||
| Sync on new team | Yes | Synchronize users when a new team is created |
|
| Sync on new team | Yes | Synchronize users when a new team is created |
|
||||||
| Sync on team edit | No | This event is not processed currently |
|
| Sync on team edit | No | This event is not processed currently |
|
||||||
|
|
|
@ -3,7 +3,8 @@ import traceback
|
||||||
import sys
|
import sys
|
||||||
import json
|
import json
|
||||||
import logging
|
import logging
|
||||||
from ldap3 import Server, Connection, ALL
|
import ssl
|
||||||
|
from ldap3 import Server, Connection, Tls, ALL
|
||||||
from ldap3.utils.conv import escape_filter_chars
|
from ldap3.utils.conv import escape_filter_chars
|
||||||
from pprint import pprint
|
from pprint import pprint
|
||||||
|
|
||||||
|
@ -41,8 +42,33 @@ class LDAPClient:
|
||||||
raise Exception("LDAP credentials have not been specified")
|
raise Exception("LDAP credentials have not been specified")
|
||||||
|
|
||||||
self.USER_SYNC_ATTRIBUTE = os.environ["USER_SYNC_ATTRIBUTE"]
|
self.USER_SYNC_ATTRIBUTE = os.environ["USER_SYNC_ATTRIBUTE"]
|
||||||
|
|
||||||
|
self.LDAP_USE_SSL = bool(os.environ("LDAP_USE_SSL", False))
|
||||||
|
if self.LDAP_USE_SSL:
|
||||||
|
self.LDAP_SSL_PRIVATE_KEY = os.environ.get('LDAP_SSL_PRIVATE_KEY')
|
||||||
|
self.LDAP_SSL_CERTIFICATE = os.environ.get('LDAP_SSL_CERTIFICATE')
|
||||||
|
try:
|
||||||
|
self.LDAP_SSL_VALIDATE = ssl.VerifyMode[os.environ.get('LDAP_SSL_VALIDATE', 'CERT_REQUIRED')]
|
||||||
|
except KeyError:
|
||||||
|
raise Exception(f"LDAP_SSL_VALIDATE valid options are {ssl.VerifyMode._member_names_}")
|
||||||
|
try:
|
||||||
|
self.LDAP_SSL_VERSION = ssl._SSLMethod[os.environ.get('LDAP_SSL_VERSION', 'PROTOCOL_TLS')]
|
||||||
|
except KeyError:
|
||||||
|
raise Exception(f"LDAP_SSL_VERSION valid options are {ssl._SSLMethod._member_names_}")
|
||||||
|
self.LDAP_SSL_CA_CERTS = os.environ.get('LDAP_SSL_CA_CERTS')
|
||||||
|
self.tls = Tls(
|
||||||
|
local_private_key_file = self.LDAP_SSL_PRIVATE_KEY,
|
||||||
|
local_certificate_file = self.LDAP_SSL_CERTIFICATE,
|
||||||
|
validate = self.LDAP_SSL_VALIDATE,
|
||||||
|
version = self.LDAP_SSL_VERSION,
|
||||||
|
ca_certs_file = self.LDAP_SSL_CA_CERTS
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
self.tls = None
|
||||||
|
|
||||||
|
self.srv = Server(host = self.LDAP_SERVER_HOST, port = self.LDAP_SERVER_HOST, use_ssl = self.USE_SSL, tls = self.tls)
|
||||||
self.conn = Connection(
|
self.conn = Connection(
|
||||||
self.LDAP_SERVER_HOST,
|
self.srv,
|
||||||
user=self.LDAP_BIND_USER,
|
user=self.LDAP_BIND_USER,
|
||||||
password=self.LDAP_BIND_PASSWORD,
|
password=self.LDAP_BIND_PASSWORD,
|
||||||
auto_bind=True,
|
auto_bind=True,
|
||||||
|
|
Загрузка…
Ссылка в новой задаче