Add Flask webhook

This commit is contained in:
Emmy D'Anello 2025-02-17 13:30:00 +01:00
parent ed25f0ba2b
commit 8118114551
Signed by: ynerant
GPG Key ID: 3A75C55819C8CF85
4 changed files with 29 additions and 2 deletions

View File

@ -2,9 +2,10 @@ FROM python:3-alpine
COPY requirements.txt /code/requirements.txt
RUN pip install -r /code/requirements.txt
RUN echo '*/5 * * * * python3 /code/main.py' | crontab -
RUN echo '0 1,13 * * * python3 /code/main.py' | crontab -
COPY . /code
WORKDIR /code
CMD ["/usr/sbin/crond", "-f", "-d", "0"]
EXPOSE 5000
ENTRYPOINT ["/code/entrypoint.sh"]

3
entrypoint.sh Executable file
View File

@ -0,0 +1,3 @@
#!/usr/bin/env sh
crond
flask --app main run -h 0.0.0.0

22
main.py
View File

@ -1,6 +1,7 @@
#!/usr/bin/env python3
from dolibarrpy import Dolibarrpy
from flask import Flask, abort, request
from ldap3 import ALL, Connection, ObjectDef, Reader, Server, WritableEntry, Writer
import config
@ -122,5 +123,26 @@ def append_extra_fields_to_ldap_group(ldap_group: WritableEntry, dolibarr_group:
setattr(ldap_group, ldap_attr, value)
flask_app = Flask(__name__)
@flask_app.post('/webhook')
def webhook_receiver():
data = request.json
if 'triggercode' not in data or 'object' not in data:
abort(400)
triggercode = data['triggercode']
obj = data['object']
ldap_server = Server(config.LDAP_HOST, config.LDAP_PORT, get_info=ALL)
if triggercode.startswith('USER_'):
with Connection(ldap_server, config.LDAP_BIND_USER, config.LDAP_BIND_PASSWORD) as ldap_conn:
manage_user_extra_fields(ldap_conn, obj)
elif triggercode.startswith('GROUP_'):
with Connection(ldap_server, config.LDAP_BIND_USER, config.LDAP_BIND_PASSWORD) as ldap_conn:
manage_group_extra_fields(ldap_conn, obj)
else:
abort(400)
return "", 204
if __name__ == '__main__':
main()

View File

@ -1,3 +1,4 @@
flask
ldap3
dolibarrpy
icecream