From 3950e60d2116492da576fd05be19549eaef81edc Mon Sep 17 00:00:00 2001 From: Paul Marillonnet Date: Tue, 14 Nov 2017 10:36:44 +0100 Subject: [PATCH] WIP support federation file loading (#19396) --- mellon/adapters.py | 4 + mellon/app_settings.py | 20 +- mellon/federation_utils.py | 78 ++ mellon/utils.py | 42 ++ setup.py | 1 + tests/dummy_cert.pem | 18 + tests/dummy_md.xml | 1495 +++++++++++++++++++++++++++++++++++++++ tests/federation-sample.xml | 451 ++++++++++++ tests/test_federations_utils.py | 39 + tests/test_utils.py | 17 +- tests/utils.py | 5 + 11 files changed, 2167 insertions(+), 3 deletions(-) create mode 100644 mellon/federation_utils.py create mode 100644 tests/dummy_cert.pem create mode 100644 tests/dummy_md.xml create mode 100644 tests/federation-sample.xml create mode 100644 tests/test_federations_utils.py diff --git a/mellon/adapters.py b/mellon/adapters.py index 060a54c..370b9d3 100644 --- a/mellon/adapters.py +++ b/mellon/adapters.py @@ -30,6 +30,10 @@ class DefaultAdapter(object): def get_identity_providers_setting(self): return app_settings.IDENTITY_PROVIDERS + def get_federations(self): + for federation in getattr(app_settings, 'FEDERATIONS', []): + yield federation + def get_idps(self): for i, idp in enumerate(self.get_identity_providers_setting()): if 'METADATA_URL' in idp and 'METADATA' not in idp: diff --git a/mellon/app_settings.py b/mellon/app_settings.py index aeeab73..3558d14 100644 --- a/mellon/app_settings.py +++ b/mellon/app_settings.py @@ -36,16 +36,32 @@ class AppSettings(object): 'LOGIN_URL': 'mellon_login', 'LOGOUT_URL': 'mellon_logout', 'ARTIFACT_RESOLVE_TIMEOUT': 10.0, + 'FEDERATIONS': [], } @property + def FEDERATIONS(self): + from django.conf import settings + if settings.hasattr('MELLON_FEDERATIONS'): + federations = settings.MELLON_FEDERATIONS + if isinstance(federations, dict): + federations = [federations] + return federations + + @property def IDENTITY_PROVIDERS(self): from django.conf import settings + idps = [] try: - idps = settings.MELLON_IDENTITY_PROVIDERS + if hasattr(settings, 'MELLON_IDENTITY_PROVIDERS'): + idps = settings.MELLON_IDENTITY_PROVIDERS + elif not hasattr(settings, 'MELLON_FEDERATIONS'): + raise AttributeError except AttributeError: from django.core.exceptions import ImproperlyConfigured - raise ImproperlyConfigured('The MELLON_IDENTITY_PROVIDERS setting is mandatory') + raise ImproperlyConfigured('Either the MELLON_IDENTITY_PROVIDERS ' + 'or the MELLON_FEDERATIONS settings ' + 'are mandatory') if isinstance(idps, dict): idps = [idps] return idps diff --git a/mellon/federation_utils.py b/mellon/federation_utils.py new file mode 100644 index 0000000..6f0ebb7 --- /dev/null +++ b/mellon/federation_utils.py @@ -0,0 +1,78 @@ +import fcntl +import logging +import tempfile +import threading +from datetime import timedelta + +from django.utils.text import slugify +from datetime import datetime + +import requests +from pytz import utc +from time import mktime, sleep +import os +import hashlib +import os.path + +from django.core.files.storage import default_storage + + +def truncate_unique(s, length=250): + if len(s) < length: + return s + md5 = hashlib.md5(s.encode('ascii')).hexdigest() + # we should be the first and last characters from the URL + l = (length - len(md5)) / 2 - 2 # four additional characters + assert l > 20 + return s[:l] + '...' + s[-l:] + '_' + md5 + + +def load_federation_cache(url): + logger = logging.getLogger(__name__) + try: + filename = truncate_unique(slugify(url), 250) + path = os.path.join('metadata-cache', filename) + + unix_path = default_storage.path(path) + if not os.path.exists('metadata-cache'): + os.makedirs('metadata-cache') + f = open(unix_path, 'w') + try: + fcntl.lockf(f, fcntl.LOCK_EX | fcntl.LOCK_NB) + except IOError: + return + else: + with tempfile.NamedTemporaryFile(dir=os.path.dirname(unix_path), delete=False) as temp: + try: + # increase modified time by one hour to prevent too many updates + st = os.stat(unix_path) + os.utime(unix_path, (st.st_atime, st.st_mtime + 3600)) + response = requests.get(url) + response.raise_for_status() + temp.write(response.content) + temp.flush() + os.rename(temp.name, unix_path) + except: + os.unlink(temp.name) + finally: + fcntl.lockf(f, fcntl.LOCK_UN) + finally: + f.close() + except OSError: + logger.exception(u"could create the intermediary 'metadata-cache' " + "folder") + return + except: + logger.exception(u'failed to load federation from %s', url) + + +def get_federation_from_url(url, update_cache=False): + logger = logging.getLogger(__name__) + filename = truncate_unique(slugify(url), 250) + path = os.path.join('metadata-cache', filename) + if not default_storage.exists(path) or update_cache or \ + default_storage.created_time(path) < datetime.now() - timedelta(days=1): + load_federation_cache(url) + return path + logger.warning('federation %s has not been loaded', url) + return None diff --git a/mellon/utils.py b/mellon/utils.py index ab092a7..16640a9 100644 --- a/mellon/utils.py +++ b/mellon/utils.py @@ -5,14 +5,18 @@ from functools import wraps import isodate from django.contrib import auth +from django.core.exceptions import ValidationError from django.core.urlresolvers import reverse +from django.core.validators import URLValidator from django.template.loader import render_to_string +from django.utils.text import slugify from django.utils.timezone import make_aware, now, make_naive, is_aware, get_default_timezone from django.conf import settings from django.utils.six.moves.urllib.parse import urlparse import lasso from . import app_settings +from federation_utils import get_federation_from_url def create_metadata(request): @@ -83,6 +87,37 @@ def create_server(request): logger.error(u'bad metadata in idp %r', idp['ENTITY_ID']) logger.debug(u'lasso error: %s', e) continue + for federation in get_federations(): + fedmd = None + pemcert = None + if (isinstance(federation, tuple) and len(federation) == 2): + logger.info('Loading local cert-based federation %r', + federation) # XXX + if federation[1].endswith('.pem'): + fedmd = federation[0] + pemcert = federation[1] + else: + urlval = URLValidator() + try: + urlval(federation) + except ValidationError as e: + logger.info('Loading file-based federation %s', + federation) + fedmd = federation + else: + logger.info('Fetching and loading url-based federation %s', + federation) + fedmd = get_federation_from_url(federation) + + try: + server.loadMetadata(lasso.PROVIDER_ROLE_IDP, + fedmd, pemcert, None, + lasso.SERVER_LOAD_METADATA_FLAG_DEFAULT) + + except lasso.Error, e: + logger.error(u'bad metadata for federation %r', federation) + logger.debug(u'lasso error: %s', e) + continue cache[root] = server settings._MELLON_SERVER_CACHE = cache return settings._MELLON_SERVER_CACHE.get(root) @@ -112,6 +147,13 @@ def get_idps(): yield idp +def get_federations(): + for adapter in get_adapters(): + if hasattr(adapter, 'get_federations'): + for federations in adapter.get_federations(): + yield federations + + def flatten_datetime(d): d = d.copy() for key, value in d.iteritems(): diff --git a/setup.py b/setup.py index 27948bb..f865b72 100755 --- a/setup.py +++ b/setup.py @@ -94,6 +94,7 @@ setup(name="django-mellon", 'django>=1.5', 'requests', 'isodate', + 'pytz', ], setup_requires=[ 'django', diff --git a/tests/dummy_cert.pem b/tests/dummy_cert.pem new file mode 100644 index 0000000..fbd03d3 --- /dev/null +++ b/tests/dummy_cert.pem @@ -0,0 +1,18 @@ +-----BEGIN CERTIFICATE----- +MIIC9zCCAd+gAwIBAgIEfe6j3jANBgkqhkiG9w0BAQsFADAsMSowKAYDVQQDEyFT +QU1MIE1ldGFkYXRhIFNpZ25pbmcgQ2VydGlmaWNhdGUwHhcNMTYwNzI5MDczNjM4 +WhcNMjYwNjA3MDczNjM4WjAsMSowKAYDVQQDEyFTQU1MIE1ldGFkYXRhIFNpZ25p +bmcgQ2VydGlmaWNhdGUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDv +X69N/roE+BhQXuybhP75br2oxXIZCf3A2qkEtzqynnd6r8lFM5QPbph6GOyV3mo3 +nYG/avlAbujhVTXbdqRdRjO6m+rV/62YX03Bhrsw8Q8XMLMkeE1eNk1HFyxbVYtb +fh+FAKbShqTehI+g2jmp4aKM2xNKSBK3WY8fQ/x33lp/ZUmdPrNutyXG8fh6aqlP +2gYuxaopYuUhtnu7U9SO41XAse6P3T39qmYLXdEEilXnZ97Lip7LfhudEd0JOSdl +439MktMn2ExbPP1Nt2N8gVqIXsx5j45hFfNQl5C4ccy7/Yh6aShHbqZiLqKu+bHw +B09w8LBxErDYJrjEuFs3AgMBAAGjITAfMB0GA1UdDgQWBBTT88iZzWO+hN9SBUkp +x871lmTuLTANBgkqhkiG9w0BAQsFAAOCAQEABoPpODryXwiM5jjtqk6veR02FevC +KHpZP6Od7Kqcfs6lg5LcQmGUOgpmW3Gg4UMjBYkgARsT2Nsnah1CJqa8cjvv8p5K +EIhY0hVS8iMJnrb3PDeiFSeP4xSfct/6z/ebV4+QFl22bsm2zpAC6BpFz8+IJ/jA +mQzTVob4MAUeQPnwwzm3xz6yanLZx7BK5cfrTCa+hrarNQCboRjXPwiejF8WRCxp +gRHH6yNs5QH/Z6o5e3tUP7uEpn2Ob+kcLsEMGb9DghkoDAgkHCOZeTy+7hgxt+/T +94cLTa58gVtvEOnd0GuL7Vfd+IVdXgSard8RfR3OyZlf6M4aSGQA73sskQ== +-----END CERTIFICATE----- diff --git a/tests/dummy_md.xml b/tests/dummy_md.xml new file mode 100644 index 0000000..c6a24a8 --- /dev/null +++ b/tests/dummy_md.xml @@ -0,0 +1,1495 @@ + + + + + + + + + + + +EKbo8BOMe1/mKXG67EMK+V8nH+yfj45kX9fGv3Tan8k= + + + +6JbI1ftDbm49XR927FxEUrh86RPr+hTWISkdUqkU1d9NGZf/7fI6Wo/M/Gmow0RbIWeVCEsmXK8X +NpnjO2XfdzEVTdeivW1dcUyL35gE2IxA2Jc20Z1BnIsRMSuNXHZBxN/BNNdHGyVh2CbESe9Lakle +ZQAXZ8LNEFEG4bO+TVL0AeCiti/3sl/w7RJDoxqpCYXe2fJXEI3JGzIXBCQSV5zjTv0Ks/+Ri/ny +slqQdBiRvMo8j8t4XvwPjEAydeH3J62Z7kHP0qYcdGF5eYWnYz2qObgNL1ytcoiuNvCk8efeofgk +fRy0AzE4tIgvaW+OGtIZ2vc+x0rtLYX9kK2Tdw== + + + + + +71+vTf66BPgYUF7sm4T++W69qMVyGQn9wNqpBLc6sp53eq/JRTOUD26Yehjsld5qN52Bv2r5QG7o +4VU123akXUYzupvq1f+tmF9NwYa7MPEPFzCzJHhNXjZNRxcsW1WLW34fhQCm0oak3oSPoNo5qeGi +jNsTSkgSt1mPH0P8d95af2VJnT6zbrclxvH4emqpT9oGLsWqKWLlIbZ7u1PUjuNVwLHuj909/apm +C13RBIpV52fey4qey34bnRHdCTknZeN/TJLTJ9hMWzz9TbdjfIFaiF7MeY+OYRXzUJeQuHHMu/2I +emkoR26mYi6irvmx8AdPcPCwcRKw2Ca4xLhbNw== + +AQAB + + + + +MIIC9zCCAd+gAwIBAgIEfe6j3jANBgkqhkiG9w0BAQsFADAsMSowKAYDVQQDEyFTQU1MIE1ldGFk +YXRhIFNpZ25pbmcgQ2VydGlmaWNhdGUwHhcNMTYwNzI5MDczNjM4WhcNMjYwNjA3MDczNjM4WjAs +MSowKAYDVQQDEyFTQU1MIE1ldGFkYXRhIFNpZ25pbmcgQ2VydGlmaWNhdGUwggEiMA0GCSqGSIb3 +DQEBAQUAA4IBDwAwggEKAoIBAQDvX69N/roE+BhQXuybhP75br2oxXIZCf3A2qkEtzqynnd6r8lF +M5QPbph6GOyV3mo3nYG/avlAbujhVTXbdqRdRjO6m+rV/62YX03Bhrsw8Q8XMLMkeE1eNk1HFyxb +VYtbfh+FAKbShqTehI+g2jmp4aKM2xNKSBK3WY8fQ/x33lp/ZUmdPrNutyXG8fh6aqlP2gYuxaop +YuUhtnu7U9SO41XAse6P3T39qmYLXdEEilXnZ97Lip7LfhudEd0JOSdl439MktMn2ExbPP1Nt2N8 +gVqIXsx5j45hFfNQl5C4ccy7/Yh6aShHbqZiLqKu+bHwB09w8LBxErDYJrjEuFs3AgMBAAGjITAf +MB0GA1UdDgQWBBTT88iZzWO+hN9SBUkpx871lmTuLTANBgkqhkiG9w0BAQsFAAOCAQEABoPpODry +XwiM5jjtqk6veR02FevCKHpZP6Od7Kqcfs6lg5LcQmGUOgpmW3Gg4UMjBYkgARsT2Nsnah1CJqa8 +cjvv8p5KEIhY0hVS8iMJnrb3PDeiFSeP4xSfct/6z/ebV4+QFl22bsm2zpAC6BpFz8+IJ/jAmQzT +Vob4MAUeQPnwwzm3xz6yanLZx7BK5cfrTCa+hrarNQCboRjXPwiejF8WRCxpgRHH6yNs5QH/Z6o5 +e3tUP7uEpn2Ob+kcLsEMGb9DghkoDAgkHCOZeTy+7hgxt+/T94cLTa58gVtvEOnd0GuL7Vfd+IVd +XgSard8RfR3OyZlf6M4aSGQA73sskQ== + + + + + + + https://services.renater.fr/federation/en/metadata_registration_practice_statement + + + + + + https://federation.renater.fr/category/elearning + + https://federation.renater.fr/scope/local + + + + + + + + + + Université de Rennes 1 - Moodle CNB pour les enseignants + + + https://campus-prof.ueb.eu + Moodle CNB pour les enseignants + Université de Rennes 1 - Moodle CNB pour les enseignants + Moodle CNB pour les enseignants + + + + + + + + MIID0DCCArigAwIBAgIJAL6E0aP43G9BMA0GCSqGSIb3DQEBBQUAME4xCzAJBgNV +BAYTAkZSMSIwIAYDVQQKDBlVbml2ZXJzaXTDg8KpIGRlIFJlbm5lcyAxMRswGQYD +VQQDExJjYW1wdXMtcHJvZi51ZWIuZXUwHhcNMTQxMDI4MTExNzQyWhcNMzQxMDIz +MTExNzQyWjBOMQswCQYDVQQGEwJGUjEiMCAGA1UECgwZVW5pdmVyc2l0w4PCqSBk +ZSBSZW5uZXMgMTEbMBkGA1UEAxMSY2FtcHVzLXByb2YudWViLmV1MIIBIjANBgkq +hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvP1afKPuBkz3GfQsUN7x+lY3x/Tk4/TB +0Dd0nwQYkl96rU+rW2jgULgQbhCfTpc50HWw+WCD+CXXlvkN+58tYBc1S37vxq0B +pX6NWPgJi7H+hJpcbTpkow6xfPh63QLF1kcIZfhJTqzgwLeWY2gXrKz5d1vPte5p +4iMmgPNcA+ysc+nvkVF7oqrIUSqR38J/JgMGUQJ4an9DxethnBmKq+EGNvLDI+N7 +kfj+dI7dWyuHetKbRP8LIKPQsu6AJ9VBlkiZdlHlXUiE9mHgw32RMAP7afUdojbl +IUZtFwrXwc8WBwHdtQjZ9fa8is5d5dPy5V16TCVYTbtOrCL3LZNt0QIDAQABo4Gw +MIGtMB0GA1UdDgQWBBSwWo+dMtQN2v2TsFqrse+F02qjYDB+BgNVHSMEdzB1gBSw +Wo+dMtQN2v2TsFqrse+F02qjYKFSpFAwTjELMAkGA1UEBhMCRlIxIjAgBgNVBAoM +GVVuaXZlcnNpdMODwqkgZGUgUmVubmVzIDExGzAZBgNVBAMTEmNhbXB1cy1wcm9m +LnVlYi5ldYIJAL6E0aP43G9BMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQAD +ggEBAGvcUF+0N4fBV1lpmQxqDmi/Hb0zfrpfAV/2RbBuL6Uf/TISy2bNU45kwyGB +TW7cRf9cp8XsiPYkNtOFLfIK2PFGQVVSv9G828wOp5VM/ROok9TQg3v3dI3O1dpS +XaegT6y018tKGip0WAbFRAv18WDXfYZ6U0sCk3hAIMjCM0juAZMTDjDAkbaHZT14 +/1Jjd+j4lRBUn0iBGTZtuftOmpXanqzkoj8aGPbBbCPtyl0ZQVY+au0gpNB7uqWP +vBO2Q5xZE19Ab3OW6d/1PXjtuoU3UAX3fS0Q0tPftlplA7xgWsBokogpCjNdMZEv +ThABfaHfLlPRpaBQxdTJVnIaShE= + + + + + + + + + + + MIID0DCCArigAwIBAgIJAL6E0aP43G9BMA0GCSqGSIb3DQEBBQUAME4xCzAJBgNV +BAYTAkZSMSIwIAYDVQQKDBlVbml2ZXJzaXTDg8KpIGRlIFJlbm5lcyAxMRswGQYD +VQQDExJjYW1wdXMtcHJvZi51ZWIuZXUwHhcNMTQxMDI4MTExNzQyWhcNMzQxMDIz +MTExNzQyWjBOMQswCQYDVQQGEwJGUjEiMCAGA1UECgwZVW5pdmVyc2l0w4PCqSBk +ZSBSZW5uZXMgMTEbMBkGA1UEAxMSY2FtcHVzLXByb2YudWViLmV1MIIBIjANBgkq +hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvP1afKPuBkz3GfQsUN7x+lY3x/Tk4/TB +0Dd0nwQYkl96rU+rW2jgULgQbhCfTpc50HWw+WCD+CXXlvkN+58tYBc1S37vxq0B +pX6NWPgJi7H+hJpcbTpkow6xfPh63QLF1kcIZfhJTqzgwLeWY2gXrKz5d1vPte5p +4iMmgPNcA+ysc+nvkVF7oqrIUSqR38J/JgMGUQJ4an9DxethnBmKq+EGNvLDI+N7 +kfj+dI7dWyuHetKbRP8LIKPQsu6AJ9VBlkiZdlHlXUiE9mHgw32RMAP7afUdojbl +IUZtFwrXwc8WBwHdtQjZ9fa8is5d5dPy5V16TCVYTbtOrCL3LZNt0QIDAQABo4Gw +MIGtMB0GA1UdDgQWBBSwWo+dMtQN2v2TsFqrse+F02qjYDB+BgNVHSMEdzB1gBSw +Wo+dMtQN2v2TsFqrse+F02qjYKFSpFAwTjELMAkGA1UEBhMCRlIxIjAgBgNVBAoM +GVVuaXZlcnNpdMODwqkgZGUgUmVubmVzIDExGzAZBgNVBAMTEmNhbXB1cy1wcm9m +LnVlYi5ldYIJAL6E0aP43G9BMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQAD +ggEBAGvcUF+0N4fBV1lpmQxqDmi/Hb0zfrpfAV/2RbBuL6Uf/TISy2bNU45kwyGB +TW7cRf9cp8XsiPYkNtOFLfIK2PFGQVVSv9G828wOp5VM/ROok9TQg3v3dI3O1dpS +XaegT6y018tKGip0WAbFRAv18WDXfYZ6U0sCk3hAIMjCM0juAZMTDjDAkbaHZT14 +/1Jjd+j4lRBUn0iBGTZtuftOmpXanqzkoj8aGPbBbCPtyl0ZQVY+au0gpNB7uqWP +vBO2Q5xZE19Ab3OW6d/1PXjtuoU3UAX3fS0Q0tPftlplA7xgWsBokogpCjNdMZEv +ThABfaHfLlPRpaBQxdTJVnIaShE= + + + + + + + + + + + + + + + + Université de Rennes 1 - Moodle CNB pour les enseignants + Université de Rennes 1 - Moodle CNB pour les enseignants + Moodle CNB pour les enseignants + Moodle CNB pour les enseignants + + + + + + + + + + + + + + + + + + + + + + + Université européenne de Bretagne + Université européenne de Bretagne + http://www.univ-rennes1.fr + + + + + + fed-admin@listes.univ-rennes1.fr + + + + + + + + https://services.renater.fr/federation/en/metadata_registration_practice_statement + + + + + + https://federation.renater.fr/category/preprod + + https://federation.renater.fr/scope/local + + + + + + + + + + Université de Strasbourg - preprod FPI + + + http://cfaufpi-formation.u-strasbg.fr/ + plateforme FPI du CFAU + Université de Strasbourg - preprod FPI + plateforme FPI du CFAU + + + + + + + + MIIEijCCA3KgAwIBAgIRAPbx7wUg5RoJsiiMtKj7qeAwDQYJKoZIhvcNAQEFBQAw +NjELMAkGA1UEBhMCTkwxDzANBgNVBAoTBlRFUkVOQTEWMBQGA1UEAxMNVEVSRU5B +IFNTTCBDQTAeFw0xMzA5MTcwMDAwMDBaFw0xNjA5MTYyMzU5NTlaMEwxITAfBgNV +BAsTGERvbWFpbiBDb250cm9sIFZhbGlkYXRlZDEnMCUGA1UEAxMeY2ZhdWNsZS1m +b3JtYXRpb24udS1zdHJhc2JnLmZyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB +CgKCAQEAoiwlSkn9Tj6gKQPlKIbHvgLAfkOrwxg2YTwCHGOuNdJIKufFt5cyP+UN +oxFrLKawZA6F8gWzLRUSPv5klbMNweesmwDfd0Css4JKqtRd3prEnr77ILc9/+bH +t4QU+cHpX6BvHL9oxh89yXn8b+dHZw7tCZy3PEUtmn4x4s1jdOKUz15jA+RAmJB3 +b5TVVSTtLIhm1pqVrVOU3lZYecwpvXD1VmGDpA6iIuyNueLbX5qGwuQYq26Mf+Kl +FRINZyVYNK4BkfVV4GQIaJRBTe07n6yE+zkR3SbibioxWAnBRteJBkN++iRo3Wo4 +xdnpuY0ERkurMBfRyjV2jO1sNT159QIDAQABo4IBezCCAXcwHwYDVR0jBBgwFoAU +DL2TaAzz3qujSWsrN1dH6pDjue0wHQYDVR0OBBYEFCsV3SlRe7EpJjgz7LY+iyq5 +LN3PMA4GA1UdDwEB/wQEAwIFoDAMBgNVHRMBAf8EAjAAMB0GA1UdJQQWMBQGCCsG +AQUFBwMBBggrBgEFBQcDAjAiBgNVHSAEGzAZMA0GCysGAQQBsjEBAgIdMAgGBmeB +DAECATA6BgNVHR8EMzAxMC+gLaArhilodHRwOi8vY3JsLnRjcy50ZXJlbmEub3Jn +L1RFUkVOQVNTTENBLmNybDBtBggrBgEFBQcBAQRhMF8wNQYIKwYBBQUHMAKGKWh0 +dHA6Ly9jcnQudGNzLnRlcmVuYS5vcmcvVEVSRU5BU1NMQ0EuY3J0MCYGCCsGAQUF +BzABhhpodHRwOi8vb2NzcC50Y3MudGVyZW5hLm9yZzApBgNVHREEIjAggh5jZmF1 +Y2xlLWZvcm1hdGlvbi51LXN0cmFzYmcuZnIwDQYJKoZIhvcNAQEFBQADggEBAG+I +rGuk2/L4kM391Q9Rp0A1MuAWcxlaEHnXkOV2DCyCw4A7jdQGGeKKKUbd+cQaMHPh +LMuCT8Bj66aBFe9RdlgDyQ9y7D8Qp1V64aMhOW6ZKBvw5n70uQssK6K9ssFiCglf +9BJMfCs8oftf2KL/x9jHYtkrWibQOx9nKylw68aJEQ1bR2bewltWhv/MIZsgmXRR +zP9lcOfuMRwtATzfluRd8mVuh+OoXLs7B6x6tHK53WxFmGs3HG9CPYneMm18DWiW +aw84Vc3J6+zcCws7VsvDgYOom6J9oPhuGcmAAq6cZoGeSkJb5WwiMKk7WjA6MoQo +0qezonTEnaiTTt1RAYY= + + + + + + + + + + + MIIEijCCA3KgAwIBAgIRAPbx7wUg5RoJsiiMtKj7qeAwDQYJKoZIhvcNAQEFBQAw +NjELMAkGA1UEBhMCTkwxDzANBgNVBAoTBlRFUkVOQTEWMBQGA1UEAxMNVEVSRU5B +IFNTTCBDQTAeFw0xMzA5MTcwMDAwMDBaFw0xNjA5MTYyMzU5NTlaMEwxITAfBgNV +BAsTGERvbWFpbiBDb250cm9sIFZhbGlkYXRlZDEnMCUGA1UEAxMeY2ZhdWNsZS1m +b3JtYXRpb24udS1zdHJhc2JnLmZyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB +CgKCAQEAoiwlSkn9Tj6gKQPlKIbHvgLAfkOrwxg2YTwCHGOuNdJIKufFt5cyP+UN +oxFrLKawZA6F8gWzLRUSPv5klbMNweesmwDfd0Css4JKqtRd3prEnr77ILc9/+bH +t4QU+cHpX6BvHL9oxh89yXn8b+dHZw7tCZy3PEUtmn4x4s1jdOKUz15jA+RAmJB3 +b5TVVSTtLIhm1pqVrVOU3lZYecwpvXD1VmGDpA6iIuyNueLbX5qGwuQYq26Mf+Kl +FRINZyVYNK4BkfVV4GQIaJRBTe07n6yE+zkR3SbibioxWAnBRteJBkN++iRo3Wo4 +xdnpuY0ERkurMBfRyjV2jO1sNT159QIDAQABo4IBezCCAXcwHwYDVR0jBBgwFoAU +DL2TaAzz3qujSWsrN1dH6pDjue0wHQYDVR0OBBYEFCsV3SlRe7EpJjgz7LY+iyq5 +LN3PMA4GA1UdDwEB/wQEAwIFoDAMBgNVHRMBAf8EAjAAMB0GA1UdJQQWMBQGCCsG +AQUFBwMBBggrBgEFBQcDAjAiBgNVHSAEGzAZMA0GCysGAQQBsjEBAgIdMAgGBmeB +DAECATA6BgNVHR8EMzAxMC+gLaArhilodHRwOi8vY3JsLnRjcy50ZXJlbmEub3Jn +L1RFUkVOQVNTTENBLmNybDBtBggrBgEFBQcBAQRhMF8wNQYIKwYBBQUHMAKGKWh0 +dHA6Ly9jcnQudGNzLnRlcmVuYS5vcmcvVEVSRU5BU1NMQ0EuY3J0MCYGCCsGAQUF +BzABhhpodHRwOi8vb2NzcC50Y3MudGVyZW5hLm9yZzApBgNVHREEIjAggh5jZmF1 +Y2xlLWZvcm1hdGlvbi51LXN0cmFzYmcuZnIwDQYJKoZIhvcNAQEFBQADggEBAG+I +rGuk2/L4kM391Q9Rp0A1MuAWcxlaEHnXkOV2DCyCw4A7jdQGGeKKKUbd+cQaMHPh +LMuCT8Bj66aBFe9RdlgDyQ9y7D8Qp1V64aMhOW6ZKBvw5n70uQssK6K9ssFiCglf +9BJMfCs8oftf2KL/x9jHYtkrWibQOx9nKylw68aJEQ1bR2bewltWhv/MIZsgmXRR +zP9lcOfuMRwtATzfluRd8mVuh+OoXLs7B6x6tHK53WxFmGs3HG9CPYneMm18DWiW +aw84Vc3J6+zcCws7VsvDgYOom6J9oPhuGcmAAq6cZoGeSkJb5WwiMKk7WjA6MoQo +0qezonTEnaiTTt1RAYY= + + + + + + + + + + + + + + + + + + + Université de Strasbourg + Université de Strasbourg + http://www.unistra.fr + + + + + + + Trautmann Baptiste + b.trautmann@unistra.fr + + + + + + + + + + + + https://services.renater.fr/federation/en/metadata_registration_practice_statement + + + + + + https://federation.renater.fr/category/preprod + + https://federation.renater.fr/scope/local + + + + + + + + + + Université Paris Descartes - Cumulus Test + + + http://cumulus-v5.parisdescartes.fr + Cumulus v5 + Université Paris Descartes - Cumulus Test + Cumulus v5 + + + + + + + + MIIDEjCCAfqgAwIBAgIJAMTKdzvsIzipMA0GCSqGSIb3DQEBBQUAMCQxIjAgBgNV +BAMTGWN1bXVsdXMucGFyaXNkZXNjYXJ0ZXMuZnIwHhcNMTYxMDI0MTQ1NDE3WhcN +MjYxMDIyMTQ1NDE3WjAkMSIwIAYDVQQDExljdW11bHVzLnBhcmlzZGVzY2FydGVz +LmZyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0MRZ8OdHlRVdNmTb +gJgALmRiySnhehEzOeswBE94G/v0td5xHOsxvYBm4Uaoqr37tybLBvuz2zuUvDnE +5gCIBUpClO9n4MijSTKVQ47P18rR6rQA13M8067tSH38CzrJNw7qfYmUmZLHNKxb +O3LV3WOV0QwDyhfTiiRrbyK05Fjzm3RHivSEoTe6EgBxCGYvJd0mGNXbAiFqsENd +NJlejeKSzLdBLMUV83msb5/7yuxdcgqItV5bf04uLHfgAK9yUxhlCEZVjF4FaEN6 +T6eu7ye4Eedy7Qk2FffYQLbZPAOz5V1C0cJFlXVISnculUlg72mfM05Fg1QD0i4C +FFa11wIDAQABo0cwRTAkBgNVHREEHTAbghljdW11bHVzLnBhcmlzZGVzY2FydGVz +LmZyMB0GA1UdDgQWBBTpZmVAyoIJ/c4cPa2hL99ydeqffjANBgkqhkiG9w0BAQUF +AAOCAQEADT0XvKkfmEqiD2Q0Yf3Rtuu07eZcSC9JR+VGW/hh67QTOxDB+NXbAdFE +Ol/HkutCQ2n+EayGU5EARMD6h9WbgU8ypqtoUewvlNdxcz6SpbnM+zQUUSVyyClu +RGJGFLge0Oh67MhHZKF8gwK1yaS3Z57b53Y9kwIlXv1ZfwTgg/OEi1L9RLqYdxYt +FPJPWjr49weZflX3dHh8n3GMrCZU+yTL3Kv3b9ZLrFJb7iucM07lvLSBzjXT3e7W +V2vY/xn6uVcSy4x82/UxpsVeUfhvmexxEx/W7uO4pIc1BSchO4tqUGL8L6pv+1vk +uhcdYt6bus7LU0DF16W+YdwwBra0ng== + + + + + + + + + + + MIIDEjCCAfqgAwIBAgIJAMTKdzvsIzipMA0GCSqGSIb3DQEBBQUAMCQxIjAgBgNV +BAMTGWN1bXVsdXMucGFyaXNkZXNjYXJ0ZXMuZnIwHhcNMTYxMDI0MTQ1NDE3WhcN +MjYxMDIyMTQ1NDE3WjAkMSIwIAYDVQQDExljdW11bHVzLnBhcmlzZGVzY2FydGVz +LmZyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0MRZ8OdHlRVdNmTb +gJgALmRiySnhehEzOeswBE94G/v0td5xHOsxvYBm4Uaoqr37tybLBvuz2zuUvDnE +5gCIBUpClO9n4MijSTKVQ47P18rR6rQA13M8067tSH38CzrJNw7qfYmUmZLHNKxb +O3LV3WOV0QwDyhfTiiRrbyK05Fjzm3RHivSEoTe6EgBxCGYvJd0mGNXbAiFqsENd +NJlejeKSzLdBLMUV83msb5/7yuxdcgqItV5bf04uLHfgAK9yUxhlCEZVjF4FaEN6 +T6eu7ye4Eedy7Qk2FffYQLbZPAOz5V1C0cJFlXVISnculUlg72mfM05Fg1QD0i4C +FFa11wIDAQABo0cwRTAkBgNVHREEHTAbghljdW11bHVzLnBhcmlzZGVzY2FydGVz +LmZyMB0GA1UdDgQWBBTpZmVAyoIJ/c4cPa2hL99ydeqffjANBgkqhkiG9w0BAQUF +AAOCAQEADT0XvKkfmEqiD2Q0Yf3Rtuu07eZcSC9JR+VGW/hh67QTOxDB+NXbAdFE +Ol/HkutCQ2n+EayGU5EARMD6h9WbgU8ypqtoUewvlNdxcz6SpbnM+zQUUSVyyClu +RGJGFLge0Oh67MhHZKF8gwK1yaS3Z57b53Y9kwIlXv1ZfwTgg/OEi1L9RLqYdxYt +FPJPWjr49weZflX3dHh8n3GMrCZU+yTL3Kv3b9ZLrFJb7iucM07lvLSBzjXT3e7W +V2vY/xn6uVcSy4x82/UxpsVeUfhvmexxEx/W7uO4pIc1BSchO4tqUGL8L6pv+1vk +uhcdYt6bus7LU0DF16W+YdwwBra0ng== + + + + + + + + + + + + + + + + Université Paris Descartes - Cumulus Test + Université Paris Descartes - Cumulus Test + Cumulus v5 + Cumulus v5 + + + + + + + + + + + + + + + + + Université de Paris 5 - René Descartes + Université de Paris 5 - René Descartes + http://www.parisdescartes.fr/ + + + + + + + Yves Gerday + yves.gerday@parisdescartes.fr + + + + + + Olivier Waldek + olivier.waldek@parisdescartes.fr + + + + + + + + + + https://services.renater.fr/federation/en/metadata_registration_practice_statement + + + + + + https://federation.renater.fr/category/collaboratif + + https://federation.renater.fr/scope/local + + + + + + + + + + Grenoble INP - DSI échange + + + https://dsi-depot.grenoble-inp.fr/sso_login/federation_renater + + Grenoble INP - DSI échange + Site de communication pour la DSI Grenoble INP + + + + + + + + MIIDVDCCAjygAwIBAgIJAI61T4B2wk3HMA0GCSqGSIb3DQEBBQUAMCkxJzAlBgNV +BAMTHmNvY290aWVyLmluZnJhLmdyZW5vYmxlLWlucC5mcjAeFw0xNzAzMjcwNjE4 +NDFaFw0yMDAzMjYwNjE4NDFaMCkxJzAlBgNVBAMTHmNvY290aWVyLmluZnJhLmdy +ZW5vYmxlLWlucC5mcjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL+e +j/xnxtnS/B7qzE8/vihWkFc/iX3frkz/SW602790k7tYmM4SgamSqIfBhK50NtG3 +4Jy8WvU7WVDLoPFrWNNEZX9WzZeZbSjJ9wO5+bQtGRKC4kK3kXGfqq5gObmACJIW +CcKz/Es91se/JvosysbkCf6/s6nm7eOwCvZsr8cjWhgAhv+WQ+z5kdsu45GMkAoB +wo6B8SSel48H3AsIHTShbwSzgEKVW9B34NWb8jSEkcSJAST0uvHjDFrH0EL4/Rzs +THuL+e4eh7ao9OKzgLxc5i6XSJL8XMB4Qj68o58xmZT08MPrJiNvEnS9+u656TBb +Ggb+UGInkGwFxtEwHhUCAwEAAaN/MH0wXAYDVR0RBFUwU4IeY29jb3RpZXIuaW5m +cmEuZ3Jlbm9ibGUtaW5wLmZyhjFodHRwczovL2NvY290aWVyLmluZnJhLmdyZW5v +YmxlLWlucC5mci9zaGliYm9sZXRoMB0GA1UdDgQWBBT1aYak/6ON68Fb7sSjAMgu +L/p2FDANBgkqhkiG9w0BAQUFAAOCAQEAigfgJt+oKFeDYHHjiRT65gYxU115qUkO +QrsdU12OJTwSD12niiDq1HO0R4gda+CdaTCKSRip4TIl28e2OeLh5CwHe16rtz2C +5B0svrSvttul8g6YeP3MkoBEPwPNuK3GoHpYJnD/GqPQMN28UIQwoJLyK3XpsbT9 +IhLaXz9YSjCXdVBI7xUcxx146ldNU3zn+sL7RFNKx5po7EMJSF41Wi3p8CbIJo+G +AgTAyvTltGzVrtPs7yrDfNRI0WJwV4GNIMq6sPqmHJZZqfThZo12KAQel1Jr8Iyx +KLIKJO8DRKRKLg6UvEevt9YW3jdunj4Zz7o/ftNcCUNzcUadjjShEA== + + + + + + + + + + + + MIIDVDCCAjygAwIBAgIJAI61T4B2wk3HMA0GCSqGSIb3DQEBBQUAMCkxJzAlBgNV +BAMTHmNvY290aWVyLmluZnJhLmdyZW5vYmxlLWlucC5mcjAeFw0xNzAzMjcwNjE4 +NDFaFw0yMDAzMjYwNjE4NDFaMCkxJzAlBgNVBAMTHmNvY290aWVyLmluZnJhLmdy +ZW5vYmxlLWlucC5mcjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL+e +j/xnxtnS/B7qzE8/vihWkFc/iX3frkz/SW602790k7tYmM4SgamSqIfBhK50NtG3 +4Jy8WvU7WVDLoPFrWNNEZX9WzZeZbSjJ9wO5+bQtGRKC4kK3kXGfqq5gObmACJIW +CcKz/Es91se/JvosysbkCf6/s6nm7eOwCvZsr8cjWhgAhv+WQ+z5kdsu45GMkAoB +wo6B8SSel48H3AsIHTShbwSzgEKVW9B34NWb8jSEkcSJAST0uvHjDFrH0EL4/Rzs +THuL+e4eh7ao9OKzgLxc5i6XSJL8XMB4Qj68o58xmZT08MPrJiNvEnS9+u656TBb +Ggb+UGInkGwFxtEwHhUCAwEAAaN/MH0wXAYDVR0RBFUwU4IeY29jb3RpZXIuaW5m +cmEuZ3Jlbm9ibGUtaW5wLmZyhjFodHRwczovL2NvY290aWVyLmluZnJhLmdyZW5v +YmxlLWlucC5mci9zaGliYm9sZXRoMB0GA1UdDgQWBBT1aYak/6ON68Fb7sSjAMgu +L/p2FDANBgkqhkiG9w0BAQUFAAOCAQEAigfgJt+oKFeDYHHjiRT65gYxU115qUkO +QrsdU12OJTwSD12niiDq1HO0R4gda+CdaTCKSRip4TIl28e2OeLh5CwHe16rtz2C +5B0svrSvttul8g6YeP3MkoBEPwPNuK3GoHpYJnD/GqPQMN28UIQwoJLyK3XpsbT9 +IhLaXz9YSjCXdVBI7xUcxx146ldNU3zn+sL7RFNKx5po7EMJSF41Wi3p8CbIJo+G +AgTAyvTltGzVrtPs7yrDfNRI0WJwV4GNIMq6sPqmHJZZqfThZo12KAQel1Jr8Iyx +KLIKJO8DRKRKLg6UvEevt9YW3jdunj4Zz7o/ftNcCUNzcUadjjShEA== + + + + + + + + + + + + + + + + + + + + + Grenoble INP - DSI échange + + Site de communication pour la DSI Grenoble INP + + + + + + + + + + + + Institut National Polytechnique de Grenoble + Institut National Polytechnique de Grenoble + http://www.grenoble-inp.fr + + + + + + federation.sos@grenoble-inp.fr + + + + + + + + https://services.renater.fr/federation/en/metadata_registration_practice_statement + + + + + + https://federation.renater.fr/category/elearning + + https://federation.renater.fr/scope/community + + + + + + + + + + Moodle - ENVAM FC + + + https://e-formation.envam.org/ + Moodle - ENVAM FC + Moodle - ENVAM FC + Plate-forme dédiée à la télé-formation continue du consortium ENVAM. + + + + + + + + MIID2jCCAsKgAwIBAgIJAPOEmO0su1A4MA0GCSqGSIb3DQEBBQUAMFExCzAJBgNV +BAYTAkZSMSIwIAYDVQQKDBlVbml2ZXJzaXTDg8KpIGRlIFJlbm5lcyAxMR4wHAYD +VQQDExVlLWZvcm1hdGlvbi5lbnZhbS5vcmcwHhcNMTQxMDI4MTE0MjMyWhcNMzQx +MDIzMTE0MjMyWjBRMQswCQYDVQQGEwJGUjEiMCAGA1UECgwZVW5pdmVyc2l0w4PC +qSBkZSBSZW5uZXMgMTEeMBwGA1UEAxMVZS1mb3JtYXRpb24uZW52YW0ub3JnMIIB +IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwtXZjaDb0WgpOjaQSeoYTh4X +bduxovf8UNkgW5KkRpgPhV/hwS/qQrOnPVn0kP7PK3UyFmFB3fZZL2Ei+qfeFpbM +3OV3LHK4FSYb0AmauWU1x4gSr/UEFodOd1d5TYVuKNdfhDjwAai3HqDJmnW27wW/ +/M1iSzB3yX5jKy4d9o96irCK+0bXw6SoWmBQN75bOWVXwf7CxnpytIIAbEN+ErbB +TBw1tnHSRhwJ+S2DU7S/URuGHp4b7T+NuvMfTu+bOZc5SF3EQnA9oloplLP3M2q/ +MGwoVsew4RJ2H3UwQeYRSAbMnUGEdyvsOrCrRqfq3jFUrDuFTMvdQ+ETEnA6AwID +AQABo4G0MIGxMB0GA1UdDgQWBBQR8USNXIl9hAjbLX0KQ/XUj3XPmzCBgQYDVR0j +BHoweIAUEfFEjVyJfYQI2y19CkP11I91z5uhVaRTMFExCzAJBgNVBAYTAkZSMSIw +IAYDVQQKDBlVbml2ZXJzaXTDg8KpIGRlIFJlbm5lcyAxMR4wHAYDVQQDExVlLWZv +cm1hdGlvbi5lbnZhbS5vcmeCCQDzhJjtLLtQODAMBgNVHRMEBTADAQH/MA0GCSqG +SIb3DQEBBQUAA4IBAQB5C1OGiPpiYJIqXM7DIxeJexDdO3nZQkRlkqwRAI70Z87w +M0gg30lPU5Tjb8Pc7ZTsgwYrJy+q3IDUBWBmaivg4H9mmIMqoMidzWz/6W2zQKYT +5xGX7soz0O88knuy9TVi9pLLt7vf8bCSGzKuMzL5zN9rwkVkA5ba76qN/fa6U3z8 +Ez4kgxiaOYMZEUWhQ1+gUX0iRsGZVAMI+PJfarNLYHgixLnH+h9aqvlO6Pk5XAbn +RvKyNYMpCYKqwkxz3bFfmAbiRUP+oN+v6ZFuKRhASY1FSLEvUPNgvAOumZEMJVWG +HydsiBIDl8sN+13qAuXz8wXTv66t6bo0b7w1fKom + + + + + + + + + + + MIID2jCCAsKgAwIBAgIJAPOEmO0su1A4MA0GCSqGSIb3DQEBBQUAMFExCzAJBgNV +BAYTAkZSMSIwIAYDVQQKDBlVbml2ZXJzaXTDg8KpIGRlIFJlbm5lcyAxMR4wHAYD +VQQDExVlLWZvcm1hdGlvbi5lbnZhbS5vcmcwHhcNMTQxMDI4MTE0MjMyWhcNMzQx +MDIzMTE0MjMyWjBRMQswCQYDVQQGEwJGUjEiMCAGA1UECgwZVW5pdmVyc2l0w4PC +qSBkZSBSZW5uZXMgMTEeMBwGA1UEAxMVZS1mb3JtYXRpb24uZW52YW0ub3JnMIIB +IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwtXZjaDb0WgpOjaQSeoYTh4X +bduxovf8UNkgW5KkRpgPhV/hwS/qQrOnPVn0kP7PK3UyFmFB3fZZL2Ei+qfeFpbM +3OV3LHK4FSYb0AmauWU1x4gSr/UEFodOd1d5TYVuKNdfhDjwAai3HqDJmnW27wW/ +/M1iSzB3yX5jKy4d9o96irCK+0bXw6SoWmBQN75bOWVXwf7CxnpytIIAbEN+ErbB +TBw1tnHSRhwJ+S2DU7S/URuGHp4b7T+NuvMfTu+bOZc5SF3EQnA9oloplLP3M2q/ +MGwoVsew4RJ2H3UwQeYRSAbMnUGEdyvsOrCrRqfq3jFUrDuFTMvdQ+ETEnA6AwID +AQABo4G0MIGxMB0GA1UdDgQWBBQR8USNXIl9hAjbLX0KQ/XUj3XPmzCBgQYDVR0j +BHoweIAUEfFEjVyJfYQI2y19CkP11I91z5uhVaRTMFExCzAJBgNVBAYTAkZSMSIw +IAYDVQQKDBlVbml2ZXJzaXTDg8KpIGRlIFJlbm5lcyAxMR4wHAYDVQQDExVlLWZv +cm1hdGlvbi5lbnZhbS5vcmeCCQDzhJjtLLtQODAMBgNVHRMEBTADAQH/MA0GCSqG +SIb3DQEBBQUAA4IBAQB5C1OGiPpiYJIqXM7DIxeJexDdO3nZQkRlkqwRAI70Z87w +M0gg30lPU5Tjb8Pc7ZTsgwYrJy+q3IDUBWBmaivg4H9mmIMqoMidzWz/6W2zQKYT +5xGX7soz0O88knuy9TVi9pLLt7vf8bCSGzKuMzL5zN9rwkVkA5ba76qN/fa6U3z8 +Ez4kgxiaOYMZEUWhQ1+gUX0iRsGZVAMI+PJfarNLYHgixLnH+h9aqvlO6Pk5XAbn +RvKyNYMpCYKqwkxz3bFfmAbiRUP+oN+v6ZFuKRhASY1FSLEvUPNgvAOumZEMJVWG +HydsiBIDl8sN+13qAuXz8wXTv66t6bo0b7w1fKom + + + + + + + + + + + + + + + + Moodle - ENVAM FC + Moodle - ENVAM FC + Plate-forme dédiée à la télé-formation continue du consortium ENVAM. + Moodle - ENVAM FC + + + + + + + + + + + + + + + + + + + + + + + Campus Numérique ENVAM + Campus Numérique ENVAM + http://www.univ-rennes1.fr + + + + + + fed-admin@listes.univ-rennes1.fr + + + + + + + + https://services.renater.fr/federation/en/metadata_registration_practice_statement + + + + + + https://federation.renater.fr/category/collaboratif + + https://federation.renater.fr/scope/national + + + + + + + + + + Université de Rennes 1 - GED + + + https://ecm.univ-rennes1.fr/nuxeo + ECM + Université de Rennes 1 - GED + Gestion électronique de documents + + + + + + + + MIID0zCCArugAwIBAgIJAN6XVIoa9GnBMA0GCSqGSIb3DQEBBQUAME8xCzAJBgNV +BAYTAkZSMSIwIAYDVQQKDBlVbml2ZXJzaXTDg8KpIGRlIFJlbm5lcyAxMRwwGgYD +VQQDExNlY20udW5pdi1yZW5uZXMxLmZyMB4XDTE0MTAyODExMzMyMFoXDTM0MTAy +MzExMzMyMFowTzELMAkGA1UEBhMCRlIxIjAgBgNVBAoMGVVuaXZlcnNpdMODwqkg +ZGUgUmVubmVzIDExHDAaBgNVBAMTE2VjbS51bml2LXJlbm5lczEuZnIwggEiMA0G +CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtoxF1pXuW6hOr39/gAVKzlEBLboP3 +O4R9Yc6PoRRh20J5PwN7VCe7BB+ol8x4G9cB/mkKPNAXdd+2DAn6GznCfS757fsu +QKb+ytNNwhV8Uki89dY9J9tsE2aePPCTbts077gSGZu9QHSvRy47lpI4+86vtlgw +I/MmR5dlIzVYTMN78fURlSpK+asfYJF2PreM4YFbh92FSX4Vvx3eWrI+5hQdDYAk +NyzbJP3094E1JFxrJQZe5w8JzEKpsr7j7w3lsHequ1kLDJBAb5dIM4y2LZKVP23e +RC7Ayb+2UYdnoNp7X0lwgAm9Ps9OMCz5UfIvACRxrrassnm2yEhEvRHxAgMBAAGj +gbEwga4wHQYDVR0OBBYEFEd3vbGtg3z3PpOztESZC1JtIMDhMH8GA1UdIwR4MHaA +FEd3vbGtg3z3PpOztESZC1JtIMDhoVOkUTBPMQswCQYDVQQGEwJGUjEiMCAGA1UE +CgwZVW5pdmVyc2l0w4PCqSBkZSBSZW5uZXMgMTEcMBoGA1UEAxMTZWNtLnVuaXYt +cmVubmVzMS5mcoIJAN6XVIoa9GnBMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEF +BQADggEBADf2LL4vFuw3hnqlK5KrCzlGPr9eD+NuZI0swrU8URgDtGvNvKTLXeNN +gXb/tXXyUtGYC7aiu+PkOqAp7nlwkns6W5HqdzvbBYLd0coV2SkOFGNgJXZzNiaF +pgZSAaaL7fW+oR+x5lZSFqLWsWhs9SzNOcJQ+eufs5KqBv18WVea7Ghmks0jbWtC +d8Rh3oseKn+Bu6RrMMx9KB5pFtvGyIhB6ixW5IPsCSR6HT/RNIwcwPMs/7wmxF8P +slm+zeXlZLXoSjxIQM0Gqbm50SsPRMSsmieGZcmuvieUI2oMD5TtgH2DC2u4tnIK +IywxwWHS39um0tK5CT/hRrkYggiL9n4= + + + + + + + + + + + MIID0zCCArugAwIBAgIJAN6XVIoa9GnBMA0GCSqGSIb3DQEBBQUAME8xCzAJBgNV +BAYTAkZSMSIwIAYDVQQKDBlVbml2ZXJzaXTDg8KpIGRlIFJlbm5lcyAxMRwwGgYD +VQQDExNlY20udW5pdi1yZW5uZXMxLmZyMB4XDTE0MTAyODExMzMyMFoXDTM0MTAy +MzExMzMyMFowTzELMAkGA1UEBhMCRlIxIjAgBgNVBAoMGVVuaXZlcnNpdMODwqkg +ZGUgUmVubmVzIDExHDAaBgNVBAMTE2VjbS51bml2LXJlbm5lczEuZnIwggEiMA0G +CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtoxF1pXuW6hOr39/gAVKzlEBLboP3 +O4R9Yc6PoRRh20J5PwN7VCe7BB+ol8x4G9cB/mkKPNAXdd+2DAn6GznCfS757fsu +QKb+ytNNwhV8Uki89dY9J9tsE2aePPCTbts077gSGZu9QHSvRy47lpI4+86vtlgw +I/MmR5dlIzVYTMN78fURlSpK+asfYJF2PreM4YFbh92FSX4Vvx3eWrI+5hQdDYAk +NyzbJP3094E1JFxrJQZe5w8JzEKpsr7j7w3lsHequ1kLDJBAb5dIM4y2LZKVP23e +RC7Ayb+2UYdnoNp7X0lwgAm9Ps9OMCz5UfIvACRxrrassnm2yEhEvRHxAgMBAAGj +gbEwga4wHQYDVR0OBBYEFEd3vbGtg3z3PpOztESZC1JtIMDhMH8GA1UdIwR4MHaA +FEd3vbGtg3z3PpOztESZC1JtIMDhoVOkUTBPMQswCQYDVQQGEwJGUjEiMCAGA1UE +CgwZVW5pdmVyc2l0w4PCqSBkZSBSZW5uZXMgMTEcMBoGA1UEAxMTZWNtLnVuaXYt +cmVubmVzMS5mcoIJAN6XVIoa9GnBMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEF +BQADggEBADf2LL4vFuw3hnqlK5KrCzlGPr9eD+NuZI0swrU8URgDtGvNvKTLXeNN +gXb/tXXyUtGYC7aiu+PkOqAp7nlwkns6W5HqdzvbBYLd0coV2SkOFGNgJXZzNiaF +pgZSAaaL7fW+oR+x5lZSFqLWsWhs9SzNOcJQ+eufs5KqBv18WVea7Ghmks0jbWtC +d8Rh3oseKn+Bu6RrMMx9KB5pFtvGyIhB6ixW5IPsCSR6HT/RNIwcwPMs/7wmxF8P +slm+zeXlZLXoSjxIQM0Gqbm50SsPRMSsmieGZcmuvieUI2oMD5TtgH2DC2u4tnIK +IywxwWHS39um0tK5CT/hRrkYggiL9n4= + + + + + + + + + + + + + + + + Université de Rennes 1 - GED + Université de Rennes 1 - GED + Gestion électronique de documents + ECM + + + + + + + + + + + + + + + + + + + + + + + Université de Rennes 1 + Université de Rennes 1 + http://www.univ-rennes1.fr + + + + + + fed-admin@listes.univ-rennes1.fr + + + + + + + + https://services.renater.fr/federation/en/metadata_registration_practice_statement + + + + + + https://federation.renater.fr/category/documentation + + https://federation.renater.fr/scope/local + + + + + + + + + + Institut Politechnique de Bordeaux - Portail documentaire EZProxy + + + http://ezproxy.ipb.fr + + Institut Politechnique de Bordeaux - Portail documentaire EZProxy + ezProxy - Portail documentaire à l'attention des écoles de l'IPB. + + + + + + + + MIIIHzCCBwegAwIBAgIQBK9udT2hIeGSK8X4P5KzCjANBgkqhkiG9w0BAQsFADBz +MQswCQYDVQQGEwJOTDEWMBQGA1UECBMNTm9vcmQtSG9sbGFuZDESMBAGA1UEBxMJ +QW1zdGVyZGFtMQ8wDQYDVQQKEwZURVJFTkExJzAlBgNVBAMTHlRFUkVOQSBTU0wg +SGlnaCBBc3N1cmFuY2UgQ0EgMzAeFw0xNjExMDcwMDAwMDBaFw0xODExMTIxMjAw +MDBaMIHoMRowGAYDVQQPDBFHb3Zlcm5tZW50IEVudGl0eTETMBEGCysGAQQBgjc8 +AgEDEwJGUjEaMBgGA1UEBRMRR292ZXJubWVudCBFbnRpdHkxHTAbBgNVBAkMFGF2 +ZW51ZSBkZXMgRmFjdWx0w6lzMQ4wDAYDVQQREwUzMzQwMDELMAkGA1UEBhMCRlIx +EjAQBgNVBAgTCUFxdWl0YWluZTEQMA4GA1UEBxMHVGFsZW5jZTEVMBMGA1UEChMM +Qm9yZGVhdXggSU5QMSAwHgYDVQQDExdlenByb3h5LmJvcmRlYXV4LWlucC5mcjCC +ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALo02ivCxwKu6ugGbwTZP1Hl +T6Ep2jAEPlTCb0jQH+RI2bMr1ISIRQobmubfZApdJYqiDzb+fhhNVZm4vgD1X+rI +wVnsYLyc10rHlJdreWGYkvxUjxe4I5wXlp7Pk2JaRLHKaNk55gbNF+EY0NRdHbHd +Qb0z2RwQH2GnP2Jb43b3H7/B3aJDy0IaLmzdmkHQL+pw0Pf+xf2GZPcHGt3kxzXd +PFRJcamlDbjPTN2fMlJrsbH0+gumS833bKR2oczPvFJtd9KhjmbIBpnhWHa+J+31 +F/4bRYnX173YPkR1ct/5KCtvgcbdSw21/RPmUkR9N2ao6N3Una/l+xkoK4lfnZsC +AwEAAaOCBDcwggQzMB8GA1UdIwQYMBaAFMK4hdfhuRO90Ui8/V7cfZBCeoqpMB0G +A1UdDgQWBBRlDCBG4utxI7DD+Kiy0ZKW0ghPgTBnBgNVHREEYDBeghdlenByb3h5 +LmJvcmRlYXV4LWlucC5mcoIOZXpwcm94eS5pcGIuZnKCFGxvZ2luLmV6cHJveHku +aXBiLmZygh1sb2dpbi5lenByb3h5LmJvcmRlYXV4LWlucC5mcjAOBgNVHQ8BAf8E +BAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMIGFBgNVHR8EfjB8 +MDygOqA4hjZodHRwOi8vY3JsMy5kaWdpY2VydC5jb20vVEVSRU5BU1NMSGlnaEFz +c3VyYW5jZUNBMy5jcmwwPKA6oDiGNmh0dHA6Ly9jcmw0LmRpZ2ljZXJ0LmNvbS9U +RVJFTkFTU0xIaWdoQXNzdXJhbmNlQ0EzLmNybDBLBgNVHSAERDBCMDcGCWCGSAGG +/WwCATAqMCgGCCsGAQUFBwIBFhxodHRwczovL3d3dy5kaWdpY2VydC5jb20vQ1BT +MAcGBWeBDAEBMHsGCCsGAQUFBwEBBG8wbTAkBggrBgEFBQcwAYYYaHR0cDovL29j +c3AuZGlnaWNlcnQuY29tMEUGCCsGAQUFBzAChjlodHRwOi8vY2FjZXJ0cy5kaWdp +Y2VydC5jb20vVEVSRU5BU1NMSGlnaEFzc3VyYW5jZUNBMy5jcnQwDAYDVR0TAQH/ +BAIwADCCAfcGCisGAQQB1nkCBAIEggHnBIIB4wHhAHYApLkJkLQYWBSHuxOizGdw +Cjw1mAT5G9+443fNDsgN3BAAAAFYPaIkHgAABAMARzBFAiAb5Z3R19q0w+S8mmcm +EblH0+GAjt8O2zbJU0iXJehFAAIhAP3FwEWZ1w/4Oq/T8xptUd2w61kauP1dSNIS +AqO5OTc8AHYAaPaY+B9kgr46jO65KB1M/HFRXWeT1ETRCmesu09P+8QAAAFYPaIj +8AAABAMARzBFAiAzDb11/p/NwcwBmCbCAU11m2BAEEkDqOZNEN3nV0jkZgIhAOvT +rnZtlWqbypiiFXf1LFX9qohKff0lIaswnb2l3yQaAHcAVhQGmi/XwuzT9eG9RLI+ +x0Z2ubyZEVzA75SYVdaJ0N0AAAFYPaIkFwAABAMASDBGAiEA2Z+Z21GBAwxc1hAI +KYYdktN1E85TzHUTD3t/6CQcqIkCIQC8Z7srou4RiUyldZgaBXg1Fzs2jUZhSoRW +ND47F5BskQB2AO5Lvbd1zmC64UJpH6vhnmajD35fsHLYgwDEe4l6qP3LAAABWD2i +JjUAAAQDAEcwRQIhAIjUU11upW+5OAysUmShjB+Dt06y35Cn8cmNWb4McR0GAiBI +pRmrhHZVFKnAI3yHT28wixsmUkzkhkPnA0P8Ls0TczANBgkqhkiG9w0BAQsFAAOC +AQEAOgzyMmO4TKIa+uPdEi+2kexyt4OpKhHHkkpY6DwggWMRGqNbZxJq8FPEheK/ +W3cxm3Uv/vQkR4loB6FWTzBnAz95KeAFmS17cSVzgWVmbO40PqOdWdOl/LywYqAd +BOKcFRuuA4np+fHNbpWOg097CfJH3iQTrHH/Wc7esWRSpioWNoh9VDBqi8lLRe4t +uvV69vHeqVfhdth6rv8EPQ63XpBhVuldIqJvTfvrt02EisD01WVETCdGmJE4VUYF +AfYHenp79CKqRKpzByW1yXyUACwOhz/jXdlPyMsziryKjQK2qkdvWNXt9Rmcc01F +20ikD/IKHlRnkJWen23xcUxiew== + + + + + + + + + + + MIIIHzCCBwegAwIBAgIQBK9udT2hIeGSK8X4P5KzCjANBgkqhkiG9w0BAQsFADBz +MQswCQYDVQQGEwJOTDEWMBQGA1UECBMNTm9vcmQtSG9sbGFuZDESMBAGA1UEBxMJ +QW1zdGVyZGFtMQ8wDQYDVQQKEwZURVJFTkExJzAlBgNVBAMTHlRFUkVOQSBTU0wg +SGlnaCBBc3N1cmFuY2UgQ0EgMzAeFw0xNjExMDcwMDAwMDBaFw0xODExMTIxMjAw +MDBaMIHoMRowGAYDVQQPDBFHb3Zlcm5tZW50IEVudGl0eTETMBEGCysGAQQBgjc8 +AgEDEwJGUjEaMBgGA1UEBRMRR292ZXJubWVudCBFbnRpdHkxHTAbBgNVBAkMFGF2 +ZW51ZSBkZXMgRmFjdWx0w6lzMQ4wDAYDVQQREwUzMzQwMDELMAkGA1UEBhMCRlIx +EjAQBgNVBAgTCUFxdWl0YWluZTEQMA4GA1UEBxMHVGFsZW5jZTEVMBMGA1UEChMM +Qm9yZGVhdXggSU5QMSAwHgYDVQQDExdlenByb3h5LmJvcmRlYXV4LWlucC5mcjCC +ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALo02ivCxwKu6ugGbwTZP1Hl +T6Ep2jAEPlTCb0jQH+RI2bMr1ISIRQobmubfZApdJYqiDzb+fhhNVZm4vgD1X+rI +wVnsYLyc10rHlJdreWGYkvxUjxe4I5wXlp7Pk2JaRLHKaNk55gbNF+EY0NRdHbHd +Qb0z2RwQH2GnP2Jb43b3H7/B3aJDy0IaLmzdmkHQL+pw0Pf+xf2GZPcHGt3kxzXd +PFRJcamlDbjPTN2fMlJrsbH0+gumS833bKR2oczPvFJtd9KhjmbIBpnhWHa+J+31 +F/4bRYnX173YPkR1ct/5KCtvgcbdSw21/RPmUkR9N2ao6N3Una/l+xkoK4lfnZsC +AwEAAaOCBDcwggQzMB8GA1UdIwQYMBaAFMK4hdfhuRO90Ui8/V7cfZBCeoqpMB0G +A1UdDgQWBBRlDCBG4utxI7DD+Kiy0ZKW0ghPgTBnBgNVHREEYDBeghdlenByb3h5 +LmJvcmRlYXV4LWlucC5mcoIOZXpwcm94eS5pcGIuZnKCFGxvZ2luLmV6cHJveHku +aXBiLmZygh1sb2dpbi5lenByb3h5LmJvcmRlYXV4LWlucC5mcjAOBgNVHQ8BAf8E +BAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMIGFBgNVHR8EfjB8 +MDygOqA4hjZodHRwOi8vY3JsMy5kaWdpY2VydC5jb20vVEVSRU5BU1NMSGlnaEFz +c3VyYW5jZUNBMy5jcmwwPKA6oDiGNmh0dHA6Ly9jcmw0LmRpZ2ljZXJ0LmNvbS9U +RVJFTkFTU0xIaWdoQXNzdXJhbmNlQ0EzLmNybDBLBgNVHSAERDBCMDcGCWCGSAGG +/WwCATAqMCgGCCsGAQUFBwIBFhxodHRwczovL3d3dy5kaWdpY2VydC5jb20vQ1BT +MAcGBWeBDAEBMHsGCCsGAQUFBwEBBG8wbTAkBggrBgEFBQcwAYYYaHR0cDovL29j +c3AuZGlnaWNlcnQuY29tMEUGCCsGAQUFBzAChjlodHRwOi8vY2FjZXJ0cy5kaWdp +Y2VydC5jb20vVEVSRU5BU1NMSGlnaEFzc3VyYW5jZUNBMy5jcnQwDAYDVR0TAQH/ +BAIwADCCAfcGCisGAQQB1nkCBAIEggHnBIIB4wHhAHYApLkJkLQYWBSHuxOizGdw +Cjw1mAT5G9+443fNDsgN3BAAAAFYPaIkHgAABAMARzBFAiAb5Z3R19q0w+S8mmcm +EblH0+GAjt8O2zbJU0iXJehFAAIhAP3FwEWZ1w/4Oq/T8xptUd2w61kauP1dSNIS +AqO5OTc8AHYAaPaY+B9kgr46jO65KB1M/HFRXWeT1ETRCmesu09P+8QAAAFYPaIj +8AAABAMARzBFAiAzDb11/p/NwcwBmCbCAU11m2BAEEkDqOZNEN3nV0jkZgIhAOvT +rnZtlWqbypiiFXf1LFX9qohKff0lIaswnb2l3yQaAHcAVhQGmi/XwuzT9eG9RLI+ +x0Z2ubyZEVzA75SYVdaJ0N0AAAFYPaIkFwAABAMASDBGAiEA2Z+Z21GBAwxc1hAI +KYYdktN1E85TzHUTD3t/6CQcqIkCIQC8Z7srou4RiUyldZgaBXg1Fzs2jUZhSoRW +ND47F5BskQB2AO5Lvbd1zmC64UJpH6vhnmajD35fsHLYgwDEe4l6qP3LAAABWD2i +JjUAAAQDAEcwRQIhAIjUU11upW+5OAysUmShjB+Dt06y35Cn8cmNWb4McR0GAiBI +pRmrhHZVFKnAI3yHT28wixsmUkzkhkPnA0P8Ls0TczANBgkqhkiG9w0BAQsFAAOC +AQEAOgzyMmO4TKIa+uPdEi+2kexyt4OpKhHHkkpY6DwggWMRGqNbZxJq8FPEheK/ +W3cxm3Uv/vQkR4loB6FWTzBnAz95KeAFmS17cSVzgWVmbO40PqOdWdOl/LywYqAd +BOKcFRuuA4np+fHNbpWOg097CfJH3iQTrHH/Wc7esWRSpioWNoh9VDBqi8lLRe4t +uvV69vHeqVfhdth6rv8EPQ63XpBhVuldIqJvTfvrt02EisD01WVETCdGmJE4VUYF +AfYHenp79CKqRKpzByW1yXyUACwOhz/jXdlPyMsziryKjQK2qkdvWNXt9Rmcc01F +20ikD/IKHlRnkJWen23xcUxiew== + + + + + + + + + + + + + MIIEfDCCA2SgAwIBAgIQD6V8DaVNh8CmjMXvyLIlmzANBgkqhkiG9w0BAQUFADA2 +MQswCQYDVQQGEwJOTDEPMA0GA1UEChMGVEVSRU5BMRYwFAYDVQQDEw1URVJFTkEg +U1NMIENBMB4XDTExMDkzMDAwMDAwMFoXDTE0MDkyOTIzNTk1OVowWTELMAkGA1UE +BhMCRlIxMTAvBgNVBAoTKEluc3RpdHV0IFBvbHl0ZWNobmlxdWUgZGUgQm9yZGVh +dXggLSBJUEIxFzAVBgNVBAMTDmV6cHJveHkuaXBiLmZyMIIBIjANBgkqhkiG9w0B +AQEFAAOCAQ8AMIIBCgKCAQEAytidGc0lEUCNvS82OKZxRE4c1kDwNIrUPyhYtsKL +PDiYjvfVtCQ3kRPuMNdnVAMu2O7ysp8crCJM4kBCBOTJ5o+1wo+HmjSKumAya1F0 +jhJNZJ7epGHRPi1nncVm6fpPMZn21M/AaBhXjMQWMgpW7h/KtMvoThi90kC4WicD +sQ9fGHxtX7uHM0MMIs7eD+MiH9/hgK83349ycyrfkWexoa51qJKkZTPFDAkhDdym +vN82FDCV8q63K8fRmVlfP/0IGsQurNUSS2GLRCJt81Xd4afgu57wKKvv6R0YMai5 +/KSK8PsdxqPkH5qImaysLLE8H/K0ufEAMP+vYR60mR2eaQIDAQABo4IBYTCCAV0w +HwYDVR0jBBgwFoAUDL2TaAzz3qujSWsrN1dH6pDjue0wHQYDVR0OBBYEFGLdsx9p +qhjM32VLIjsW8Za/6QvNMA4GA1UdDwEB/wQEAwIFoDAMBgNVHRMBAf8EAjAAMB0G +A1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAYBgNVHSAEETAPMA0GCysGAQQB +sjEBAgIdMDoGA1UdHwQzMDEwL6AtoCuGKWh0dHA6Ly9jcmwudGNzLnRlcmVuYS5v +cmcvVEVSRU5BU1NMQ0EuY3JsMG0GCCsGAQUFBwEBBGEwXzA1BggrBgEFBQcwAoYp +aHR0cDovL2NydC50Y3MudGVyZW5hLm9yZy9URVJFTkFTU0xDQS5jcnQwJgYIKwYB +BQUHMAGGGmh0dHA6Ly9vY3NwLnRjcy50ZXJlbmEub3JnMBkGA1UdEQQSMBCCDmV6 +cHJveHkuaXBiLmZyMA0GCSqGSIb3DQEBBQUAA4IBAQC1mTxVGzA4gZkh+EFjTNVb +us42OJWG2GNPAI/S69zMZeAXGqfq0YNyB/01YFnp4waP3gm7DZMVcukp3ySFGAf4 +C/EhXg4Cnw+ITRlJuIEnlLYdAGN084r8/V3Qwchxjnf0FCIlyb7XieV5Kik71z9N +jz0DRneDYDmTduSecfYyJjHU9Zq0iDlf6PMF7PRQVzYMyU/jUQBTStUw51zawx6k +Mmcx+wxCgllxpBpCPJZichb76RV8+YjSk7+C9S8o7t1XSH09KjFqR7hXJIJtsRn9 +F+1Anv+mUILwjc/WFskOqAACtFeptKLkkPWT6BiWxUCelX9K3b+2DB0czTuDzsf/ + + + + + + + + + + + + + + Institut Politechnique de Bordeaux - Portail documentaire EZProxy + + ezProxy - Portail documentaire à l'attention des écoles de l'IPB. + + + + + + + + + + + + + + + Institut Polytechnique de Bordeaux + Institut Polytechnique de Bordeaux + https://www.bordeaux-inp.fr/ + + + + + + + Pallard + michel.pallard@bordeaux-inp.fr + + + + + + Moniez + philippe.moniez@bordeaux-inp.fr + + + + + + + + + + https://services.renater.fr/federation/en/metadata_registration_practice_statement + + + + + + https://federation.renater.fr/category/elearning + + https://federation.renater.fr/scope/national + + + + + + + + + + Gestion de la Fitest + + http://fitest.univ-fcomte.fr/static/logo.png + http://fitest.univ-fcomte.fr + Application permettant la gestion des étudiants du Grand EST (Fitest) + Gestion de la Fitest + Application permettant la gestion des étudiants du Grand EST (Fitest) + + + + + + + + MIIDLzCCAhegAwIBAgIJAJ/1bBOG9WncMA0GCSqGSIb3DQEBBQUAMCAxHjAcBgNV +BAMTFWZpdGVzdC51bml2LWZjb210ZS5mcjAeFw0xNjAyMDkxNTIxMDVaFw0zMTAy +MDUxNTIxMDVaMCAxHjAcBgNVBAMTFWZpdGVzdC51bml2LWZjb210ZS5mcjCCASIw +DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMBdimzi45B9W0CYBcCJnKS14EI6 +ZoEKB1Vvl2uT7v6tOSP/DNu/OPGwO3hzqGscAqIrbro+fX4C5xV+jNa5BM2UwCp6 +WV9mRZJjnQkjyxAjiBQQY+RhK5YswJvIbHUam9YPOGBmgztfGTayMazG77Myl8U6 +5DCONELhIyGRPmMygMTb0qt7IZoakou1hKHtRt5QPm8G2/UzaDT7kG8PS0zGkBvJ +TVyJQHHMiGM9Crj/GLpFcoQr76Ax0hgMKH11so8o9KP47tw+izP11iUTnEPSnlHV +Xqmy77jJA8D9aG3RyPs4xWHoU0Tu5HDCGGMDRsMB6FxKg+UAo1rZhcI5D+UCAwEA +AaNsMGowSQYDVR0RBEIwQIIVZml0ZXN0LnVuaXYtZmNvbXRlLmZyhidodHRwOi8v +Zml0ZXN0LnVuaXYtZmNvbXRlLmZyL3NoaWJib2xldGgwHQYDVR0OBBYEFNPRrnJx +yCF4a5lCfoeloKgkmCRjMA0GCSqGSIb3DQEBBQUAA4IBAQAgH5NaNNzG64mf5vpd +rFGLEHVzvg8PsnmC8eR/eRM8TggmTRv9ysmixpsi1RGFGhCqHIWSJT/lQIGus3jg +elAvGF3wK6vegSjykprQDs1ZNRlrtWiQ26RkJ6sBPg2n63CAp8374INz2gNENkMp +V0OlizMWpO1eH2pHpK2weBfxrcyQ8JqbvCBef1O33RKlD7KtnHLfLwWWrtUvo8y5 +8j31UOoGCDObYbdfVVw5E+iIVgn+ze3+7cG4PhXaiT0avQmprA4dyQ3UIhf6mg9D +qe2bnPEqd4+xjlq1jSmDWEZDE2+4XOrRfPcHFjMEAfi48NQUNKyQAd9/INn7ihlr +ZJFz + + + + + + + + + + + + MIIDLzCCAhegAwIBAgIJAJ/1bBOG9WncMA0GCSqGSIb3DQEBBQUAMCAxHjAcBgNV +BAMTFWZpdGVzdC51bml2LWZjb210ZS5mcjAeFw0xNjAyMDkxNTIxMDVaFw0zMTAy +MDUxNTIxMDVaMCAxHjAcBgNVBAMTFWZpdGVzdC51bml2LWZjb210ZS5mcjCCASIw +DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMBdimzi45B9W0CYBcCJnKS14EI6 +ZoEKB1Vvl2uT7v6tOSP/DNu/OPGwO3hzqGscAqIrbro+fX4C5xV+jNa5BM2UwCp6 +WV9mRZJjnQkjyxAjiBQQY+RhK5YswJvIbHUam9YPOGBmgztfGTayMazG77Myl8U6 +5DCONELhIyGRPmMygMTb0qt7IZoakou1hKHtRt5QPm8G2/UzaDT7kG8PS0zGkBvJ +TVyJQHHMiGM9Crj/GLpFcoQr76Ax0hgMKH11so8o9KP47tw+izP11iUTnEPSnlHV +Xqmy77jJA8D9aG3RyPs4xWHoU0Tu5HDCGGMDRsMB6FxKg+UAo1rZhcI5D+UCAwEA +AaNsMGowSQYDVR0RBEIwQIIVZml0ZXN0LnVuaXYtZmNvbXRlLmZyhidodHRwOi8v +Zml0ZXN0LnVuaXYtZmNvbXRlLmZyL3NoaWJib2xldGgwHQYDVR0OBBYEFNPRrnJx +yCF4a5lCfoeloKgkmCRjMA0GCSqGSIb3DQEBBQUAA4IBAQAgH5NaNNzG64mf5vpd +rFGLEHVzvg8PsnmC8eR/eRM8TggmTRv9ysmixpsi1RGFGhCqHIWSJT/lQIGus3jg +elAvGF3wK6vegSjykprQDs1ZNRlrtWiQ26RkJ6sBPg2n63CAp8374INz2gNENkMp +V0OlizMWpO1eH2pHpK2weBfxrcyQ8JqbvCBef1O33RKlD7KtnHLfLwWWrtUvo8y5 +8j31UOoGCDObYbdfVVw5E+iIVgn+ze3+7cG4PhXaiT0avQmprA4dyQ3UIhf6mg9D +qe2bnPEqd4+xjlq1jSmDWEZDE2+4XOrRfPcHFjMEAfi48NQUNKyQAd9/INn7ihlr +ZJFz + + + + + + + + + + + + + + + + + Gestion de la Fitest + Gestion de la Fitest + Application permettant la gestion des étudiants du Grand EST (Fitest) + Application permettant la gestion des étudiants du Grand EST (Fitest) + + + + + + + + + + + + + + + + + Université de Besancon Franche-Comté + Université de Besancon Franche-Comté + http://univ-fcomte.fr/ + + + + + + ctu-support@univ-fcomte.fr + + + + + + + + https://services.renater.fr/federation/en/metadata_registration_practice_statement + + + + + + https://federation.renater.fr/category/metier + + https://federation.renater.fr/scope/local + + + + + + + + + + LUNAM - Outil de gestion des doctorants (LunamDocteur) + + + http://gedoc.univ-nantes.fr + + LUNAM - Outil de gestion des doctorants (LunamDocteur) + Application de gestion de la formation doctorale à destination des établissements membres du PRES des Pays de la Loire (LUNAM). + + + + + + + + MIIDIzCCAgugAwIBAgIJALtrjlZcIB/1MA0GCSqGSIb3DQEBBQUAMB8xHTAbBgNV +BAMTFGdlZG9jLnVuaXYtbmFudGVzLmZyMB4XDTEwMTIyMDE1MjAwNloXDTIwMTIx +NzE1MjAwNlowHzEdMBsGA1UEAxMUZ2Vkb2MudW5pdi1uYW50ZXMuZnIwggEiMA0G +CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC7VQkiGbOQ2yBwCQP8Y/3tjeWh8zn9 +nz0reSh8rpyQmo2XuoIOeDOEadbFn1G1ECReI45+N4QAITEP7x5gyVfITfkCq8Z0 +6C51yPjh+p6FuYwTugyGMZXcbPY6oAUV+c9tZAaiLvObp8LpYbQgirAI8yUjvJSI +XIn6CK+8jS9jC/oXy1GTab4WvK2Xlniwob7ggeipM1hbPwNymcvD/+LbAxNXyVBM +C/h2CJoaST1XOeod4DRVhu653WGroeNoS3KaeFwDNwp155vN5r5Y74ViMNKp3Ay3 +QuaO7h49awg47ctvea9TBkubSeA/VrbeTs6CqKLxp4+jnyqpW4FhrWgbAgMBAAGj +YjBgMD8GA1UdEQQ4MDaCFGdlZG9jLnVuaXYtbmFudGVzLmZyhh5odHRwOi8vZ2Vk +b2MudW5pdi1uYW50ZXMuZnIvc3AwHQYDVR0OBBYEFLytY9C+yoVH3D3ei5qoI3H3 +maW9MA0GCSqGSIb3DQEBBQUAA4IBAQC0uNFM+t3Iw3WP7yImZnaW6N3rvr9I22Uw +8TzW+g4PtA1cHqb3l6rBbxKBlZbfJ2ZJIyUzgDTPWqpKBpE3smvW5tK3aRZVdZyQ +Dl/au85eMOQvPC+yGdyvDQyPLr6F8r0zD509ul9pwNM/dchiewxqRGtPK4Dp7wO4 +S41u0ecPGkOsxf5AUu3/6OZKUMUAIJLd9IoBEq8fJDHKb1F6NM6HM/D0wdTCN+42 +qdYpzb5wtxVpAuI9Y/Wjk/pIzi85ckTXFoOEY8rH9Kh720a+my3o80Ah3xug328x +ekcitAAOKMjiAlOfSCCqy0LEsakDXZ8n6//pEbv2E0pp0Uv5yeEm + + + + + + + + + + + MIIDIzCCAgugAwIBAgIJALtrjlZcIB/1MA0GCSqGSIb3DQEBBQUAMB8xHTAbBgNV +BAMTFGdlZG9jLnVuaXYtbmFudGVzLmZyMB4XDTEwMTIyMDE1MjAwNloXDTIwMTIx +NzE1MjAwNlowHzEdMBsGA1UEAxMUZ2Vkb2MudW5pdi1uYW50ZXMuZnIwggEiMA0G +CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC7VQkiGbOQ2yBwCQP8Y/3tjeWh8zn9 +nz0reSh8rpyQmo2XuoIOeDOEadbFn1G1ECReI45+N4QAITEP7x5gyVfITfkCq8Z0 +6C51yPjh+p6FuYwTugyGMZXcbPY6oAUV+c9tZAaiLvObp8LpYbQgirAI8yUjvJSI +XIn6CK+8jS9jC/oXy1GTab4WvK2Xlniwob7ggeipM1hbPwNymcvD/+LbAxNXyVBM +C/h2CJoaST1XOeod4DRVhu653WGroeNoS3KaeFwDNwp155vN5r5Y74ViMNKp3Ay3 +QuaO7h49awg47ctvea9TBkubSeA/VrbeTs6CqKLxp4+jnyqpW4FhrWgbAgMBAAGj +YjBgMD8GA1UdEQQ4MDaCFGdlZG9jLnVuaXYtbmFudGVzLmZyhh5odHRwOi8vZ2Vk +b2MudW5pdi1uYW50ZXMuZnIvc3AwHQYDVR0OBBYEFLytY9C+yoVH3D3ei5qoI3H3 +maW9MA0GCSqGSIb3DQEBBQUAA4IBAQC0uNFM+t3Iw3WP7yImZnaW6N3rvr9I22Uw +8TzW+g4PtA1cHqb3l6rBbxKBlZbfJ2ZJIyUzgDTPWqpKBpE3smvW5tK3aRZVdZyQ +Dl/au85eMOQvPC+yGdyvDQyPLr6F8r0zD509ul9pwNM/dchiewxqRGtPK4Dp7wO4 +S41u0ecPGkOsxf5AUu3/6OZKUMUAIJLd9IoBEq8fJDHKb1F6NM6HM/D0wdTCN+42 +qdYpzb5wtxVpAuI9Y/Wjk/pIzi85ckTXFoOEY8rH9Kh720a+my3o80Ah3xug328x +ekcitAAOKMjiAlOfSCCqy0LEsakDXZ8n6//pEbv2E0pp0Uv5yeEm + + + + + + + + + + + + + + LUNAM - Outil de gestion des doctorants (LunamDocteur) + + Application de gestion de la formation doctorale à destination des établissements membres du PRES des Pays de la Loire (LUNAM). + + + + + + + + + + + + Université de Nantes + Université de Nantes + http://www.univ-nantes.fr + + + + + + + GINDRE Eric + eric.gindre@univ-nantes.fr + + + + + + AYIKA Ekoué + ekoue.ayika@univ-nantes.fr + + + + + + + + + + https://services.renater.fr/federation/en/metadata_registration_practice_statement + + + + + + https://federation.renater.fr/category/metier + + https://federation.renater.fr/scope/local + + + + + + + + + + Heberg3 of Crous de Reims + + http://share.crous-reims.fr/LOGOCROUSREIMS.png + http://h3.crous-reims.fr/H3 + Heberg3 du Crous de Reims + Heberg3 du Crous de Reims + Heberg3 du Crous de Reims + + + + + + + + MIIDPDCCAiSgAwIBAgIJAKVdKInpdhd7MA0GCSqGSIb3DQEBBQUAMCMxITAfBgNV +BAMTGGh0dHA6Ly9oMy5jcm91cy1yZWltcy5mcjAeFw0xNjAxMTUxMzE4MjBaFw0x +OTAxMTQxMzE4MjBaMCMxITAfBgNVBAMTGGh0dHA6Ly9oMy5jcm91cy1yZWltcy5m +cjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANqr3PGpTU01nxkrC9eW +IEXM5rog6h7ihPatQ6jsTo2BX0yeQ1UHtZnzFcFlHUSOZIt1SxoZjLd0FEYqYEnb +c+7D2UYdFKsG/S3m8WMBvTY8+z3rZroL7EE/TrGYPMzhsvEgC0FQhfKRpnrKJQX/ +LE7FRSRXPU9mEk/dC6g36ncI9WlA2zZu0tarwmUsMoqGIYxVRaCM7yit89XDB7Pi +VC8ZbvMDq/TfM1Vb7AP/RB5MgTYk/W4RFDZHUfXD/5SUokVMltsHKKn1J2rHaruc +e14QNRxJIGJq6Ujm+M186tv4/np4NFe/kz7tSOQOGVuo7dDNUHtUpCgazFWVOZOc +o00CAwEAAaNzMHEwUAYDVR0RBEkwR4IYaHR0cDovL2gzLmNyb3VzLXJlaW1zLmZy +hitodHRwczovL2h0dHA6Ly9oMy5jcm91cy1yZWltcy5mci9zaGliYm9sZXRoMB0G +A1UdDgQWBBQds+soOqsTNpV7m1MaOhscML4ieTANBgkqhkiG9w0BAQUFAAOCAQEA +boGJLLkpeHRP5HX2OqkVeRDfFqVknh8XKG/LDHCs58nhWxjLlYNqtyoS2qIyBAMG +T7FDZeKito/B105f1/Bo1eLA2iPmgjSsnVjUADXKZ+M9V9A/y1LcNgikF4+BO7g8 +zOQLTFxsE4JqJ69bZlQuRfK6RmUUXQhIMGUSJnEu678g9UL803qfpDQ1pAoASOpY +5pfO6DoiQ6JWGOO/xjZHG2ZMpKxVc9MG/AUJMkGjtXyiziJtOqbJbz24cfRJoGU5 +5y+y3nUUmOiDiewOU5ckoSpZM1W8737nY90HwWYOOvdU/uGtRX2XWiD5oUtoEdUM +DtEsD8zjX/AvRhMrb2Q+tA== + + + + + + + + + + + MIIDPDCCAiSgAwIBAgIJAKVdKInpdhd7MA0GCSqGSIb3DQEBBQUAMCMxITAfBgNV +BAMTGGh0dHA6Ly9oMy5jcm91cy1yZWltcy5mcjAeFw0xNjAxMTUxMzE4MjBaFw0x +OTAxMTQxMzE4MjBaMCMxITAfBgNVBAMTGGh0dHA6Ly9oMy5jcm91cy1yZWltcy5m +cjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANqr3PGpTU01nxkrC9eW +IEXM5rog6h7ihPatQ6jsTo2BX0yeQ1UHtZnzFcFlHUSOZIt1SxoZjLd0FEYqYEnb +c+7D2UYdFKsG/S3m8WMBvTY8+z3rZroL7EE/TrGYPMzhsvEgC0FQhfKRpnrKJQX/ +LE7FRSRXPU9mEk/dC6g36ncI9WlA2zZu0tarwmUsMoqGIYxVRaCM7yit89XDB7Pi +VC8ZbvMDq/TfM1Vb7AP/RB5MgTYk/W4RFDZHUfXD/5SUokVMltsHKKn1J2rHaruc +e14QNRxJIGJq6Ujm+M186tv4/np4NFe/kz7tSOQOGVuo7dDNUHtUpCgazFWVOZOc +o00CAwEAAaNzMHEwUAYDVR0RBEkwR4IYaHR0cDovL2gzLmNyb3VzLXJlaW1zLmZy +hitodHRwczovL2h0dHA6Ly9oMy5jcm91cy1yZWltcy5mci9zaGliYm9sZXRoMB0G +A1UdDgQWBBQds+soOqsTNpV7m1MaOhscML4ieTANBgkqhkiG9w0BAQUFAAOCAQEA +boGJLLkpeHRP5HX2OqkVeRDfFqVknh8XKG/LDHCs58nhWxjLlYNqtyoS2qIyBAMG +T7FDZeKito/B105f1/Bo1eLA2iPmgjSsnVjUADXKZ+M9V9A/y1LcNgikF4+BO7g8 +zOQLTFxsE4JqJ69bZlQuRfK6RmUUXQhIMGUSJnEu678g9UL803qfpDQ1pAoASOpY +5pfO6DoiQ6JWGOO/xjZHG2ZMpKxVc9MG/AUJMkGjtXyiziJtOqbJbz24cfRJoGU5 +5y+y3nUUmOiDiewOU5ckoSpZM1W8737nY90HwWYOOvdU/uGtRX2XWiD5oUtoEdUM +DtEsD8zjX/AvRhMrb2Q+tA== + + + + + + + + + + + + + + + + Heberg3 du Crous de Reims + Heberg3 of Crous de Reims + Heberg3 du Crous de Reims + Heberg3 du Crous de Reims + + + + + + + + + + + + + + + + + + + + + + + CROUS de Reims + CROUS de Reims + http://www.crous-reims.fr + + + + + + informatique@crous-reims.fr + + + + + diff --git a/tests/federation-sample.xml b/tests/federation-sample.xml new file mode 100644 index 0000000..0d37cb2 --- /dev/null +++ b/tests/federation-sample.xml @@ -0,0 +1,451 @@ + + + + + + + + + + +JKdLdd5yGvkFdb1fCAByMMnurIKYhZepRouZfOjIUrg= + + + +OTexfi8c63TsP1V9j5m6digA2NomUfqBtT8pPKhwdqEDQS5qLh6fxvT+wWkP6JaIhkP8nxwpbArl +7cUHkRv5ibZzcknIAjXYMhsSTtFQUq89OMcDHtZHG54jiKyHPhu2+XEbvv6DsAYanYC6SHEnGjNG +opnOEUB2XqeycsvvTQQIuWZEoABTVcKYyk2CW7Ij5EUmPOAPiidtbt8lzrtkV6dwLbkyoEbChAyj +emrL/oS01aJgT9sQoJxR8lyRMGiZ/BwQqYTareiKwOXLPdGThzsfZXD8de9T1xuysILaAM7sHPJV +QfrQJm80Zo2MM/GnhJTO9rc4m3kRnRhqmA6qMw== + + + + + +71+vTf66BPgYUF7sm4T++W69qMVyGQn9wNqpBLc6sp53eq/JRTOUD26Yehjsld5qN52Bv2r5QG7o +4VU123akXUYzupvq1f+tmF9NwYa7MPEPFzCzJHhNXjZNRxcsW1WLW34fhQCm0oak3oSPoNo5qeGi +jNsTSkgSt1mPH0P8d95af2VJnT6zbrclxvH4emqpT9oGLsWqKWLlIbZ7u1PUjuNVwLHuj909/apm +C13RBIpV52fey4qey34bnRHdCTknZeN/TJLTJ9hMWzz9TbdjfIFaiF7MeY+OYRXzUJeQuHHMu/2I +emkoR26mYi6irvmx8AdPcPCwcRKw2Ca4xLhbNw== + +AQAB + + + + +MIIC9zCCAd+gAwIBAgIEfe6j3jANBgkqhkiG9w0BAQsFADAsMSowKAYDVQQDEyFTQU1MIE1ldGFk +YXRhIFNpZ25pbmcgQ2VydGlmaWNhdGUwHhcNMTYwNzI5MDczNjM4WhcNMjYwNjA3MDczNjM4WjAs +MSowKAYDVQQDEyFTQU1MIE1ldGFkYXRhIFNpZ25pbmcgQ2VydGlmaWNhdGUwggEiMA0GCSqGSIb3 +DQEBAQUAA4IBDwAwggEKAoIBAQDvX69N/roE+BhQXuybhP75br2oxXIZCf3A2qkEtzqynnd6r8lF +M5QPbph6GOyV3mo3nYG/avlAbujhVTXbdqRdRjO6m+rV/62YX03Bhrsw8Q8XMLMkeE1eNk1HFyxb +VYtbfh+FAKbShqTehI+g2jmp4aKM2xNKSBK3WY8fQ/x33lp/ZUmdPrNutyXG8fh6aqlP2gYuxaop +YuUhtnu7U9SO41XAse6P3T39qmYLXdEEilXnZ97Lip7LfhudEd0JOSdl439MktMn2ExbPP1Nt2N8 +gVqIXsx5j45hFfNQl5C4ccy7/Yh6aShHbqZiLqKu+bHwB09w8LBxErDYJrjEuFs3AgMBAAGjITAf +MB0GA1UdDgQWBBTT88iZzWO+hN9SBUkpx871lmTuLTANBgkqhkiG9w0BAQsFAAOCAQEABoPpODry +XwiM5jjtqk6veR02FevCKHpZP6Od7Kqcfs6lg5LcQmGUOgpmW3Gg4UMjBYkgARsT2Nsnah1CJqa8 +cjvv8p5KEIhY0hVS8iMJnrb3PDeiFSeP4xSfct/6z/ebV4+QFl22bsm2zpAC6BpFz8+IJ/jAmQzT +Vob4MAUeQPnwwzm3xz6yanLZx7BK5cfrTCa+hrarNQCboRjXPwiejF8WRCxpgRHH6yNs5QH/Z6o5 +e3tUP7uEpn2Ob+kcLsEMGb9DghkoDAgkHCOZeTy+7hgxt+/T94cLTa58gVtvEOnd0GuL7Vfd+IVd +XgSard8RfR3OyZlf6M4aSGQA73sskQ== + + + + + + + https://services.renater.fr/federation/en/metadata_registration_practice_statement + + + + + access-check.edugain.org + + + + eduGAIN Access Check + + data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAACXBIWXMAAABIAAAASABGyWs+AAAACXZwQWcAAAAQAAAAEABcxq3DAAABbUlEQVQoz52RPW4UQRCFv6ru6fnZNSxCJuVKpFwAicR3IUI+AakvhQhI7JU8M/1T3QQzsg1sAhWV3qtPVaonfPrCX9W+fpTP3y7otzceGJKJxCiujpVUkCv0+m3K967hixUfWgWSHwAPxG6UqtIFbEFHGoCqR721BX+wirO8LVGg+a6amEXXjqxhM5ZxNFPvX1Odocn5ZwB7HCn4hWI42wxD6KWUBVfIZxXd9J2zNhHFmro2Gx3QPKSReGCiV40ESM/A1NcxTDnn7HvLFViXBRZ6MKJnmwaktca/lFzO4fZG7n5e0D9cK4DjFI69yrGbwvhqP7KWp7kR99QrQAn3cW5N5/SQ1rivDgdUCUegFfkDkKF26TG7FijzZoS0sM7kM7D6gncvgG5d7cEdu6wN+v3R/cRwQgaAdnA2vACQvn9Tk6NNqjtwjis1Iyp4JOpafwvu3ZAYa3TV2fBjBnjfe8uLKErOZLk6fU//lcMvhuSrh7MzMwcAAAAldEVYdGRhdGU6Y3JlYXRlADIwMTUtMDctMjBUMTA6NTA6MTErMDI6MDCDfj0WAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDE1LTA3LTIwVDEwOjUwOjExKzAyOjAw8iOFqgAAAABJRU5ErkJggg== + http://www.renater.fr + eduGAIN Access Check allows administrators of a Service Provider (SP) registered in eduGAIN to create test accounts with different profiles to validate the behaviour and test federated login. The test accounts can only be used to access own services. + eduGAIN Access Check + eduGAIN Access Check allows administrators of a Service Provider (SP) registered in eduGAIN to create test accounts with different profiles to validate the behaviour and test federated login. The test accounts can only be used to access own services. + + + + + + + + MIID2zCCAsOgAwIBAgIJAJpdV2MFitUqMA0GCSqGSIb3DQEBBQUAMIGDMQswCQYD +VQQGEwJGUjEVMBMGA1UEBwwMRGVmYXVsdCBDaXR5MQ4wDAYDVQQKDAVHRUFOVDEd +MBsGA1UEAwwUdGVzdC1pZHAuZWR1Z2Fpbi5vcmcxLjAsBgkqhkiG9w0BCQEWH3Rl +c3RpZHBhY2NvdW50bWFuYWdlckBnZWFudC5uZXQwHhcNMTQxMjE4MTAxODU5WhcN +MjQxMjE3MTAxODU5WjCBgzELMAkGA1UEBhMCRlIxFTATBgNVBAcMDERlZmF1bHQg +Q2l0eTEOMAwGA1UECgwFR0VBTlQxHTAbBgNVBAMMFHRlc3QtaWRwLmVkdWdhaW4u +b3JnMS4wLAYJKoZIhvcNAQkBFh90ZXN0aWRwYWNjb3VudG1hbmFnZXJAZ2VhbnQu +bmV0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAo48FFP0P/81e3WHb +U91F/TYDZC/JypEqO2XQNH50baXpk2JrJFVFOWdgdK6qWHsLznuxngRsfOasAaVA +Ob1Bf3g2xgPUd2htSLxds+o/Y24DOM6ZairxbWJk2rOvLhJFchlrcNWCpMtUCkfJ +xmqGmeo93XAud5byj3wQ1NuH2o8rjTPAkMgQdr8D2b8EG1NYEH00AqRlXZTFCWGL +KDEuZwyta6vgMQYT4K6UF/F+HWF2wzbmVgRTHguJ0rzNqz6t+9CtLkhyZO+/57Ro +4U0ikshVWkUOENPKCnB1t+ebs/AsNozbIGA/HcdtwUwDgIowv/K0hdnLDC1vz6/S +F3rnGQIDAQABo1AwTjAdBgNVHQ4EFgQUgWN9jmJxOEHYU5m8D0atl895HxowHwYD +VR0jBBgwFoAUgWN9jmJxOEHYU5m8D0atl895HxowDAYDVR0TBAUwAwEB/zANBgkq +hkiG9w0BAQUFAAOCAQEAXvlBHMaBK6m0PQNanTqGBRdRAFt8Xkr5texD5mPTmS/7 +nqnxlN0orqYWGCaARmQE+T77EB2a2n9g2s130pUXwJxcbUwIOdPKH6CMKEHT/512 +bndJXQ3DyhkuVSLtRFOdfleIhi8qUkNC9FWxM4jDHDTTQtNEHnCjFxlhxw+ri5QJ +AVKpH9MkcuIkM6Jx+QhNwTDwCRIJffoDOH420yR5EWx/sQ4tjKQGiFOPv/WHFjXd +LqHU+X8ErzxeNmUHHST6pHePWRCMtoPTdCPhEroJhou6NMHh8ylQOIVHt6gggc7r +kUWMUybDUxPp49qMeNkdKqFPby2aW7ouKRoOXuxZhg== + + + + + + + + + + + + urn:oasis:names:tc:SAML:2.0:nameid-format:transient + + + + + + + + + + + + + + eduGAIN Access Check + eduGAIN Access Check + http://www.renater.fr + + + + + + edugain-integration@geant.net + + + + + + + https://services.renater.fr/federation/en/metadata_registration_practice_statement + + + + + agropolis.fr + + + + Agropolis International + + data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAACXBIWXMAAABIAAAASABGyWs+AAAACXZwQWcAAAAQAAAAEABcxq3DAAACPUlEQVQoz21SPW8TQRR8u7d3ju34Er6UCHACRqK4Bjk0oDSEjiYSBQVS8k9AkWgp+AuUASGEaCASkoPcgARVMF8iTnxJwMFJfL47397u3u6jsGVFwLzmFTN6ozdDEBEAAOD4kiRJsVgkhMA/YMfZzc3NVstnzGq1/KXlJfgf2Ii9XquVZ2YWbi5Io4MsbfPeZK4wRm0AOH6KICIivq2tV6/O5cYLHztbW9FvYTKuZaLk7PjpW+UrJXtspCHGmGazCQBnZ8svtj/0tbAINYhcy1DyThpRhHtztyedwkBDAWBnZ6dSqbzZ+7THu0IraTJplDSZ0JnQ2Y+482jj1cgSRUTHdrhW9fa3SKaxErFKIyUiKaIsjVQaKf5s631HxP1+X2vNwjB0J9zd+OgnD044Ra4lI5ZBw7XqyeRQREciaqe9xoE/K/OFfIENnqBM1uZBqlWBOYxQjYZnqieTThru8zCU3AASIAjIXNellGLePkjCUPICy1mEDAShSg7SqCsTBtQ7WfY3vlarVUYpdUsuAs5PXV7dfpe3HEYtjSbNZJwJoRUi3rl4fSrvfufctm0ySA0RD0V84+WDL1EbCCDCYIDApeKZ+uKK6faDIPA8jw7jIORUbry2eH+5Mu8ARTSAkCPW3QvX6osrE+B8bjQ8zxu2aACDaIwxxuzzsLbbePj88a8k0Mb4vr/2ei3LMoOIiGRU0iGGVuDp6pNz5fNSiKnpac/zgAABMuzSXwIggIjdbrdUKjHGYGQaAAD+AJBJecXxnEvWAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDE1LTA3LTIwVDEwOjQ4OjE1KzAyOjAwpWiGMQAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxNS0wNy0yMFQxMDo0ODoxNSswMjowMNQ1Po0AAAAASUVORK5CYII= + http://www.agropolis.fr + + Agropolis International + + + + + + + + + MIIDNzCCAh+gAwIBAgIUYY3sGXwChkj2CRy6QFDvkdj2zlAwDQYJKoZIhvcNAQEF +BQAwHjEcMBoGA1UEAxMTYWlzaGliLmFncm9wb2xpcy5mcjAeFw0xMzA1MTUxMzM3 +MTJaFw0zMzA1MTUxMzM3MTJaMB4xHDAaBgNVBAMTE2Fpc2hpYi5hZ3JvcG9saXMu +ZnIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCxrDy6lrhIBjcxv16n +4UJ2cEMYPO4wSmfDwhO6feoSIEuIblYRHE2nQKirMokwD6seF4rbDHyxLXg/ColL +VLv+0CJteIOZjSCgSN90WzQRrC1Ex5sJfPu6yPEXvW8H1906gEg6ok8rlCIHRGfE +15pHK5eqxQS5f2n8c2t/Uk33/FBj79/hb3Cd7vE4mdlvReD3AFswC0lV4bPmj3Ka +KUuMj9xwipwnfWCu6p2/ZJF4M3ADU5grXHJ2Vqmd8DWm5raaObKjYwJddbRBByI8 +bJJLIwAQQmX4Dh4hf1QKlf2oqWPWVQxLQp0erL1U8IWmj1RG8TTH9xOJl6kkEhYq +Z2gfAgMBAAGjbTBrMEoGA1UdEQRDMEGCE2Fpc2hpYi5hZ3JvcG9saXMuZnKGKmh0 +dHBzOi8vYWlzaGliLmFncm9wb2xpcy5mci9pZHAvc2hpYmJvbGV0aDAdBgNVHQ4E +FgQU9A7iQ8Qo+t2JCpKuOOV9YBoYs4MwDQYJKoZIhvcNAQEFBQADggEBAG0LOW6I +F+M8n2NpzyQjfVCJCA6QhWjbXrfemiPJFZGZZb2dVmHof4yCpCUYgHOBoZaXPOlB +nLYsUWvFZ6V2GELZpLHzHSSrYidieW07qQkh1DwcIYpvtZgLviOtT/tCEGsk925f +DUoGdeIqpqt54WZcW9+TbKicvjg3JT4BFOQ17bFNwPW+YjTbvsWYxen+e0mRp4vM +V0yMu2f3bccVhePASSZGL3yod3sJ1dPvlrJO9c35BekhtirolVjZqMQ0AYPVifua +yIU0dWXsZkAOcBL9kZFbJcYRUIxMgvp8U2Zdv1+ZlwOyXnnWDOOh9wjuT7FAyObU +ChvjHlgZHkvLwJI= + + + + + + + + + + + urn:mace:shibboleth:1.0:nameIdentifier + urn:oasis:names:tc:SAML:2.0:nameid-format:transient + + + + + + + + + + + + + + + + + Agropolis International + Agropolis International + http://www.agropolis.fr + + + + + + + Jean Cerda + cerda@agropolis.fr + + + + + + Jean-Pierre Allano + allano@agropolis.fr + + + + + + + + + https://services.renater.fr/federation/en/metadata_registration_practice_statement + + + + + vetagro-sup.fr + + + + Vetagro Sup + + data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAABIAAAASABGyWs+AAAACXZwQWcAAAAQAAAAEABcxq3DAAAB/klEQVQ4y2NkQAP///+X+/jxI/PO7dujP3/7kf7v778ffDzciw2MDFaqq6t/Y2RkfIysngndAEZGxkezZ8/25xEQqVDTs5eRVrNU4RQUL7x9+7YtumasBjAwMDBISIgbcvBKct998p7h1fvfDKyc4nz//jF6yjAwSBNlwM+fP3/9/PmT4dbl4wysrCwMf//9Z/r7959UcFISD1EGPH107xgfD9sbTg52hrcvHjDw87Aw/Pz+7tLEefNuEmWAm6ffxvu3Ll4zMjZleHz/KsO7lw+f3bh+czs2tVgNsLS0fPfs4b3VnKy//wrycW84e2L/uobmtg0MpIKurt6N////Z8jPzxcnWTMDAwPD79//tbq7+9bhU8OMTfD//8cMP79L1X/8tjxMQYHXT0Uh88aBgyuvEW3Aly+8ntw8jLU3bx20cnH/xPz2jTyvk9OGpTt3NhIOxP//GRgkJGR8tPVeyElIvWA4dfIqg57Bff0nD+eHExULIb5dqkYmYgYm5r8YPH3vMzx//omBk+edpI4+vxVRBnz5zPqbi4vt7a9fv//9+cvAYG79jIGZmZWBg4NJiCgDdh4sfHD/7u9j714Z/BYWiGBQVkxjePNK8+erV5+uYDOABTMM/nP09y9Z8+OHgNjli9ahf//++8vGwrlAS0tp/v///7kYGRm/IasHAIVTy8DG/VpJAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDE1LTA3LTIwVDEwOjUwOjA5KzAyOjAwfDtz7wAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxNS0wNy0yMFQxMDo1MDowOSswMjowMA1my1MAAAAASUVORK5CYII= + http://www.vetagro-sup.fr + + Vetagro Sup + + + + + + + + + MIIDPDCCAiSgAwIBAgIVAL9PsuadPSIZcMHNxlK/oevezmzWMA0GCSqGSIb3DQEB +BQUAMB8xHTAbBgNVBAMTFGFtYnJlLnZldGFncm8tc3VwLmZyMB4XDTEyMTEwODEw +MTQwNFoXDTMyMTEwODEwMTQwNFowHzEdMBsGA1UEAxMUYW1icmUudmV0YWdyby1z +dXAuZnIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCc/ptfpmkomwmT +4RsID+1Ce1dX0eUjcLgSOZN8hVpHWLag2ERWkpmvB5aK7BAFcI5i//Gk80tAiasu +JtlZhBnEw54aTJRGpyL2CVkHyl6SMRxprIi1Ji67IoGqEgUeGaheAxo+tG5e1WSc +bIbldcSKdwvjAV+7HSB4C6NqLsAzJH25++yaRH2uf2LTD0TDzNR9Q2hVj/VyYWR+ +K3HWI1Snjn/i7aFfZZhYmBkwHuQOaPhwCM+khikg5XicMsxUhHCMi93UgHGIsdkr +IEGj4xydBTUKsLaykeuFS8EgXbWwCLGkeX76w8xDoFIpnppU/yFd9v7Zg3EBfn4p +kTW3GdIjAgMBAAGjbzBtMEwGA1UdEQRFMEOCFGFtYnJlLnZldGFncm8tc3VwLmZy +hitodHRwczovL2FtYnJlLnZldGFncm8tc3VwLmZyL2lkcC9zaGliYm9sZXRoMB0G +A1UdDgQWBBTPTqWkVHrHXFjmxMWkNt/sp2h5ozANBgkqhkiG9w0BAQUFAAOCAQEA +FvXMtfBUmRZCzz8CjanGzr1TBUPmnkrKci5AtkseKw9YlfUmBXTHB01y697nYq6m +RB6KhvfW212h9CF0IOEEjoadgDhXqGYhq8PnAOtT4Ty3XDy8SbRh8aQWfvnfSngv +FdpHRiSpj5UXXuT5zTtkf59h58XKtEfCkMbUzvdOgUobJzpD0WISmQHPQnx+Neg6 +9j7oMRrDiZjS39Om8Imu9xvsnddDM3PlsDBIsvrr1o7K5iLkEdR1YYX0ZNDbiFuw +QXXl2dwQPB8KrScPUvCe57slU2gFQvvIBzjQysxC6V6TPSuM3A/ee56lACuB3jKj +oYkHQc5Gj/1rSMLmu9aLMg== + + + + + + + + + + + urn:mace:shibboleth:1.0:nameIdentifier + urn:oasis:names:tc:SAML:2.0:nameid-format:transient + + + + + + + + + + + + + + + + + Vetagro Sup + Vetagro Sup + http://www.vetagro-sup.fr + + + + + + + Nicolas Aulas + nicolas.aulas@vetagro-sup.fr + + + + + + + + + + + https://services.renater.fr/federation/en/metadata_registration_practice_statement + + + + + insa-strasbourg.fr + + + + INSA Strasbourg + + data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAq1BMVEXeAACEhoTWz87nQTn3oqXnIBjvgnvWlpT/5+fnEAjvZWOltrXnNDH3mpT/9/fnCAD/4+fvioz3x8bnVVL3qq3nKCnvkpTnHBjvcXP3sq3vgoT/7+/nFBDnODH3mpz////nDAj3z87vlpTveXv3vr3nAACMmpznRUL3pqXnJCHnFAj/+//nDADvjoz3y87vXVr3rq3nLCnvdXP3srXvhoT/8/fvODH3npz3lpQaie6kAAAACXBIWXMAAABIAAAASABGyWs+AAAACXZwQWcAAAAQAAAAEABcxq3DAAAAe0lEQVQY053OwQqCQBhF4VM22VSMMWrFGP2kkIpUQ1nz/m8Ws20TeFeHb3WRnzEBBjO8xRjZrURi0TFiy+UITjTpjIKaOndZuDSGxF0j9G1+e7CuLN1nE2F7VI28tAoqMMezP1ieFOOp7RPueBXKSqdnMq8Wg66nPP0LX4uIG4jEwJ0sAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDE1LTA3LTIwVDEwOjQ5OjA0KzAyOjAwIHfmJQAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxNS0wNy0yMFQxMDo0OTowNCswMjowMFEqXpkAAAAASUVORK5CYII= + http://www.insa-strasbourg.fr + + INSA Strasbourg + + + + + + + + + MIIDUDCCAjigAwIBAgIVAIbX8U0uAqAhuXm1jWxiFpggtDTDMA0GCSqGSIb3DQEB +CwUAMCQxIjAgBgNVBAMMGXNvdWZyZS5pbnNhLXN0cmFzYm91cmcuZnIwHhcNMTYw +OTI3MTIzNjIxWhcNMzYwOTI3MTIzNjIxWjAkMSIwIAYDVQQDDBlzb3VmcmUuaW5z +YS1zdHJhc2JvdXJnLmZyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA +sEE02sLRPAG5N81DMHEeGpI2MYF8yG/RiwH07cFIlLqgV80ewOmi0FWPYijxMb8A +bmx0RwUMvJBVI6WMxtT9fykhID20k8rWOuYOzvaynzVqCktqVgKoEAxP1PFE9b0n +iGKFprjjNl9ZD90GOUsxbAO7yXG9Q4WBa/eThl6XkUvNkSaZp5hcdWrgcAdsae3q +iD/uxFa38NXNNeRLGyfxjd2K5qYSzbwBza9s9TOq1+pfw7sxu3/4BnfQ0RLGO6co +4tH4Mufh0ome4cyYk4pvW5DOd1AznxDb8HpqvE0zwEsa69c/FDX0akgFZydmc77a +j6USn6JKjjbO49yGtG1gVQIDAQABo3kwdzAdBgNVHQ4EFgQUjzMsxZYiokPYxper +9zadM8J0F0kwVgYDVR0RBE8wTYIZc291ZnJlLmluc2Etc3RyYXNib3VyZy5mcoYw +aHR0cHM6Ly9zb3VmcmUuaW5zYS1zdHJhc2JvdXJnLmZyL2lkcC9zaGliYm9sZXRo +MA0GCSqGSIb3DQEBCwUAA4IBAQBFJKsiS3yfWuDB/E+iqQ0TuQJzL5+JIcloN0dw +BFxW3VZOju15zeQ7LwRBg9S4SGLMPJU+LM1lvr68cK9brut/FjF51SETIXEeCWo3 +7+PIqgOCzraLNinmpU/OtN8ENalOPvpS6Jvbd23qB2t+IqOtZ+j15b0Yq4/on1E3 +W2F9CVzKpe4EwmmtCPQbe7U1wvhgFylEx797pex8veWs79YSYwqvcKMh79dzl8Fo +/CgsO5pDrfKmc6SGMkByq75dZj+PqhZDzZ9EFTxbrXOTaS08VRN6a5Rh2iYRnGxq +yZl66tPcaIm5PHgOEmu5X4lPkUoY+Jt36Gj3SGCbYt8qH5S0 + + + + + + + + + + + + + MIIDXDCCAkSgAwIBAgIVAKI+qiqDCk9wTTqn7OVAoZrvj/CpMA0GCSqGSIb3DQEB +BQUAMCcxJTAjBgNVBAMTHGFudGltb2luZS5pbnNhLXN0cmFzYm91cmcuZnIwHhcN +MTQwMTEzMTAzOTU4WhcNMzQwMTEzMTAzOTU4WjAnMSUwIwYDVQQDExxhbnRpbW9p +bmUuaW5zYS1zdHJhc2JvdXJnLmZyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB +CgKCAQEAtuM8lRjlVjjmrHq9VtguaOMQL+Wd99BiOs56kL3Mbctg1FwH69LYThCW +6dOz6WJg/jU/naF7jEikXKc71xGyu7Ph7Iqa9S5hoXXAT8u/0q2nZDeTOraJqKe1 +FMF2RzXhEEMyQO3CiKNK9b+tbKoNZS7FQCixMZklWZPt4EcEKd6jyRq1WYX3dpnb +r9I/aCdhtK/PGvGe5gKTDoTR2HKyWKJTc/obf8x/vlYIEwiaGgdlqI2KiBE0x48n +zQdP6XVi3T8ZWbnkLmCfgJtP2C8PtEJuwDRAy0Z9N4DSwvxn5YCVYgBLSi0TLa10 +B/lUqqBezZrTrA9p9Lt8JtGXW5YGHwIDAQABo38wfTBcBgNVHREEVTBTghxhbnRp +bW9pbmUuaW5zYS1zdHJhc2JvdXJnLmZyhjNodHRwczovL2FudGltb2luZS5pbnNh +LXN0cmFzYm91cmcuZnIvaWRwL3NoaWJib2xldGgwHQYDVR0OBBYEFLFkjPZUc9JY +qrWjldJ/iGGkKAt4MA0GCSqGSIb3DQEBBQUAA4IBAQBSk/wU1mRn4VF2ifmy261K +DK7uX+t1H1hh8S38fKSFU7HoNXJTV3vQnmBOpYIGC1gtvmb+qjqpNtikU2zO84Gq +Q0bXHxYF2d9RUP89mKaFxE5uNcXFmlOA3ChZY3pMT5zwAPI/T60tGrex7zci7OLn +JDAQj/q4Yk9ejx6JTFggQSCCVh+oV/SDIMd2p5AY6H3mto3b6XCk7Lssa8a/D30k +pEkZnhTKdN82eRyynuOR7UDU4tasV4d7Mi/j53f5ihnRcsvwh/pYodjoVYY8cEcZ +JLnAXYF8coSwh8UN4D/0NHsvTuSOFQc85hGrqacMsvxiQiw9mv01AX5+A5YLEbVQ + + + + + + + + + + + + + + + urn:mace:shibboleth:1.0:nameIdentifier + urn:oasis:names:tc:SAML:2.0:nameid-format:transient + + + + + + + + + + + + + + + + + INSA Strasbourg + INSA Strasbourg + http://www.insa-strasbourg.fr + + + + + + + Lahsen BOUZID + lahsen.bouzid@insa-strasbourg.fr + + + + + + Simon SCHERRER + simon.scherrer@insa-strasbourg.fr + + + + + + diff --git a/tests/test_federations_utils.py b/tests/test_federations_utils.py new file mode 100644 index 0000000..5a101e0 --- /dev/null +++ b/tests/test_federations_utils.py @@ -0,0 +1,39 @@ +import os +import time + +from django.utils.text import slugify +from httmock import HTTMock + +from mellon.federation_utils import get_federation_from_url, truncate_unique +from utils import sample_federation_response + + +def test_mock_fedmd_caching(): + url = u'https://dummy.mdserver/metadata.xml' + filepath = os.path.join('metadata-cache/', truncate_unique(slugify(url))) + + if os.path.isfile(filepath): + os.remove(filepath) + + with HTTMock(sample_federation_response): + tmp = get_federation_from_url(url) + + assert tmp == filepath + + st = os.stat(filepath) + + assert os.path.isfile(filepath) + assert st.st_mtime < time.time() + 3600 + + with HTTMock(sample_federation_response): + get_federation_from_url(url) + stnew = os.stat(filepath) + + assert stnew.st_ctime == st.st_ctime + assert stnew.st_mtime == st.st_mtime + + storig = os.stat(os.path.join('tests', 'federation-sample.xml')) + + assert storig.st_size == st.st_size + + os.remove(filepath) diff --git a/tests/test_utils.py b/tests/test_utils.py index ca73ba6..c4fa47c 100644 --- a/tests/test_utils.py +++ b/tests/test_utils.py @@ -1,3 +1,4 @@ +import os import re import datetime @@ -10,7 +11,8 @@ from mellon.utils import create_server, create_metadata, iso8601_to_datetime, fl import mellon.utils from xml_utils import assert_xml_constraints -from utils import error_500, metadata_response +from utils import error_500, metadata_response, sample_federation_response, \ + html_response def test_create_server_connection_error(mocker, rf, private_settings, caplog): @@ -39,6 +41,19 @@ def test_create_server_internal_server_error(mocker, rf, private_settings, caplo assert 'failed with error' in caplog.text +def test_load_federation(mocker, rf, private_settings, caplog, tmpdir): + private_settings.MELLON_FEDERATIONS = [ + 'tests/dummy_md.xml', + 'https://dummy.server/metadata.xml', + # ('tests/dummy_md.xml', 'tests/dummy_cert.pem') + ] + request = rf.get('/') + assert 'failed with error' not in caplog.text + with HTTMock(sample_federation_response): + server = create_server(request) + assert len(server.providers) == 14 + + def test_create_server_invalid_metadata(mocker, rf, private_settings, caplog): private_settings.MELLON_IDENTITY_PROVIDERS = [ { diff --git a/tests/utils.py b/tests/utils.py index 366fe7b..811e1a2 100644 --- a/tests/utils.py +++ b/tests/utils.py @@ -16,6 +16,11 @@ def metadata_response(url, request): return response(200, content=file('tests/metadata.xml').read()) +@all_requests +def sample_federation_response(url, request): + return response(200, content=file('tests/federation-sample.xml').read()) + + def reset_caplog(cap): cap.handler.stream.truncate(0) cap.handler.records = [] -- 2.11.0