From 6e74be3365bde3cba88751e2bb05bdcda2aec7cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Schneider?= Date: Wed, 28 May 2014 19:59:58 +0200 Subject: [PATCH] Initial commit --- MANIFEST.in | 3 + conf.d/certs/saml.crt | 9 + conf.d/certs/saml.key | 27 + conf.d/linuxfr_saml_example | 11 + conf.d/portatil_famille | 11 + data/README | 2 + ...tp_www.identity-hub.com_idp_saml2_metadata | 18 + local_config.py.example | 20 + manager.py | 77 +++ requirements.txt | 3 + rp_meyzieu.db | Bin 0 -> 7168 bytes rp_meyzieu/__init__.py | 1 + rp_meyzieu/auth/__init__.py | 0 rp_meyzieu/auth/example.py | 18 + rp_meyzieu/config.py | 127 +++++ rp_meyzieu/filters/__init__.py | 0 rp_meyzieu/filters/example.py | 11 + rp_meyzieu/mappers/__init__.py | 0 rp_meyzieu/mappers/linuxfr_example.py | 88 ++++ rp_meyzieu/mappers/portail_famille_ecities.py | 87 +++ rp_meyzieu/static/css/style.css | 498 ++++++++++++++++++ rp_meyzieu/static/images/a1.gif | Bin 0 -> 1505 bytes rp_meyzieu/static/images/a10.jpg | Bin 0 -> 8414 bytes rp_meyzieu/static/images/a16.gif | Bin 0 -> 407 bytes rp_meyzieu/static/images/a18.gif | Bin 0 -> 158 bytes rp_meyzieu/static/images/a22.gif | Bin 0 -> 43 bytes rp_meyzieu/static/images/a33.gif | Bin 0 -> 367 bytes rp_meyzieu/static/images/a50.gif | Bin 0 -> 121 bytes rp_meyzieu/static/images/a8.gif | Bin 0 -> 295 bytes rp_meyzieu/static/images/a8.png | Bin 0 -> 222 bytes rp_meyzieu/static/images/eo.png | Bin 0 -> 7808 bytes rp_meyzieu/static/images/ko.png | Bin 0 -> 666 bytes rp_meyzieu/static/images/ok.png | Bin 0 -> 781 bytes rp_meyzieu/templates/associate.html | 34 ++ .../templates/portail_famille/associate.html | 73 +++ rp_meyzieu/wsgi.py | 17 + server.py | 30 ++ setup.py | 49 ++ 38 files changed, 1214 insertions(+) create mode 100644 MANIFEST.in create mode 100644 conf.d/certs/saml.crt create mode 100644 conf.d/certs/saml.key create mode 100644 conf.d/linuxfr_saml_example create mode 100644 conf.d/portatil_famille create mode 100644 data/README create mode 100644 data/http_www.identity-hub.com_idp_saml2_metadata create mode 100644 local_config.py.example create mode 100755 manager.py create mode 100644 requirements.txt create mode 100644 rp_meyzieu.db create mode 100644 rp_meyzieu/__init__.py create mode 100644 rp_meyzieu/auth/__init__.py create mode 100644 rp_meyzieu/auth/example.py create mode 100644 rp_meyzieu/config.py create mode 100644 rp_meyzieu/filters/__init__.py create mode 100644 rp_meyzieu/filters/example.py create mode 100644 rp_meyzieu/mappers/__init__.py create mode 100644 rp_meyzieu/mappers/linuxfr_example.py create mode 100644 rp_meyzieu/mappers/portail_famille_ecities.py create mode 100644 rp_meyzieu/static/css/style.css create mode 100644 rp_meyzieu/static/images/a1.gif create mode 100644 rp_meyzieu/static/images/a10.jpg create mode 100644 rp_meyzieu/static/images/a16.gif create mode 100644 rp_meyzieu/static/images/a18.gif create mode 100644 rp_meyzieu/static/images/a22.gif create mode 100644 rp_meyzieu/static/images/a33.gif create mode 100644 rp_meyzieu/static/images/a50.gif create mode 100644 rp_meyzieu/static/images/a8.gif create mode 100644 rp_meyzieu/static/images/a8.png create mode 100644 rp_meyzieu/static/images/eo.png create mode 100644 rp_meyzieu/static/images/ko.png create mode 100644 rp_meyzieu/static/images/ok.png create mode 100644 rp_meyzieu/templates/associate.html create mode 100644 rp_meyzieu/templates/portail_famille/associate.html create mode 100644 rp_meyzieu/wsgi.py create mode 100755 server.py create mode 100644 setup.py diff --git a/MANIFEST.in b/MANIFEST.in new file mode 100644 index 0000000..0138c5d --- /dev/null +++ b/MANIFEST.in @@ -0,0 +1,3 @@ +include COPYING MANIFEST.in VERSION +recursive-include rp_meyzieu/templates *.html +recursive-include rp_meyzieu/static * diff --git a/conf.d/certs/saml.crt b/conf.d/certs/saml.crt new file mode 100644 index 0000000..683ba7e --- /dev/null +++ b/conf.d/certs/saml.crt @@ -0,0 +1,9 @@ +-----BEGIN PUBLIC KEY----- +MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxdbs+ZLkuz0DISpAKhHn +WvNBSW4G0xmlUyZcjUWDQlJH7wC3yxhjioQ2oFpxqcuNf5ft/E1E5KUTqZhcKyX9 +i7XCmhPoea/fmYH3Egxbucv7++sM+TyZpUWbA0TZHBYAjcUPR/1HTcEz3bl0SqB0 +EdjhN5PpXPu1p4pGDPXc4aIkEpFU3mlK+TlV5SrivEqNS/SI14VA9g2WWdJk4+CK +PgozCfeiFtaiu2zem4uQSmd5AG0f0Av4jzxgut22owFYi9PV+Yl0cWoMOUphAwsR +RE4gckEqbhLYluAy+VglgzfT4YCXBQ6o23EH0Z0tW28KnIYEY4dQkLca9YRAKhHc +ywIDAQAB +-----END PUBLIC KEY----- diff --git a/conf.d/certs/saml.key b/conf.d/certs/saml.key new file mode 100644 index 0000000..12c4a0a --- /dev/null +++ b/conf.d/certs/saml.key @@ -0,0 +1,27 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIEogIBAAKCAQEAxdbs+ZLkuz0DISpAKhHnWvNBSW4G0xmlUyZcjUWDQlJH7wC3 +yxhjioQ2oFpxqcuNf5ft/E1E5KUTqZhcKyX9i7XCmhPoea/fmYH3Egxbucv7++sM ++TyZpUWbA0TZHBYAjcUPR/1HTcEz3bl0SqB0EdjhN5PpXPu1p4pGDPXc4aIkEpFU +3mlK+TlV5SrivEqNS/SI14VA9g2WWdJk4+CKPgozCfeiFtaiu2zem4uQSmd5AG0f +0Av4jzxgut22owFYi9PV+Yl0cWoMOUphAwsRRE4gckEqbhLYluAy+VglgzfT4YCX +BQ6o23EH0Z0tW28KnIYEY4dQkLca9YRAKhHcywIDAQABAoIBAHS7XPXhW36zAD64 +XEW2bKj4cOQvvG0ga7EFKITeqBUg0XrPFKMMD+eyHT0+QGSsSyAm9+/vc5/pWxGt +aWy4LMMbiug4qOnsAOXljm+ixRh6qIK67Nu+ivW+fTlPjT8KKGd+B4c1hbX2MnE4 +NMq3o+TH8BNH/eC0UDm715tcEmk6pUSBH3lq3CG7W1TyVjC3FGJcjBAj/X6J45lE +skJHt9d67KG/MwmzuyoI+U9q2b3jSzoIGzzQQaOItGx3OefRjqWeUyDlUWobuFNV +Lky+XjmOFJC0voQsUiV2mBSJejHmfuLjJfE+W/HrRc3YwftxCp+emaFshs56U4Ob +UWu2F9kCgYEA7livJ1nYhHVyYueX6kWKTkBCzcwQO0agLsuYpspDjKGqgUOlFHXW +9CS+DPi/r086iRYLwmGuaFAnNQJqS3ofjowj9/iZCGD/qe6jj9zMmokWDl1FALYe +jT3Eg1HLfhe8hddA815yheL5uIVw3t34TTaQuokN86nkcv/bJ53SW4UCgYEA1H4v +jk88pCNnADqmAnXNbuhPK+w6llre159vtStgKaJrcCZiTejFVpffpdp1b8hU21S2 +lg/FgXHgvrdfwq+uZ+lRNJGyCX3mqe3uXWn6d42A/7tgmRDW4NXtxwelV8MTpwHw +nS4hwmDyLyYMupyBlw5Iv7N3XmDBJu/tsEPMgA8CgYBP5MpRlnxNalD9dkQl80l5 +EXFTKqQGOpZXGUgCIKqj6U0OJ26efSGglPBfyMH4McadTRaEAdpEfRmnWzfmNPl+ +/trPtDUX6evJOoT5JDoxUuJhzkHjCykSjzHgEvrzOWGoO486BN6+omayw4giLKWe +vDunS2mx07EQG1OK5AwvQQKBgCZY21YwQH5SkTz+WIUrIza3n8oKaIxHu91nvW4R +dNouoHrtwmHS9wHoiIjSwsy4d2/ZetXb5MW2eluQlix5Ld08wtXc0SdbXCwgbxrW +jEfU9omwE/+rhUuv76gyXglXgA1skTKcZ6U/f5U4paVrpwtOnZxS0+DpTxIqzFc5 +9QbLAoGAeqLr0vm4SKnvtwK9F/Q784Rc8Ygq56vUcQIZ81yL4BsE0h6fuTHcSq+H +NhO5mQFr+CcitGDE48/CRxfw1HYpk+KOtRzY+EdKGAKEu26sUSh7GNCw3TkOvPTo +E/RgydWsPwjJBDp03z87cITfaoyqoIWLtEmUTeDY8m5dGu0EBzk= +-----END RSA PRIVATE KEY----- diff --git a/conf.d/linuxfr_saml_example b/conf.d/linuxfr_saml_example new file mode 100644 index 0000000..7918032 --- /dev/null +++ b/conf.d/linuxfr_saml_example @@ -0,0 +1,11 @@ +{ + "site_name": "linuxfr", + "server_name": ["linuxfrsaml.local:8000"], + "location": "/", + "target": "https://linuxfr.org", + "mapper": "linuxfr", + "auth_type": "saml2", + "saml2_idp_metadata": "http://www.identity-hub.com/idp/saml2/metadata", + "saml2_signature_public_key": "certs/saml.crt", + "saml2_signature_private_key": "certs/saml.key" +} diff --git a/conf.d/portatil_famille b/conf.d/portatil_famille new file mode 100644 index 0000000..8025acb --- /dev/null +++ b/conf.d/portatil_famille @@ -0,0 +1,11 @@ +{ + "site_name": "portail_famille", + "server_name": ["portail-famille.local:8000"], + "location": "/", + "target": "http://villes2.portail-familles.com:8080", + "mapper": "portail_famille_ecities", + "auth_type": "saml2", + "saml2_idp_metadata": "http://www.identity-hub.com/idp/saml2/metadata", + "saml2_signature_public_key": "certs/saml.crt", + "saml2_signature_private_key": "certs/saml.key" +} diff --git a/data/README b/data/README new file mode 100644 index 0000000..8410143 --- /dev/null +++ b/data/README @@ -0,0 +1,2 @@ +Folder where Mandaye files will be stored. +It's only use to store metadata files. diff --git a/data/http_www.identity-hub.com_idp_saml2_metadata b/data/http_www.identity-hub.com_idp_saml2_metadata new file mode 100644 index 0000000..86d4065 --- /dev/null +++ b/data/http_www.identity-hub.com_idp_saml2_metadata @@ -0,0 +1,18 @@ + +MIIDIzCCAgugAwIBAgIJANUBoick1pDpMA0GCSqGSIb3DQEBBQUAMBUxEzARBgNV +BAoTCkVudHJvdXZlcnQwHhcNMTAxMjE0MTUzMzAyWhcNMTEwMTEzMTUzMzAyWjAV +MRMwEQYDVQQKEwpFbnRyb3V2ZXJ0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB +CgKCAQEAvxFkfPdndlGgQPDZgFGXbrNAc/79PULZBuNdWFHDD9P5hNhZn9Kqm4Cp +06Pe/A6u+g5wLnYvbZQcFCgfQAEzziJtb3J55OOlB7iMEI/T2AX2WzrUH8QT8NGh +ABONKU2Gg4XiyeXNhH5R7zdHlUwcWq3ZwNbtbY0TVc+n665EbrfV/59xihSqsoFr +kmBLH0CoepUXtAzA7WDYn8AzusIuMx3n8844pJwgxhTB7Gjuboptlz9Hri8JRdXi +VT9OS9Wt69ubcNoM6zuKASmtm48UuGnhj8v6XwvbjKZrL9kA+xf8ziazZfvvw/VG +Tm+IVFYB7d1x457jY5zjjXJvNysoowIDAQABo3YwdDAdBgNVHQ4EFgQUeF8ePnu0 +fcAK50iBQDgAhHkOu8kwRQYDVR0jBD4wPIAUeF8ePnu0fcAK50iBQDgAhHkOu8mh +GaQXMBUxEzARBgNVBAoTCkVudHJvdXZlcnSCCQDVAaInJNaQ6TAMBgNVHRMEBTAD +AQH/MA0GCSqGSIb3DQEBBQUAA4IBAQAy8l3GhUtpPHx0FxzbRHVaaUSgMwYKGPhE +IdGhqekKUJIx8et4xpEMFBl5XQjBNq/mp5vO3SPb2h2PVSks7xWnG3cvEkqJSOeo +fEEhkqnM45b2MH1S5uxp4i8UilPG6kmQiXU2rEUBdRk9xnRWos7epVivTSIv1Ncp +lG6l41SXp6YgIb2ToT+rOKdIGIQuGDlzeR88fDxWEU0vEujZv/v1PE1YOV0xKjTT +JumlBc6IViKhJeo1wiBBrVRIIkKKevHKQzteK8pWm9CYWculxT26TZ4VWzGbo06j +o2zbumirrLLqnt1gmBDvDvlOwC/zAAyL4chbz66eQHTiIYZZvYgy \ No newline at end of file diff --git a/local_config.py.example b/local_config.py.example new file mode 100644 index 0000000..23bf42f --- /dev/null +++ b/local_config.py.example @@ -0,0 +1,20 @@ +## Virtual hosts configuration +hosts = { + 'linuxfrsaml.local:8000': [ + { + 'path': r'/', + 'target': 'http://linuxfr.org', + 'mapping': 'rp_meyzieu.configs.linuxfr_saml_example.linuxfr_mapping' + }, + ], + + } + +## SQL Backend config +# http://docs.sqlalchemy.org/en/rel_0_7/core/engines.html +# rfc 1738 https://tools.ietf.org/html/rfc1738 +# dialect+driver://username:password@host:port/database +db_url = 'sqlite:///test.db' + +## Logging configuration +debug = False diff --git a/manager.py b/manager.py new file mode 100755 index 0000000..309ab96 --- /dev/null +++ b/manager.py @@ -0,0 +1,77 @@ +#! /usr/bin/python +# -*- coding: utf-8 -*- + +""" Script to administrate mandaye server +""" + +import os +os.environ['MANDAYE_CONFIG_MODULE'] = 'rp_meyzieu.config' + +import base64 + +from optparse import OptionParser + +from mandaye import config +from mandaye.log import logger + +def get_cmd_options(): + usage = "usage: %prog --createdb|--upgradedb|--cryptpwd" + parser = OptionParser(usage=usage) + parser.add_option("--createdb", + dest="createdb", + default=False, + action="store_true", + help="Create Mandaye database" + ) + parser.add_option("--upgradedb", + dest="upgradedb", + default=False, + action="store_true", + help="Upgrade Mandaye database" + ) + parser.add_option("--cryptpwd", + dest="cryptpwd", + default=False, + action="store_true", + help="Crypt external password in Mandaye's database" + ) + (options, args) = parser.parse_args() + return options + +def encrypt_pwd(pwd): + from Crypto.Cipher import AES + logger.debug("Encrypt password") + enc_pwd = pwd + if config.encrypt_secret: + try: + cipher = AES.new(config.encrypt_secret, AES.MODE_CFB) + enc_pwd = cipher.encrypt(pwd) + enc_pwd = base64.b64encode(enc_pwd) + except Exception, e: + if config.debug: + traceback.print_exc() + logger.warning('Password encrypting failed %s' % e) + else: + logger.warning("You must set a secret to use pwd encryption") + return enc_pwd + +def main(): + options = get_cmd_options() + if options.createdb or options.upgradedb: + logger.info("Creating or upgrading database...") + from alembic.config import Config + from alembic import command + from mandaye import global_config + alembic_cfg = Config(global_config.alembic_cfg) + alembic_cfg.set_main_option("script_location", global_config.alembic_script_path) + command.upgrade(alembic_cfg, "head") + logger.info("Database upgraded") + if options.cryptpwd: + from mandaye.backends.default import ManagerSPUser + for user in ManagerSPUser.all(): + user.password = encrypt_pwd(user.password) + ManagerSPUser.save() + +if __name__ == "__main__": + main() + diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..8096cbb --- /dev/null +++ b/requirements.txt @@ -0,0 +1,3 @@ +gunicorn>=0.17 +mandaye>=0.8.0 +whitenoise>=1.0 diff --git a/rp_meyzieu.db b/rp_meyzieu.db new file mode 100644 index 0000000000000000000000000000000000000000..d05bf3ee2e37b1f7fe16bcda6349008a5a61f3a8 GIT binary patch literal 7168 zcmeHMO>f#T7`6!?0&RzN2M(x`H)#@xA}t`=a@taAIy4GvfJr??E-{m*d{9WxE<3Pk zf3WABcj_+t1+xiZB&#@0JAf@)j{SZ0beAqIlLFGp>B@_b7O@CX=q)0L#8TcOzJmx{5@(b`Tn`A&Tu=5N&f{AAh zwPucqs?u?A|L=fuxAVXyK*_)!FmMEupjR+Xv}UW-svkERxOR?DRa`w&>)L6(+S2OH zdhNudW8zz0aR2Xta=!=ENQjbwJ!aqlDxf@ZrygOJF(x*%ESlqdK;sp|HxOpUB)l5Nd_bX5eCHlPXQb7{v9q7rNqaG_}?yUn8}yRaPh<=Hx?xp zwQtzSnA7QuxlU}EXzExSU^LLqIvB--sF=&H%nZl3(R)pAzR~nzty)6e-T-xnoldT_ zc%I1Q4-es&{4yRhCx$6YXj zV$*fr@wDS<2`IyE`)Y_$Q5f<(UnSG|egy*NnDo=^*5ZGS4B~t4a&5#DG1T}@>g&@~ zCSNGPZ!4g|Va$Rl9fcKaZb4(YADFX-^Vcy<+?i+0iRIH-s1!NL(UcO8*PLMz{`2dc z*V&+bi6bf&;Vwq59~b;+->4M3ip?lBLZ$3JrF!%9G9=k?>EA2L(BjG literal 0 HcmV?d00001 diff --git a/rp_meyzieu/__init__.py b/rp_meyzieu/__init__.py new file mode 100644 index 0000000..40692a7 --- /dev/null +++ b/rp_meyzieu/__init__.py @@ -0,0 +1 @@ +__version__="0.1.0" diff --git a/rp_meyzieu/auth/__init__.py b/rp_meyzieu/auth/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/rp_meyzieu/auth/example.py b/rp_meyzieu/auth/example.py new file mode 100644 index 0000000..b582e36 --- /dev/null +++ b/rp_meyzieu/auth/example.py @@ -0,0 +1,18 @@ +""" +Here you can overload Mandaye default authentification +method like SAML2Auth or AuthForm +""" + +from mandaye.auth.authform import AuthForm +from mandaye.auth.saml2 import SAML2Auth + +class MyAuthSAML(SAML2Auth): + """ Overload Mandaye SAML2Auth authentification + """ + pass + +class MyAuth(AuthForm): + """ Overload Mandaye AuthForm authentification + """ + pass + diff --git a/rp_meyzieu/config.py b/rp_meyzieu/config.py new file mode 100644 index 0000000..2105f22 --- /dev/null +++ b/rp_meyzieu/config.py @@ -0,0 +1,127 @@ +import logging +import os + +_PROJECT_PATH = os.path.join(os.path.dirname(__file__), '..') + +## SQL Backend config +# Database configuration +# http://docs.sqlalchemy.org/en/rel_0_7/core/engines.html +# rfc 1738 https://tools.ietf.org/html/rfc1738 +# dialect+driver://username:password@host:port/database +db_url = 'sqlite:///' + os.path.join(_PROJECT_PATH, 'rp_meyzieu.db') + +debug = True + +# Log configuration +LOGGING = { + 'version': 1, + 'disable_existing_loggers': True, + + 'formatters': { + 'console': { + 'format': '%(asctime)s %(levelname)s %(message)s', + 'datefmt': '%H:%M:%S', + }, + 'file': { + 'format': '%(asctime)s %(levelname)s %(uuid)s %(message)s', + 'datefmt': '%Y-%m-%d %H:%M:%S' + } + }, + 'handlers': { + 'console': { + 'level': 'DEBUG', + 'class': 'logging.StreamHandler', + 'formatter': 'console' + }, + 'syslog': { + 'level': 'INFO', + 'class': 'entrouvert.logging.handlers.SysLogHandler', + 'formatter': 'file', + 'address': '/dev/log' + }, + }, + 'loggers': { + '': { + 'handlers': ['console'], + 'level': 'DEBUG', + 'propagate': False, + }, + 'mandaye': { + 'handlers': ['console', 'syslog'], + 'level': 'DEBUG', + 'propagate': False, + }, + 'rp_meyzieu': { + 'handlers': ['console', 'syslog'], + 'level': 'DEBUG', + 'propagate': False, + }, + }, + } + + +## PATH +# Template directory +template_directory = os.path.join(_PROJECT_PATH, 'rp_meyzieu/templates') +# Configuration directory +config_root = os.path.join(_PROJECT_PATH, 'conf.d') +# Static url +static_url = '/mandaye/static' +# Static folder +static_root = os.path.join(_PROJECT_PATH, 'rp_meyzieu/static') +# Data dir +data_dir = os.path.join(_PROJECT_PATH, 'data') + +# Raven Sentry configuration +raven_dsn = None + +# Email notification configuration +email_notification = False +email_prefix = '[Mandaye rp_meyzieu]' +smtp_host = 'localhost' +smtp_port = 25 +email_from = 'traceback@entrouvert.com' +email_to = ['admin@localhost'] + +# Use long traceback with xtraceback +use_long_trace = True + +# Ask Mandaye to auto decompress a response message +# Decompress response only if you load a filter +auto_decompress = True + +# Encrypt service provider passwords with a secret +# You should install pycypto to use this feature +encrypt_sp_password = False +# Must be a 16, 24, or 32 bytes long +encrypt_secret = '' + +# Supported authentification +authentifications = { + 'saml2': 'mandaye.auth.saml2.SAML2Auth' +} + +# sp mappers +mappers = { + 'linuxfr': 'rp_meyzieu.mappers.linuxfr_example', + 'portail_famille_ecities': 'rp_meyzieu.mappers.portail_famille_ecities', +} + +# Beaker session configuration +session_opts = { + 'session.type': 'file', + 'session.cookie_expires': True, + 'session.timeout': 3600, + 'session.data_dir': '/var/tmp/beaker' +} + +# Choose storage +# Only mandaye.backends.sql at the moment +storage_backend = "mandaye.backends.sql" + +# Import local config +try: + from ..rp_meyzieu.local_config import * +except: + pass + diff --git a/rp_meyzieu/filters/__init__.py b/rp_meyzieu/filters/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/rp_meyzieu/filters/example.py b/rp_meyzieu/filters/example.py new file mode 100644 index 0000000..151a4c1 --- /dev/null +++ b/rp_meyzieu/filters/example.py @@ -0,0 +1,11 @@ + +from mandaye.template import serve_template + +class ReplayFilter: + + @staticmethod + def associate(env, values, request, response): + associate = serve_template(values.get('template'), **values) + response.msg = associate + return response + diff --git a/rp_meyzieu/mappers/__init__.py b/rp_meyzieu/mappers/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/rp_meyzieu/mappers/linuxfr_example.py b/rp_meyzieu/mappers/linuxfr_example.py new file mode 100644 index 0000000..2773707 --- /dev/null +++ b/rp_meyzieu/mappers/linuxfr_example.py @@ -0,0 +1,88 @@ + +""" +You need to defined 3 variables : + +* form_values (defined the login form values): +form_values = { + 'login_url': '/login', + 'post_url': '/login', + 'form_attrs': { 'name': 'form40', }, + 'username_field': 'user', + 'password_field': 'pass', + 'post_fields': ['birthdate', 'card_number'] +} +login_url, form_attrs, post_fields and username_field are obligatory +* urls (a dictionnary with urls) : + urls = { + 'associate_url': '/mandaye/associate', + 'connection_url': '/mandaye/sso', + 'login_url': '/mandaye/login' + } +* mapping +""" + +from rp_meyzieu.filters.example import ReplayFilter + +form_values = { + 'login_url': '/compte/connexion', + 'form_attrs': { 'id': 'new_account' }, + 'post_fields': ['account[login]', 'account[password]'], + 'username_field': 'account[login]', + 'password_field': 'account[password]', +} + +urls = { + 'associate_url': '/mandaye/associate', + 'connection_url': '/mandaye/sso', + 'login_url': '/mandaye/login' +} + +mapping = [ + { + 'path': r'/mandaye/login$', + 'method': 'GET', + 'response': [{ + 'auth': 'login', + 'condition': 'response.code==302', + },] + }, + { + 'path': r'/mandaye/sso$', + 'method': 'GET', + 'response': [{ + 'auth': 'sso', + }] + }, + { + 'path': r'/mandaye/slo$', + 'method': 'GET', + 'response': [{ + 'auth': 'slo', + }] + }, + { + 'path': r'/mandaye/associate$', + 'method': 'GET', + 'on_response': [{ + 'filter': ReplayFilter.associate, + 'values': { + 'action': urls['associate_url'], + 'template': 'associate.html', + 'sp_name': 'Linux FR', + 'login_name': form_values['username_field'], + 'password_name': form_values['password_field'], + }, + },] + }, + { + 'path': r'/mandaye/associate$', + 'method': 'POST', + 'response': [ + { + 'auth': 'associate_submit', + 'condition': "response.code==302" + }, + ] + }, + ] + diff --git a/rp_meyzieu/mappers/portail_famille_ecities.py b/rp_meyzieu/mappers/portail_famille_ecities.py new file mode 100644 index 0000000..9f87fea --- /dev/null +++ b/rp_meyzieu/mappers/portail_famille_ecities.py @@ -0,0 +1,87 @@ + +""" +You need to defined 3 variables : + +* form_values (defined the login form values): +form_values = { + 'login_url': '/login', + 'post_url': '/login', + 'form_attrs': { 'name': 'form40', }, + 'username_field': 'user', + 'password_field': 'pass', + 'post_fields': ['birthdate', 'card_number'] +} +login_url, form_attrs, post_fields and username_field are obligatory +* urls (a dictionnary with urls) : + urls = { + 'associate_url': '/mandaye/associate', + 'connection_url': '/mandaye/sso', + 'login_url': '/mandaye/login' + } +* mapping +""" + +from rp_meyzieu.filters.example import ReplayFilter + +form_values = { + 'login_url': '/ffaxsslMeyzieu/workflow_url', + 'form_attrs': { 'name': 'eCitiz' }, + 'post_fields': ['MonIdentifiant_champcalcule6', 'MonMotDePasse_champcalcule9', 'egoPage', 'workflow', 'egoToken', 'egoSubmitMeConnecter_action133_6T9N'], + 'username_field': 'MonIdentifiant_champcalcule6', + 'password_field': 'MonMotDePasse_champcalcule9', +} + +urls = { + 'associate_url': '/mandaye/associate', + 'connection_url': '/mandaye/sso', + 'login_url': '/mandaye/login' +} + +mapping = [ + { + 'path': r'/mandaye/login$', + 'method': 'GET', + 'response': [{ + 'auth': 'login', + 'condition': 'response.code==302', + },] + }, + { + 'path': r'/mandaye/sso$', + 'method': 'GET', + 'response': [{ + 'auth': 'sso', + }] + }, + { + 'path': r'/mandaye/slo$', + 'method': 'GET', + 'response': [{ + 'auth': 'slo', + }] + }, + { + 'path': r'/mandaye/associate$', + 'method': 'GET', + 'on_response': [{ + 'filter': ReplayFilter.associate, + 'values': { + 'action': urls['associate_url'], + 'template': 'portail_famille/associate.html', + 'login_name': form_values['username_field'], + 'password_name': form_values['password_field'], + }, + },] + }, + { + 'path': r'/mandaye/associate$', + 'method': 'POST', + 'response': [ + { + 'auth': 'associate_submit', + 'condition': "response.code==302" + }, + ] + }, + ] + diff --git a/rp_meyzieu/static/css/style.css b/rp_meyzieu/static/css/style.css new file mode 100644 index 0000000..8dd6da2 --- /dev/null +++ b/rp_meyzieu/static/css/style.css @@ -0,0 +1,498 @@ +/* theme derived and inspired by TerraFirma + * + */ + +html, body { + margin: 0; + font-family: sans-serif; + font-size: 12px; +} + +body#iframe { + background: white; +} + +html { + background: #F9F9F7 url(../images/a1.gif) repeat-x; + color: #44b2cb; +} + +a +{ + color: #44b2cb; + text-decoration: underline; +} + +a:hover +{ + text-decoration: none; +} + + +div#wrap { + background: white; + width: 640px; + margin: 5em auto; + padding: 15px; + -moz-border-radius: 6px; + -webkit-border-radius:6px; + -moz-box-shadow: 0 0 4px rgba(0,0,0,0.75); + -webkit-box-shadow: 0 0 4px rgba(0,0,0,0.75); + position: relative; +} + +#header +{ + position: absolute; + background: url(../images/a8.png) repeat-x; + -moz-border-radius: 6px 0 0 6px; + -webkit-border-radius: 6px 0 0 6px; + width: 450px; + height: 92px; + color: #fff; + padding-left: 20px; +} + +#header h1 +{ + font-size: 23px; + letter-spacing: -1px; + padding-top: 30px; + margin: 0; +} + +#header span +{ + margin: 0; + font-size: 13px; + font-weight: normal; + color: #FCE2CA; +} + +#splash +{ + position: absolute; + right: 20px; + background: url(../images/eo.png) no-repeat; + width: 153px; + height: 92px; + -moz-border-radius: 0 6px 6px 0; + -webkit-border-radius: 0 6px 6px 0; +} + +div#content { + margin: 1em 1ex; + margin-top: 130px; + padding: 1ex; +} + +div#content h2 { + margin-top: 0; + font-weight: normal; + color: #656551; + font-size: 18px; + letter-spacing: -1px; + line-height: 25px; + margin-bottom: 20px; + padding: 0 0 10px 15px; + position: relative; + top: 4px; + background: url(../images/a22.gif) bottom repeat-x; +} + +#footer +{ + font-size: 70%; + position: relative; + clear: both; + height: 66px; + text-align: center; + line-height: 66px; + background-image: url(../images/a8.png); + color: #fff; +} + +#footer a +{ + color: #8C8C73; +} + + +form#login-form p { + float: left; + width: 40%; +} + +form#login-form input.submit { + float: right; + width: 18%; + margin-top: 30px; +} + +div.login-actions { + clear: both; + padding-top: 1em; +} + +div.login-actions p { + margin: 0; +} + +form p { + margin: 0 0 1em 0; +} + +form p label { + display: block; +} + +form p input, +form p textarea { + margin-left: 10px; +} + +ul.messages { + margin: 0; + padding: 0; + list-style: none; +} + +ul.messages li.error { + color: #e80404; +} + +ul.errorlist { + margin: 0; + padding: 0; + color: #e80404; + list-style: none; +} + +input, textarea { + padding: 5px; + border: 1px solid #cccccc; + color:#666666; + background: white; + color: black; +} + +textarea:focus, input[type="text"]:focus, input[type="password"]:focus { + border: 1px solid #4690d6; + color:#333333; +} + +input[type=submit] { + color: #ffffff; + background:#4690d6; + border: 1px solid #2a567f; + font-weight: bold; + padding: 2px 8px 2px 8px; + margin: 0; + cursor: pointer; +} + + +input[type=submit]:hover { + border-color: #0e1d2b; +} + +form#login-form ul.errorlist { + margin-bottom: 1em; + width: 80%; + font-weight: normal; +} + +/* OpenID Stuff */ + +#openid_btns, #openid_btns br { + clear: both; +} + +#openid_highlight a { + border: 1px solid #888; +} + +#openid_input_area input[type=submit] { + padding-top: 0; + margin-top: 0; + margin-left: 1em; +} + +.openid_large_btn { + width: 100px; + height: 60px; + border: 1px solid #DDD; + margin: 3px; + float: left; +} +.openid_small_btn { + width: 24px; + height: 24px; + border: 1px solid #DDD; + margin: 3px; + float: left; +} + +a.openid_large_btn:focus { + outline: none; +} +a.openid_large_btn:focus { + -moz-outline-style: none; +} +.openid_selected { + border: 4px solid #DDD; +} + +#openid_input_area { + clear: both; + padding-top: 2.5em; +} + +li.indented { + margin-left: 50px; +} + +ul.NoBullet { + list-style-type: none; +} + +div#content h4 { + margin-bottom: 5px; + margin-top: 30px; +} + +div#content p { + margin-top: 0; +} + +div.errors { + margin: 0; + padding: 0; + color: #e80404; + list-style: none; +} + +div#breadcrumb { + font-size: 80%; + margin-bottom: 1em; +} + +div#user { + position: absolute; + top: 115px; + right: 12px; +} + +a#logout { + font-size: 100%; +} + + +.ui-tabs .ui-tabs-hide { + display: none; +} + +h4 { + padding-left: 0.5em; +} + +h4 + div, div#profile { + padding-left: 1em; +} + + +div#menu { +position: relative; +background: #46461F url(../images/a17.gif) repeat-x; +height: 67px; +padding: 0px 20px 0px 5px; +margin: 136px 0px 0px 0px; +} + +#menu ul +{ + padding: 0; + margin: 0; +} + +#menu ul li +{ +display: inline; +line-height: 52px; +padding-left: 3px; +} + +#menu ul li.first +{ +border-left: 0px; +} + +#menu ul li a +{ +background-color: transparent; +background-repeat: repeat-x; +padding: 8px 12px 8px 12px; +font-size: 12px; +color: #fff; +font-weight: bold; +} +#menu ul li a:hover +{ +background: #fff url(../images/a18.gif) repeat-x top; +color: #4A4A24; +text-decoration: none; +} + +#eo +{ +position: absolute; +top: 0px; +line-height: 52px; +color: #BDBDA2; +right: 30px; +font-weight: bold; +font-size: 12px; +letter-spacing: -1px; +} + +#eo a { + color: inherit; + text-decoration: none; +} + +ul#tab-nav { + list-style: none; + padding: 0; + width: 160px; + float: left; +} + +ul#tab-nav li { + line-height: 300%; + position: relative; + right: -1px; + border: 1px solid transparent; +} + +ul#tab-nav li.ui-tabs-selected { + border: 1px solid #ccc; + border-right: 1px solid white; +} + +ul#tab-nav a { + display: block; + padding-left: 1ex; + outline: none; + -moz-user-focus:ignore; +} + +ul#tab-nav a:hover { +} + +ul#tab-nav a:active { +} + +/* XXX: add a class to divs, so it works in IE */ +div#tabs > div { + border: 1px solid #ccc; + float: left; + width: 420px; + padding: 10px; + min-height: 26em; +} + +a.bigbutton { + display: block; + -moz-border-radius: 6px; + -webkit-border-radius:6px; + border: 1px solid black; + margin: 2em 0; + line-height: 300%; + text-align: center; + text-decoration: none; + font-weight: bold; + -webkit-box-shadow: 0 0 4px rgba(0,0,0,0.75); + -moz-box-shadow: 0 0 4px rgba(0,0,0,0.75); +} + +a.bigbutton:hover { + background: #eee; +} + +div#providers { + display: none; +} + +#modalOverlay { + height:100%; + width:100%; + position:fixed; + left:0; + top:0; + z-index:3000; + background-color: rgba(0, 0, 0, 0.8); + cursor:wait; +} + +div#popup { + display: none; + position:fixed; + width:500px; + left:50%; + margin-left:-250px; + z-index:3100; + top: 10%; +} + +div#popup div { + position: relative; + margin: 0; + background: white; + border: 1px solid black; + border-color: #333 black black #333; +} + +div#popup h2 { + text-align: center; +} + +div#popup ul { + max-height: 70px; + overflow: auto; + margin: 0 1em 1em 1em; + padding: 0 1em 1em 1em; +} + +div#popup h3 { + margin-bottom: 4px; + padding-left: 10px; +} + +div#popup p { + margin: 5px; +} + +div#popup a#close { + float: right; + padding: 1ex; +} + +a.roleid_button { + -moz-border-radius: 5px; + -webkit-border-radius: 5px; + border-radius: 5px; + background: #5C5C5C; + color: #44b2cb; + font-weight: bold; + padding-top: 5px; + padding-bottom: 5px; + padding-right: 10px; + padding-left: 10px; + margin: 0; + cursor: pointer; + text-decoration: none; +} + +a.roleid_button:hover { + background: black; +} diff --git a/rp_meyzieu/static/images/a1.gif b/rp_meyzieu/static/images/a1.gif new file mode 100644 index 0000000000000000000000000000000000000000..ad8322c7863b400c390a0a0e0059063e0e6c01b1 GIT binary patch literal 1505 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 HJuLknnPF}y literal 0 HcmV?d00001 diff --git a/rp_meyzieu/static/images/a16.gif b/rp_meyzieu/static/images/a16.gif new file mode 100644 index 0000000000000000000000000000000000000000..c49f5f7d7b66bf1110190c175467a86474101614 GIT binary patch literal 407 zcmZ?wbhEHbWMOb-xXQrb<|gm!tK#9I6d!Mwkl^tD|NqcXBX@U&FJC@{hZ_Y1XoZIA z#>QGlMVZCL*&I5wEih2`&!1mONkGLm$;l4U(I$R=nt_2@adFmueyYL2+5rLTMn)_F z0opM!=HcO{-rnjlF;=OmPLYuo(b1OS;l^HGD&M|+_VQ9qOLGYh)(;6W@bOXq`SbhV zzkh%I`uXF>_g}w${QLLs>(@^|etdcP^3m(pkKep``u+RYPoLiX{rl(LyBF`@zhQs@ z#h)x-rVfY%`N@H8i$mW8W(_7EkIP9r4J>$C0llQv19J&_z-}LkZ^&A~P0`26|vGRHpWpoa`Tf_g@2_7!`tjq-*RLNweR}!n)0^+#KY#!J>D#xDZ{I$7 z^XAFdukU~U{Py9)(+?kB{QC9d?c1ks-aPvB>D7xD_da}h{_WeRmoM-A`0XvZTq!P=vS_2q XlY=vk81rxh)x6xgu4#b+6N5DX4LCxD literal 0 HcmV?d00001 diff --git a/rp_meyzieu/static/images/a8.gif b/rp_meyzieu/static/images/a8.gif new file mode 100644 index 0000000000000000000000000000000000000000..1d12ac540b9ea03468e09deec170dde26011a5fd GIT binary patch literal 295 zcmbV{J4-?V07g%EiCQA)F?*W|La3n>3GS^_jJVi?=tZQxZfQ?@t1>HC)8)~ER@AxLOHx~bcnxzH$i=l(kLHLNuXUC%V-nNrm;dfiqce*XoJeHU6iL3 z#*0y#=4%9H_y=ay_^Sq+Za!J9la}*f51FBB)+3*;aT|Lo8oBQK+4o>yPpa!VFdXcE ke7T!4iv_0;H}cO>_%)r1c48n{Iv*t(u1=&kHeO=k_F!6D#GjXrX;|B`GdAc};NL)VJ zcaZmh0uS?fzQ-lL&+_CQ1p^gZZheNZ{Z~k8T)a3jPoz;IFN;_^Hcz>QbfrYteahHJ+&?W{? LS3j3^P6~uf`Ap!_Y?sU1k0{2`&<_6%9B;s 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 A&j0`b literal 0 HcmV?d00001 diff --git a/rp_meyzieu/static/images/ok.png b/rp_meyzieu/static/images/ok.png new file mode 100644 index 0000000000000000000000000000000000000000..89c8129a490b329f3165f32fa0781701aab417ea GIT binary patch literal 781 zcmV+o1M>WdP)4-QibtN)VXQDpczE`xXAkUjh%RI>;okxb7K@0kpyQ1k_Y(|Oe7$m(^ zNYX>mI||sUbmn+c3<&FnE=4u#()KBS^SH8e)Qs5i!#lY=$-1gbH6VluzU=m=EP78&5vQ z-?+fFP-G2l&l_QzYealK$;1Rl?FkzXR&Jv@fBPNjCr#AYRyJ7UJQ0v#?)7Ott=>3`#-pV!7>9}>Q1jL)H6h&gkP@3nI=+F3nA~M>u#(n* z8T!#8oEw&-mED4!h4s!N@Jo3S7N&Q6%6l3}nlcd~X@>;uelvPsSkXIgg~e+^T1zSf z3SNj(5%jK~i8@b;C + + + + 1er connexion + + +
+ +
+
+

Association

+

Associer ${sp_name} avec votre compte citoyen

+
+
+ + +
+
+ + +
+

+
+
+ +
+ + diff --git a/rp_meyzieu/templates/portail_famille/associate.html b/rp_meyzieu/templates/portail_famille/associate.html new file mode 100644 index 0000000..d26bd48 --- /dev/null +++ b/rp_meyzieu/templates/portail_famille/associate.html @@ -0,0 +1,73 @@ + + +AUCT : Accès à l'espace personnel -  + Portail-Familles de la Ville de Meyzieu + +bandeau
+
+   +
 
 
+
 
+ +
Connexion
+
 
+ +
+
 
+ +
+
*
 
+ +
+
*
 
+ +
+

 
+ + +
+

 
+ + + +
+

 
+ +Identifiant ou mot de passe oublié ? +
+
* champs obligatoires
 
+ +
 
+ + +
+
+
Le navigateur SAFARI, les tablettes et les smartphones ne sont pas compatibles avec le portail famille.
+
+
+
+
Bienvenue  sur votre Portail Famille !
+
Cet espace personnalisé vous permet d'accéder 24h/24 et 7j/7 à de nombreuses démarches en ligne dédiées à la famille (péri et extra-scolaire, petite enfance...) : modification de vos données personnelles, paiement en ligne, consultation de vos factures, inscription de certaines activités, ...
+
Lors de votre première visite, nous vous invitons à vérifier vos données personnelles.
+

+
Vous pouvez aussi simuler vos tarifs applicables aux activités en cliquant ICI.

+
Vous pouvez sélectionner ci-dessous la démarche que vous souhaitez accomplir. Mairie de Meyzieu - Place de l'Europe - BP 122 - 69883 Meyzieu - 04 72 45 16 16 

 
+ +

+
 
+   ok
+   Valid XHTML 1.0
+  

+ + Conformément à la loi informatique et libertés du 6 janvier 1978, toutes les données informatiques vous concernant sont traitées de manière strictement confidentielle.Les informations enregistrées dans les fichiers sont destinées exclusivement à la Ville de Meyzieu. Conformément aux dispositions de la loi Informatique et Liberté

+ + +

 
+ + diff --git a/rp_meyzieu/wsgi.py b/rp_meyzieu/wsgi.py new file mode 100644 index 0000000..9155026 --- /dev/null +++ b/rp_meyzieu/wsgi.py @@ -0,0 +1,17 @@ + +import os + +from mandaye.server import MandayeApp + +from rp_meyzieu import config +from beaker.middleware import SessionMiddleware +from whitenoise import WhiteNoise + +os.environ['MANDAYE_CONFIG_MODULE'] = 'test.config' + +from mandaye import config + +application = SessionMiddleware(MandayeApp(), config.session_opts) +application_dev = WhiteNoise(application, root=config.static_root, prefix=config.static_url) + + diff --git a/server.py b/server.py new file mode 100755 index 0000000..a361759 --- /dev/null +++ b/server.py @@ -0,0 +1,30 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +""" Script to launch mandaye with gunicorn server +""" + +import os +os.environ['MANDAYE_CONFIG_MODULE'] = 'rp_meyzieu.config' + +import sys + +from mandaye.log import logger +from gunicorn.app.wsgiapp import WSGIApplication + +class MandayeWSGIApplication(WSGIApplication): + + def init(self, parser, opts, args): + self.cfg.set("default_proc_name", "rp_meyzieu.wsgi:application_dev") + self.app_uri = "rp_meyzieu.wsgi:application_dev" + +def main(): + """ The ``gunicorn`` command line runner for launcing Gunicorn with + generic WSGI applications. + """ + logger.info('rp_meyzieu reverse-proxy start') + MandayeWSGIApplication("%(prog)s [OPTIONS]").run() + +if __name__ == "__main__": + main() + diff --git a/setup.py b/setup.py new file mode 100644 index 0000000..b515f40 --- /dev/null +++ b/setup.py @@ -0,0 +1,49 @@ +#! /usr/bin/env python + +''' + Setup script for rp_meyzieu RP +''' + +import os +import subprocess + +from setuptools import setup, find_packages +from sys import version + +import rp_meyzieu + +install_requires=[ + 'gunicorn>=0.17', + 'mandaye>=0.8.0', + 'whitenoise>=1.0' +] + +def get_version(): + if os.path.exists('VERSION'): + version_file = open('VERSION', 'r') + version = version_file.read() + version_file.close() + return version + if os.path.exists('.git'): + p = subprocess.Popen(['git','describe','--match=v*'], + stdout=subprocess.PIPE) + result = p.communicate()[0] + version = result.split()[0][1:] + return version.replace('-','.') + return rp_meyzieu.__version__ + +setup(name="rp_meyzieu", + version=get_version(), + license="AGPLv3 or later", + description="rp_meyzieu rp is a Mandaye project, modular reverse proxy to authenticate", + url="http://dev.entrouvert.org/projects/reverse-proxy/", + author="Author", + author_email="author@example.com", + maintainer="Maintainer", + maintainer_email="maintainer@exmaple.com", + scripts=['rp_meyzieu_manager', 'rp_meyzieu_server'], + packages=find_packages(), + include_package_data=True, + install_requires=install_requires +) +