Projet

Général

Profil

0004-agent-authentic2-add-hooks-on-signals-to-provision-u.patch

Benjamin Dauvergne, 05 octobre 2015 16:33

Télécharger (4,26 ko)

Voir les différences:

Subject: [PATCH 4/4] agent/authentic2: add hooks on signals to provision users
 (#8440)

Signals intercepted:
- post_save and post_delete on User
- post_save and post_delete on Role.members.through
 hobo/agent/authentic2/apps.py | 74 ++++++++++++++++++++++++++++++++++++++++---
 1 file changed, 70 insertions(+), 4 deletions(-)
hobo/agent/authentic2/apps.py
15 15
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
16 16

  
17 17
import json
18
from urlparse import urljoin
18 19

  
19 20
from django.apps import AppConfig
20 21
from django.db.models.signals import post_save, post_delete
21
from django.db.models import Q
22 22
from django.conf import settings
23
from django.contrib.auth import get_user_model
24
from django.db import connection
25
from django.core.urlresolvers import reverse
23 26

  
24 27
from django_rbac.utils import get_role_model
25 28

  
26 29
from hobo.agent.common import notify_agents
27
from authentic2.utils import to_list
28 30
from authentic2.saml.models import LibertyProvider
29 31

  
30 32

  
......
57 59
        role.emails = []
58 60
        role.emails_to_members = False
59 61
        for attribute in role.attributes.all():
60
            if attribute.name in ('emails', 'emails_to_members') and attribute.kind == 'json':
62
            if attribute.name in ('emails', 'emails_to_members') \
63
               and attribute.kind == 'json':
61 64
                setattr(role, attribute.name, json.loads(attribute.value))
62 65
    return qs
63 66

  
......
83 86
    })
84 87

  
85 88

  
89
def get_entity_id():
90
    tenant = getattr(connection, 'tenant', None)
91
    assert tenant
92
    base_url = tenant.get_base_url()
93
    return urljoin(base_url, reverse('a2-idp-saml-metadata'))
94

  
95

  
96
def provision_user(sender, user, **kwargs):
97
    notify_agents({
98
        '@type': 'provision',
99
        'issuer': unicode(get_entity_id()),
100
        'audience': get_audience(user),
101
        'full': True,
102
        'objects': {
103
            '@type': 'user',
104
            'data': [
105
                {
106
                    'uuid': user.uuid,
107
                    'username': user.username,
108
                    'first_name': user.first_name,
109
                    'description': user.last_name,
110
                    'email': user.email,
111
                    'roles': [
112
                        {
113
                            'uuid': role.uuid,
114
                            'name': role.name,
115
                            'slug': role.slug,
116
                        } for role in user.roles_and_parents()],
117
                }
118
            ],
119
        }
120
    })
121

  
122

  
123
def deprovision_user(sender, user, **kwargs):
124
    notify_agents({
125
        '@type': 'deprovision',
126
        'issuer': unicode(get_entity_id()),
127
        'audience': get_audience(user),
128
        'full': True,
129
        'objects': {
130
            '@type': 'user',
131
            'data': [
132
                {
133
                    'uuid': user.uuid,
134
                }
135
            ],
136
        }
137
    })
138

  
139

  
140
def provision_user_on_role_change(sender, role_member, **kwargs):
141
    provision_user(sender, role_member.user)
142

  
143

  
86 144
class Authentic2AgentConfig(AppConfig):
87 145
    name = 'hobo.agent.authentic2'
88 146
    label = 'authentic2_agent'
......
95 153
            post_delete.connect(notify_roles, Role)
96 154
            post_save.connect(notify_roles, Role.members.through)
97 155
            post_delete.connect(notify_roles, Role.members.through)
98
        settings.A2_MANAGER_ROLE_FORM_CLASS = 'hobo.agent.authentic2.role_forms.RoleForm'
156
            User = get_user_model()
157
            post_save.connect(provision_user, User)
158
            post_delete.connect(deprovision_user, User)
159
            post_save.connect(provision_user_on_role_change,
160
                              Role.members.through)
161
            post_delete.connect(provision_user_on_role_change,
162
                                Role.members.through)
163
        settings.A2_MANAGER_ROLE_FORM_CLASS = \
164
            'hobo.agent.authentic2.role_forms.RoleForm'
99
-