auquotidien_plugin: add plugin to show categories from many e-service portals
This commit is contained in:
parent
ea0f0fac76
commit
5418778fb3
|
@ -11,7 +11,7 @@ recursive-include portail_citoyen/apps/passerelle_register_plugin/templates *.ht
|
|||
recursive-include portail_citoyen/apps/passerelle_register_plugin/static *.css *.gif *.png *.js
|
||||
recursive-include portail_citoyen/apps/passerelle_register_plugin/locale *.po *.mo
|
||||
recursive-include portail_citoyen/apps/auquotidien_plugin/templates *.html
|
||||
recursive-include portail_citoyen/apps/auquotidien_plugin/static *.css *.gif *.png *.js
|
||||
recursive-include portail_citoyen/apps/auquotidien_plugin/static *.js
|
||||
recursive-include portail_citoyen/apps/auquotidien_plugin/locale *.po *.mo
|
||||
recursive-include portail_citoyen/apps/federation_plugin/templates *.html
|
||||
recursive-include portail_citoyen/apps/federation_plugin/locale *.po *.mo
|
||||
|
|
|
@ -3,6 +3,6 @@ from django.contrib import admin
|
|||
from models import AuQuotidienAPI
|
||||
|
||||
class AuQuotidienAPIAdmin(admin.ModelAdmin):
|
||||
list_display = [ '__unicode__', 'orig', 'hash_algo' ]
|
||||
list_display = [ 'name', 'order', 'active', 'service_provider', 'orig', 'hash_algo', 'verify_certificate', 'allow_redirects', 'timeout' ]
|
||||
|
||||
admin.site.register(AuQuotidienAPI, AuQuotidienAPIAdmin)
|
||||
|
|
|
@ -5,50 +5,67 @@ from django.utils.translation import ugettext_lazy as _
|
|||
|
||||
|
||||
from cms.plugin_pool import plugin_pool
|
||||
from .models import AuQuotidienActiveFormsPlugin as AuQuotidienActiveFormsPluginModel
|
||||
|
||||
|
||||
from data_source_plugin.cms_plugins import DataSourcePlugin, Data
|
||||
from data_source_plugin.models import DataSource
|
||||
|
||||
from .models import (AuQuotidienActiveFormsPlugin as AuQuotidienActiveFormsPluginModel,
|
||||
AuQuotidienCategoryPlugin as AuQuotidienCategoryPluginModel, AuQuotidienAPI)
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
class FakeSource(object):
|
||||
def __init__(self, id, name, mime_type, url, hash_algo, signature_key):
|
||||
self.id = id
|
||||
self.name = name
|
||||
self.mime_type = mime_type
|
||||
def __init__(self, url, api):
|
||||
self.url = url
|
||||
self.hash_algo = hash_algo
|
||||
self.signature_key = signature_key
|
||||
self.mime_type = DataSource.JSON
|
||||
self.api = api
|
||||
|
||||
class AuQuotidienActiveFormsPlugin(DataSourcePlugin):
|
||||
def __getattr__(self, attribute):
|
||||
return getattr(self.api, attribute)
|
||||
|
||||
class AuQuotidienBasePlugin(DataSourcePlugin):
|
||||
model = AuQuotidienActiveFormsPluginModel
|
||||
name = _('au-quotidien active forms plugin')
|
||||
render_template = None
|
||||
text_enabled = True
|
||||
inlines = []
|
||||
url_template = None
|
||||
|
||||
def get_apis(self, context, instance):
|
||||
user = context['request'].user
|
||||
return AuQuotidienAPI.objects.filter(service_provider__libertyfederation__user=user, active=True)
|
||||
|
||||
def get_sources(self, context, instance):
|
||||
api = instance.au_quotidien_api
|
||||
provider = api.service_provider.liberty_provider
|
||||
url = provider.entity_id
|
||||
url = url.split('/saml/')[0]
|
||||
url_suffix = '/myspace/json/forms?NameID={{{{federations.service_{provider_id}.links.0}}}}&orig={orig}'
|
||||
id = provider.id
|
||||
orig = api.orig
|
||||
url_suffix = url_suffix.format(provider_id=id, orig=orig)
|
||||
url = urlparse.urljoin(url, url_suffix)
|
||||
logger.debug('built actives forms URL %s', url)
|
||||
for api in self.get_apis(context, instance):
|
||||
url = api.base_url
|
||||
url_suffix = self.url_template
|
||||
orig = api.orig
|
||||
url_suffix = url_suffix.format(provider_id=api.provider_id,
|
||||
orig=orig)
|
||||
url = urlparse.urljoin(url, url_suffix)
|
||||
source = FakeSource(url=url, api=api)
|
||||
yield Data(source, context, 0, instance.refresh)
|
||||
|
||||
source = FakeSource(
|
||||
id=api.id,
|
||||
name=provider.name,
|
||||
mime_type=DataSource.JSON,
|
||||
url=url,
|
||||
hash_algo=api.hash_algo,
|
||||
signature_key=api.signature_key)
|
||||
|
||||
yield Data(source, context, instance.limit, instance.refresh)
|
||||
class AuQuotidienActiveFormsPlugin(AuQuotidienBasePlugin):
|
||||
model = AuQuotidienActiveFormsPluginModel
|
||||
name = _('au-quotidien active forms')
|
||||
render_template = 'auquotidien_plugin/active_forms.html'
|
||||
text_enabled = True
|
||||
inlines = []
|
||||
url_template = '/myspace/json/forms?format=json&NameID={{{{federations.service_{provider_id}.links.0}}}}&orig={orig}'
|
||||
|
||||
|
||||
plugin_pool.register_plugin(AuQuotidienActiveFormsPlugin)
|
||||
|
||||
|
||||
class AuQuotidienCategoryPlugin(AuQuotidienBasePlugin):
|
||||
model = AuQuotidienCategoryPluginModel
|
||||
name = _('au-quotidien categories')
|
||||
render_template = 'auquotidien_plugin/categories.html'
|
||||
text_enabled = True
|
||||
inlines = []
|
||||
url_template = '/categories?format=json&NameID={{{{federations.service_{provider_id}.links.0}}}}&orig={orig}'
|
||||
|
||||
|
||||
plugin_pool.register_plugin(AuQuotidienCategoryPlugin)
|
||||
|
|
|
@ -8,7 +8,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2013-08-26 15:42+0200\n"
|
||||
"POT-Creation-Date: 2014-02-10 10:55+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"
|
||||
|
@ -18,46 +18,84 @@ msgstr ""
|
|||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||
|
||||
#: cms_plugins.py:27 models.py:43
|
||||
msgid "au-quotidien active forms plugin"
|
||||
msgstr "plugin d'affichage des formulaires actifs sur Au-Quotidien"
|
||||
#: cms_plugins.py:52 models.py:60 models.py:61
|
||||
msgid "au-quotidien active forms"
|
||||
msgstr "affichage des démarches en cours"
|
||||
|
||||
#: models.py:18
|
||||
#: cms_plugins.py:64 models.py:71
|
||||
msgid "au-quotidien categories"
|
||||
msgstr "affichage des catégories de démarches"
|
||||
|
||||
#: models.py:14
|
||||
msgid "name"
|
||||
msgstr "nom"
|
||||
|
||||
#: models.py:16
|
||||
msgid "active"
|
||||
msgstr "actif"
|
||||
|
||||
#: models.py:17
|
||||
msgid "order"
|
||||
msgstr "ordre"
|
||||
|
||||
#: models.py:19
|
||||
msgid "liberty service provider for the au-quotidien service"
|
||||
msgstr "fournisseur de service liberty associé au service au-quotidien"
|
||||
|
||||
#: models.py:20
|
||||
#: models.py:21
|
||||
msgid "origin"
|
||||
msgstr "origine"
|
||||
|
||||
#: models.py:21
|
||||
#: models.py:22
|
||||
msgid "hashing algorithm"
|
||||
msgstr "algorithme de hachage"
|
||||
|
||||
#: models.py:23
|
||||
#: models.py:24
|
||||
msgid "signature key"
|
||||
msgstr "clé de signature"
|
||||
|
||||
#: models.py:30 models.py:37
|
||||
#: models.py:26
|
||||
msgid "verify certificate"
|
||||
msgstr "vérifier le certificat SSL"
|
||||
|
||||
#: models.py:28
|
||||
msgid "allows HTTP redirections"
|
||||
msgstr "permettre les redirections HTTP"
|
||||
|
||||
#: models.py:29
|
||||
msgid "it can improve latencies to forbid redirection follow"
|
||||
msgstr ""
|
||||
"cela peut améliorer les performances en cas d'absence de service d'interdire "
|
||||
"les redirections"
|
||||
|
||||
#: models.py:31
|
||||
msgid "timeout"
|
||||
msgstr "temps d'expiration pour la requête HTTP"
|
||||
|
||||
#: models.py:33
|
||||
msgid "time in second to wait before failing to download a datasource"
|
||||
msgstr " "
|
||||
|
||||
#: models.py:47
|
||||
msgid "au-quotidien API endpoint"
|
||||
msgstr "terminaison de l'API au-quotidien"
|
||||
|
||||
#: models.py:31
|
||||
#: models.py:48
|
||||
msgid "au-quotidien API endpoints"
|
||||
msgstr "terminaisons de l'API au-quotidien"
|
||||
|
||||
#: models.py:38
|
||||
msgid "maximum forms"
|
||||
msgstr "nombre maximum de demandes à afficher"
|
||||
|
||||
#: models.py:39
|
||||
#: models.py:53 models.py:64
|
||||
msgid "refresh timeout"
|
||||
msgstr "durée de rafraîchissement"
|
||||
|
||||
#: models.py:40
|
||||
#: models.py:54 models.py:65
|
||||
msgid "Number of seconds between two web service calls"
|
||||
msgstr "nombre de secondes entre deux appels au web-service"
|
||||
|
||||
#: models.py:44
|
||||
msgid "au-quotidien active forms plugins"
|
||||
msgstr "plugins d'affichage des formulaires actifs sur Au-Quotidien"
|
||||
#: models.py:57 models.py:68
|
||||
msgid "refresh {0}"
|
||||
msgstr "durée de rafraîchissement {0}s"
|
||||
|
||||
#: templates/auquotidien_plugin/categories.html:20
|
||||
msgid "All categories"
|
||||
msgstr "Toutes les démarches"
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
import datetime
|
||||
from south.utils import datetime_utils as datetime
|
||||
from south.db import db
|
||||
from south.v2 import SchemaMigration
|
||||
from django.db import models
|
||||
|
@ -11,23 +11,33 @@ class Migration(SchemaMigration):
|
|||
# Adding model 'AuQuotidienAPI'
|
||||
db.create_table(u'auquotidien_plugin_auquotidienapi', (
|
||||
(u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
|
||||
('service_provider', self.gf('django.db.models.fields.related.OneToOneField')(to=orm['saml.LibertyServiceProvider'], unique=True)),
|
||||
('name', self.gf('django.db.models.fields.CharField')(default='', max_length=128, blank=True)),
|
||||
('active', self.gf('django.db.models.fields.BooleanField')(default=True)),
|
||||
('order', self.gf('django.db.models.fields.IntegerField')(default=0)),
|
||||
('service_provider', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['saml.LibertyServiceProvider'])),
|
||||
('orig', self.gf('django.db.models.fields.CharField')(max_length=64)),
|
||||
('hash_algo', self.gf('django.db.models.fields.CharField')(default='', max_length=16, blank=True)),
|
||||
('signature_key', self.gf('django.db.models.fields.CharField')(default='', max_length=128, blank=True)),
|
||||
('verify_certificate', self.gf('django.db.models.fields.BooleanField')(default=True)),
|
||||
('allow_redirects', self.gf('django.db.models.fields.BooleanField')(default=True)),
|
||||
('timeout', self.gf('django.db.models.fields.IntegerField')(default=10)),
|
||||
))
|
||||
db.send_create_signal(u'auquotidien_plugin', ['AuQuotidienAPI'])
|
||||
|
||||
# Adding model 'AuQuotidienActiveFormsPlugin'
|
||||
db.create_table(u'cmsplugin_auquotidienactiveformsplugin', (
|
||||
(u'cmsplugin_ptr', self.gf('django.db.models.fields.related.OneToOneField')(to=orm['cms.CMSPlugin'], unique=True, primary_key=True)),
|
||||
('template_source', self.gf('django.db.models.fields.TextField')(default='', blank=True)),
|
||||
('au_quotidien_api', self.gf('django.db.models.fields.related.OneToOneField')(to=orm['auquotidien_plugin.AuQuotidienAPI'], unique=True)),
|
||||
('limit', self.gf('django.db.models.fields.IntegerField')(default=10)),
|
||||
('refresh', self.gf('django.db.models.fields.IntegerField')(default=60)),
|
||||
))
|
||||
db.send_create_signal(u'auquotidien_plugin', ['AuQuotidienActiveFormsPlugin'])
|
||||
|
||||
# Adding model 'AuQuotidienCategoryPlugin'
|
||||
db.create_table(u'cmsplugin_auquotidiencategoryplugin', (
|
||||
(u'cmsplugin_ptr', self.gf('django.db.models.fields.related.OneToOneField')(to=orm['cms.CMSPlugin'], unique=True, primary_key=True)),
|
||||
('refresh', self.gf('django.db.models.fields.IntegerField')(default=60)),
|
||||
))
|
||||
db.send_create_signal(u'auquotidien_plugin', ['AuQuotidienCategoryPlugin'])
|
||||
|
||||
|
||||
def backwards(self, orm):
|
||||
# Deleting model 'AuQuotidienAPI'
|
||||
|
@ -36,8 +46,26 @@ class Migration(SchemaMigration):
|
|||
# Deleting model 'AuQuotidienActiveFormsPlugin'
|
||||
db.delete_table(u'cmsplugin_auquotidienactiveformsplugin')
|
||||
|
||||
# Deleting model 'AuQuotidienCategoryPlugin'
|
||||
db.delete_table(u'cmsplugin_auquotidiencategoryplugin')
|
||||
|
||||
|
||||
models = {
|
||||
u'attribute_aggregator.attributeitem': {
|
||||
'Meta': {'object_name': 'AttributeItem'},
|
||||
'attribute_name': ('django.db.models.fields.CharField', [], {'default': "('OpenLDAProotDSE', 'OpenLDAProotDSE')", 'max_length': '100'}),
|
||||
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'output_name_format': ('django.db.models.fields.CharField', [], {'default': "('urn:oasis:names:tc:SAML:2.0:attrname-format:uri', 'SAMLv2 URI')", 'max_length': '100'}),
|
||||
'output_namespace': ('django.db.models.fields.CharField', [], {'default': "('Default', 'Default')", 'max_length': '100'}),
|
||||
'required': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
|
||||
'source': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['attribute_aggregator.AttributeSource']", 'null': 'True', 'blank': 'True'})
|
||||
},
|
||||
u'attribute_aggregator.attributelist': {
|
||||
'Meta': {'object_name': 'AttributeList'},
|
||||
'attributes': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'attributes of the list'", 'null': 'True', 'symmetrical': 'False', 'to': u"orm['attribute_aggregator.AttributeItem']"}),
|
||||
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '100'})
|
||||
},
|
||||
u'attribute_aggregator.attributesource': {
|
||||
'Meta': {'object_name': 'AttributeSource'},
|
||||
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
|
@ -45,20 +73,28 @@ class Migration(SchemaMigration):
|
|||
'namespace': ('django.db.models.fields.CharField', [], {'default': "('Default', 'Default')", 'max_length': '100'})
|
||||
},
|
||||
u'auquotidien_plugin.auquotidienactiveformsplugin': {
|
||||
'Meta': {'object_name': 'AuQuotidienActiveFormsPlugin', 'db_table': "u'cmsplugin_auquotidienactiveformsplugin'"},
|
||||
'au_quotidien_api': ('django.db.models.fields.related.OneToOneField', [], {'to': u"orm['auquotidien_plugin.AuQuotidienAPI']", 'unique': 'True'}),
|
||||
'Meta': {'object_name': 'AuQuotidienActiveFormsPlugin', 'db_table': "u'cmsplugin_auquotidienactiveformsplugin'", '_ormbases': ['cms.CMSPlugin']},
|
||||
u'cmsplugin_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['cms.CMSPlugin']", 'unique': 'True', 'primary_key': 'True'}),
|
||||
'limit': ('django.db.models.fields.IntegerField', [], {'default': '10'}),
|
||||
'refresh': ('django.db.models.fields.IntegerField', [], {'default': '60'}),
|
||||
'template_source': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'})
|
||||
'refresh': ('django.db.models.fields.IntegerField', [], {'default': '60'})
|
||||
},
|
||||
u'auquotidien_plugin.auquotidienapi': {
|
||||
'Meta': {'ordering': "('provider__name',)", 'object_name': 'AuQuotidienAPI'},
|
||||
'Meta': {'ordering': "('order', 'name')", 'object_name': 'AuQuotidienAPI'},
|
||||
'active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
|
||||
'allow_redirects': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
|
||||
'hash_algo': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '16', 'blank': 'True'}),
|
||||
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '128', 'blank': 'True'}),
|
||||
'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
|
||||
'orig': ('django.db.models.fields.CharField', [], {'max_length': '64'}),
|
||||
'service_provider': ('django.db.models.fields.related.OneToOneField', [], {'to': u"orm['saml.LibertyServiceProvider']", 'unique': 'True'}),
|
||||
'signature_key': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '128', 'blank': 'True'})
|
||||
'service_provider': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['saml.LibertyServiceProvider']"}),
|
||||
'signature_key': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '128', 'blank': 'True'}),
|
||||
'timeout': ('django.db.models.fields.IntegerField', [], {'default': '10'}),
|
||||
'verify_certificate': ('django.db.models.fields.BooleanField', [], {'default': 'True'})
|
||||
},
|
||||
u'auquotidien_plugin.auquotidiencategoryplugin': {
|
||||
'Meta': {'object_name': 'AuQuotidienCategoryPlugin', 'db_table': "u'cmsplugin_auquotidiencategoryplugin'", '_ormbases': ['cms.CMSPlugin']},
|
||||
u'cmsplugin_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['cms.CMSPlugin']", 'unique': 'True', 'primary_key': 'True'}),
|
||||
'refresh': ('django.db.models.fields.IntegerField', [], {'default': '60'})
|
||||
},
|
||||
'cms.cmsplugin': {
|
||||
'Meta': {'object_name': 'CMSPlugin'},
|
||||
|
@ -81,27 +117,12 @@ class Migration(SchemaMigration):
|
|||
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'slot': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'})
|
||||
},
|
||||
u'idp.attributeitem': {
|
||||
'Meta': {'object_name': 'AttributeItem'},
|
||||
'attribute_name': ('django.db.models.fields.CharField', [], {'default': "('OpenLDAProotDSE', 'OpenLDAProotDSE')", 'max_length': '100'}),
|
||||
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'output_name_format': ('django.db.models.fields.CharField', [], {'default': "('urn:oasis:names:tc:SAML:2.0:attrname-format:uri', 'SAMLv2 URI')", 'max_length': '100'}),
|
||||
'output_namespace': ('django.db.models.fields.CharField', [], {'default': "('Default', 'Default')", 'max_length': '100'}),
|
||||
'required': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
|
||||
'source': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['attribute_aggregator.AttributeSource']", 'null': 'True', 'blank': 'True'})
|
||||
},
|
||||
u'idp.attributelist': {
|
||||
'Meta': {'object_name': 'AttributeList'},
|
||||
'attributes': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'attributes of the list'", 'null': 'True', 'symmetrical': 'False', 'to': u"orm['idp.AttributeItem']"}),
|
||||
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '100'})
|
||||
},
|
||||
u'idp.attributepolicy': {
|
||||
'Meta': {'object_name': 'AttributePolicy'},
|
||||
'allow_attributes_selection': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
|
||||
'ask_consent_attributes': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
|
||||
'attribute_filter_for_sso_from_push_sources': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'filter attributes of push sources with list'", 'null': 'True', 'to': u"orm['idp.AttributeList']"}),
|
||||
'attribute_list_for_sso_from_pull_sources': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'attributes from pull sources'", 'null': 'True', 'to': u"orm['idp.AttributeList']"}),
|
||||
'attribute_filter_for_sso_from_push_sources': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'filter attributes of push sources with list'", 'null': 'True', 'to': u"orm['attribute_aggregator.AttributeList']"}),
|
||||
'attribute_list_for_sso_from_pull_sources': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'attributes from pull sources'", 'null': 'True', 'to': u"orm['attribute_aggregator.AttributeList']"}),
|
||||
'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
|
||||
'filter_source_of_filtered_attributes': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
|
||||
'forward_attributes_from_push_sources': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
|
||||
|
@ -154,10 +175,14 @@ class Migration(SchemaMigration):
|
|||
'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
|
||||
'encrypt_assertion': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
|
||||
'encrypt_nameid': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
|
||||
'federation_mode': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}),
|
||||
'forward_slo': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
|
||||
'http_method_for_slo_request': ('django.db.models.fields.IntegerField', [], {'default': '4'}),
|
||||
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'idp_initiated_sso': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
|
||||
'iframe_logout_timeout': ('django.db.models.fields.PositiveIntegerField', [], {'default': '300'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
|
||||
'needs_iframe_logout': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
|
||||
'prefered_assertion_consumer_binding': ('django.db.models.fields.CharField', [], {'default': "'meta'", 'max_length': '4'})
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,13 +2,20 @@ from django.utils.translation import ugettext as _
|
|||
from django.db import models
|
||||
|
||||
|
||||
from data_source_plugin.models import DataSource, InlineTemplatePlugin
|
||||
from cms.models import CMSPlugin
|
||||
|
||||
|
||||
from data_source_plugin.models import DataSource
|
||||
|
||||
|
||||
__all__ = [ 'AuQuotidienAPI', 'AuQuotidienActiveFormsPlugin' ]
|
||||
|
||||
class AuQuotidienAPI(models.Model):
|
||||
service_provider = models.OneToOneField('saml.LibertyServiceProvider',
|
||||
name = models.CharField(verbose_name=_('name'), max_length=128, blank=True,
|
||||
default='')
|
||||
active = models.BooleanField(verbose_name=_('active'), default=True)
|
||||
order = models.IntegerField(verbose_name=_('order'), default=0)
|
||||
service_provider = models.ForeignKey('saml.LibertyServiceProvider',
|
||||
verbose_name=_('liberty service provider for the au-quotidien '
|
||||
'service'))
|
||||
orig = models.CharField(max_length=64, verbose_name=_('origin'))
|
||||
|
@ -16,23 +23,49 @@ class AuQuotidienAPI(models.Model):
|
|||
max_length=16, choices=DataSource.HASHES, default='', blank=True)
|
||||
signature_key = models.CharField(verbose_name=_('signature key'),
|
||||
max_length=128, default='', blank=True)
|
||||
verify_certificate = models.BooleanField(verbose_name=_('verify '
|
||||
'certificate'), default=True, blank=True)
|
||||
allow_redirects = models.BooleanField(verbose_name=_('allows HTTP redirections'),
|
||||
help_text=_('it can improve latencies to forbid redirection follow'),
|
||||
default=True)
|
||||
timeout = models.IntegerField(verbose_name=_('timeout'),
|
||||
default=10,
|
||||
help_text=_('time in second to wait before '
|
||||
'failing to download a datasource'))
|
||||
|
||||
def __unicode__(self):
|
||||
return self.service_provider.liberty_provider.name
|
||||
@property
|
||||
def base_url(self):
|
||||
'''Base URL of the Au-Quotidien service'''
|
||||
url = self.service_provider.liberty_provider.entity_id
|
||||
return url.split('/saml/')[0]
|
||||
|
||||
@property
|
||||
def provider_id(self):
|
||||
return self.service_provider.liberty_provider.pk
|
||||
|
||||
class Meta:
|
||||
verbose_name = _('au-quotidien API endpoint')
|
||||
verbose_name_plural = _('au-quotidien API endpoints')
|
||||
ordering = ('service_provider__liberty_provider__name',)
|
||||
ordering = ('order', 'name')
|
||||
|
||||
|
||||
class AuQuotidienActiveFormsPlugin(InlineTemplatePlugin):
|
||||
au_quotidien_api = models.OneToOneField('AuQuotidienAPI',
|
||||
verbose_name=_('au-quotidien API endpoint'))
|
||||
limit = models.IntegerField(verbose_name=_('maximum forms'), default=10)
|
||||
class AuQuotidienActiveFormsPlugin(CMSPlugin):
|
||||
refresh = models.IntegerField(verbose_name=_('refresh timeout'), default=60,
|
||||
help_text=_('Number of seconds between two web service calls'))
|
||||
|
||||
def __unicode__(self):
|
||||
return _('refresh {0}').format(self.refresh)
|
||||
|
||||
class Meta:
|
||||
verbose_name = _('au-quotidien active forms plugin')
|
||||
verbose_name_plural = _('au-quotidien active forms plugins')
|
||||
verbose_name = _('au-quotidien active forms')
|
||||
verbose_name_plural = _('au-quotidien active forms')
|
||||
|
||||
class AuQuotidienCategoryPlugin(CMSPlugin):
|
||||
refresh = models.IntegerField(verbose_name=_('refresh timeout'), default=60,
|
||||
help_text=_('Number of seconds between two web service calls'))
|
||||
|
||||
def __unicode__(self):
|
||||
return _('refresh {0}').format(self.refresh)
|
||||
|
||||
class Meta:
|
||||
verbose_name = _('au-quotidien categories')
|
||||
|
|
|
@ -0,0 +1,46 @@
|
|||
$(document).ready(function () {
|
||||
$('.aq-catgr-plg').each(function (i, elt) {
|
||||
var $plugin = $(elt);
|
||||
var $titles = $('.aq-catgr-plg-title', elt);
|
||||
var $categories = $('.aq-catgr-plg-body', elt);
|
||||
|
||||
if ($plugin.data('initialized')) {
|
||||
return;
|
||||
}
|
||||
$plugin.data('initialized', 1);
|
||||
|
||||
$titles.hide();
|
||||
|
||||
// Hide all but first
|
||||
$categories.slice(1).hide();
|
||||
|
||||
if ($categories.length > 1) {
|
||||
// Create a selector from titles
|
||||
var $p = $('<p/>');
|
||||
var $select = $('<select/>');
|
||||
for (var i = 0; i < $titles.length; i++) {
|
||||
var $body = $($categories[i]);
|
||||
var name = $body.attr('data-name');
|
||||
var $option = $('<option/>');
|
||||
$option.text(name);
|
||||
$option.data('body', $body);
|
||||
$option.val($body[0].id);
|
||||
$select.append($option);
|
||||
}
|
||||
$p.append($select);
|
||||
$('.aq-catgr-plg-selector-container', elt).append($p);
|
||||
|
||||
// Show selected categories
|
||||
var on_select_change = function(event) {
|
||||
console.log(event.target);
|
||||
var $option = $('option:selected', event.target);
|
||||
console.log($option);
|
||||
var id = '#' + $option.val();
|
||||
console.log(id);
|
||||
$categories.not(id).hide();
|
||||
$(id).show();
|
||||
}
|
||||
$select.bind('change', on_select_change);
|
||||
}
|
||||
});
|
||||
});
|
|
@ -0,0 +1,10 @@
|
|||
<ul class="aq-forms-plg-listing">
|
||||
{% for data_source in data_sources %}
|
||||
{% for data in data_source.content reversed %}
|
||||
<li class="aq-forms-plg-item">
|
||||
<a class="aq-forms-plg-link"
|
||||
href="{{data.url}}">{{data.title}}</a>
|
||||
</li>
|
||||
{% endfor %}
|
||||
{% endfor %}
|
||||
</ul>
|
|
@ -0,0 +1,27 @@
|
|||
{% load i18n sekizai_tags staticfiles %}
|
||||
<div class="aq-catgr-plg">
|
||||
<div class="aq-catgr-plg-selector-container"></div>
|
||||
{% for data_source in data_sources %}
|
||||
{% with base_url=data_source.data_source.api.base_url name=data_source.data_source.name %}
|
||||
<div id="aq-catgr-plg-body-{{data_source.data_source.api.pk}}" data-name="{{name}}" class="aq-catgr-plg-body">
|
||||
<h3 class="aq-catgr-plg-title">{{name}}</h3>
|
||||
<ul class="aq-catgr-plg-listing">
|
||||
{% for category in data_source.content.data|dictsort:"title" %}
|
||||
<li class="aq-catgr-plg-item">
|
||||
<a class="aq-catgr-plg-link"
|
||||
href="{{base_url}}/login/?ReturnUrl={{ category.url }}">
|
||||
{{ category.title }}
|
||||
</a>
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
<p>
|
||||
<a class="aq-catgr-plg-all-catgrs-link"
|
||||
href="{{base_url}}/login/">{% trans "All categories" %}
|
||||
</a>
|
||||
</p>
|
||||
</div>
|
||||
{% endwith %}
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% addtoblock "js" %}<script type="text/javascript" src="{% static "auquotidien_plugin/js/categories.js" %}"></script>{% endaddtoblock %}
|
Reference in New Issue