Projet

Général

Profil

liberty_service_provider-to-service_provider-8826.patch

Josué Kouka, 11 décembre 2015 15:27

Télécharger (16,5 ko)

Voir les différences:

Subject: [PATCH 1/3] manager: fix logout links (#9274)


 .../manager/templates/authentic2/manager/base.html          | 13 +++++++++++++
 1 file changed, 13 insertions(+)

diff --git a/src/authentic2/manager/templates/authentic2/manager/base.html b/src/authentic2/manager/templates/authentic2/manager/base.html
index 3a1d8cc..d32a140 100644
--- a/src/authentic2/manager/templates/authentic2/manager/base.html
+++ b/src/authentic2/manager/templates/authentic2/manager/base.html
@@ -6,6 +6,19 @@
 {% block page-title %}{% firstof site_title "Authentic2" %}{% endblock %}
 {% block site-title %}{% firstof site_title "Authentic2" %}{% endblock %}
 
+{% block user-links %}
+  <ul class="user-info">
+    {% if user.is_authenticated %}
+      <li class="ui-name">{{ user.get_full_name }}</li>
+      <li class="ui-logout"><a href="{% url 'auth_logout' %}">{% trans "Logout" %}</a></li>
+    {% endif %}
+  </ul>
+{% endblock %}
+
+{% block appbar %}
+  <h2>{% block page_title %}{% endblock %}</h2>
+{% endblock %}
+
 {% block css %}
   {{ block.super }}
   <link rel="stylesheet" type="text/css" media="all" href="{% static "authentic2/manager/css/style.css" %}"/>
-- 
2.6.2


From dd2191d191a2337f53faf987d20bab72a772f1a8 Mon Sep 17 00:00:00 2001
From: Josue Kouka <jkouka@entrouvert.com>
Date: Wed, 9 Dec 2015 18:35:24 +0100
Subject: [PATCH 2/3] Model/Data migrations of LibertyServiceProvider ->
 LibertyProvider

---
 .../saml/migrations/0017_auto_20151208_1537.py     | 45 ++++++++++++++++++++++
 .../saml/migrations/0018_auto_20151208_1542.py     | 28 ++++++++++++++
 src/authentic2/saml/models.py                      | 17 +++++++-
 3 files changed, 89 insertions(+), 1 deletion(-)
 create mode 100644 src/authentic2/saml/migrations/0017_auto_20151208_1537.py
 create mode 100644 src/authentic2/saml/migrations/0018_auto_20151208_1542.py

diff --git a/src/authentic2/saml/migrations/0017_auto_20151208_1537.py b/src/authentic2/saml/migrations/0017_auto_20151208_1537.py
new file mode 100644
index 0000000..04e7dd6
--- /dev/null
+++ b/src/authentic2/saml/migrations/0017_auto_20151208_1537.py
@@ -0,0 +1,45 @@
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
+
+from django.db import models, migrations
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('saml', '0016_auto_20150915_2041'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='libertyprovider',
+            name='enable_following_sp_options_policy',
+            field=models.BooleanField(default=False, verbose_name='The following options policy will apply except if a policy for all service provider is defined.'),
+            preserve_default=True,
+        ),
+        migrations.AddField(
+            model_name='libertyprovider',
+            name='enabled',
+            field=models.BooleanField(default=False, db_index=True, verbose_name='Enabled'),
+            preserve_default=True,
+        ),
+        migrations.AddField(
+            model_name='libertyprovider',
+            name='sp_options_policy',
+            field=models.ForeignKey(related_name='sp_options_policy', on_delete=django.db.models.deletion.SET_NULL, verbose_name='service provider options policy', blank=True, to='saml.SPOptionsIdPPolicy', null=True),
+            preserve_default=True,
+        ),
+        migrations.AddField(
+            model_name='libertyprovider',
+            name='users_can_manage_federations',
+            field=models.BooleanField(default=True, db_index=True, verbose_name='users can manage federation'),
+            preserve_default=True,
+        ),
+        migrations.AlterField(
+            model_name='libertyserviceprovider',
+            name='sp_options_policy',
+            field=models.ForeignKey(related_name='old_isp_options_policy', on_delete=django.db.models.deletion.SET_NULL, verbose_name='service provider options policy', blank=True, to='saml.SPOptionsIdPPolicy', null=True),
+            preserve_default=True,
+        ),
+    ]
diff --git a/src/authentic2/saml/migrations/0018_auto_20151208_1542.py b/src/authentic2/saml/migrations/0018_auto_20151208_1542.py
new file mode 100644
index 0000000..7fee69b
--- /dev/null
+++ b/src/authentic2/saml/migrations/0018_auto_20151208_1542.py
@@ -0,0 +1,28 @@
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
+
+from django.db import models, migrations
+
+def liberty_service_provider_data_to_liberty_provider(apps, schema_editor):
+    LibertyProvider = apps.get_model('saml','LibertyProvider')
+    LibertyServiceProvider = apps.get_model('saml','LibertyServiceProvider')
+
+    for lsp in LibertyServiceProvider.objects.all():
+        lp = lsp.liberty_provider
+
+        lp.enabled = lsp.enabled
+        lp.enable_following_sp_options_policy = lsp.enable_following_sp_options_policy
+        lp.sp_options_policy = lsp.sp_options_policy
+        lp.users_can_manage_federations = lsp.users_can_manage_federations
+        lp.save()
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('saml', '0017_auto_20151208_1537'),
+    ]
+
+    operations = [
+            migrations.RunPython(liberty_service_provider_data_to_liberty_provider),
+    ]
diff --git a/src/authentic2/saml/models.py b/src/authentic2/saml/models.py
index b229583..d636e51 100644
--- a/src/authentic2/saml/models.py
+++ b/src/authentic2/saml/models.py
@@ -319,6 +319,21 @@ class LibertyProvider(Service):
     ssl_certificate = models.TextField(blank=True)
     ca_cert_chain = models.TextField(blank=True)
     federation_source = models.CharField(max_length=64, blank=True, null=True)
+    enabled = models.BooleanField(verbose_name = _('Enabled'),
+            default=False, db_index=True)
+    enable_following_sp_options_policy = models.BooleanField(verbose_name = \
+        _('The following options policy will apply except if a policy for all service provider is defined.'),
+        default=False)
+    sp_options_policy = models.ForeignKey(SPOptionsIdPPolicy,
+            related_name="sp_options_policy",
+            verbose_name=_('service provider options policy'), blank=True,
+            null=True,
+            on_delete=models.SET_NULL)
+    users_can_manage_federations = models.BooleanField(
+            verbose_name=_('users can manage federation'),
+            default=True,
+            blank=True,
+            db_index=True)
 
     attributes = GenericRelation(SAMLAttribute)
 
@@ -390,7 +405,7 @@ class LibertyServiceProvider(models.Model):
         _('The following options policy will apply except if a policy for all service provider is defined.'),
         default=False)
     sp_options_policy = models.ForeignKey(SPOptionsIdPPolicy,
-            related_name="sp_options_policy",
+            related_name="old_isp_options_policy",
             verbose_name=_('service provider options policy'), blank=True,
             null=True,
             on_delete=models.SET_NULL)
-- 
2.6.2


From e624884166701cbd7b57de48a516fe503ecd07af Mon Sep 17 00:00:00 2001
From: Josue Kouka <jkouka@entrouvert.com>
Date: Thu, 10 Dec 2015 17:14:09 +0100
Subject: [PATCH 3/3] use of liberty service provider changed to service
 provider 8826

---
 .../manager/templates/authentic2/manager/base.html          | 13 +++++++++++++
 1 file changed, 13 insertions(+)
src/authentic2/manager/templates/authentic2/manager/base.html
6 6
{% block page-title %}{% firstof site_title "Authentic2" %}{% endblock %}
7 7
{% block site-title %}{% firstof site_title "Authentic2" %}{% endblock %}
8 8

  
9
{% block user-links %}
10
  <ul class="user-info">
11
    {% if user.is_authenticated %}
12
      <li class="ui-name">{{ user.get_full_name }}</li>
13
      <li class="ui-logout"><a href="{% url 'auth_logout' %}">{% trans "Logout" %}</a></li>
14
    {% endif %}
15
  </ul>
16
{% endblock %}
17

  
18
{% block appbar %}
19
  <h2>{% block page_title %}{% endblock %}</h2>
20
{% endblock %}
21

  
9 22
{% block css %}
10 23
  {{ block.super }}
11 24
  <link rel="stylesheet" type="text/css" media="all" href="{% static "authentic2/manager/css/style.css" %}"/>
12
- 
src/authentic2/saml/migrations/0017_auto_20151208_1537.py
1
# -*- coding: utf-8 -*-
2
from __future__ import unicode_literals
3

  
4
from django.db import models, migrations
5
import django.db.models.deletion
6

  
7

  
8
class Migration(migrations.Migration):
9

  
10
    dependencies = [
11
        ('saml', '0016_auto_20150915_2041'),
12
    ]
13

  
14
    operations = [
15
        migrations.AddField(
16
            model_name='libertyprovider',
17
            name='enable_following_sp_options_policy',
18
            field=models.BooleanField(default=False, verbose_name='The following options policy will apply except if a policy for all service provider is defined.'),
19
            preserve_default=True,
20
        ),
21
        migrations.AddField(
22
            model_name='libertyprovider',
23
            name='enabled',
24
            field=models.BooleanField(default=False, db_index=True, verbose_name='Enabled'),
25
            preserve_default=True,
26
        ),
27
        migrations.AddField(
28
            model_name='libertyprovider',
29
            name='sp_options_policy',
30
            field=models.ForeignKey(related_name='sp_options_policy', on_delete=django.db.models.deletion.SET_NULL, verbose_name='service provider options policy', blank=True, to='saml.SPOptionsIdPPolicy', null=True),
31
            preserve_default=True,
32
        ),
33
        migrations.AddField(
34
            model_name='libertyprovider',
35
            name='users_can_manage_federations',
36
            field=models.BooleanField(default=True, db_index=True, verbose_name='users can manage federation'),
37
            preserve_default=True,
38
        ),
39
        migrations.AlterField(
40
            model_name='libertyserviceprovider',
41
            name='sp_options_policy',
42
            field=models.ForeignKey(related_name='old_isp_options_policy', on_delete=django.db.models.deletion.SET_NULL, verbose_name='service provider options policy', blank=True, to='saml.SPOptionsIdPPolicy', null=True),
43
            preserve_default=True,
44
        ),
45
    ]
src/authentic2/saml/migrations/0018_auto_20151208_1542.py
1
# -*- coding: utf-8 -*-
2
from __future__ import unicode_literals
3

  
4
from django.db import models, migrations
5

  
6
def liberty_service_provider_data_to_liberty_provider(apps, schema_editor):
7
    LibertyProvider = apps.get_model('saml','LibertyProvider')
8
    LibertyServiceProvider = apps.get_model('saml','LibertyServiceProvider')
9

  
10
    for lsp in LibertyServiceProvider.objects.all():
11
        lp = lsp.liberty_provider
12

  
13
        lp.enabled = lsp.enabled
14
        lp.enable_following_sp_options_policy = lsp.enable_following_sp_options_policy
15
        lp.sp_options_policy = lsp.sp_options_policy
16
        lp.users_can_manage_federations = lsp.users_can_manage_federations
17
        lp.save()
18

  
19

  
20
class Migration(migrations.Migration):
21

  
22
    dependencies = [
23
        ('saml', '0017_auto_20151208_1537'),
24
    ]
25

  
26
    operations = [
27
            migrations.RunPython(liberty_service_provider_data_to_liberty_provider),
28
    ]
src/authentic2/saml/models.py
319 319
    ssl_certificate = models.TextField(blank=True)
320 320
    ca_cert_chain = models.TextField(blank=True)
321 321
    federation_source = models.CharField(max_length=64, blank=True, null=True)
322
    enabled = models.BooleanField(verbose_name = _('Enabled'),
323
            default=False, db_index=True)
324
    enable_following_sp_options_policy = models.BooleanField(verbose_name = \
325
        _('The following options policy will apply except if a policy for all service provider is defined.'),
326
        default=False)
327
    sp_options_policy = models.ForeignKey(SPOptionsIdPPolicy,
328
            related_name="sp_options_policy",
329
            verbose_name=_('service provider options policy'), blank=True,
330
            null=True,
331
            on_delete=models.SET_NULL)
332
    users_can_manage_federations = models.BooleanField(
333
            verbose_name=_('users can manage federation'),
334
            default=True,
335
            blank=True,
336
            db_index=True)
322 337

  
323 338
    attributes = GenericRelation(SAMLAttribute)
324 339

  
......
390 405
        _('The following options policy will apply except if a policy for all service provider is defined.'),
391 406
        default=False)
392 407
    sp_options_policy = models.ForeignKey(SPOptionsIdPPolicy,
393
            related_name="sp_options_policy",
408
            related_name="old_isp_options_policy",
394 409
            verbose_name=_('service provider options policy'), blank=True,
395 410
            null=True,
396 411
            on_delete=models.SET_NULL)
397
- 
src/authentic2/idp/saml/backend.py
19 19
        self.logger = logging.getLogger(__name__)
20 20

  
21 21
    def service_list(self, request):
22
        q = models.LibertyServiceProvider.objects.filter(enabled = True) \
22
        q = models.LibertyProvider.objects.filter(enabled = True) \
23 23
                .select_related()
24 24
        ls = []
25 25
        sessions = models.LibertySession.objects.filter(
......
36 36
                sp_options_policy__idp_initiated_sso=True))
37 37
            queries.append(q.filter(sp_options_policy__enabled=True,
38 38
                sp_options_policy__accept_slo=True,
39
                liberty_provider__entity_id__in=sessions_eids))
39
                entity_id__in=sessions_eids))
40 40
            if default_policy and default_policy.idp_initiated_sso:
41 41
                queries.append(q.filter(sp_options_policy__isnull=True))
42 42
            if default_policy and default_policy.accept_slo:
src/authentic2/idp/saml/saml2_endpoints.py
48 48
    LibertySession, LibertyFederation, 
49 49
    nameid2kwargs, saml2_urn_to_nidformat,
50 50
    nidformat_to_saml2_urn, save_key_values, get_and_delete_key_values,
51
    LibertyProvider, LibertyServiceProvider, SAMLAttribute, NAME_ID_FORMATS)
51
    LibertyProvider, SAMLAttribute, NAME_ID_FORMATS)
52 52
from authentic2.saml.common import redirect_next, asynchronous_bindings, \
53 53
    soap_bindings, load_provider, get_saml2_request_message, \
54 54
    error_page, set_saml2_response_responder_status_code, \
......
375 375
            kwargs['name_id_qualifier'] = AUTHENTIC_SAME_ID_SENTINEL
376 376
        if kwargs.get('name_id_sp_name_qualifier') == login.remoteProviderId:
377 377
            kwargs['name_id_sp_name_qualifier'] = AUTHENTIC_SAME_ID_SENTINEL
378
        service_provider = LibertyServiceProvider.objects \
379
                .get(liberty_provider__entity_id=login.remoteProviderId)
378
        service_provider = LibertyProvider.objects \
379
                .get(entity_id=login.remoteProviderId)
380 380
        federation, new = LibertyFederation.objects.get_or_create(
381 381
                sp=service_provider,
382 382
                user=request.user, **kwargs)
src/authentic2/idp/saml/tests.py
97 97
            metadata=sp_meta)
98 98
        self.liberty_provider.clean()
99 99
        self.liberty_provider.save()
100
        self.liberty_service_provider = saml_models.LibertyServiceProvider \
101
            .objects.create(
102
                liberty_provider=self.liberty_provider,
103
                enabled=True)
104 100
        self.default_sp_options_idp_policy = saml_models.SPOptionsIdPPolicy \
105 101
            .objects.create(
106 102
                name='Default',
src/authentic2/saml/admin.py
13 13
except ImportError:
14 14
    from django.contrib.contenttypes.generic import GenericTabularInline
15 15

  
16
from authentic2.saml.models import (LibertyProvider, LibertyServiceProvider,
17
                                    SPOptionsIdPPolicy, LibertyFederation,
18
                                    KeyValue, LibertySession, SAMLAttribute)
16
from authentic2.saml.models import (LibertyProvider, SPOptionsIdPPolicy, 
17
                                    LibertyFederation, KeyValue, 
18
                                    LibertySession, SAMLAttribute)
19 19

  
20 20
from authentic2.decorators import to_iter
21 21
from authentic2.attributes_ng.engine import get_attribute_names
......
24 24

  
25 25
logger = logging.getLogger(__name__)
26 26

  
27
class LibertyServiceProviderInline(admin.StackedInline):
28
    model = LibertyServiceProvider
27
#class LibertyServiceProviderInline(admin.StackedInline):
28
#    model = LibertyServiceProvider
29 29

  
30 30
class TextAndFileWidget(forms.widgets.MultiWidget):
31 31
    def __init__(self, attrs=None):
......
150 150
            (_('Metadata files'), {
151 151
                'fields': ('metadata_url', 'metadata', 'public_key', 'ssl_certificate', 'ca_cert_chain')
152 152
            }),
153
            (_('SAML service provider'), {
154
                'fields': ('enabled', 'enable_following_sp_options_policy', 'sp_options_policy', 
155
                    'users_can_manage_federations')
156
            }),
153 157
    )
154 158
    inlines = [
155
            LibertyServiceProviderInline,
159
            #LibertyServiceProviderInline,
156 160
            SAMLAttributeInlineAdmin,
157 161
    ]
158 162
    actions = [ update_metadata ]
src/authentic2/saml/common.py
15 15
from django.core.exceptions import ValidationError
16 16

  
17 17
from authentic2.saml.models import (LibertyFederation, LibertyProvider,
18
                                    LibertyServiceProvider, SPOptionsIdPPolicy)
18
                                    SPOptionsIdPPolicy)
19 19
from authentic2.saml import models
20 20
from authentic2.saml import saml2utils
21 21

  
......
338 338
        return None
339 339
    p.save()
340 340
    logger.debug('%s saved', p)
341
    s = LibertyServiceProvider(liberty_provider=p, enabled=True)
342
    s.save()
343 341
    return p
344 342

  
345 343

  
......
368 366
                return False
369 367
        else:
370 368
            return False
371
    try:
372
        service_provider = liberty_provider.service_provider
373
    except LibertyServiceProvider.DoesNotExist:
374
        return False
369
    
375 370
    if not service_provider.enabled:
376 371
        return False
377 372
    if server:
src/authentic2/saml/forms.py
6 6
from django.core.exceptions import ValidationError
7 7
from django.utils.translation import ugettext_lazy as _
8 8

  
9
from .models import LibertyProvider, LibertyServiceProvider
9
from .models import LibertyProvider
10 10

  
11 11
from authentic2.a2_rbac.utils import get_default_ou
12 12

  
......
40 40
                    slug=slug, metadata=content, metadata_url=url, ou=ou)
41 41
                liberty_provider.full_clean(exclude=
42 42
                        ('entity_id', 'protocol_conformance'))
43
                self.childs.append(LibertyServiceProvider(
44
                    liberty_provider=liberty_provider,
45
                    enabled=True))
43
                self.childs.append(liberty_provider,
44
                    enabled=True)
46 45
            except ValidationError, e:
47 46
                raise
48 47
            except Exception, e:
src/authentic2/saml/management/commands/sync-metadata.py
177 177
        provider.save()
178 178
        options['count'] = options.get('count', 0) + 1
179 179
        if sp:
180
            service_provider, created = LibertyServiceProvider.objects.get_or_create(
181
                    liberty_provider=provider,
182
                    defaults={'enabled': not options['create-disabled']})
183
            if sp_policy:
184
                service_provider.sp_options_policy = sp_policy
185
            service_provider.save()
186 180
            pks = []
187 181
            if options['load_attribute_consuming_service']:
188 182
                load_acs(tree, provider, pks, verbosity)
......
211 205
                    SAMLAttribute.objects.for_generic_object(provider).exclude(pk__in=pks).delete()
212 206

  
213 207
class Command(BaseCommand):
214
    '''Load SAMLv2 metadata file into the LibertyProvider, LibertyServiceProvider
208
    '''Load SAMLv2 metadata file into the LibertyProvider, 
215 209
    and LibertyIdentityProvider files'''
216 210
    can_import_django_settings = True
217 211
    output_transaction = True
218
-