From 0239b89898b9c35dcceae24fbd0ccd2fbf25543f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20P=C3=A9ters?= Date: Sun, 22 Oct 2017 10:26:37 +0200 Subject: [PATCH] grandlyon: add CUT agents synchronisation script --- grandlyon/scripts/sync-cut.py | 44 +++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 grandlyon/scripts/sync-cut.py diff --git a/grandlyon/scripts/sync-cut.py b/grandlyon/scripts/sync-cut.py new file mode 100644 index 0000000..dbe864c --- /dev/null +++ b/grandlyon/scripts/sync-cut.py @@ -0,0 +1,44 @@ +#! /usr/bin/env python + +import requests +import sys + +from django.conf import settings +from django.contrib.auth import get_user_model + +from authentic2.a2_rbac.models import OrganizationalUnit +from authentic2.a2_rbac.utils import get_default_ou +from authentic2_auth_oidc.models import OIDCProvider, OIDCAccount + +ou_mapping = { + 'gl-guichet-numerique': get_default_ou(), + #'bron': OrganizationalUnit.objects.get(slug='hobo-bron'), + #'dardilly': OrganizationalUnit.objects.get(slug='hobo-dardilly'), + #'oullins': OrganizationalUnit.objects.get(slug='hobo-oullins'), + #'vaulx-en-velin': OrganizationalUnit.objects.get(slug='hobo-vaulx-en-velin'), + #'villeurbanne': OrganizationalUnit.objects.get(slug='hobo-villeurbanne'), +} + +cut_agents = OIDCProvider.objects.get(name='cut-agents') + +User = get_user_model() + +for ou_slug, ou in ou_mapping.items(): + url = 'https://moncompte-rec.grandlyon.com/api/users/?ou__slug=%s' % ou_slug + for cut_user_data in requests.get(url, auth=settings.CUT_API_CREDENTIALS).json()['results']: + try: + user = User.objects.get(oidc_account__provider=cut_agents, + oidc_account__sub=cut_user_data['sub'], + is_active=True) + continue + except User.DoesNotExist: + pass + try: + user = User.objects.get(email=cut_user_data['email']) + except User.DoesNotExist: + user = User(first_name=cut_user_data['first_name'], + last_name=cut_user_data['last_name'], + email=cut_user_data['email'], + ou=ou) + user.save() + OIDCAccount.objects.create(provider=cut_agents, user=user, sub=cut_user_data['sub'])