remove applications which must be rewritten or integrated in a2 (msp)

This commit is contained in:
Benjamin Dauvergne 2014-02-28 16:36:33 +01:00
parent 8e3984e53b
commit 83043d8bc0
107 changed files with 7 additions and 2464 deletions

View File

@ -1,21 +0,0 @@
from django.utils.translation import ugettext_lazy as _
from cms.plugin_base import CMSPluginBase
from cms.plugin_pool import plugin_pool
from models import A2ServiceListPlugin as A2ServiceListPluginModel
from authentic2.idp.views import service_list
class A2ServiceListPlugin(CMSPluginBase):
model = A2ServiceListPluginModel
name = _('Authentic2 Service List Plugin')
render_template = "a2_service_list_plugin/plugin.html"
text_enabled = True
def render(self, context, instance, placeholdre):
context.update({
'services': service_list(context['request']),
})
return context
plugin_pool.register_plugin(A2ServiceListPlugin)

View File

@ -1,25 +0,0 @@
# Translation of portail-citoyen strings
# Copyright (C) 2013 Entr'ouvert
# This file is distributed under the same license as the portail-citoyen package.
# Benjamin Dauvergne <bdauvergne@entrouvert.com>, 2013.
#
msgid ""
msgstr ""
"Project-Id-Version: portail_citoyen 0.1.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-03-21 10:58+0100\n"
"PO-Revision-Date: 2013-03-21 10:58+0100\n"
"Last-Translator: Benjamin Dauvergne <bdauvergne@entrouvert.com>\n"
"Language: fr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
#: cms_plugins.py:11
msgid "Authentic2 Service List Plugin"
msgstr "Liste des services accessibles par Authentic2"
#: templates/a2_service_list_plugin/plugin.html:7
msgid "My services"
msgstr "Mes services"

View File

@ -1,5 +0,0 @@
from cms.models import CMSPlugin
class A2ServiceListPlugin(CMSPlugin):
def __unicode__(self):
return '<A2ServiceListPlugin>'

View File

@ -1,3 +0,0 @@
.service-list form {
display: inline;
}

View File

@ -1,27 +0,0 @@
{% load url from future %}
{% load sekizai_tags %}
{% load i18n %}
{% if request.user.is_authenticated %}
{% addtoblock "css" %}<link rel="stylesheet" type="text/css" href="{{ STATIC_URL }}a2_service_list_plugin/css/style.css"></link>{% endaddtoblock %}
<div class="service-list">
<ul>
{% for service in services %}
{% if service.actions %}
<li>{% if service.url %}<a href="{{ service.url }}">{% endif %}{{ service.name }}{% if service.url %}</a>{% endif %}
<span class="actions">
{% for action in service.actions %}
<form action="{{ action.2 }}" method="{{ action.1 }}">
{% for key, value in action.3 %}
<input type="hidden" name="{{ key }}" value="{{ value }}" />
{% endfor %}
<input type="hidden" name="next" value="/"/>
<input type="submit" class="submit-link" value="{{ action.0 }}">
</form>
{% endfor %}
</span>
</li>
{% endif %}
{% endfor %}
</ul>
</div>
{% endif %}

View File

@ -1,41 +0,0 @@
from django.utils.translation import ugettext_lazy as _
from cms.plugin_base import CMSPluginBase
from cms.plugin_pool import plugin_pool
from authentic2.saml.models import LibertyFederation
import models
class FederationPlugin(CMSPluginBase):
model = models.FederationPlugin
name = _('federation management plugin')
render_template = 'federation_plugin/plugin.html'
text_enabled = True
def render(self, context, instance, placeholder):
request = context['request']
context['submit'] = submit = 'submit-{class_name}-{instance_id}'.format(
class_name=self.__class__.__name__.lower(),
instance_id=instance.id)
providers = instance.get_providers()
federations = LibertyFederation.objects.filter(user=request.user)
if providers:
federations = federations.filter(sp__liberty_provider__in=providers)
if request.method == 'POST' and submit in request.POST:
federation_id = request.POST.get('federation_id', '0')
federations.filter(id=federation_id).update(user=None)
context['federations'] = []
for federation in federations:
context['federations'].append({
'name': federation.sp.liberty_provider.name,
'hidden_values': [
('federation_id', federation.id),
],
})
context['instance'] = instance
return context
plugin_pool.register_plugin(FederationPlugin)

View File

@ -1,64 +0,0 @@
# portail-citoyen federation_plugin app
# Copyright (C) 2013 Entr'ouvert
# This file is distributed under the same license as the portail-citoyen package.
# Benjamin Dauvergne <bdauvergne@entrouvert.com>, 2013.
#
msgid ""
msgstr ""
"Project-Id-Version: portail-citoyen 0.1\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2014-01-07 11:52+0100\n"
"PO-Revision-Date: 2014-01-22 00:18+0100\n"
"Last-Translator: Benjamin Dauvergne <bdauvergne@entrouvert.com>\n"
"Language-Team: fr <fr@li.org>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
#: cms_plugins.py:13
msgid "federation management plugin"
msgstr "Gestion des liaisons de l'utilisateur"
#: models.py:19
msgid "provider restrictions"
msgstr "restriction sur les fournisseurs de service"
#: models.py:20
msgid ""
"provides provider slug separated by commas, appended or prepended spaces "
"will be removed"
msgstr ""
"indiquez le raccourci des fournisseurs séparés par des virgules, les espaces "
"suivants ou précédents seront supprimé"
#: models.py:34
#, python-format
msgid "no provider with slug %r"
msgstr "il n'y pas de fournisseur ayant le raccourci %r"
#: templates/federation_plugin/federation_panel.html:13
msgid "Delete"
msgstr "Supprimer"
#: templates/federation_plugin/plugin.html:6
#, python-format
msgid ""
"\n"
" You have currently %(count)s federation.\n"
" "
msgid_plural ""
"\n"
" You have currently %(count)s federations.\n"
" "
msgstr[0] ""
"\n"
"Votre compte citoyen est actuellement lié avec le compte suivant :"
msgstr[1] ""
"\n"
"Votre compte citoyen est actuellement lié avec les %(count)s comptes suivants :"
#: templates/federation_plugin/plugin.html:14
msgid "You have no federation currently."
msgstr "Vous n'avez actuellement aucune liaison."

View File

@ -1,34 +0,0 @@
import logging
from django.db import models
from django.utils.translation import ugettext as _
from django.core.exceptions import ValidationError
from authentic2.saml.models import LibertyProvider
from cms.models import CMSPlugin
logger = logging.getLogger(__name__)
class FederationPlugin(CMSPlugin):
'''Django CMS plugin to manipulate Authentic2 federations'''
provider_restriction = models.TextField(verbose_name=_('provider '
'restrictions'), blank=True, help_text=_('provides provider slug '
'separated by commas, appended or prepended spaces will be '
'removed'))
def get_slugs(self):
return filter(None, map(unicode.strip, self.provider_restriction.split(',')))
def get_providers(self):
return LibertyProvider.objects.filter(slug__in=self.get_slugs())
def clean(self):
self.provider_restriction = u','.join(self.provider_restriction.split(','))
for slug in self.get_slugs():
if not LibertyProvider.objects.filter(slug=slug).exists():
raise ValidationError(_('no provider with slug %r') % slug)

View File

@ -1,17 +0,0 @@
{% load i18n %}
<ul id="federation-plugin-list-{{ instance.id }}" class="federation-plugin-list">
{% for federation in federations %}
<li id="federation-plugin-{{ instance.id }}-federation-{{ federation.id }}" class="federation-plugin-federation">
<form method="post" class="federation-plugin-federation-form">
<span class="federation-plugin-federation-name">
{{ federation.name }}
</span>
{% csrf_token %}
{% for input_name, input_value in federation.hidden_values %}
<input type="hidden" name="{{ input_name}}" value="{{ input_value }}">
{% endfor %}
<input type="submit" name="{{ submit }}" value="{% trans "Delete" %}">
</form>
</li>
{% endfor %}
</ul>

View File

@ -1,16 +0,0 @@
{% load i18n %}
<p id="federation-plugin-{{ instance.id }}" class="federation-plugin">
{% if federations %}
<p>
{% blocktrans count count=federations|length %}
You have currently {{ count }} federation.
{% plural %}
You have currently {{ count }} federations.
{% endblocktrans %}
</p>
{% include "federation_plugin/federation_panel.html" %}
{% else %}
<p>{% blocktrans %}You have no federation currently.{% endblocktrans %}
{% endif %}
</p>

View File

@ -1,81 +0,0 @@
The MSP application provides authentication through MSP for Django application
and a gateway to the MSP REST API to share it with other properly authentified
applications.
Requirements
============
- Your base template must use django-sekizai and must contain a sekizai block
named "css" and another named "js" respectively for stylesheet and
javascript files.
- You must user a shared cache backend: through memcached, redis or the ORM.
For example if you have a memcached installed just add the following
fragment to your settings::
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION': '127.0.0.1:11211',
}
}
Installation
============
Add the application to your installed apps::
INSTALLED_APPS += ( 'msp', )
Install the authentication backend::
AUTHENTICATION_BACKENDS += ( 'msp.backends.MspBackend', )
Define needed settings, we show here the default values::
MSP_AUTHORIZE_URL = 'https://mon.service-public.fr/apis/app/oauth/authorize'
MSP_TOKEN_URL = 'https://mon.service-public.fr/apis/app/oauth/token'
MSP_API_URL = 'https://mon.service-public.fr/apis/'
MSP_CLIENT_ID = 'id assigned by DIMAP'
MSP_CLIENT_SECRET = 'secret assigned by DIMAP'
MSP_CLIENT_CERTIFICATE = ('/my-path/my-certificate.crt', '/my-path/my-certificate.key')
MSP_VERIFY_CERTIFICATE = False
You must plug the application views in your urls.py file by adding this
content::
url(r'^msp/', include('msp.urls')),
To link your account to MSP or unlink your account from MSP, add the following
content to your template::
{% include 'msp/linking.html' %}
It will show a linking link when unauthenticated and when no msp account is
linked to the current account or an unlinking link when authenticated and a
to MSP exists.
To show a connection box include this content in your template::
{% include 'msp/connecting.html' %}
To make the include file use a popup to talk to MSP add the popup parameter
like in the following content::
{% include 'msp/connecting.html' with popup=1 %}
MSP Gateway
===========
The msp application also provides an OAuth2 gateway to MSP. To configure it your
just need to provider a list of client_id, client_secret pairs in your
settings, like that::
MSP_CLIENT_CREDENTIALS = (('client_id1', 'client_secret1'),)
The following URL are provided::
- /authorize : like the authorize URL of MSP
- /access_token : like the access_token URL of MSP
- /documents/ : like the document list REST API endpoint of MSP
- /documents/<id>/ : like the document retrieval REST API endpoint of MSP

View File

@ -1,60 +0,0 @@
import sys
from django.conf import settings
from django.core.exceptions import ImproperlyConfigured
class AppSettings(object):
'''Thanks django-allauth'''
__SENTINEL = object()
def __init__(self, prefix):
self.prefix = prefix
def _setting(self, name, dflt=__SENTINEL):
from django.conf import settings
v = getattr(settings, self.prefix + name, dflt)
if v is self.__SENTINEL:
raise ImproperlyConfigured('Missing setting %r' % (self.prefix + name))
return v
@property
def authorize_url(self):
return self._setting('AUTHORIZE_URL')
@property
def token_url(self):
return self._setting('TOKEN_URL')
@property
def api_url(self):
return self._setting('API_URL')
@property
def client_id(self):
return self._setting('CLIENT_ID')
@property
def client_secret(self):
return self._setting('CLIENT_SECRET')
@property
def client_certificate(self):
return self._setting('CLIENT_CERTIFICATE', None)
@property
def verify_certificate(self):
return self._setting('VERIFY_CERTIFICATE', False)
@property
def client_credentials(self):
return self._setting('CLIENT_CREDENTIALS', ())
@property
def more_url(self):
return self._setting('MORE_URL', 'https://mon.service-public.fr/')
app_settings = AppSettings('MSP_')
app_settings.__name__ = __name__
sys.modules[__name__] = app_settings

View File

@ -1,16 +0,0 @@
from . import models
from django.contrib.auth.backends import ModelBackend
class MspBackend(ModelBackend):
def authenticate(self, agc=None, **kwargs):
try:
msp_account = models.MspAccount.objects.get(agc=agc)
return msp_account.user
except models.MspAccount.DoesNotExist:
pass
def get_saml2_authn_context(self):
import lasso
return lasso.SAML2_AUTHN_CONTEXT_PASSWORD_PROTECTED_TRANSPORT

View File

@ -1,65 +0,0 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-12-06 16:31+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
#: models.py:11
msgid "user"
msgstr "Utilisateur"
#: models.py:12
msgid "access grant code"
msgstr "Identifiant de liaison"
#: models.py:13
msgid "access token"
msgstr "Jeton d'accès"
#: views.py:134
msgid "request denied by user"
msgstr "Demande refusée par l'utilisateur !"
#: views.py:169
msgid "no local account is linked to your MSP account"
msgstr ""
"Vous n'avez aucun compte relié à Mon Service-Public actuellement ! Veuillez "
"d'abord vous connecter avec votre compte pour faire une demande decréation "
"de liaison."
#: views.py:189
msgid "msp link already exists"
msgstr "Une liaison avec mon.Service-Public.fr existe déjà."
#: views.py:193 views.py:397
msgid "msp link created"
msgstr "La liaison avec mon.Service-Public.fr est créée."
#: views.py:208
msgid "msp link was deleted"
msgstr "La liaison avec mon.Service-Public.fr est supprimée."
#: views.py:400
msgid "to create a link with msp, please authenticate"
msgstr "Pour créer une nouvelle liaison avec mon.Service-Public.fr, veuillez vous authentifier."
#: templates/msp/linking.html:13
msgid "unlink my account from MSP"
msgstr "Supprimer la liaison avec mon.Service-Public.fr"
#~ msgid "link my account to MSP"
#~ msgstr "Créer une liaison avec mon.Service-Public.fr"

View File

@ -1,78 +0,0 @@
# -*- coding: utf-8 -*-
import datetime
from south.db import db
from south.v2 import SchemaMigration
from django.db import models
class Migration(SchemaMigration):
def forwards(self, orm):
# Adding model 'MspAccount'
db.create_table(u'msp_mspaccount', (
(u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
('user', self.gf('django.db.models.fields.related.OneToOneField')(to=orm['portail_citoyen.Citoyen'], unique=True)),
('agc', self.gf('django.db.models.fields.CharField')(max_length=64)),
))
db.send_create_signal(u'msp', ['MspAccount'])
def backwards(self, orm):
# Deleting model 'MspAccount'
db.delete_table(u'msp_mspaccount')
models = {
u'auth.group': {
'Meta': {'object_name': 'Group'},
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
},
u'auth.permission': {
'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'},
'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
},
u'contenttypes.contenttype': {
'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
},
u'msp.mspaccount': {
'Meta': {'object_name': 'MspAccount'},
'agc': ('django.db.models.fields.CharField', [], {'max_length': '64'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'user': ('django.db.models.fields.related.OneToOneField', [], {'to': u"orm['portail_citoyen.Citoyen']", 'unique': 'True'})
},
u'portail_citoyen.citoyen': {
'Meta': {'object_name': 'Citoyen'},
'address': ('django.db.models.fields.CharField', [], {'max_length': '128', 'blank': 'True'}),
'backend': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}),
'backend_id': ('django.db.models.fields.CharField', [], {'max_length': '256', 'blank': 'True'}),
'city': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}),
'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
'email': ('django.db.models.fields.EmailField', [], {'max_length': '128', 'blank': 'True'}),
'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
'mobile': ('django.db.models.fields.CharField', [], {'max_length': '16', 'blank': 'True'}),
'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
'phone': ('django.db.models.fields.CharField', [], {'max_length': '16', 'blank': 'True'}),
'postal_code': ('django.db.models.fields.CharField', [], {'max_length': '5', 'blank': 'True'}),
'title': ('django.db.models.fields.CharField', [], {'max_length': '16', 'blank': 'True'}),
'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '256'})
}
}
complete_apps = ['msp']

View File

@ -1,76 +0,0 @@
# -*- coding: utf-8 -*-
from south.utils import datetime_utils as datetime
from south.db import db
from south.v2 import SchemaMigration
from django.db import models
class Migration(SchemaMigration):
def forwards(self, orm):
# Adding field 'MspAccount.token'
db.add_column(u'msp_mspaccount', 'token',
self.gf('django.db.models.fields.TextField')(default=''),
keep_default=False)
def backwards(self, orm):
# Deleting field 'MspAccount.token'
db.delete_column(u'msp_mspaccount', 'token')
models = {
u'auth.group': {
'Meta': {'object_name': 'Group'},
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
},
u'auth.permission': {
'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'},
'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
},
u'contenttypes.contenttype': {
'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
},
u'msp.mspaccount': {
'Meta': {'object_name': 'MspAccount'},
'agc': ('django.db.models.fields.CharField', [], {'max_length': '64'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'token': ('django.db.models.fields.TextField', [], {}),
'user': ('django.db.models.fields.related.OneToOneField', [], {'to': u"orm['portail_citoyen.Citoyen']", 'unique': 'True'})
},
u'portail_citoyen.citoyen': {
'Meta': {'object_name': 'Citoyen'},
'address': ('django.db.models.fields.CharField', [], {'max_length': '128', 'blank': 'True'}),
'backend': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}),
'backend_id': ('django.db.models.fields.CharField', [], {'max_length': '256', 'blank': 'True'}),
'city': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}),
'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
'email': ('django.db.models.fields.EmailField', [], {'max_length': '128', 'blank': 'True'}),
'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
'mobile': ('django.db.models.fields.CharField', [], {'max_length': '16', 'blank': 'True'}),
'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
'phone': ('django.db.models.fields.CharField', [], {'max_length': '16', 'blank': 'True'}),
'postal_code': ('django.db.models.fields.CharField', [], {'max_length': '5', 'blank': 'True'}),
'title': ('django.db.models.fields.CharField', [], {'max_length': '16', 'blank': 'True'}),
'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '256'})
}
}
complete_apps = ['msp']

View File

@ -1,43 +0,0 @@
import requests
import json
import logging
logger = logging.getLogger(__name__)
from django.db import models
from django.contrib.auth import get_user_model
from django.utils.translation import ugettext_lazy as _
from . import app_settings
class MspAccount(models.Model):
user = models.OneToOneField(get_user_model(), verbose_name=_('user'))
agc = models.CharField(max_length=64, verbose_name=_('access grant code'))
token = models.TextField(verbose_name=_('access token'))
def refresh_token(self):
if not self.token:
return True
token = json.loads(self.token)
data = {
'grant_type': 'refresh_token',
'refresh_token': token['refresh_token'],
'client_id': app_settings.client_id,
'client_secret': app_settings.client_secret,
}
response = requests.post(app_settings.token_url,
data=data, verify=app_settings.verify_certificate,
cert=app_settings.client_certificate)
new_token = response.json()
if 'error' in new_token:
if new_token['error'] == 'invalid_grant':
logger.warning('obsolete token %r, deleting MspAccount %r', self.token,
self.agc)
self.delete()
return False
return True
else:
self.token = json.dumps(new_token)
self.save()
return True

View File

@ -1,339 +0,0 @@
.msp{
margin:0 auto 0 auto;
text-align:left;
font-size:11px;
position:relative;
padding:0 0 0px 0;
color:#2B2A91;
font-family:arial, verdana, sans-serif;
}
.msp *{
font-family:arial, verdana, sans-serif;
font-size:100%;
}
.msp p, .msp form, .msp h1, .msp h2, .msp h3, .msp h4, .msp h5, .msp h6, .msp input{
margin:0;
font-weight:normal;
}
.msp ul, .msp ol{
list-style-type:none;
padding:0;
margin:0;
}
* html .msp li{
height:1%;
}
.msp fieldset{
background:#dae7ef url(../img/bg/degrade.jpg) left 0 repeat-x;
border:1px solid #2B2A91;
margin:0;
padding:0;
}
.msp img{width:auto!important}
.msp a img{border:none}
.msp .alc{text-align:center}
.msp .db{display:block}
.msp .cb {clear:both}
.msp .flr{float:right!important}
.msp .m30 {margin:30px}
.msp .mb20 {margin-bottom:20px}
.msp .fz {font-size:110%}
.msp .fz2 {font-size:130%}
.msp .fz3 {font-size:105%!important}
.msp .bnone {border:none!important}
.msp .fz2 a {font-weight:bold}
.msp p{margin:0 0 0.5em 0;padding:0}
.msp a{background-color:inherit;color:#31579C!important}
.msp a.roll,.msp a.none{text-decoration:none!important}
.msp a.roll:hover{text-decoration:underline!important}
.msp .bordure{border:2px solid #FFF;position:relative}
* html .msp .bordure {height:1%}
*:first-child+html .msp .bordure {min-height:1%}
.msp .bordure:after {content:".";display:block;height:0;clear:both;visibility:hidden}
.msp .marges{padding:0.4em}
.msp fieldset .marges{padding:0 1em 0 1.25em}
.msp fieldset .marges.top {padding-top:1em}
.msp fieldset legend{background-color:#FFF;color:#2B2A91;margin-left:0.5em}
.msp fieldset legend span{display:block;font-size:130%;font-weight:700;padding:0 0.5em 1em;position:relative;top:0.5em}
.msp p img{vertical-align:middle}
.msp p input.checkbox{vertical-align:middle}
.msp p.lien{text-align:right}
.msp p.lien a{background:url(../img/bg/fleche.png) 0 4px no-repeat;padding-left:12px}
.msp label{cursor:pointer;font-weight:700}
.msp .cadre{background:#FFF url(../img/bg/degrade.jpg) left bottom repeat-x;border:1px solid #2B2A91}
.msp .centrer{text-align:center}
.msp .centrer img{display:block;width:150px;margin:0 auto}
.msp li .lien{text-align:left !important}
.msp li.picto{background-position:2px 2px;background-repeat:no-repeat;padding-left:20px}
.msp li.utilisateur{background-image:url(../img/bg/utilisateur.png)}
.msp li.fermer{background-image:url(../img/bg/fermer.png)}
.msp .message{background-color:#E7E7F7;border-left:10px solid #B5CEEE;color:#000;padding:1em}
* html .msp .message{height:1%}
.msp .message p{margin:0}
.msp .fond{background-color:#838BCE;background-image:url(../img/bg/coin.png);background-position:100% 100%;background-repeat:no-repeat;color:#FFF;padding:1em 3px}
.msp .fond a{background-color:inherit;background-image:url(../img/bg/fleche_blanche.png) !important;color:#FFF!important}
.msp small a{background-color:inherit;background-image:url(../img/bg/retour.png);background-position:0 50%;background-repeat:no-repeat;color:#000;float:right;margin-right:30px;margin-top:-2em;padding-left:20px;font-size:90%}
.msp h1{background-color:inherit;color:#31579C;font-size:200%;margin:0.5em 0 0.5em 30px;padding:0;font-weight:bold}
.msp .contenu{background-color:inherit;color:#000;display:inline;float:left;margin-left:30px;padding-bottom:2em;width:445px}
.msp .menu{background-color:inherit;color:#000;display:inline;float:left;margin:0 30px;padding-bottom:2em;width:215px}
.msp .retablir{clear:both;display:block;height:1px;margin-top:-1px;overflow:hidden;width:1px}
.msp .encart{background:#FFFFFF url(../img/bg/degrade.jpg) left bottom repeat-x ;border:1px solid #2B2A91}
.msp .encart h2{background-color:#5E81C1;color:#FFF;font-size:100%;font-weight:bold;margin:0;padding:1px 6px}
.msp .encart p{margin:1em}
.msp .contenu ul{margin:2em 0}
.msp .contenu li.utilisateur{background-image:url(../img/bg/utilisateur_blanc.png)}
.msp .important{background-color:#E1E9F8;color:inherit;margin-bottom:0.5em;padding:0.5em}
.msp .important p{margin:0;padding:0;font-weight:bold}
.msp .contenu li p{padding:0}
.msp a.marges{margin-right:20px;padding:0}
.msp .barre{border-left:10px solid #B5CEEE;font-weight:bold;padding-left:20px}
.msp .barre ul{font-weight:400}
.msp em{background-color:inherit;color:#31579C;display:block;font-weight:700;margin:1.5em 0;text-align:center}
.msp .contenu ul strong{background-image:url(../img/bg/fleche.png);background-position:0 4px;background-repeat:no-repeat;padding-left:15px}
.msp .connexion{font-weight:bold;color:#FFF!important;background-color:inherit!important;text-decoration:none!important;background-image:url(../img/bg/connect.png);background-position:100% 50%;padding:0 25px 0 15px;text-transform:uppercase;font-size:120%}
.msp .fond li.central {padding:0 0.5em 1em;text-align:center}
.msp .note,.msp .joindre{background:#010d23 url(../img/bg/note2.gif) 0 0 repeat-x}
.msp .note span,.msp .joindre span{background:url(../img/bg/note.png) 0 0 no-repeat;display:block;padding:4px 5px 4px 20px;min-height:14px;font-weight:bold}
.msp .joindre span{background-image:url(../img/bg/note.png)}
* html .msp .note span,* html .msp .joindre span{height:14px;}
.msp .note a,.msp .joindre a{color:#FFF!important;text-decoration:none}
.msp .user{background:#2b5973 url(../img/bg/user_2.png) top left no-repeat ;padding:3px 10px 3px 18px!important;float:left;display:inline;color:#FFF!important;font-weight:bold;text-decoration:none}
.msp .bis{background-image:url(../img/bg/user.png);color:#1A2D4E!important;background-color:inherit;border:1px solid #C4D7DF;padding:2px 10px 2px 18px!important}
.msp.bloc {width:99%;border:1px solid #31579C}
.msp .cadre{background:#FFFFFF url(../img/bg/degrade.jpg) left bottom repeat-x;border:1px solid #2B2A91}
.msp .centrer{text-align:center}
.msp .fond{background-color:#838BCE;background-image:url(../img/bg/coin.png);background-position:100% 100%;background-repeat:no-repeat;color:#FFF;padding:1em 3px}
.msp .fond a{background-color:inherit;background-image:url(../img/bg/fleche_blanche.png) !important;color:#FFF}
/* en savoir plus */
.msp_esp{
font-family:arial, verdana, sans-serif;
background:#FFF;
margin:24px 0 40px 19px;
border:1px solid #4b4da4;
width:712px;
padding:0 0 55px 0;
font-size:11px;
text-align:left;
position:relative;
}
.msp_esp *{
font-family:arial, verdana, sans-serif;
font-size:100%;
color:#434343;
}
.msp_esp p, .msp_esp h1, .msp_esp h2, .msp_esp h3, .msp_esp form{
margin:0;
font-weight:normal;
}
.msp_esp_h{
position:absolute;
left:4px;
top:4px;
width:704px;
height:213px;
background:url(../img/fond_ensavoirplus_h.jpg) 0 0 no-repeat;
}
.msp_esp_b{
position:absolute;
left:4px;
bottom:4px;
width:704px;
height:55px;
background:url(../img/fond_ensavoirplus_b.jpg) 0 0 repeat-x;
}
.msp_esp_header{
margin:0 0 -6px 0;
}
.msp_esp_header:after{
content:".";
display:block;
height:0;
clear:both;
visibility:hidden;
}
* html .msp_esp_header{
height:1%;
}
*:first-child+html .msp_esp_header{
min-height:1%;
}
.msp_esp_intro{
position:relative;
padding:0 0 0 20px;
float:left;
width:548px;
}
* html .msp_esp_intro{
width:558px;
}
.msp_esp_header a,
.msp_esp_header a:hover{
position:relative;
float:left;
background:url(../img/visite_guidee.png) 0 0 no-repeat;
display:block;
width:125px;
height:122px;
margin:30px 0 0 0;
overflow:hidden;
text-indent:-999em;
cursor:pointer;
cursor:hand;
}
* html .msp_esp_header a{
background-image:none;
filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='./img/visite_guidee.png',sizingMethod='crop');
}
.msp_esp_pgtitre{
color:#31579c;
font-size:150%;
text-transform:uppercase;
padding:30px 0 10px 0;
}
.msp_esp_pgtitre span{
color:#31579c;
font-size:210%;
line-height:90%;
}
.msp_esp_intro p{
font-size:110%;
line-height:150%;
font-weight:bold;
padding:0 10px 0 0;
}
.msp_esp_cont{
margin:0 12px 0 12px;
position:relative;
padding:24px 0 24px 0;
}
* html .msp_esp_cont{
height:1%;
}
*:first-child+html .msp_esp_cont{
min-height:1%;
}
.msp_esp_cont-h{
position:absolute;
top:0;
left:0;
width:680px;
height:24px;
background:url(../img/ombre_content_h.png) 0 0 no-repeat;
}
* html .msp_esp_cont-h{
background-image:none;
filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='./img/ombre_content_h.png',sizingMethod='crop');
}
.msp_esp_cont-b{
position:absolute;
bottom:0;
left:0;
width:688px;
height:24px;
background:url(../img/ombre_content_b.png) 0 0 no-repeat;
}
* html .msp_esp_cont-b{
background-image:none;
filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='./img/ombre_content_b.png',sizingMethod='crop');
}
.msp_esp_cont-m{
background:url(../img/ombre_content_m.png) 0 0 repeat-y;
padding:0 14px 0 14px;
}
* html .msp_esp_cont-m{
height:1%;
background-image:none;
filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='./img/ombre_content_m.png',sizingMethod='scale');
}
.msp_esp_pres .msp_esp_sub,
.msp_esp_sub{
text-align:center;
padding:0 0 4px 0;
min-height:1px;
font-size:100%;
}
* html .msp_esp_pres div .msp_esp_sub{
height:auto;
}
.msp_esp_sub a,
.msp_esp_sub a:hover{
display:-moz-inline-box;
background:#010D23 url(../img/bk-input.gif) 0 0 repeat-x;
color:#fff;
border:none;
padding:3px 60px;
text-transform:uppercase;
font-weight:bold;
cursor:pointer;
cursor:hand;
text-decoration:none;
min-height:22px;
}
* html .msp_esp_sub a{
display:inline-block;
height:16px;
}
*:first-child+html .msp_esp_sub a{
display:inline-block;
min-height:16px;
}
.msp_esp_cont-degh{
background:url(../img/deg_content_h.png) 0 0 repeat-x;
}
.msp_esp_cont-degb{
background:url(../img/deg_content_b.png) 0 100% repeat-x;
padding:0 8px 0 8px;
}
.msp_esp_cont-m .msp_esp_btitre{
padding:4px 0 5px 0;
color:#31579c;
font-weight:bold;
font-size:120%;
}
.msp_esp_pres div p{
padding:6px 12px 20px 188px;
font-size:110%;
min-height:83px;
}
* html .msp_esp_pres .msp_esp_cont-degb div p{
height:83px;
}
.msp_esp_pres .msp_esp_btitre{
color:#fff;
padding:4px 10px 5px 10px;
}
.msp_esp_bloc1 .msp_esp_btitre{
background:#143152 url(../img/fond_titre_1.png) 0 0 repeat-x;
}
.msp_esp_bloc1 p{
background:url(../img/illus_1.jpg) 0 0 no-repeat;
}
.msp_esp_bloc2 .msp_esp_btitre{
background:#386722 url(../img/fond_titre_2.png) 0 0 repeat-x;
}
.msp_esp_bloc2 p{
background:url(../img/illus_2.jpg) 0 0 no-repeat;
}
.msp_esp_bloc3 .msp_esp_btitre{
background:#815302 url(../img/fond_titre_3.png) 0 0 repeat-x;
}
.msp_esp_bloc3 p{
background:url(../img/illus_3.jpg) 0 0 no-repeat;
}
.msp_esp_bloc4 .msp_esp_btitre{
background:#862e78 url(../img/fond_titre_4.png) 0 0 repeat-x;
}
.msp_esp_bloc4 p{
background:url(../img/illus_4.jpg) 0 0 no-repeat;
}
.msp_esp_logos {
text-align:center;
list-style-type:none;
padding:0;
margin:12px 0 4px 0;
}
.msp_esp_logos li{
display:inline;
margin:0 8px 0 3px;
}

View File

@ -1,65 +0,0 @@
div.msp {
background: url("../img/degrade.jpg") repeat-x scroll 0 0 #FFFFFF;
border: 1px solid #2B2A91;
width: 19em;
color: #2B2A91;
font-family: verdana, arial, sans-serif;
margin: auto;
padding: 0;
}
div.msp-bordure {
border: 2px solid #FFFFFF;
height: 100%;
}
.msp p, .msp form, .msp h1, .msp h2, .msp h3, .msp h4, .msp h5, .msp h6, .msp
input, .msp select, .msp textarea, .msp div, .msp a, .msp ul, .msp li, .msp ol,
.msp dt, .msp dl, .msp dd {
margin: 0;
padding: 0;
font-weight: normal;
list-style: none;
font-size: 100%;
}
.msp p {
padding: 0;
padding-left: 0.5em;
padding-top: 0.3em;
margin: 0 0 0.5em;
}
.msp .fz7 {
font-size: 100.01%!important;
font-family: verdana, arial, sans-serif;
}
.msp a {
background-color: inherit;
color: #31579C !important;
font-size: 1em;
-font-size: 1em;
font-family: arial;
font-size: 90%;
}
.msp a img {
text-decoration: none;
border: none;
}
.msp p img {
display: block;
vertical-align: middle;
}
.msp .lien-en-savoir-plus {
background: url("../img/fleche.png") no-repeat scroll 11px 8px transparent;
margin-left: 10em;
margin-right: 0.5em;
margin-top: -2.3em;
text-align: right;
}
#msp-linking {
text-align: center;
}

View File

@ -1,347 +0,0 @@
#msp-linking {
margin: 0px 100px;
}
.msp{
margin:0 auto 0 auto;
text-align:left;
font-size:11px;
position:relative;
padding:0 0 0px 0;
color:#2B2A91;
font-family:arial, verdana, sans-serif;
}
.msp.connecting {
width: 35em;
}
.msp *{
font-family:arial, verdana, sans-serif;
font-size:100%;
}
.msp p, .msp form, .msp h1, .msp h2, .msp h3, .msp h4, .msp h5, .msp h6, .msp input{
margin:0;
font-weight:normal;
}
.msp ul, .msp ol{
list-style-type:none;
padding:0;
margin:0;
}
* html .msp li{
height:1%;
}
.msp fieldset{
background:#dae7ef url(../img/bg/degrade.jpg) left 0 repeat-x;
border:1px solid #2B2A91;
margin:0;
padding:0;
}
.msp img{width:auto!important}
.msp a img{border:none}
.msp .alc{text-align:center}
.msp .db{display:block}
.msp .cb {clear:both}
.msp .flr{float:right!important}
.msp .m30 {margin:30px}
.msp .mb20 {margin-bottom:20px}
.msp .fz {font-size:110%}
.msp .fz2 {font-size:130%}
.msp .fz3 {font-size:105%!important}
.msp .bnone {border:none!important}
.msp .fz2 a {font-weight:bold}
.msp p{margin:0 0 0.5em 0;padding:0}
.msp a{background-color:inherit;color:#31579C!important}
.msp a.roll,.msp a.none{text-decoration:none!important}
.msp a.roll:hover{text-decoration:underline!important}
.msp .bordure{border:2px solid #FFF;position:relative}
* html .msp .bordure {height:1%}
*:first-child+html .msp .bordure {min-height:1%}
.msp .bordure:after {content:".";display:block;height:0;clear:both;visibility:hidden}
.msp .marges{padding:0.4em}
.msp fieldset .marges{padding:0 1em 0 1.25em}
.msp fieldset .marges.top {padding-top:1em}
.msp fieldset legend{background-color:#FFF;color:#2B2A91;margin-left:0.5em}
.msp fieldset legend span{display:block;font-size:130%;font-weight:700;padding:0 0.5em 1em;position:relative;top:0.5em}
.msp p img{vertical-align:middle}
.msp p input.checkbox{vertical-align:middle}
.msp p.lien{text-align:right}
.msp p.lien a{background:url(../img/bg/fleche.png) 0 4px no-repeat;padding-left:12px}
.msp label{cursor:pointer;font-weight:700}
.msp .cadre{background:#FFF url(../img/bg/degrade.jpg) left bottom repeat-x;border:1px solid #2B2A91}
.msp .centrer{text-align:center}
.msp .centrer img{display:block;width:150px;margin:0 auto}
.msp li .lien{text-align:left !important}
.msp li.picto{background-position:2px 2px;background-repeat:no-repeat;padding-left:20px}
.msp li.utilisateur{background-image:url(../img/bg/utilisateur.png)}
.msp li.fermer{background-image:url(../img/bg/fermer.png)}
.msp .message{background-color:#E7E7F7;border-left:10px solid #B5CEEE;color:#000;padding:1em}
* html .msp .message{height:1%}
.msp .message p{margin:0}
.msp .fond{background-color:#838BCE;background-image:url(../img/bg/coin.png);background-position:100% 100%;background-repeat:no-repeat;color:#FFF;padding:1em 3px}
.msp .fond a{background-color:inherit;background-image:url(../img/bg/fleche_blanche.png) !important;color:#FFF!important}
.msp small a{background-color:inherit;background-image:url(../img/bg/retour.png);background-position:0 50%;background-repeat:no-repeat;color:#000;float:right;margin-right:30px;margin-top:-2em;padding-left:20px;font-size:90%}
.msp h1{background-color:inherit;color:#31579C;font-size:200%;margin:0.5em 0 0.5em 30px;padding:0;font-weight:bold}
.msp .contenu{background-color:inherit;color:#000;display:inline;float:left;margin-left:30px;padding-bottom:2em;width:445px}
.msp .menu{background-color:inherit;color:#000;display:inline;float:left;margin:0 30px;padding-bottom:2em;width:215px}
.msp .retablir{clear:both;display:block;height:1px;margin-top:-1px;overflow:hidden;width:1px}
.msp .encart{background:#FFFFFF url(../img/bg/degrade.jpg) left bottom repeat-x ;border:1px solid #2B2A91}
.msp .encart h2{background-color:#5E81C1;color:#FFF;font-size:100%;font-weight:bold;margin:0;padding:1px 6px}
.msp .encart p{margin:1em}
.msp .contenu ul{margin:2em 0}
.msp .contenu li.utilisateur{background-image:url(../img/bg/utilisateur_blanc.png)}
.msp .important{background-color:#E1E9F8;color:inherit;margin-bottom:0.5em;padding:0.5em}
.msp .important p{margin:0;padding:0;font-weight:bold}
.msp .contenu li p{padding:0}
.msp a.marges{margin-right:20px;padding:0}
.msp .barre{border-left:10px solid #B5CEEE;font-weight:bold;padding-left:20px}
.msp .barre ul{font-weight:400}
.msp em{background-color:inherit;color:#31579C;display:block;font-weight:700;margin:1.5em 0;text-align:center}
.msp .contenu ul strong{background-image:url(../img/bg/fleche.png);background-position:0 4px;background-repeat:no-repeat;padding-left:15px}
.msp .connexion{font-weight:bold;color:#FFF!important;background-color:inherit!important;text-decoration:none!important;background-image:url(../img/bg/connect.png);background-position:100% 50%;padding:0 25px 0 15px;text-transform:uppercase;font-size:120%}
.msp .fond li.central {padding:0 0.5em 1em;text-align:center}
.msp .note,.msp .joindre{background:#010d23 url(../img/bg/note2.gif) 0 0 repeat-x}
.msp .note span,.msp .joindre span{background:url(../img/bg/note.png) 0 0 no-repeat;display:block;padding:4px 5px 4px 20px;min-height:14px;font-weight:bold}
.msp .joindre span{background-image:url(../img/bg/note.png)}
* html .msp .note span,* html .msp .joindre span{height:14px;}
.msp .note a,.msp .joindre a{color:#FFF!important;text-decoration:none}
.msp .user{background:#2b5973 url(../img/bg/user_2.png) top left no-repeat ;padding:3px 10px 3px 18px!important;float:left;display:inline;color:#FFF!important;font-weight:bold;text-decoration:none}
.msp .bis{background-image:url(../img/bg/user.png);color:#1A2D4E!important;background-color:inherit;border:1px solid #C4D7DF;padding:2px 10px 2px 18px!important}
.msp.bloc {width:99%;border:1px solid #31579C}
.msp .cadre{background:#FFFFFF url(../img/bg/degrade.jpg) left bottom repeat-x;border:1px solid #2B2A91}
.msp .centrer{text-align:center}
.msp .fond{background-color:#838BCE;background-image:url(../img/bg/coin.png);background-position:100% 100%;background-repeat:no-repeat;color:#FFF;padding:1em 3px}
.msp .fond a{background-color:inherit;background-image:url(../img/bg/fleche_blanche.png) !important;color:#FFF}
/* en savoir plus */
.msp_esp{
font-family:arial, verdana, sans-serif;
background:#FFF;
margin:24px 0 40px 19px;
border:1px solid #4b4da4;
width:712px;
padding:0 0 55px 0;
font-size:11px;
text-align:left;
position:relative;
}
.msp_esp *{
font-family:arial, verdana, sans-serif;
font-size:100%;
color:#434343;
}
.msp_esp p, .msp_esp h1, .msp_esp h2, .msp_esp h3, .msp_esp form{
margin:0;
font-weight:normal;
}
.msp_esp_h{
position:absolute;
left:4px;
top:4px;
width:704px;
height:213px;
background:url(../img/fond_ensavoirplus_h.jpg) 0 0 no-repeat;
}
.msp_esp_b{
position:absolute;
left:4px;
bottom:4px;
width:704px;
height:55px;
background:url(../img/fond_ensavoirplus_b.jpg) 0 0 repeat-x;
}
.msp_esp_header{
margin:0 0 -6px 0;
}
.msp_esp_header:after{
content:".";
display:block;
height:0;
clear:both;
visibility:hidden;
}
* html .msp_esp_header{
height:1%;
}
*:first-child+html .msp_esp_header{
min-height:1%;
}
.msp_esp_intro{
position:relative;
padding:0 0 0 20px;
float:left;
width:548px;
}
* html .msp_esp_intro{
width:558px;
}
.msp_esp_header a,
.msp_esp_header a:hover{
position:relative;
float:left;
background:url(../img/visite_guidee.png) 0 0 no-repeat;
display:block;
width:125px;
height:122px;
margin:30px 0 0 0;
overflow:hidden;
text-indent:-999em;
cursor:pointer;
cursor:hand;
}
* html .msp_esp_header a{
background-image:none;
filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='./img/visite_guidee.png',sizingMethod='crop');
}
.msp_esp_pgtitre{
color:#31579c;
font-size:150%;
text-transform:uppercase;
padding:30px 0 10px 0;
}
.msp_esp_pgtitre span{
color:#31579c;
font-size:210%;
line-height:90%;
}
.msp_esp_intro p{
font-size:110%;
line-height:150%;
font-weight:bold;
padding:0 10px 0 0;
}
.msp_esp_cont{
margin:0 12px 0 12px;
position:relative;
padding:24px 0 24px 0;
}
* html .msp_esp_cont{
height:1%;
}
*:first-child+html .msp_esp_cont{
min-height:1%;
}
.msp_esp_cont-h{
position:absolute;
top:0;
left:0;
width:680px;
height:24px;
background:url(../img/ombre_content_h.png) 0 0 no-repeat;
}
* html .msp_esp_cont-h{
background-image:none;
filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='./img/ombre_content_h.png',sizingMethod='crop');
}
.msp_esp_cont-b{
position:absolute;
bottom:0;
left:0;
width:688px;
height:24px;
background:url(../img/ombre_content_b.png) 0 0 no-repeat;
}
* html .msp_esp_cont-b{
background-image:none;
filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='./img/ombre_content_b.png',sizingMethod='crop');
}
.msp_esp_cont-m{
background:url(../img/ombre_content_m.png) 0 0 repeat-y;
padding:0 14px 0 14px;
}
* html .msp_esp_cont-m{
height:1%;
background-image:none;
filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='./img/ombre_content_m.png',sizingMethod='scale');
}
.msp_esp_pres .msp_esp_sub,
.msp_esp_sub{
text-align:center;
padding:0 0 4px 0;
min-height:1px;
font-size:100%;
}
* html .msp_esp_pres div .msp_esp_sub{
height:auto;
}
.msp_esp_sub a,
.msp_esp_sub a:hover{
display:-moz-inline-box;
background:#010D23 url(../img/bk-input.gif) 0 0 repeat-x;
color:#fff;
border:none;
padding:3px 60px;
text-transform:uppercase;
font-weight:bold;
cursor:pointer;
cursor:hand;
text-decoration:none;
min-height:22px;
}
* html .msp_esp_sub a{
display:inline-block;
height:16px;
}
*:first-child+html .msp_esp_sub a{
display:inline-block;
min-height:16px;
}
.msp_esp_cont-degh{
background:url(../img/deg_content_h.png) 0 0 repeat-x;
}
.msp_esp_cont-degb{
background:url(../img/deg_content_b.png) 0 100% repeat-x;
padding:0 8px 0 8px;
}
.msp_esp_cont-m .msp_esp_btitre{
padding:4px 0 5px 0;
color:#31579c;
font-weight:bold;
font-size:120%;
}
.msp_esp_pres div p{
padding:6px 12px 20px 70px;
font-size:110%;
min-height:65px;
}
* html .msp_esp_pres .msp_esp_cont-degb div p{
height:83px;
}
.msp_esp_pres .msp_esp_btitre{
color:#fff;
padding:4px 10px 5px 10px;
}
.msp_esp_bloc1 .msp_esp_btitre{
background:#143152 url(../img/fond_titre_1.png) 0 0 repeat-x;
}
.msp_esp_bloc1 p{
background:url(../img/illus_1.jpg) 0 0 no-repeat;
}
.msp_esp_bloc2 .msp_esp_btitre{
background:#386722 url(../img/fond_titre_2.png) 0 0 repeat-x;
}
.msp_esp_bloc2 p{
background:url(../img/illus_2.jpg) 0 0 no-repeat;
}
.msp_esp_bloc3 .msp_esp_btitre{
background:#815302 url(../img/fond_titre_3.png) 0 0 repeat-x;
}
.msp_esp_bloc3 p{
background:url(../img/illus_3.jpg) 0 0 no-repeat;
}
.msp_esp_bloc4 .msp_esp_btitre{
background:#862e78 url(../img/fond_titre_4.png) 0 0 repeat-x;
}
.msp_esp_bloc4 p{
background:url(../img/illus_4.jpg) 0 0 no-repeat;
}
.msp_esp_logos {
text-align:center;
list-style-type:none;
padding:0;
margin:12px 0 4px 0;
}
.msp_esp_logos li{
display:inline;
margin:0 8px 0 3px;
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 652 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 189 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 234 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 233 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 558 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 196 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 108 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 108 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 207 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 96 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 128 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 225 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 364 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 360 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 205 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 104 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 97 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 174 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 184 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 558 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 108 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 219 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 338 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 190 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 190 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 190 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 190 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 858 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 512 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 707 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 685 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 682 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 217 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 902 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 953 B

View File

@ -1,146 +0,0 @@
(function(){
var DomReady = window.DomReady = {};
// Everything that has to do with properly supporting our document ready event. Brought over from the most awesome jQuery.
var userAgent = navigator.userAgent.toLowerCase();
// Figure out what browser is being used
var browser = {
version: (userAgent.match( /.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/ ) || [])[1],
safari: /webkit/.test(userAgent),
opera: /opera/.test(userAgent),
msie: (/msie/.test(userAgent)) && (!/opera/.test( userAgent )),
mozilla: (/mozilla/.test(userAgent)) && (!/(compatible|webkit)/.test(userAgent))
};
var readyBound = false;
var isReady = false;
var readyList = [];
// Handle when the DOM is ready
function domReady() {
// Make sure that the DOM is not already loaded
if(!isReady) {
// Remember that the DOM is ready
isReady = true;
if(readyList) {
for(var fn = 0; fn < readyList.length; fn++) {
readyList[fn].call(window, []);
}
readyList = [];
}
}
};
// From Simon Willison. A safe way to fire onload w/o screwing up everyone else.
function addLoadEvent(func) {
var oldonload = window.onload;
if (typeof window.onload != 'function') {
window.onload = func;
} else {
window.onload = function() {
if (oldonload) {
oldonload();
}
func();
}
}
};
// does the heavy work of working through the browsers idiosyncracies (let's call them that) to hook onload.
function bindReady() {
if(readyBound) {
return;
}
readyBound = true;
// Mozilla, Opera (see further below for it) and webkit nightlies currently support this event
if (document.addEventListener && !browser.opera) {
// Use the handy event callback
document.addEventListener("DOMContentLoaded", domReady, false);
}
// If IE is used and is not in a frame
// Continually check to see if the document is ready
if (browser.msie && window == top) (function(){
if (isReady) return;
try {
// If IE is used, use the trick by Diego Perini
// http://javascript.nwbox.com/IEContentLoaded/
document.documentElement.doScroll("left");
} catch(error) {
setTimeout(arguments.callee, 0);
return;
}
// and execute any waiting functions
domReady();
})();
if(browser.opera) {
document.addEventListener( "DOMContentLoaded", function () {
if (isReady) return;
for (var i = 0; i < document.styleSheets.length; i++)
if (document.styleSheets[i].disabled) {
setTimeout( arguments.callee, 0 );
return;
}
// and execute any waiting functions
domReady();
}, false);
}
if(browser.safari) {
var numStyles;
(function(){
if (isReady) return;
if (document.readyState != "loaded" && document.readyState != "complete") {
setTimeout( arguments.callee, 0 );
return;
}
if (numStyles === undefined) {
var links = document.getElementsByTagName("link");
for (var i=0; i < links.length; i++) {
if(links[i].getAttribute('rel') == 'stylesheet') {
numStyles++;
}
}
var styles = document.getElementsByTagName("style");
numStyles += styles.length;
}
if (document.styleSheets.length != numStyles) {
setTimeout( arguments.callee, 0 );
return;
}
// and execute any waiting functions
domReady();
})();
}
// A fallback to window.onload, that will always work
addLoadEvent(domReady);
};
// This is the public function that people can use to hook up ready.
DomReady.ready = function(fn, args) {
// Attach the listeners
bindReady();
// If the DOM is already ready
if (isReady) {
// Execute the function immediately
fn.call(window, []);
} else {
// Add the function to the wait list
readyList.push( function() { return fn.call(window, []); } );
}
};
bindReady();
})();

View File

@ -1,22 +0,0 @@
(function(undef) {
function openpopup(path) {
var windowName = 'ConnectWithOauth';
var windowOptions = 'location=0,status=0,width=400,height=500';
var oauthWindow = window.open(path, windowName, windowOptions);
var oauthInterval = window.setInterval(function(){
if (oauthWindow.closed) {
window.clearInterval(oauthInterval);
}
}, 1000);
window.open(path, windowName, windowOptions);
return false;
}
var tags = document.getElementsByClassName('js-oauth-popup');
for (var i = 0; i < tags.length; i++) {
var tag = tags[i];
tag.onclick = function (ev) {
openpopup(this.href);
return false;
};
}
})();

View File

@ -1,16 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<script type="text/javascript">
function getParameterByName(name) {
name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"),
results = regex.exec(location.search);
return results == null ? "" : decodeURIComponent(results[1].replace(/\+/g, " "));
}
var next = getParameterByName('next');
window.opener.location.href = {% if redirect_to %}"{{ redirect_to }}" {% else %}next || '/'{% endif %};
window.close();
</script>
</head>
<html>

View File

@ -1,48 +0,0 @@
{% extends "base.html"%}
{% load sekizai_tags %}
{% load staticfiles %}
{% block content %}
{% addtoblock "css" %}<link rel="stylesheet" type="text/css" href="{% static 'msp/css/screen.msp.css' %}"></link>{% endaddtoblock %}
{% addtoblock "js" %}<script type="text/javascript" src="{% static "msp/js/domready.js" %}"></script>{% endaddtoblock %}
{% addtoblock "js" %}<script type="text/javascript" src="{% static "msp/js/oauth.js" %}"></script>{% endaddtoblock %}
<div id="msp-confirm-unlink">
<div class="msp">
<div class="cadre">
<div class="bordure">
<h1>Gestion des liaisons&nbsp;: confirmation de suppression</h1>
<p>
<small><a href="{{ done }}" class="roll">Retour</a></small>
</p>
<div class="contenu">
<div class="barre">
<p><strong> Attention, vous allez supprimer votre (ou vos) liaison(s) entre votre compte Partenaire et mon.service-public.fr.&nbsp; </strong></p>
<p><strong> Supprimer la totalit&eacute; des liaisons ne supprime ni votre compte mon.service-public.fr ni votre compte citoyen.<br />
Si vous confirmez cette action, il ne vous sera plus possible d&rsquo;acc&eacute;der aux fonctionnalit&eacute;s de mon.service-public &agrave; partir de votre compte citoyen. </strong></p>
<p>
Confirmez-vous cette action&nbsp;?
</p>
</div>
<div class="m30">
<p class="mb20">
<a href="{% url 'msp-unlink' %}?next={{ next|urlencode }}{% if popup %}&popup=1{% endif %}" class="marges user {% if popup %}js-oauth-popup{% endif %}">Confirmer suppression</a>
<a href="{{ next }}" class="marges user bis">Annuler</a>
</p>
<br class="cb" />
<br class="cb" />
<p>
Une fois les liaisons supprim&eacute;es, mon.service-public.fr n&rsquo;a plus aucune connaissance de vos liaisons avec votre compte citoyen et vice versa. Il n'est alors plus possible de naviguer entre les deux sites sans r&eacute;authentification.
</p>
</div>
</div>
<span class="retablir"><br /></span>
</div>
</div>
</div>
</div>
{% endblock %}

View File

@ -1,34 +0,0 @@
{% load staticfiles %}
{% load sekizai_tags %}
{% addtoblock "css" %}<link rel="stylesheet" type="text/css" href="{% static 'msp/css/screen.msp.css' %}"></link>{% endaddtoblock %}
{% addtoblock "js" %}<script type="text/javascript" src="{% static "msp/js/domready.js" %}"></script>{% endaddtoblock %}
{% addtoblock "js" %}<script type="text/javascript" src="{% static "msp/js/oauth.js" %}"></script>{% endaddtoblock %}
{% comment %}
Emprunté sur caf.fr
{% endcomment %}
{% if 'nomsp' not in request.GET %}
<div class="msp connecting">
<div class="cadre">
<div class="bordure">
<div class="marges">
<p class="flr">
<a href="{% url 'msp-login-or-link' %}{% if request.GET.next or popup %}?{% endif %}{% if request.GET.next %}{{ request.GET.urlencode }}{% endif %}{% if popup %}&popup=1{% endif %}"
title="Connectez-vous avec Mon Service Public" class="connexion{% if popup %} js-oauth-popup{% endif %}">Connexion</a>
</p>
<p>
<strong class="fz">
Nouveau&nbsp;: connectez-vous avec
<img src="{% static "msp/img/mon_service-public.fr_petit.png" %}" width="100" height="25" alt="mon.service-public.fr" />
</strong>
</p>
<p class="lien">
<a href="{% url "msp-more-redirect" %}" target="_blank" class="roll">En savoir plus</a>
</p>
</div>
</div>
</div>
</div>
{% endif %}

View File

@ -1,12 +0,0 @@
<!DOCTYPE html>
<html>
<body>
<ul>
{% for document in documents %}
<li>
<a href="{% url 'msp-document' doc_id=document.id %}">{{ document.name }}</a>
</li>
{% endfor %}
</ul>
</body>
<html>

View File

@ -1,77 +0,0 @@
{% extends "base.html"%}
{% load sekizai_tags %}
{% load staticfiles %}
{% block content %}
{% addtoblock "css" %}<link rel="stylesheet" type="text/css" href="{% static 'msp/css/screen.msp.css' %}"></link>{% endaddtoblock %}
<div id="msp-link-management">
<div class="msp">
<div class="cadre">
<div class="bordure">
<h1>Gestion des liaisons avec mon.service-public.fr</h1>
<p>
<small><a href="{{ next }}" class="roll">Retour</a></small>
</p>
<div class="contenu">
<p>
<strong>Sur cette page, vous pouvez&nbsp;:</strong>
</p>
<ul>
<!-- <li><strong>Activer ou d&eacute;sactiver le suivi de vos d&eacute;marches sur mon.service-public.fr</strong></li> -->
<li><strong>Supprimer les liaisons vers mon.service-public.fr</strong></li>
</ul>
<!-- <div class="important">
<p>
Comment recevoir mes documents et informations sur mon.service-public.fr&nbsp;?
</p>
</div>
<p>
En activant le suivi des d&eacute;marches sur mon.service-public.fr, vous autorisez Partenaire.fr &agrave; envoyer des informations et des documents administratifs sur votre compte mon.service-public.fr . Ces informations sont ensuite accessibles depuis le bloc partenaire de mon.service-public.fr et les documents sont consultables dans votre espace confidentiel.
</p>
<p>
<em>Actuellement, le suivi des d&eacute;marches n&rsquo;est pas activ&eacute;</em>
</p>
<p>
<a href="#" class="marges user">Activer le suivi des d&eacute;marches</a>
<img src="img/mon_service-public.fr.png" width="125" height="30" alt="mon.service-public.fr" />
</p> -->
<div class="important">
<p>
Comment supprimer toutes les liaisons entre Partenaire.fr et mon.service-public.fr&nbsp;?
</p>
</div>
<p>
Supprimer la totalit&eacute; des liaisons ne supprime ni votre compte mon.service-public.fr ni votre compte citoyen.
</p>
<p>
Une fois les liaisons supprim&eacute;es, mon.service-public.fr n&rsquo;aura aucune connaissance de votre compte citoyen, et vice versa. Il ne sera alors plus possible de naviguer entre les deux sites sans r&eacute;-authentification.
</p>
<p>
<a href="{% url "msp-confirm-unlink" %}?next={{ next }}" class="marges user">Supprimer toutes les liaisons</a>
<img src="{% static "msp/img/mon_service-public.fr.png" %}" width="125" height="30" alt="mon.service-public.fr" />
</p>
</div>
<div class="menu">
<div class="encart">
<div class="bordure">
<h2>Qu&rsquo;est-ce que mon.service-public.fr&nbsp;?</h2>
<p> Simplifiez votre relation avec les services publics, acc&eacute;dez à une information adapt&eacute;e &agrave; votre cas personnel, r&eacute;alisez et suivez vos d&eacute;marches administratives en ligne. </p>
<p class="centrer">
<img src="{% static "msp/img/mon_service-public.fr.png" %}" width="125" height="30" alt="mon.service-public.fr" />
</p>
<p class="lien">
<a href="https://mon.service-public.fr/portail/app/cms/public/a_propos_du_site" class="roll" target="_blank">En savoir plus</a>
</p>
</div>
</div>
</div>
<span class="retablir"><br /></span>
</div>
</div>
</div>
</div>
{% endblock %}

View File

@ -1,54 +0,0 @@
{% load i18n %}
{% load sekizai_tags %}
{% load staticfiles %}
{% addtoblock "css" %}<link rel="stylesheet" type="text/css" href="{% static 'msp/css/screen.msp.css' %}"></link>{% endaddtoblock %}
{% addtoblock "js" %}<script type="text/javascript" src="{% static "msp/js/domready.js" %}"></script>{% endaddtoblock %}
{% addtoblock "js" %}<script type="text/javascript" src="{% static "msp/js/oauth.js" %}"></script>{% endaddtoblock %}
<div id="msp-linking">
{% if user.is_authenticated and user.mspaccount and user.mspaccount.refresh_token %}
<div class="msp">
<div class="cadre">
<p class="centrer">
<img src="{% static "msp/img/toutes_vos_demarches.png" %}" width="140" height="35" alt="Vous &ecirc;tes actuellement en connexion avec" />
<img src="{% static "msp/img/mon_service-public.fr.png" %}" width="125" height="30" alt="mon.Service-Public.fr" />
</p>
<ul class="fond">
<li class="picto">
<p class="lien">
<a href="{% url "msp-more-redirect" %}" target="_blank" class="roll">En savoir plus</a>
</p>
</li>
<li class="picto utilisateur">
<p class="lien">
<a href="{% url "msp-link-management" %}?next={{ request.get_full_path|urlencode }}" class="roll">G&eacute;rer mes liaisons</a>
</p>
</li>
</ul>
</div>
</div>
{% else %}
<div class="msp" style="width: 300px">
<div class="cadre">
<p class="centrer">
<img src="{% static "msp/img/toutes_vos_demarches.png" %}" width="140" height="35" alt="Vous &ecirc;tes actuellement en connexion avec" />
<img src="{% static "msp/img/mon_service-public.fr.png" %}" width="125" height="30" alt="mon.service-public.fr" />
</p>
<ul class="fond">
<li class="picto">
<p class="lien">
<a href="{% url "msp-more-redirect" %}" target="_blank" class="roll">En savoir plus</a>
</p>
</li>
<li class="picto utilisateur">
<p class="lien">
<a href="{% url 'msp-link' %}?next={{ request.get_full_path }}{% if popup %}&popup=1{% endif %}"
class="{% if popup %}js-oauth-popup{% endif %} roll db">Cr&eacute;er une liaison avec mon.service-public.fr</a>
</p>
</li>
</ul>
</div>
</div>
</div>
{% endif %}

Some files were not shown because too many files have changed in this diff Show More