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'])