From ddbd35be26db63a9bf2f89e513a8e172977167d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Schneider?= Date: Tue, 1 Apr 2014 15:59:05 +0200 Subject: [PATCH] initial package --- MANIFEST.in | 32 - README | 67 - TODO | 3 - debian/changelog | 6 + debian/compat | 1 + debian/conf/db.conf | 5 + debian/conf/nginx-example.conf | 41 + debian/conf/portail-citoyen2.conf | 46 + debian/conf/syncdb.sh | 7 + debian/control | 41 + debian/docs | 1 + debian/portail-citoyen-manage | 18 + debian/portail-citoyen2.config | 14 + debian/portail-citoyen2.dirs | 8 + debian/portail-citoyen2.docs | 1 + debian/portail-citoyen2.init | 178 + debian/portail-citoyen2.install | 4 + debian/portail-citoyen2.postinst | 87 + debian/portail-citoyen2.postrm | 32 + debian/python-portail-citoyen2.install | 1 + debian/rules | 14 + debian/source/format | 1 + help/fr/api-services.page | 310 - jenkins.sh | 13 - load-base-data.sh | 5 - local_settings.py.example | 22 - portail-citoyen2 | 10 - portail_citoyen2/__init__.py | 8 - portail_citoyen2/admin.py | 14 - .../allauth_authentic2/__init__.py | 0 portail_citoyen2/allauth_authentic2/models.py | 1 - .../allauth_authentic2/provider.py | 33 - portail_citoyen2/allauth_authentic2/tests.py | 0 portail_citoyen2/allauth_authentic2/urls.py | 5 - portail_citoyen2/allauth_authentic2/views.py | 43 - portail_citoyen2/app_settings.py | 38 - portail_citoyen2/apps/__init__.py | 0 .../apps/auquotidien_plugin/__init__.py | 0 .../apps/auquotidien_plugin/admin.py | 8 - .../apps/auquotidien_plugin/cms_plugins.py | 78 - .../locale/fr/LC_MESSAGES/django.po | 105 - .../migrations/0001_initial.py | 215 - .../auquotidien_plugin/migrations/__init__.py | 0 .../apps/auquotidien_plugin/models.py | 82 - .../auquotidien_plugin/js/categories.js | 54 - .../auquotidien_plugin/active_forms.html | 10 - .../auquotidien_plugin/categories.html | 27 - .../apps/data_source_plugin/__init__.py | 0 .../apps/data_source_plugin/admin.py | 16 - .../apps/data_source_plugin/cms_plugins.py | 175 - .../locale/fr/LC_MESSAGES/django.po | 110 - .../migrations/0001_initial.py | 120 - .../migrations/0002_rename_hash_algo.py | 80 - .../data_source_plugin/migrations/__init__.py | 0 .../apps/data_source_plugin/models.py | 115 - .../apps/data_source_plugin/signature.py | 71 - .../templates/data_source_plugin/plugin.html | 15 - .../apps/data_source_plugin/tests.py | 16 - .../apps/data_source_plugin/views.py | 1 - portail_citoyen2/apps/feed_plugin/__init__.py | 0 portail_citoyen2/apps/feed_plugin/admin.py | 8 - .../apps/feed_plugin/cms_plugins.py | 75 - portail_citoyen2/apps/feed_plugin/forms.py | 10 - .../locale/fr/LC_MESSAGES/django.po | 59 - .../feed_plugin/migrations/0001_initial.py | 142 - .../apps/feed_plugin/migrations/__init__.py | 0 portail_citoyen2/apps/feed_plugin/models.py | 90 - .../feed_plugin/select_user_feed.html | 15 - .../templates/feed_plugin/show_user_feed.html | 8 - portail_citoyen2/apps/feed_plugin/utils.py | 23 - portail_citoyen2/apps/feed_plugin/widgets.py | 104 - .../passerelle_register_plugin/__init__.py | 0 .../passerelle_register_plugin/cms_plugins.py | 20 - .../apps/passerelle_register_plugin/forms.py | 58 - .../locale/fr/LC_MESSAGES/django.po | 43 - .../migrations/0001_initial.py | 57 - .../migrations/__init__.py | 0 .../apps/passerelle_register_plugin/models.py | 122 - .../passerelle_register_plugin/plugin.html | 39 - .../apps/passerelle_register_plugin/tests.py | 16 - .../apps/passerelle_register_plugin/views.py | 1 - .../passerelle_register_plugin/widgets.py | 104 - portail_citoyen2/cms_plugins.py | 49 - portail_citoyen2/context_processors.py | 7 - portail_citoyen2/dashboard.py | 73 - portail_citoyen2/fixtures/demo.json | 5588 ----------------- portail_citoyen2/forms.py | 0 .../locale/fr/LC_MESSAGES/django.po | 72 - portail_citoyen2/menu.py | 4 - portail_citoyen2/migrations/0001_initial.py | 20 - portail_citoyen2/migrations/__init__.py | 0 portail_citoyen2/models.py | 35 - portail_citoyen2/permission_hack.py | 63 - portail_citoyen2/settings.py | 320 - .../portail_citoyen/css/Museo500-Regular.otf | Bin 128172 -> 0 bytes .../static/portail_citoyen/css/Museo_Slab.otf | Bin 62180 -> 0 bytes .../static/portail_citoyen/css/admin.css | 46 - .../portail_citoyen/css/button_connexion.gif | Bin 2406 -> 0 bytes .../static/portail_citoyen/css/e54.png | Bin 1993 -> 0 bytes .../static/portail_citoyen/css/style.css | 994 --- .../static/portail_citoyen/img/logo.png | Bin 7876 -> 0 bytes .../templates/admin/base_site.html | 29 - portail_citoyen2/templates/base.html | 80 - .../templates/portail_citoyen/base_help.html | 24 - .../portail_citoyen/base_one_column.html | 12 - .../portail_citoyen/base_two_columns.html | 18 - .../templates/portail_citoyen/block.html | 3 - .../templates/portail_citoyen/form.html | 11 - .../portail_citoyen/form_fields.html | 11 - .../templates/portail_citoyen/top-menu.html | 11 - portail_citoyen2/templatetags/__init__.py | 0 .../templatetags/portail_citoyen_tags.py | 14 - portail_citoyen2/urls.py | 35 - portail_citoyen2/utils.py | 11 - portail_citoyen2/views.py | 28 - portail_citoyen2/wsgi.py | 28 - requirements.txt | 14 - run.sh | 15 - setup.py | 139 - start.sh | 36 - tools/export_data.sh | 5 - tools/flush_memcache.py | 5 - 122 files changed, 506 insertions(+), 10696 deletions(-) delete mode 100644 MANIFEST.in delete mode 100644 README delete mode 100644 TODO create mode 100644 debian/changelog create mode 100644 debian/compat create mode 100644 debian/conf/db.conf create mode 100644 debian/conf/nginx-example.conf create mode 100644 debian/conf/portail-citoyen2.conf create mode 100755 debian/conf/syncdb.sh create mode 100644 debian/control create mode 100644 debian/docs create mode 100755 debian/portail-citoyen-manage create mode 100644 debian/portail-citoyen2.config create mode 100644 debian/portail-citoyen2.dirs create mode 100644 debian/portail-citoyen2.docs create mode 100644 debian/portail-citoyen2.init create mode 100644 debian/portail-citoyen2.install create mode 100644 debian/portail-citoyen2.postinst create mode 100644 debian/portail-citoyen2.postrm create mode 100644 debian/python-portail-citoyen2.install create mode 100755 debian/rules create mode 100644 debian/source/format delete mode 100644 help/fr/api-services.page delete mode 100755 jenkins.sh delete mode 100755 load-base-data.sh delete mode 100644 local_settings.py.example delete mode 100755 portail-citoyen2 delete mode 100644 portail_citoyen2/__init__.py delete mode 100644 portail_citoyen2/admin.py delete mode 100644 portail_citoyen2/allauth_authentic2/__init__.py delete mode 100644 portail_citoyen2/allauth_authentic2/models.py delete mode 100644 portail_citoyen2/allauth_authentic2/provider.py delete mode 100644 portail_citoyen2/allauth_authentic2/tests.py delete mode 100644 portail_citoyen2/allauth_authentic2/urls.py delete mode 100644 portail_citoyen2/allauth_authentic2/views.py delete mode 100644 portail_citoyen2/app_settings.py delete mode 100644 portail_citoyen2/apps/__init__.py delete mode 100644 portail_citoyen2/apps/auquotidien_plugin/__init__.py delete mode 100644 portail_citoyen2/apps/auquotidien_plugin/admin.py delete mode 100644 portail_citoyen2/apps/auquotidien_plugin/cms_plugins.py delete mode 100644 portail_citoyen2/apps/auquotidien_plugin/locale/fr/LC_MESSAGES/django.po delete mode 100644 portail_citoyen2/apps/auquotidien_plugin/migrations/0001_initial.py delete mode 100644 portail_citoyen2/apps/auquotidien_plugin/migrations/__init__.py delete mode 100644 portail_citoyen2/apps/auquotidien_plugin/models.py delete mode 100644 portail_citoyen2/apps/auquotidien_plugin/static/auquotidien_plugin/js/categories.js delete mode 100644 portail_citoyen2/apps/auquotidien_plugin/templates/auquotidien_plugin/active_forms.html delete mode 100644 portail_citoyen2/apps/auquotidien_plugin/templates/auquotidien_plugin/categories.html delete mode 100644 portail_citoyen2/apps/data_source_plugin/__init__.py delete mode 100644 portail_citoyen2/apps/data_source_plugin/admin.py delete mode 100644 portail_citoyen2/apps/data_source_plugin/cms_plugins.py delete mode 100644 portail_citoyen2/apps/data_source_plugin/locale/fr/LC_MESSAGES/django.po delete mode 100644 portail_citoyen2/apps/data_source_plugin/migrations/0001_initial.py delete mode 100644 portail_citoyen2/apps/data_source_plugin/migrations/0002_rename_hash_algo.py delete mode 100644 portail_citoyen2/apps/data_source_plugin/migrations/__init__.py delete mode 100644 portail_citoyen2/apps/data_source_plugin/models.py delete mode 100644 portail_citoyen2/apps/data_source_plugin/signature.py delete mode 100644 portail_citoyen2/apps/data_source_plugin/templates/data_source_plugin/plugin.html delete mode 100644 portail_citoyen2/apps/data_source_plugin/tests.py delete mode 100644 portail_citoyen2/apps/data_source_plugin/views.py delete mode 100644 portail_citoyen2/apps/feed_plugin/__init__.py delete mode 100644 portail_citoyen2/apps/feed_plugin/admin.py delete mode 100644 portail_citoyen2/apps/feed_plugin/cms_plugins.py delete mode 100644 portail_citoyen2/apps/feed_plugin/forms.py delete mode 100644 portail_citoyen2/apps/feed_plugin/locale/fr/LC_MESSAGES/django.po delete mode 100644 portail_citoyen2/apps/feed_plugin/migrations/0001_initial.py delete mode 100644 portail_citoyen2/apps/feed_plugin/migrations/__init__.py delete mode 100644 portail_citoyen2/apps/feed_plugin/models.py delete mode 100644 portail_citoyen2/apps/feed_plugin/templates/feed_plugin/select_user_feed.html delete mode 100644 portail_citoyen2/apps/feed_plugin/templates/feed_plugin/show_user_feed.html delete mode 100644 portail_citoyen2/apps/feed_plugin/utils.py delete mode 100644 portail_citoyen2/apps/feed_plugin/widgets.py delete mode 100644 portail_citoyen2/apps/passerelle_register_plugin/__init__.py delete mode 100644 portail_citoyen2/apps/passerelle_register_plugin/cms_plugins.py delete mode 100644 portail_citoyen2/apps/passerelle_register_plugin/forms.py delete mode 100644 portail_citoyen2/apps/passerelle_register_plugin/locale/fr/LC_MESSAGES/django.po delete mode 100644 portail_citoyen2/apps/passerelle_register_plugin/migrations/0001_initial.py delete mode 100644 portail_citoyen2/apps/passerelle_register_plugin/migrations/__init__.py delete mode 100644 portail_citoyen2/apps/passerelle_register_plugin/models.py delete mode 100644 portail_citoyen2/apps/passerelle_register_plugin/templates/passerelle_register_plugin/plugin.html delete mode 100644 portail_citoyen2/apps/passerelle_register_plugin/tests.py delete mode 100644 portail_citoyen2/apps/passerelle_register_plugin/views.py delete mode 100644 portail_citoyen2/apps/passerelle_register_plugin/widgets.py delete mode 100644 portail_citoyen2/cms_plugins.py delete mode 100644 portail_citoyen2/context_processors.py delete mode 100644 portail_citoyen2/dashboard.py delete mode 100644 portail_citoyen2/fixtures/demo.json delete mode 100644 portail_citoyen2/forms.py delete mode 100644 portail_citoyen2/locale/fr/LC_MESSAGES/django.po delete mode 100644 portail_citoyen2/menu.py delete mode 100644 portail_citoyen2/migrations/0001_initial.py delete mode 100644 portail_citoyen2/migrations/__init__.py delete mode 100644 portail_citoyen2/models.py delete mode 100644 portail_citoyen2/permission_hack.py delete mode 100644 portail_citoyen2/settings.py delete mode 100644 portail_citoyen2/static/portail_citoyen/css/Museo500-Regular.otf delete mode 100644 portail_citoyen2/static/portail_citoyen/css/Museo_Slab.otf delete mode 100644 portail_citoyen2/static/portail_citoyen/css/admin.css delete mode 100644 portail_citoyen2/static/portail_citoyen/css/button_connexion.gif delete mode 100644 portail_citoyen2/static/portail_citoyen/css/e54.png delete mode 100644 portail_citoyen2/static/portail_citoyen/css/style.css delete mode 100644 portail_citoyen2/static/portail_citoyen/img/logo.png delete mode 100644 portail_citoyen2/templates/admin/base_site.html delete mode 100644 portail_citoyen2/templates/base.html delete mode 100644 portail_citoyen2/templates/portail_citoyen/base_help.html delete mode 100644 portail_citoyen2/templates/portail_citoyen/base_one_column.html delete mode 100644 portail_citoyen2/templates/portail_citoyen/base_two_columns.html delete mode 100644 portail_citoyen2/templates/portail_citoyen/block.html delete mode 100644 portail_citoyen2/templates/portail_citoyen/form.html delete mode 100644 portail_citoyen2/templates/portail_citoyen/form_fields.html delete mode 100644 portail_citoyen2/templates/portail_citoyen/top-menu.html delete mode 100644 portail_citoyen2/templatetags/__init__.py delete mode 100644 portail_citoyen2/templatetags/portail_citoyen_tags.py delete mode 100644 portail_citoyen2/urls.py delete mode 100644 portail_citoyen2/utils.py delete mode 100644 portail_citoyen2/views.py delete mode 100644 portail_citoyen2/wsgi.py delete mode 100644 requirements.txt delete mode 100755 run.sh delete mode 100755 setup.py delete mode 100755 start.sh delete mode 100755 tools/export_data.sh delete mode 100755 tools/flush_memcache.py diff --git a/MANIFEST.in b/MANIFEST.in deleted file mode 100644 index fa52e87..0000000 --- a/MANIFEST.in +++ /dev/null @@ -1,32 +0,0 @@ -recursive-include portail_citoyen2/apps/login_plugin/templates *.html -recursive-include portail_citoyen2/apps/login_plugin/static *.css *.gif *.png *.js -recursive-include portail_citoyen2/apps/login_plugin/locale *.po *.mo -recursive-include portail_citoyen2/apps/data_source_plugin/templates *.html -recursive-include portail_citoyen2/apps/data_source_plugin/static *.css *.gif *.png *.js -recursive-include portail_citoyen2/apps/data_source_plugin/locale *.po *.mo -recursive-include portail_citoyen2/apps/a2_service_list_plugin/templates *.html -recursive-include portail_citoyen2/apps/a2_service_list_plugin/static *.css *.gif *.png *.js -recursive-include portail_citoyen2/apps/a2_service_list_plugin/locale *.po *.mo -recursive-include portail_citoyen2/apps/passerelle_register_plugin/templates *.html -recursive-include portail_citoyen2/apps/passerelle_register_plugin/static *.css *.gif *.png *.js -recursive-include portail_citoyen2/apps/passerelle_register_plugin/locale *.po *.mo -recursive-include portail_citoyen2/apps/auquotidien_plugin/templates *.html -recursive-include portail_citoyen2/apps/auquotidien_plugin/static *.js -recursive-include portail_citoyen2/apps/auquotidien_plugin/locale *.po *.mo -recursive-include portail_citoyen2/apps/federation_plugin/templates *.html -recursive-include portail_citoyen2/apps/federation_plugin/locale *.po *.mo -recursive-include portail_citoyen2/apps/feed_plugin/templates *.html -recursive-include portail_citoyen2/apps/feed_plugin/locale *.po *.mo -recursive-include portail_citoyen2/apps/msp/templates *.html -recursive-include portail_citoyen2/apps/msp/static *.css *.gif *.png *.js *.jpg -recursive-include portail_citoyen2/apps/msp/locale *.po *.mo -include portail_citoyen2/apps/msp/README.txt -recursive-include portail_citoyen2/fixtures *.json -recursive-include portail_citoyen2/templates *.html *.txt -recursive-include portail_citoyen2/static *.css *.gif *.png *.js -recursive-include portail_citoyen2/locale *.po *.mo -recursive-include help *.page -include local_settings.py.example -include requirements.txt -include MANIFEST.in -include VERSION diff --git a/README b/README deleted file mode 100644 index cbaa6a1..0000000 --- a/README +++ /dev/null @@ -1,67 +0,0 @@ -How to start -============ - -To work on portail-citoyen just execute the following lines (command -to launch start with $, other lines are expected output):: - - $ pip install -r ./requirements - $ cp local_settings.py.example local_settings.py - $ ./portail-citoyen syncdb --all # you will be asked to create a new admin user - Syncing... - Creating tables ... - [ snipped ] - Creating table cmsplugin_a2servicelistplugin - Creating table registration_registrationprofile - - You just installed Django's auth system, which means you don't have any superusers defined. - Would you like to create one now? (yes/no): yes - Username: admin - First name: admin - Last name: admin - E-mail address: admin@coin.org - Password: - Password (again): - Superuser created successfully. - Installing custom SQL ... - Installing indexes ... - Installed 2 object(s) from 1 fixture(s) - - Synced: - > django.contrib.auth - [ snipped ] - > registration - - Not synced (use migrations): - - - (use ./manage.py migrate to migrate these) - $ ./portail-citoyen migrate --fake - [ lots of migrations running ] - $ ./portail-citoyen runserver - Validating models... - - 0 errors found - April 12, 2013 - 16:04:50 - Django version 1.5.1, using settings 'compte_agglo_montpellier.settings' - Development server is running at http://127.0.0.1:8000/ - Quit the server with CONTROL-C. - -The application is now usable at http://localhost:8000/ - -Settings --------- - -Settings can be passed using a local_settings.py file or the shell -environment. Dictionaries are passed by flattening the variable name and the -dictionnary key separated by an underscore character. For example to passe the -variable MAIN_SITE_URL in templates, define the following environment -variable:: - - export PORTAIL_CITOYEN_TEMPLATE_VARS_MAIN_SITE_URL=https://main-site.com/ - -Those variables must be prefixed with PORTAIL_CITOYEN_ when set in a -local_settings.py file or in the environment. - -Name Description -================================ ============================================ -TEMPLATE_VARS dictionnary of variables passed to templates -PORTAIL_ADMIN_URL URL of the global administration portal diff --git a/TODO b/TODO deleted file mode 100644 index 9407e18..0000000 --- a/TODO +++ /dev/null @@ -1,3 +0,0 @@ -- Authentication is handled by authsaml2 -- First user created must be superadmin -- User admin must be read-only diff --git a/debian/changelog b/debian/changelog new file mode 100644 index 0000000..ab8af97 --- /dev/null +++ b/debian/changelog @@ -0,0 +1,6 @@ +portail-citoyen2 (1.0-1) unstable; urgency=medium + + * Initial release + + -- Jérôme Schneider Tue, 01 Apr 2014 15:17:34 +0200 + diff --git a/debian/compat b/debian/compat new file mode 100644 index 0000000..7f8f011 --- /dev/null +++ b/debian/compat @@ -0,0 +1 @@ +7 diff --git a/debian/conf/db.conf b/debian/conf/db.conf new file mode 100644 index 0000000..4b4df01 --- /dev/null +++ b/debian/conf/db.conf @@ -0,0 +1,5 @@ +export DATABASE_ENGINE='django.db.backends.postgresql_psycopg2' +export DATABASE_NAME='_DBC_DBNAME_' +export DATABASE_USER='_DBC_DBUSER_' +export DATABASE_PASSWORD='_DBC_DBPASS_' +export DATABASE_HOST='localhost' diff --git a/debian/conf/nginx-example.conf b/debian/conf/nginx-example.conf new file mode 100644 index 0000000..65a1041 --- /dev/null +++ b/debian/conf/nginx-example.conf @@ -0,0 +1,41 @@ +server { + listen 443; + server_name citoyen.example.fr; + + ssl on; + ssl_certificate /etc/ssl/certs/ssl-cert-snakeoil.pem; + ssl_certificate_key /etc/ssl/private/ssl-cert-snakeoil.key; + + access_log /var/log/nginx/citoyen.example.fr-access.log combined; + error_log /var/log/nginx/citoyen.example.fr-error.log; + + location /static { + alias /var/lib/portail-citoyen/static; + } + + location / { + proxy_pass http://unix:/var/run/portail-citoyen/portail-citoyen.sock; + proxy_set_header Host $http_host; + proxy_set_header X-Forwarded-SSL on; + proxy_set_header X-Forwarded-Protocol ssl; + proxy_set_header X-Forwarded-Proto https; + } +} + +server { + listen 80; + server_name citoyen.example.fr; + + access_log /var/log/nginx/citoyen.example.fr-access.log combined; + error_log /var/log/nginx/citoyen.example.fr-error.log; + + location /static { + alias /var/lib/portail-citoyen/static; + } + + location / { + proxy_pass http://unix:/var/run/portail-citoyen/portail-citoyen.sock; + proxy_set_header Host $http_host; + } +} + diff --git a/debian/conf/portail-citoyen2.conf b/debian/conf/portail-citoyen2.conf new file mode 100644 index 0000000..ad7cb65 --- /dev/null +++ b/debian/conf/portail-citoyen2.conf @@ -0,0 +1,46 @@ +# do not remove this line, it imports db configuration from dbconfig-common +[ -f /etc/portail-citoyen/db.conf ] && . /etc/portail-citoyen/db.conf +# do not remove this line, it imports secret which is automatically generated +[ -f /etc/portail-citoyen/secret ] && . /etc/portail-citoyen/secret +# import saml certificates (automatically genereted) +[ -f /etc/portail-citoyen/saml-certs.conf ] && . /etc/portail-citoyen/saml-certs.conf + +# Static root directory +export STATIC_ROOT='/var/lib/portail-citoyen/static' + +# Debug +#export DEBUG=yes + +# Define administrators / managers +export ADMINS='admin eo;admin@entrouvert.com' + +# Database configuration (please use dpkg-reconfigure portail-citoyen) +#export DATABASE_ENGINE='django.db.backends.sqlite3' +#export DATABASE_NAME='/var/lib/portail-citoyen/portail-citoyen.db' + +# Sentry / Raven configuration +#export export RAVEN_CONFIG_DSN='' # require package python-raven + +# Log root directory +export LOG_ROOT='/var/log/portail-citoyen/portail-citoyen.log' + +# We are behind a reverse proxy so we accept every hosts +export ALLOWED_HOSTS='*' + +# Email configuration +#export EMAIL_HOST='localhost' +#export EMAIL_PORT='25' +#export EMAIL_SUBJECT_PREFIX='[Portail Citoyen]' +#export SERVER_EMAIL='root@test.com' +#export DEFAULT_FROM_EMAIL='portail-citoyen@test.com' + +# Enables some features +export IDP_SAML2='yes' +#export IDP_OPENID='yes' +#export IDP_CAS='yes' +#export AUTH_SAML2='yes' +#export AUTH_OPENID='yes' +#export AUTH_SSL='yes' +#export AUTH_OATH='yes' + + diff --git a/debian/conf/syncdb.sh b/debian/conf/syncdb.sh new file mode 100755 index 0000000..b410361 --- /dev/null +++ b/debian/conf/syncdb.sh @@ -0,0 +1,7 @@ +#!/bin/sh + +. /etc/portail-citoyen/portail-citoyen.conf + +python /usr/lib/portail-citoyen/manage.py syncdb --all --noinput +python /usr/lib/portail-citoyen/manage.py migrate --fake --noinput + diff --git a/debian/control b/debian/control new file mode 100644 index 0000000..43f8fb1 --- /dev/null +++ b/debian/control @@ -0,0 +1,41 @@ +Source: portail-citoyen2 +Maintainer: Jérôme Schneider +Section: python +Priority: optional +Build-Depends: python-setuptools (>= 0.6b3), + python-all (>= 2.6.6-3), + debhelper (>= 8.0), + openssl, + python-django (>= 1.5) +Standards-Version: 3.9.1 +X-Python-Version: >= 2.6 + +Package: python-portail-citoyen2 +Architecture: all +Depends: ${misc:Depends}, python (>= 2.6), + python-imaging, + python-feedparser, + python-django (>= 1.5), python-django (<< 1.6), + python-authentic2 (>= 2.1.2), + python-django-cms (>= 3.0rc1), + python-django-admin-tools (>= 0.5), + python-django-admin-tools (<< 0.6), + python-requests (>= 1.0.0), + python-django-allauth (>= 0.14) +Description: Portail citoyen v2 python module +Conflicts: python-portail-citoyen + +Package: portail-citoyen2 +Architecture: all +Depends: ${misc:Depends}, adduser, + python-portail-citoyen2 (>= 1.0), + python-entrouvert (>= 6.0), + python-django-south (>= 0.8.4), + python-psycopg2, + gunicorn, dbconfig-common, + debconf | debconf-2.0, ucf +Recommends: postgresql-client +Suggests: nginx, postgresql +Description: Portail citoyen v2 daemon +Conflicts: portail-citoyen + diff --git a/debian/docs b/debian/docs new file mode 100644 index 0000000..e845566 --- /dev/null +++ b/debian/docs @@ -0,0 +1 @@ +README diff --git a/debian/portail-citoyen-manage b/debian/portail-citoyen-manage new file mode 100755 index 0000000..dfeab6a --- /dev/null +++ b/debian/portail-citoyen-manage @@ -0,0 +1,18 @@ +#!/bin/sh + +if [ "$(whoami)" != "portail-citoyen" ]; then + if which sudo; then + if sudo -v -u portail-citoyen; then + sudo -u portail-citoyen portail-citoyen-manage "$@" + exit $? + fi + echo "You must run this script with portail-citoyen user" + exit 1 + fi +fi + +if [ -f /etc/portail-citoyen/portail-citoyen.conf ]; then + . /etc/portail-citoyen/portail-citoyen.conf +fi + +/usr/lib/portail-citoyen/manage.py "$@" diff --git a/debian/portail-citoyen2.config b/debian/portail-citoyen2.config new file mode 100644 index 0000000..373c7e3 --- /dev/null +++ b/debian/portail-citoyen2.config @@ -0,0 +1,14 @@ +#!/bin/sh +# config maintainer script for foo-pgsql + +set -e + +# source debconf stuff +. /usr/share/debconf/confmodule +# source dbconfig-common shell library, and call the hook function +if [ -f /usr/share/dbconfig-common/dpkg/config.pgsql ]; then + . /usr/share/dbconfig-common/dpkg/config.pgsql + dbc_go portail-citoyen $@ +fi + +#DEBHELPER# diff --git a/debian/portail-citoyen2.dirs b/debian/portail-citoyen2.dirs new file mode 100644 index 0000000..d58ab9d --- /dev/null +++ b/debian/portail-citoyen2.dirs @@ -0,0 +1,8 @@ +etc/portail-citoyen +usr/lib/portail-citoyen +usr/share/dbconfig-common/scripts/portail-citoyen/install +var/lib/portail-citoyen/media +var/lib/portail-citoyen/static +var/lib/portail-citoyen/extra-static +var/run/portail-citoyen +var/log/portail-citoyen diff --git a/debian/portail-citoyen2.docs b/debian/portail-citoyen2.docs new file mode 100644 index 0000000..e845566 --- /dev/null +++ b/debian/portail-citoyen2.docs @@ -0,0 +1 @@ +README diff --git a/debian/portail-citoyen2.init b/debian/portail-citoyen2.init new file mode 100644 index 0000000..4c8a25c --- /dev/null +++ b/debian/portail-citoyen2.init @@ -0,0 +1,178 @@ +#!/bin/sh +### BEGIN INIT INFO +# Provides: portail-citoyen +# Required-Start: $network $local_fs +# Required-Stop: +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# Short-Description: Portail citoyen +# Description: Portail citoyen +### END INIT INFO + +# Author: Jérôme Schneider + +PATH=/sbin:/usr/sbin:/bin:/usr/bin +DESC=portail-citoyen +NAME=portail-citoyen +DAEMON=/usr/bin/gunicorn +PID_DIR=/var/run/$NAME +LOG_DIR=/var/log/$NAME +PIDFILE=$PID_DIR/$NAME.pid +SCRIPTNAME=/etc/init.d/$NAME + +USER=portail-citoyen +GROUP=portail-citoyen + +DAEMON_ARGS="--pid $PIDFILE \ +--user $USER --group $GROUP \ +--daemon \ +--access-logfile $LOG_DIR/gunicorn-access.log \ +--log-file $LOG_DIR/gunicorn-error.log \ +--bind=unix:$PID_DIR/$NAME.sock \ +--workers=10 \ +--worker-class=sync \ +--timeout=60 \ +portail_citoyen.wsgi:application" + +# Exit if the package is not installed +[ -x $DAEMON ] || exit 0 + +# Read configuration variable file if it is present +[ -r /etc/default/$NAME ] && . /etc/default/$NAME + +# Load confg +. /etc/portail-citoyen/portail-citoyen.conf + +# Load the VERBOSE setting and other rcS variables +. /lib/init/vars.sh + +# Define LSB log_* functions. +# Depend on lsb-base (>= 3.0-6) to ensure that this file is present. +. /lib/lsb/init-functions + +# Create pid directory +if [ ! -d $PID_DIR ]; then + install -d -m 755 -o $USER -g $GROUP $PID_DIR +fi + +# +# Function that starts the daemon/service +# +do_start() +{ + # Return + # 0 if daemon has been started + # 1 if daemon was already running + # 2 if daemon could not be started + start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \ + || return 1 + start-stop-daemon --start --quiet --exec $DAEMON -- \ + $DAEMON_ARGS \ + || return 2 +} + +# +# Function that stops the daemon/service +# +do_stop() +{ + # Return + # 0 if daemon has been stopped + # 1 if daemon was already stopped + # 2 if daemon could not be stopped + # other if a failure occurred + start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE + RETVAL="$?" + [ "$RETVAL" = 2 ] && return 2 + # Wait for children to finish too if this is a daemon that forks + # and if the daemon is only ever run from this initscript. + # If the above conditions are not satisfied then add some other code + # that waits for the process to drop all resources that could be + # needed by services started subsequently. A last resort is to + # sleep for some time. + start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON + [ "$?" = 2 ] && return 2 + # Many daemons don't delete their pidfiles when they exit. + rm -f $PIDFILE + return "$RETVAL" +} + +# +# Function that sends a SIGHUP to the daemon/service +# +do_reload() { + # + # If the daemon can reload its configuration without + # restarting (for example, when it is sent a SIGHUP), + # then implement that here. + # + start-stop-daemon --stop --signal 1 --quiet --pidfile $PIDFILE --name $NAME + return 0 +} + +do_migrate() { + log_action_msg "Applying new migrations .." + su $USER -p -c "/usr/bin/portail-citoyen-manage syncdb --migrate --noinput" + log_action_msg ".. done" +} + + +case "$1" in + start) + do_migrate + log_daemon_msg "Starting $DESC " "$NAME" + do_start + case "$?" in + 0|1) log_end_msg 0 ;; + 2) log_end_msg 1 ;; + esac + ;; + stop) + log_daemon_msg "Stopping $DESC" "$NAME" + do_stop + case "$?" in + 0|1) log_end_msg 0 ;; + 2) log_end_msg 1 ;; + esac + ;; + status) + status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $? + ;; + #reload|force-reload) + # + # If do_reload() is not implemented then leave this commented out + # and leave 'force-reload' as an alias for 'restart'. + # + #log_daemon_msg "Reloading $DESC" "$NAME" + #do_reload + #log_end_msg $? + #;; + restart|force-reload) + # + # If the "reload" option is implemented then remove the + # 'force-reload' alias + # + log_daemon_msg "Restarting $DESC" "$NAME" + do_stop + do_migrate + case "$?" in + 0|1) + do_start + case "$?" in + 0) log_end_msg 0 ;; + 1) log_end_msg 1 ;; # Old process is still running + *) log_end_msg 1 ;; # Failed to start + esac + ;; + *) + # Failed to stop + log_end_msg 1 + ;; + esac + ;; + *) + echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2 + exit 3 + ;; +esac + diff --git a/debian/portail-citoyen2.install b/debian/portail-citoyen2.install new file mode 100644 index 0000000..aa91f67 --- /dev/null +++ b/debian/portail-citoyen2.install @@ -0,0 +1,4 @@ +debian/conf/portail-citoyen.conf /etc/portail-citoyen +debian/conf/nginx-example.conf /etc/portail-citoyen +debian/conf/db.conf /usr/share/portail-citoyen/templates +debian/portail-citoyen-manage /usr/bin diff --git a/debian/portail-citoyen2.postinst b/debian/portail-citoyen2.postinst new file mode 100644 index 0000000..0e8da04 --- /dev/null +++ b/debian/portail-citoyen2.postinst @@ -0,0 +1,87 @@ +#!/bin/sh +# +# Postinst script for portail-citoyen +# + +set -e + +NAME=portail-citoyen +USER=portail-citoyen +GROUP=portail-citoyen +HOME=/var/lib/$NAME + +# source debconf stuff +. /usr/share/debconf/confmodule + +case "$1" in + configure) + if ! getent group $GROUP > /dev/null 2>&1; then + echo -n "Adding group $GROUP.." >&2 + addgroup --quiet --system $GROUP + echo "..done" >&2 + fi + if ! getent passwd $USER > /dev/null 2>&1; then + echo -n "Adding user $USER.." >&2 + adduser --quiet --system --gecos "$NAME daemon" \ + --ingroup $GROUP \ + --no-create-home --home $HOME \ + $USER + echo "..done" >&2 + fi + if [ ! -f "/etc/$NAME/secret" ]; then + echo -n "Generating Django secret.." >&2 + echo "export SECRET_KEY='` /etc/$NAME/secret + chmod 0640 /etc/$NAME/secret + chown root:$GROUP /etc/$NAME/secret + echo "..done" >&2 + fi + if [ ! -f "/etc/$NAME/saml-certs.conf" ]; then + echo -n "Generating SAML certificates.." >&2 + openssl genrsa -out /tmp/saml.key 2048 >&2 + openssl rsa -in /tmp/saml.key -pubout -out /tmp/saml.pub >&2 + echo SAML_SIGNATURE_PRIVATE_KEY=\"`cat /tmp/saml.key`\" > /etc/$NAME/saml-certs.conf + echo SAML_SIGNATURE_PUBLIC_KEY=\"`cat /tmp/saml.pub`\" >> /etc/$NAME/saml-certs.conf + rm /tmp/saml.key /tmp/saml.pub + echo "..done" >&2 + fi + + chown $USER:$GROUP /var/lib/portail-citoyen \ + /var/lib/portail-citoyen/static \ + /var/lib/portail-citoyen/extra-static \ + /var/lib/portail-citoyen/media \ + /var/run/portail-citoyen \ + /var/log/portail-citoyen + + # source dbconfig-common shell library, and call the hook function + if [ -f /usr/share/dbconfig-common/dpkg/postinst.pgsql ]; then + . /usr/share/dbconfig-common/dpkg/postinst.pgsql + dbc_generate_include="template:/etc/portail-citoyen/db.conf" + dbc_generate_include_args="-o template_infile=/usr/share/portail-citoyen/templates/db.conf -U" + dbc_generate_include_owner="root:portail-citoyen" + dbc_generate_include_perms="640" + dbc_pgsql_createdb_encoding="UTF8" + dbc_go portail-citoyen $@ + fi + + echo -n "Generating static files.." >&2 + su $USER -p -c "/usr/bin/portail-citoyen-manage collectstatic --noinput --link" >&2 + echo "..done" >&2 + ;; + + reconfigure|abort-upgrade|abort-remove|abort-deconfigure) + ;; + + *) + echo "postinst called with unknown argument \`$1'" >&2 + exit 1 + ;; +esac + +db_stop + +# dh_installdeb will replace this with shell code automatically +# generated by other debhelper scripts. + +#DEBHELPER# + +exit 0 diff --git a/debian/portail-citoyen2.postrm b/debian/portail-citoyen2.postrm new file mode 100644 index 0000000..80a667b --- /dev/null +++ b/debian/portail-citoyen2.postrm @@ -0,0 +1,32 @@ +#!/bin/sh +# postrm script for portail-citoyen +# +# see: dh_installdeb(1) + +set -e + +case "$1" in purge) + deluser --quiet --system portail-citoyen > /dev/null || true + rm -f /etc/portail-citoyen/secret + rm -rf /var/lib/portail-citoyen/static/* + # source debconf stuff + . /usr/share/debconf/confmodule + # source dbconfig-common shell library, and call the hook function + if [ -f /usr/share/dbconfig-common/dpkg/postrm.pgsql ]; then + . /usr/share/dbconfig-common/dpkg/postrm.pgsql + dbc_go portail-citoyen $@ + fi + + DBCONF=/etc/portail-citoyen/db.conf + if [ "$1" = "purge" ]; then + rm -f $DBCONF + if which ucf >/dev/null 2>&1; then + ucf --purge $DBCONF + fi + fi + ;; + +esac + +exit 0 + diff --git a/debian/python-portail-citoyen2.install b/debian/python-portail-citoyen2.install new file mode 100644 index 0000000..1b91047 --- /dev/null +++ b/debian/python-portail-citoyen2.install @@ -0,0 +1 @@ +usr/ diff --git a/debian/rules b/debian/rules new file mode 100755 index 0000000..3e8eefa --- /dev/null +++ b/debian/rules @@ -0,0 +1,14 @@ +#!/usr/bin/make -f + +d=$(CURDIR)/debian/tmp +portailcitoyen=$(CURDIR)/debian/portail-citoyen + +%: + dh $@ --with python2 + +override_dh_install: + install -m 755 -o root -g root debian/conf/syncdb.sh $(portailcitoyen)/usr/share/dbconfig-common/scripts/portail-citoyen/install/pgsql + mv $(d)/usr/bin/portail-citoyen2 $(portailcitoyen)/usr/lib/portail-citoyen/manage.py + rm -rf $(d)/usr/bin + dh_install + diff --git a/debian/source/format b/debian/source/format new file mode 100644 index 0000000..163aaf8 --- /dev/null +++ b/debian/source/format @@ -0,0 +1 @@ +3.0 (quilt) diff --git a/help/fr/api-services.page b/help/fr/api-services.page deleted file mode 100644 index 2101ddb..0000000 --- a/help/fr/api-services.page +++ /dev/null @@ -1,310 +0,0 @@ - - - - - - - - Frédéric Péters - fpeters@entrouvert.com - - - Benjamin Dauvergne - bdauvergne@entrouvert.com - - - Pierre Cros - pcros@entrouvert.com - - Remontée d'informations de services vers le portail citoyen - - -Remontée d'informations vers le portail citoyen - -
-Introduction - -

Le portail citoyen est une plate-forme dans laquelle sont agrégées des -informations provenant de sources web diverses.

- -

Afin de permettre cette remontée d'information pour les services ne -disposant pas nativement d'une API exposée sur le Web, nous proposons -d'utiliser celle qui est décrite dans ce document.

- -
- - -
-Requête - -

Le portail effectue des requêtes HTTP GET vers les différents services. Les -échanges atendus sont conformes au style d'architecture REST.

- - -
-Requête identifiante - -

L'URI utilisée pour ces requêtes peut contenir des informations identifiant -l'usager concerné.

- -
-Identifiant SAML - -

Lorsque le service intègre le protocole de fédération d'identité SAML, la -requête identifiante utilisera un identifiant SAML, le NameID :

- - -https://www.example.com/eservices/pending?NameID=nameid - -
- -
-Adresse électronique - -

Lorsque le service n'intègre pas le protocole de fédération d'identité SAML, -la requête identifiante utilisera l'adresse électronique de l'utilisateur :

- - -https://www.example.com/eservices/pending?email=email - - - - Adresses électroniques identiques -

L'utilisation de cette méthode pour identifier l'utilisateur ne fonctionne - que si ce dernier a employé la même adresse électronique pour la création du - compte citoyen et la création du compte sur le service.

-
-
-
- -
-Autres requêtes - -

Il est possible pour le service d'exposer davantage de données via des -URL.

- -
-Données génériques (qui ne concernent pas un utilisateur particulier) - -

L'applications peut exposer des données génériques (horaires, informations, -actualités). Elle doit le faire via une URL du type :

- -https://www.example.com/eservices/horaires/ -
- -
-Filtres - -

Il peut être utile pour le portail citoyen de filtrer les données récupérées -en utilisant des critères divers (catégories, localisations...) via les URL. -Les filtres doivent être compris dans les URL sous la forme (pour exposer les -horaires de Montpellier par exemple) :

- -https://www.example.com/eservices/montpellier/horaires/ - -
-
-
- -
-Structure de l'information fournie par les services - -

En réponse à la requête du portail citoyen, le service doit fournir une -information structurée. Cette réponse peut prendre plusieurs formes.

- -
-Fils d'info - -

Le portail peut intégrer, sans que cela ne nécessite la moindre -modification, les fils d'information au format RSS et Atom qui sont -offerts par les services.

- -
- -
-HTML - -

Comme pour les fils d'infos, des blocs de code HTML fournis par les services -peuvent être intégrés directement dans le portail. À noter toutefois que ce -HTML doit être "brut" parce qu'il est filtré. Il ne peut pas contenir de -Javascript par exemple.

- -
- -
-JSON - -

La réponse du service à la requête du portail peut aussi être faite en -JSON.

- -
-Liste - -

Les données exposées au format JSON doivent être organisées sous forme d'un -tableau associatif. Les clés (variables) de ce tableau sont les suivantes :

- - -

title : titre (obligatoire)

-

url : URL (obligatoire)

-

description : description (facultatif)

-
- -

La liste des données doit être attachées à une clé nommée data. -

- -

Exemple :

- - -{ "data": [ - {"title": "Demande de bac pour ordures", - "url": "https://eservices.example.com/dechets/demande-bac"}, - {"title": "Demande d'acte de naissance", - "url": "https://eservices.example.com/actes/naissance", - "Description": "Faites vos démarches sans vous déplacer"} - ] -} - - -
- -
-Tableau - -

Le portail citoyen peut aussi recevoir des données qu'il affichera sous -forme de tableau.

- -

La liste des données doit être attachées à une clé nommée data -et une clé nommée columns peut exister pour fournir les libellés -des colonnes. -

- -

Exemple :

- - -{"data": [ - {"day": "Lundi", "open": "8h", "close": "17h"}, - {"day": "Mardi", "open": "8h", "close": "19h"}, - {"day": "Mercredi", "open": "9h", "close": "17h"} - ], - "columns": { - "day": "Jour", - "open": "Horaire d'ouverture", - "close": "Horaire de fermeture"} -} - - -

Le résultat sur le portail citoyen sera l'affichage du tableau suivant :

- - - - - - - - - - - - - - - - - - - - -

Jour

Horaire d'ouverture

Horaire de fermeture

Lundi

8h

17h

Mardi

8h

19h

Mercredi

9h

17h

- -
- -
- -
- -
- Signature de l'URL - -

-L'URL doit être signée via une clé partagée à configurer des deux cotés de la -liaison, la signature est du type HMAC; l'algorithme de hash à employer est -passé en paramètre. -

- -

Si le service doit être utilisé par différents requêteurs il est -recommandé de ne pas utiliser une clé unique; il est ainsi suggéré que l'URL -attende également un paramètre précisant l'appelant, à travers, par exemple, -un paramètre supplémentaire apikey. -

- -

En ce qui concerne l'algorithme de hash, il est préconisé d'utiliser -SHA-256 par respect du Référentiel Général -de Sécurité (RGS).

- - -

-La signature est à calculer sur la query string encodée complète, en -enlevant les paramètres terminaux algo, timestamp, -nonce et signature. La formule de calcul de la -signature est la suivante : -

- - -BASE64(HMAC-HASH(query_string+'algo=HASH&timestamp=' + timestamp + '&nonce=" + nonce, clé)) - - - - -

timestamp est la date dans la zone GMT au format ISO8601 -en se limitant à la précision des secondes (ex : 2012-04-04T12:34:00Z), -

- -

nonce est une chaîne aléatoire contenant au moins 128 bits d'entropie -(16 octets aléatoires),

- -

algo est une chaîne représentant l'algorithme de hachage utilisé, sont -définis : sha1, sha256, sha512 pour les trois algorithmes correspondant. -L'utilisation d'une valeur différente n'est pas définie.

- -
- -

-La query string définitive est ainsi : -

- - -qs_initial&algo=algo&timestamp=ts&nonce=nonce&signature=signature - - -

-Pour la validation il faut contrôler : -

- - - -

que la signature regénérée est identique,

- -

que le timestamp est dans une fenêtre étroite par rapport à la date -courante, il est recommandé d'accepter un écart de trente secondes -maximum.

- -

que le nonce n'a encore jamais été vu (associé au timestamp il suffit -de conserver les nonces pour une durée de 3 ou 4 fois la fenêtre de temps, par -exemple cinq minutes).

- -
- -

-Lors de l'utilisation de ces signatures il est important d'utiliser HTTPS pour -éviter les interceptions et de stocker les nonces pour éviter les rejeux et à -maintenir une bonne synchronisation des horloges, en utilisant par exemple le -protocole NTP. -

- -
- -
diff --git a/jenkins.sh b/jenkins.sh deleted file mode 100755 index 5993b75..0000000 --- a/jenkins.sh +++ /dev/null @@ -1,13 +0,0 @@ -#!/bin/bash -e -pip install --upgrade setuptools -pip install --upgrade pip -pip install --upgrade pylint -pip install --upgrade pyOpenSSL==0.13 ndg-httpsclient requests pyasn1 -sed -i 's/^MAX = 64/MAX = 200/' $VIRTUAL_ENV/lib/python*/site-packages/ndg/httpsclient/subj_alt_name.py - -pip install --upgrade -r requirements.txt - -./portail-citoyen syncdb --migrate --noinput --no-initial-data -./portail-citoyen loaddata initial_data -./portail-citoyen validate -(pylint -f parseable --rcfile /var/lib/jenkins/pylint.django.rc portail_citoyen2/ | tee pylint.out) || /bin/true diff --git a/load-base-data.sh b/load-base-data.sh deleted file mode 100755 index 7111c07..0000000 --- a/load-base-data.sh +++ /dev/null @@ -1,5 +0,0 @@ -BASE=`dirname $0` - -ENV=${ENV:-dev} - -$BASE/run.sh loaddata --traceback initial_data diff --git a/local_settings.py.example b/local_settings.py.example deleted file mode 100644 index ef804f1..0000000 --- a/local_settings.py.example +++ /dev/null @@ -1,22 +0,0 @@ - -import os - -DEBUG = True - -if DEBUG: - DEBUG_TOOLBAR = True - TEMPLATE_DEBUG = True - DEBUG_TOOLBAR_CONFIG = { - 'INTERCEPT_REDIRECTS': False, - } -INTERNAL_IPS = ('127.0.0.1',) - -SECRET_KEY = 'coin' - -DATABASES = { - 'default': { - 'ENGINE': 'django.db.backends.sqlite3', - 'NAME': os.path.join(os.path.dirname(__file__), 'portail_citoyen.sqlite'), - }, -} - diff --git a/portail-citoyen2 b/portail-citoyen2 deleted file mode 100755 index 3e13785..0000000 --- a/portail-citoyen2 +++ /dev/null @@ -1,10 +0,0 @@ -#!/usr/bin/env python -import os -import sys - -if __name__ == "__main__": - os.environ.setdefault("DJANGO_SETTINGS_MODULE", "portail_citoyen2.settings") - - from django.core.management import execute_from_command_line - - execute_from_command_line(sys.argv) diff --git a/portail_citoyen2/__init__.py b/portail_citoyen2/__init__.py deleted file mode 100644 index 7a1d20e..0000000 --- a/portail_citoyen2/__init__.py +++ /dev/null @@ -1,8 +0,0 @@ -import os.path -import sys - -__version__ = '0.1' - -apps_dir = os.path.join(os.path.dirname(__file__), 'apps') -if apps_dir not in sys.path: - sys.path.append(apps_dir) diff --git a/portail_citoyen2/admin.py b/portail_citoyen2/admin.py deleted file mode 100644 index 40b3e5b..0000000 --- a/portail_citoyen2/admin.py +++ /dev/null @@ -1,14 +0,0 @@ -from django.views.decorators.cache import never_cache -from django.http import HttpResponseRedirect -from django.utils.http import urlencode -from django.conf import settings -from django.contrib.auth import REDIRECT_FIELD_NAME -from django.contrib import admin - -@never_cache -def login(request, extra_context=None): - query = urlencode({REDIRECT_FIELD_NAME: request.build_absolute_uri()}) - url = '{0}?{1}'.format(settings.LOGIN_URL, query) - return HttpResponseRedirect(url) - -admin.site.login = login diff --git a/portail_citoyen2/allauth_authentic2/__init__.py b/portail_citoyen2/allauth_authentic2/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/portail_citoyen2/allauth_authentic2/models.py b/portail_citoyen2/allauth_authentic2/models.py deleted file mode 100644 index 6b20219..0000000 --- a/portail_citoyen2/allauth_authentic2/models.py +++ /dev/null @@ -1 +0,0 @@ -# Create your models here. diff --git a/portail_citoyen2/allauth_authentic2/provider.py b/portail_citoyen2/allauth_authentic2/provider.py deleted file mode 100644 index 5abb29c..0000000 --- a/portail_citoyen2/allauth_authentic2/provider.py +++ /dev/null @@ -1,33 +0,0 @@ -from allauth.socialaccount import providers -from allauth.socialaccount.providers.base import ProviderAccount -from allauth.socialaccount.providers.oauth2.provider import OAuth2Provider -from allauth.account.models import EmailAddress - -class Authentic2Account(ProviderAccount): - def to_str(self): - return self.account.uid - - -class Authentic2Provider(OAuth2Provider): - id = 'authentic2' - name = 'Authentic2' - package = 'portail_citoyen2.allauth_authentic2' - account_class = Authentic2Account - - def extract_uid(self, data): - return str(data['username']) - - def extract_common_fields(self, data): - return dict(email=data.get('email'), - username=data.get('username'), - name=data.get('displayname')) - - def extract_email_addresses(self, data): - ret = [EmailAddress(email=data['email'], - verified=True, - primary=True)] - return ret - - - -providers.registry.register(Authentic2Provider) diff --git a/portail_citoyen2/allauth_authentic2/tests.py b/portail_citoyen2/allauth_authentic2/tests.py deleted file mode 100644 index e69de29..0000000 diff --git a/portail_citoyen2/allauth_authentic2/urls.py b/portail_citoyen2/allauth_authentic2/urls.py deleted file mode 100644 index 69b19e7..0000000 --- a/portail_citoyen2/allauth_authentic2/urls.py +++ /dev/null @@ -1,5 +0,0 @@ -from allauth.socialaccount.providers.oauth2.urls import default_urlpatterns -from .provider import Authentic2Provider - -urlpatterns = default_urlpatterns(Authentic2Provider) - diff --git a/portail_citoyen2/allauth_authentic2/views.py b/portail_citoyen2/allauth_authentic2/views.py deleted file mode 100644 index dae345f..0000000 --- a/portail_citoyen2/allauth_authentic2/views.py +++ /dev/null @@ -1,43 +0,0 @@ -import urlparse -import requests - -from django.core.exceptions import ImproperlyConfigured - -from allauth.socialaccount.providers.oauth2.views import (OAuth2Adapter, - OAuth2LoginView, - OAuth2CallbackView) -from .provider import Authentic2Provider - - -class Authentic2OAuth2Adapter(OAuth2Adapter): - provider_id = Authentic2Provider.id - - def get_url(self): - provider = self.get_provider() - try: - return provider.get_settings()['URL'] - except IndexError: - raise ImproperlyConfigured('The authentic2 provider needs an URL defined in settings') - - @property - def access_token_url(self): - return urlparse.urljoin(self.get_url(), 'access_token') - - @property - def authorize_url(self): - return urlparse.urljoin(self.get_url(), 'authorize') - - @property - def profile_url(self): - return urlparse.urljoin(self.get_url(), 'user-info') - - def complete_login(self, request, app, token, **kwargs): - resp = requests.get(self.profile_url, - headers={'authorization': 'Bearer %s' % token.token}) - extra_data = resp.json() - return self.get_provider().sociallogin_from_response(request, - extra_data) - - -oauth2_login = OAuth2LoginView.adapter_view(Authentic2OAuth2Adapter) -oauth2_callback = OAuth2CallbackView.adapter_view(Authentic2OAuth2Adapter) diff --git a/portail_citoyen2/app_settings.py b/portail_citoyen2/app_settings.py deleted file mode 100644 index 8779707..0000000 --- a/portail_citoyen2/app_settings.py +++ /dev/null @@ -1,38 +0,0 @@ -import sys - -from django.core.exceptions import ImproperlyConfigured - -class AppSettings(object): - __defaults = { - 'PORTAIL_ADMIN_URL': None, - } - - def __init__(self, prefix): - self.prefix = prefix - - def __getattr__(self, name): - if name in self.__defaults: - return self._settings(name, self.__defaults[name]) - else: - return self._settings(name) - - @property - def TEMPLATE_VARS(self): - v = self._settings('TEMPLATE_VARS', {}) - try: - from django.conf import settings - v['LOGOUT_URL'] = settings.LOGOUT_URL - except AttributeError: - raise ImproperlyConfigured('LOGOUT_URL is mandatory') - return v - - def _settings(self, name, default=Ellipsis): - from django.conf import settings - if default is Ellipsis: - return getattr(settings, self.prefix + name) - else: - return getattr(settings, self.prefix + name, default) - -app_settings = AppSettings('PORTAIL_CITOYEN_') -app_settings.__name__ = __name__ -sys.modules[__name__] = app_settings diff --git a/portail_citoyen2/apps/__init__.py b/portail_citoyen2/apps/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/portail_citoyen2/apps/auquotidien_plugin/__init__.py b/portail_citoyen2/apps/auquotidien_plugin/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/portail_citoyen2/apps/auquotidien_plugin/admin.py b/portail_citoyen2/apps/auquotidien_plugin/admin.py deleted file mode 100644 index 48a5e43..0000000 --- a/portail_citoyen2/apps/auquotidien_plugin/admin.py +++ /dev/null @@ -1,8 +0,0 @@ -from django.contrib import admin - -from models import AuQuotidienAPI - -class AuQuotidienAPIAdmin(admin.ModelAdmin): - list_display = [ 'name', 'order', 'active', 'service_provider', 'orig', 'hash_algo', 'verify_certificate', 'allow_redirects', 'timeout' ] - -admin.site.register(AuQuotidienAPI, AuQuotidienAPIAdmin) diff --git a/portail_citoyen2/apps/auquotidien_plugin/cms_plugins.py b/portail_citoyen2/apps/auquotidien_plugin/cms_plugins.py deleted file mode 100644 index 6e3ca1e..0000000 --- a/portail_citoyen2/apps/auquotidien_plugin/cms_plugins.py +++ /dev/null @@ -1,78 +0,0 @@ -import logging -import urlparse - -from django.utils.translation import ugettext_lazy as _ - - -from cms.plugin_pool import plugin_pool - - -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) - -logger = logging.getLogger(__name__) - -class FakeSource(object): - def __init__(self, url, api): - self.url = url - self.mime_type = DataSource.JSON - self.api = api - - def __getattr__(self, attribute): - return getattr(self.api, attribute) - -class AuQuotidienBasePlugin(DataSourcePlugin): - model = AuQuotidienActiveFormsPluginModel - render_template = None - text_enabled = True - inlines = [] - url_template = None - - def get_apis(self, context, instance): - user = context['request'].user - return instance.apis.filter(service_provider__libertyfederation__user=user, active=True) - - def get_sources(self, context, instance): - 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) - - def render(self, context, instance, placeholder): - ctx = super(AuQuotidienBasePlugin, self).render(context, instance, - placeholder) - ctx['instance'] = instance - return ctx - - -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) diff --git a/portail_citoyen2/apps/auquotidien_plugin/locale/fr/LC_MESSAGES/django.po b/portail_citoyen2/apps/auquotidien_plugin/locale/fr/LC_MESSAGES/django.po deleted file mode 100644 index 0ec1b74..0000000 --- a/portail_citoyen2/apps/auquotidien_plugin/locale/fr/LC_MESSAGES/django.po +++ /dev/null @@ -1,105 +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 , YEAR. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-02-10 16:31+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \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:59 models.py:67 models.py:68 -msgid "au-quotidien active forms" -msgstr "affichage des démarches en cours" - -#: cms_plugins.py:71 models.py:82 -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:21 -msgid "origin" -msgstr "origine" - -#: models.py:22 -msgid "hashing algorithm" -msgstr "algorithme de hachage" - -#: models.py:24 -msgid "signature key" -msgstr "clé de signature" - -#: 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:50 -msgid "au-quotidien API endpoint" -msgstr "terminaison de l'API au-quotidien" - -#: models.py:51 -msgid "au-quotidien API endpoints" -msgstr "terminaisons de l'API au-quotidien" - -#: models.py:56 models.py:71 -msgid "refresh timeout" -msgstr "durée de rafraîchissement" - -#: models.py:57 models.py:72 -msgid "Number of seconds between two web service calls" -msgstr "nombre de secondes entre deux appels au web-service" - -#: models.py:61 models.py:76 -msgid "refresh {0}" -msgstr "durée de rafraîchissement {0}s" - -#: templates/auquotidien_plugin/categories.html:2 -msgid "Other procedures.." -msgstr "Autres démarches..." - -#: templates/auquotidien_plugin/categories.html:20 -msgid "All categories" -msgstr "Toutes les démarches" diff --git a/portail_citoyen2/apps/auquotidien_plugin/migrations/0001_initial.py b/portail_citoyen2/apps/auquotidien_plugin/migrations/0001_initial.py deleted file mode 100644 index 646dae0..0000000 --- a/portail_citoyen2/apps/auquotidien_plugin/migrations/0001_initial.py +++ /dev/null @@ -1,215 +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 model 'AuQuotidienAPI' - db.create_table(u'auquotidien_plugin_auquotidienapi', ( - (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=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'auquotidien_plugin_auquotidienactiveformsplugin', ( - (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', ['AuQuotidienActiveFormsPlugin']) - - # Adding M2M table for field apis on 'AuQuotidienActiveFormsPlugin' - m2m_table_name = db.shorten_name(u'auquotidien_plugin_auquotidienactiveformsplugin_apis') - db.create_table(m2m_table_name, ( - ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), - ('auquotidienactiveformsplugin', models.ForeignKey(orm[u'auquotidien_plugin.auquotidienactiveformsplugin'], null=False)), - ('auquotidienapi', models.ForeignKey(orm[u'auquotidien_plugin.auquotidienapi'], null=False)) - )) - db.create_unique(m2m_table_name, ['auquotidienactiveformsplugin_id', 'auquotidienapi_id']) - - # Adding model 'AuQuotidienCategoryPlugin' - db.create_table(u'auquotidien_plugin_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']) - - # Adding M2M table for field apis on 'AuQuotidienCategoryPlugin' - m2m_table_name = db.shorten_name(u'auquotidien_plugin_auquotidiencategoryplugin_apis') - db.create_table(m2m_table_name, ( - ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), - ('auquotidiencategoryplugin', models.ForeignKey(orm[u'auquotidien_plugin.auquotidiencategoryplugin'], null=False)), - ('auquotidienapi', models.ForeignKey(orm[u'auquotidien_plugin.auquotidienapi'], null=False)) - )) - db.create_unique(m2m_table_name, ['auquotidiencategoryplugin_id', 'auquotidienapi_id']) - - - def backwards(self, orm): - # Deleting model 'AuQuotidienAPI' - db.delete_table(u'auquotidien_plugin_auquotidienapi') - - # Deleting model 'AuQuotidienActiveFormsPlugin' - db.delete_table(u'auquotidien_plugin_auquotidienactiveformsplugin') - - # Removing M2M table for field apis on 'AuQuotidienActiveFormsPlugin' - db.delete_table(db.shorten_name(u'auquotidien_plugin_auquotidienactiveformsplugin_apis')) - - # Deleting model 'AuQuotidienCategoryPlugin' - db.delete_table(u'auquotidien_plugin_auquotidiencategoryplugin') - - # Removing M2M table for field apis on 'AuQuotidienCategoryPlugin' - db.delete_table(db.shorten_name(u'auquotidien_plugin_auquotidiencategoryplugin_apis')) - - - 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'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '200'}), - 'namespace': ('django.db.models.fields.CharField', [], {'default': "('Default', 'Default')", 'max_length': '100'}) - }, - u'auquotidien_plugin.auquotidienactiveformsplugin': { - 'Meta': {'object_name': 'AuQuotidienActiveFormsPlugin', '_ormbases': ['cms.CMSPlugin']}, - 'apis': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auquotidien_plugin.AuQuotidienAPI']", 'symmetrical': 'False'}), - 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'}) - }, - u'auquotidien_plugin.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.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', '_ormbases': ['cms.CMSPlugin']}, - 'apis': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auquotidien_plugin.AuQuotidienAPI']", 'symmetrical': 'False'}), - 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'}, - 'changed_date': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), - 'creation_date': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'language': ('django.db.models.fields.CharField', [], {'max_length': '15', 'db_index': 'True'}), - 'level': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}), - 'lft': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}), - 'parent': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['cms.CMSPlugin']", 'null': 'True', 'blank': 'True'}), - 'placeholder': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['cms.Placeholder']", 'null': 'True'}), - 'plugin_type': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'}), - 'position': ('django.db.models.fields.PositiveSmallIntegerField', [], {'null': 'True', 'blank': 'True'}), - 'rght': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}), - 'tree_id': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}) - }, - 'cms.placeholder': { - 'Meta': {'object_name': 'Placeholder'}, - 'default_width': ('django.db.models.fields.PositiveSmallIntegerField', [], {'null': 'True'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'slot': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'}) - }, - 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['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'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'map_attributes_from_push_sources': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'map_attributes_of_filtered_attributes': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '100'}), - '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'}), - 'send_error_and_no_attrs_if_missing_required_attrs': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'source_filter_for_sso_from_push_sources': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'filter attributes of push sources with sources'", 'null': 'True', 'symmetrical': 'False', 'to': u"orm['attribute_aggregator.AttributeSource']"}) - }, - u'saml.libertyprovider': { - 'Meta': {'ordering': "('name',)", 'object_name': 'LibertyProvider'}, - 'ca_cert_chain': ('django.db.models.fields.TextField', [], {'blank': 'True'}), - 'entity_id': ('django.db.models.fields.URLField', [], {'unique': 'True', 'max_length': '200'}), - 'entity_id_sha1': ('django.db.models.fields.CharField', [], {'max_length': '40', 'blank': 'True'}), - 'federation_source': ('django.db.models.fields.CharField', [], {'max_length': '64', 'null': 'True', 'blank': 'True'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'metadata': ('django.db.models.fields.TextField', [], {}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '140', 'blank': 'True'}), - 'protocol_conformance': ('django.db.models.fields.IntegerField', [], {'max_length': '10'}), - 'public_key': ('django.db.models.fields.TextField', [], {'blank': 'True'}), - 'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '140'}), - 'ssl_certificate': ('django.db.models.fields.TextField', [], {'blank': 'True'}) - }, - u'saml.libertyproviderpolicy': { - 'Meta': {'object_name': 'LibertyProviderPolicy'}, - 'authn_request_signature_check_hint': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '64'}) - }, - u'saml.libertyserviceprovider': { - 'Meta': {'object_name': 'LibertyServiceProvider'}, - 'attribute_policy': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'attribute_policy'", 'null': 'True', 'to': u"orm['idp.AttributePolicy']"}), - 'enable_following_attribute_policy': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'enable_following_sp_options_policy': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'liberty_provider': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'service_provider'", 'unique': 'True', 'primary_key': 'True', 'to': u"orm['saml.LibertyProvider']"}), - 'policy': ('django.db.models.fields.related.ForeignKey', [], {'default': '1', 'to': u"orm['saml.LibertyProviderPolicy']", 'null': 'True'}), - 'sp_options_policy': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'sp_options_policy'", 'null': 'True', 'to': u"orm['saml.SPOptionsIdPPolicy']"}) - }, - u'saml.spoptionsidppolicy': { - 'Meta': {'object_name': 'SPOptionsIdPPolicy'}, - 'accept_slo': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), - 'accepted_name_id_format': ('authentic2.saml.fields.MultiSelectField', [], {'max_length': '1024', 'blank': 'True'}), - 'ask_user_consent': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'authn_request_signed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'default_name_id_format': ('django.db.models.fields.CharField', [], {'default': "'none'", 'max_length': '256'}), - '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'}), - 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'}) - } - } - - complete_apps = ['auquotidien_plugin'] \ No newline at end of file diff --git a/portail_citoyen2/apps/auquotidien_plugin/migrations/__init__.py b/portail_citoyen2/apps/auquotidien_plugin/migrations/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/portail_citoyen2/apps/auquotidien_plugin/models.py b/portail_citoyen2/apps/auquotidien_plugin/models.py deleted file mode 100644 index b4bf2ff..0000000 --- a/portail_citoyen2/apps/auquotidien_plugin/models.py +++ /dev/null @@ -1,82 +0,0 @@ -from django.utils.translation import ugettext as _ -from django.db import models - - -from cms.models import CMSPlugin - - -from data_source_plugin.models import DataSource - - -__all__ = [ 'AuQuotidienAPI', 'AuQuotidienActiveFormsPlugin' ] - -class AuQuotidienAPI(models.Model): - 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')) - hash_algo = models.CharField(verbose_name=_('hashing algorithm'), - 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')) - - @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] - - def __unicode__(self): - return self.name - - @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 = ('order', 'name') - - -class AuQuotidienActiveFormsPlugin(CMSPlugin): - refresh = models.IntegerField(verbose_name=_('refresh timeout'), default=60, - help_text=_('Number of seconds between two web service calls')) - apis = models.ManyToManyField(AuQuotidienAPI, verbose_name=('au-quotidien API endpoints')) - - def __unicode__(self): - return _('refresh {0}').format(self.refresh) - - def copy_relations(self, old_instance): - self.apis = old_instance.apis.all() - - class Meta: - 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')) - apis = models.ManyToManyField(AuQuotidienAPI, verbose_name=('au-quotidien API endpoints')) - - def __unicode__(self): - return _('refresh {0}').format(self.refresh) - - def copy_relations(self, old_instance): - self.apis = old_instance.apis.all() - - class Meta: - verbose_name = _('au-quotidien categories') diff --git a/portail_citoyen2/apps/auquotidien_plugin/static/auquotidien_plugin/js/categories.js b/portail_citoyen2/apps/auquotidien_plugin/static/auquotidien_plugin/js/categories.js deleted file mode 100644 index e6f2da8..0000000 --- a/portail_citoyen2/apps/auquotidien_plugin/static/auquotidien_plugin/js/categories.js +++ /dev/null @@ -1,54 +0,0 @@ -$(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); - var $empty = $plugin.attr('data-empty'); - - if ($plugin.data('initialized')) { - return; - } - $plugin.data('initialized', 1); - - $titles.hide(); - - if ($categories.length > 1) { - if ($empty) { - $categories.hide(); - } else { - $categories.slice(1).hide(); - } - // Create a selector from titles - var $p = $('

'); - var $select = $(' - diff --git a/portail_citoyen2/apps/feed_plugin/templates/feed_plugin/show_user_feed.html b/portail_citoyen2/apps/feed_plugin/templates/feed_plugin/show_user_feed.html deleted file mode 100644 index e13c21b..0000000 --- a/portail_citoyen2/apps/feed_plugin/templates/feed_plugin/show_user_feed.html +++ /dev/null @@ -1,8 +0,0 @@ -

diff --git a/portail_citoyen2/apps/feed_plugin/utils.py b/portail_citoyen2/apps/feed_plugin/utils.py deleted file mode 100644 index f6f37e0..0000000 --- a/portail_citoyen2/apps/feed_plugin/utils.py +++ /dev/null @@ -1,23 +0,0 @@ -import logging -import threading - - -from django.core.cache import cache - -logger = logging.getLogger(__name__) - -def launch_in_thread(key, function, *args, **kwargs): - '''Launch a function in a thread, prevent launching the same function many times using a lock''' - key = 'thread-' + key - created = cache.add(key, 1) - if created: - logger.debug('launching thread for %s', key) - def f(): - try: - function(*args, **kwargs) - finally: - cache.delete(key) - thread = threading.Thread(target=f) - thread.start() - - diff --git a/portail_citoyen2/apps/feed_plugin/widgets.py b/portail_citoyen2/apps/feed_plugin/widgets.py deleted file mode 100644 index 30a7262..0000000 --- a/portail_citoyen2/apps/feed_plugin/widgets.py +++ /dev/null @@ -1,104 +0,0 @@ -from itertools import chain - -from django.forms.widgets import SubWidget, SelectMultiple -from django.forms.util import flatatt -from django.utils.html import conditional_escape -from django.utils.encoding import StrAndUnicode, force_unicode -from django.utils.safestring import mark_safe - -class CheckboxInput(SubWidget): - """ - An object used by CheckboxRenderer that represents a single - . - """ - def __init__(self, name, value, attrs, choice, index): - self.name, self.value = name, value - self.attrs = attrs - self.choice_value = force_unicode(choice[0]) - self.choice_label = force_unicode(choice[1]) - self.index = index - - def __unicode__(self): - return self.render() - - def render(self, name=None, value=None, attrs=None, choices=()): - name = name or self.name - value = value or self.value - attrs = attrs or self.attrs - - if 'id' in self.attrs: - label_for = ' for="%s_%s"' % (self.attrs['id'], self.index) - else: - label_for = '' - choice_label = conditional_escape(force_unicode(self.choice_label)) - return mark_safe(u'%s %s' % (label_for, self.tag(), choice_label)) - - def is_checked(self): - return self.choice_value in self.value - - def tag(self): - if 'id' in self.attrs: - self.attrs['id'] = '%s_%s' % (self.attrs['id'], self.index) - final_attrs = dict(self.attrs, type='checkbox', name=self.name, value=self.choice_value) - if self.is_checked(): - final_attrs['checked'] = 'checked' - return mark_safe(u'' % flatatt(final_attrs)) - -class CheckboxRenderer(StrAndUnicode): - def __init__(self, name, value, attrs, choices): - self.name, self.value, self.attrs = name, value, attrs - self.choices = choices - - def __iter__(self): - for i, choice in enumerate(self.choices): - yield CheckboxInput(self.name, self.value, self.attrs.copy(), choice, i) - - def __getitem__(self, idx): - choice = self.choices[idx] # Let the IndexError propogate - return CheckboxInput(self.name, self.value, self.attrs.copy(), choice, idx) - - def __unicode__(self): - return self.render() - - def render(self): - """Outputs a