c2cgeoportal-geoportal 2.6.0__py2.py3-none-any.whl → 2.8.1.180__py2.py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- c2cgeoportal_geoportal/__init__.py +245 -95
- c2cgeoportal_geoportal/lib/__init__.py +67 -43
- c2cgeoportal_geoportal/lib/authentication.py +50 -26
- c2cgeoportal_geoportal/lib/bashcolor.py +17 -13
- c2cgeoportal_geoportal/lib/cacheversion.py +16 -8
- c2cgeoportal_geoportal/lib/caching.py +65 -193
- c2cgeoportal_geoportal/lib/check_collector.py +17 -10
- c2cgeoportal_geoportal/lib/checker.py +67 -65
- c2cgeoportal_geoportal/lib/common_headers.py +167 -0
- c2cgeoportal_geoportal/lib/dbreflection.py +61 -46
- c2cgeoportal_geoportal/lib/filter_capabilities.py +126 -88
- c2cgeoportal_geoportal/lib/fulltextsearch.py +6 -5
- c2cgeoportal_geoportal/lib/functionality.py +20 -17
- c2cgeoportal_geoportal/lib/headers.py +14 -5
- c2cgeoportal_geoportal/lib/i18n.py +4 -4
- c2cgeoportal_geoportal/lib/layers.py +30 -11
- c2cgeoportal_geoportal/lib/lingua_extractor.py +363 -240
- c2cgeoportal_geoportal/lib/loader.py +11 -16
- c2cgeoportal_geoportal/lib/metrics.py +28 -17
- c2cgeoportal_geoportal/lib/oauth2.py +392 -206
- c2cgeoportal_geoportal/lib/wmstparsing.py +105 -84
- c2cgeoportal_geoportal/lib/xsd.py +26 -16
- c2cgeoportal_geoportal/resources.py +15 -9
- c2cgeoportal_geoportal/scaffolds/advance_create/ci/config.yaml +26 -0
- c2cgeoportal_geoportal/scaffolds/advance_create/cookiecutter.json +18 -0
- c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/.dockerignore +6 -0
- c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/.eslintrc.yaml +19 -0
- c2cgeoportal_geoportal/scaffolds/{create/geoportal/+dot+prospector.yaml → advance_create/{{cookiecutter.project}}/geoportal/.prospector.yaml} +8 -2
- c2cgeoportal_geoportal/scaffolds/{create/geoportal/Dockerfile_tmpl → advance_create/{{cookiecutter.project}}/geoportal/Dockerfile} +22 -15
- c2cgeoportal_geoportal/scaffolds/{create/geoportal/alembic.yaml_tmpl → advance_create/{{cookiecutter.project}}/geoportal/alembic.yaml} +1 -1
- c2cgeoportal_geoportal/scaffolds/{create/geoportal/development.ini_tmpl → advance_create/{{cookiecutter.project}}/geoportal/development.ini} +34 -15
- c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/gunicorn.conf.py +100 -0
- c2cgeoportal_geoportal/scaffolds/{create → advance_create/{{cookiecutter.project}}}/geoportal/lingua-client.cfg +1 -0
- c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/production.ini +38 -0
- c2cgeoportal_geoportal/scaffolds/{create/geoportal/setup.py_tmpl → advance_create/{{cookiecutter.project}}/geoportal/setup.py} +6 -7
- c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/tsconfig.json +8 -0
- c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/webpack.api.js +77 -0
- c2cgeoportal_geoportal/scaffolds/{create/geoportal/webpack.apps.js_tmpl → advance_create/{{cookiecutter.project}}/geoportal/webpack.apps.js} +29 -28
- c2cgeoportal_geoportal/scaffolds/{create → advance_create/{{cookiecutter.project}}}/geoportal/webpack.commons.js +4 -7
- c2cgeoportal_geoportal/scaffolds/{create → advance_create/{{cookiecutter.project}}}/geoportal/webpack.config.js +1 -1
- c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/{{cookiecutter.package}}_geoportal/__init__.py +42 -0
- c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/{{cookiecutter.package}}_geoportal/authentication.py +10 -0
- c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/{{cookiecutter.package}}_geoportal/dev.py +14 -0
- c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/{{cookiecutter.package}}_geoportal/models.py +8 -0
- c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/{{cookiecutter.package}}_geoportal/multi_organization.py +7 -0
- c2cgeoportal_geoportal/scaffolds/{create/geoportal/+package+_geoportal → advance_create/{{cookiecutter.project}}/geoportal/{{cookiecutter.package}}_geoportal}/resources.py +4 -3
- c2cgeoportal_geoportal/scaffolds/{create/geoportal/+package+_geoportal/static-ngeo/api/index.js_tmpl → advance_create/{{cookiecutter.project}}/geoportal/{{cookiecutter.package}}_geoportal/static-ngeo/api/index.js} +1 -2
- c2cgeoportal_geoportal/scaffolds/{create/geoportal/+package+_geoportal/static-ngeo/js/+package+module.js_tmpl → advance_create/{{cookiecutter.project}}/geoportal/{{cookiecutter.package}}_geoportal/static-ngeo/js/{{cookiecutter.package}}module.js} +4 -4
- c2cgeoportal_geoportal/scaffolds/{create/geoportal/+package+_geoportal/subscribers.py_tmpl → advance_create/{{cookiecutter.project}}/geoportal/{{cookiecutter.package}}_geoportal/subscribers.py} +1 -3
- c2cgeoportal_geoportal/scaffolds/advance_update/cookiecutter.json +18 -0
- c2cgeoportal_geoportal/scaffolds/{update/geoportal/CONST_Makefile_tmpl → advance_update/{{cookiecutter.project}}/geoportal/CONST_Makefile} +3 -27
- c2cgeoportal_geoportal/scaffolds/create/cookiecutter.json +18 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/.dockerignore +14 -0
- c2cgeoportal_geoportal/scaffolds/create/{+dot+editorconfig → {{cookiecutter.project}}/.editorconfig} +2 -5
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/.github/workflows/main.yaml +57 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/.github/workflows/rebuild.yaml +46 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/.github/workflows/update_l10n.yaml +66 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/.gitignore +16 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/.prettierignore +1 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/.prettierrc.yaml +2 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/Dockerfile +76 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/Makefile +70 -0
- c2cgeoportal_geoportal/scaffolds/create/{README.rst_tmpl → {{cookiecutter.project}}/README.rst} +4 -4
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/build +186 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/ci/config.yaml +22 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/ci/docker-compose-check +25 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/ci/requirements.txt +1 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/docker-compose-db.yaml +26 -0
- c2cgeoportal_geoportal/scaffolds/create/{docker-compose-lib.yaml → {{cookiecutter.project}}/docker-compose-lib.yaml} +165 -22
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/docker-compose-qgis.yaml +23 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/docker-compose.override.sample.yaml +66 -0
- c2cgeoportal_geoportal/scaffolds/create/{docker-compose.yaml → {{cookiecutter.project}}/docker-compose.yaml} +20 -15
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/env.default +101 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/env.project +69 -0
- c2cgeoportal_geoportal/scaffolds/create/{geoportal/vars.yaml_tmpl → {{cookiecutter.project}}/geoportal/vars.yaml} +126 -36
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/geoportal/{{cookiecutter.package}}_geoportal/static/css/mobile.css +0 -0
- c2cgeoportal_geoportal/scaffolds/create/{mapserver → {{cookiecutter.project}}/mapserver}/data/Readme.txt +3 -3
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/mapserver/demo.map.tmpl +224 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/mapserver/mapserver.conf +15 -0
- c2cgeoportal_geoportal/scaffolds/create/{mapserver/mapserver.map.tmpl_tmpl → {{cookiecutter.project}}/mapserver/mapserver.map.tmpl} +9 -18
- c2cgeoportal_geoportal/scaffolds/create/{print/print-apps/+package+ → {{cookiecutter.project}}/print/print-apps/{{cookiecutter.package}}}/A3_Landscape.jrxml +13 -8
- c2cgeoportal_geoportal/scaffolds/create/{print/print-apps/+package+ → {{cookiecutter.project}}/print/print-apps/{{cookiecutter.package}}}/A3_Portrait.jrxml +13 -8
- c2cgeoportal_geoportal/scaffolds/create/{print/print-apps/+package+ → {{cookiecutter.project}}/print/print-apps/{{cookiecutter.package}}}/A4_Landscape.jrxml +13 -8
- c2cgeoportal_geoportal/scaffolds/create/{print/print-apps/+package+ → {{cookiecutter.project}}/print/print-apps/{{cookiecutter.package}}}/A4_Portrait.jrxml +13 -8
- c2cgeoportal_geoportal/scaffolds/create/{print/print-apps/+package+ → {{cookiecutter.project}}/print/print-apps/{{cookiecutter.package}}}/config.yaml.tmpl +11 -4
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/print/print-apps/{{cookiecutter.package}}/localisation.properties +4 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/print/print-apps/{{cookiecutter.package}}/localisation_fr.properties +4 -0
- c2cgeoportal_geoportal/scaffolds/create/{project.yaml_tmpl → {{cookiecutter.project}}/project.yaml} +6 -6
- c2cgeoportal_geoportal/scaffolds/create/{pyproject.toml → {{cookiecutter.project}}/pyproject.toml} +4 -0
- c2cgeoportal_geoportal/scaffolds/create/{qgisserver/pg_service.conf.tmpl_tmpl → {{cookiecutter.project}}/qgisserver/pg_service.conf.tmpl} +2 -2
- c2cgeoportal_geoportal/scaffolds/create/{run_alembic.sh → {{cookiecutter.project}}/run_alembic.sh} +3 -5
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/scripts/db-backup +110 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/scripts/db-restore +114 -0
- c2cgeoportal_geoportal/scaffolds/create/{setup.cfg_tmpl → {{cookiecutter.project}}/setup.cfg} +1 -1
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/spell-ignore-words.txt +5 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/tests/__init__.py +0 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/tests/test_app.py +38 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/tilegeneration/config.yaml.tmpl +195 -0
- c2cgeoportal_geoportal/scaffolds/update/cookiecutter.json +18 -0
- c2cgeoportal_geoportal/scaffolds/update/{{cookiecutter.project}}/.upgrade.yaml +61 -0
- c2cgeoportal_geoportal/scaffolds/update/{{cookiecutter.project}}/CONST_CHANGELOG.txt +273 -0
- c2cgeoportal_geoportal/scaffolds/update/{{cookiecutter.project}}/CONST_create_template/tests/test_testapp.py +48 -0
- c2cgeoportal_geoportal/scaffolds/update/{geoportal → {{cookiecutter.project}}/geoportal}/CONST_config-schema.yaml +64 -17
- c2cgeoportal_geoportal/scaffolds/update/{geoportal/CONST_vars.yaml_tmpl → {{cookiecutter.project}}/geoportal/CONST_vars.yaml} +396 -19
- c2cgeoportal_geoportal/scripts/__init__.py +16 -30
- c2cgeoportal_geoportal/scripts/c2cupgrade.py +272 -234
- c2cgeoportal_geoportal/scripts/create_demo_theme.py +3 -6
- c2cgeoportal_geoportal/scripts/manage_users.py +34 -39
- c2cgeoportal_geoportal/scripts/pcreate.py +310 -0
- c2cgeoportal_geoportal/scripts/theme2fts.py +128 -24
- c2cgeoportal_geoportal/scripts/urllogin.py +19 -11
- c2cgeoportal_geoportal/templates/login.html +88 -84
- c2cgeoportal_geoportal/templates/notlogin.html +59 -59
- c2cgeoportal_geoportal/templates/testi18n.html +6 -8
- c2cgeoportal_geoportal/views/__init__.py +23 -6
- c2cgeoportal_geoportal/views/dev.py +9 -7
- c2cgeoportal_geoportal/views/dynamic.py +56 -19
- c2cgeoportal_geoportal/views/entry.py +85 -24
- c2cgeoportal_geoportal/views/fulltextsearch.py +29 -23
- c2cgeoportal_geoportal/views/geometry_processing.py +17 -9
- c2cgeoportal_geoportal/views/i18n.py +91 -9
- c2cgeoportal_geoportal/views/layers.py +166 -133
- c2cgeoportal_geoportal/views/login.py +161 -93
- c2cgeoportal_geoportal/views/mapserverproxy.py +47 -31
- c2cgeoportal_geoportal/views/memory.py +12 -12
- c2cgeoportal_geoportal/views/ogcproxy.py +52 -30
- c2cgeoportal_geoportal/views/pdfreport.py +30 -26
- c2cgeoportal_geoportal/views/printproxy.py +60 -52
- c2cgeoportal_geoportal/views/profile.py +24 -23
- c2cgeoportal_geoportal/views/proxy.py +88 -72
- c2cgeoportal_geoportal/views/raster.py +37 -26
- c2cgeoportal_geoportal/views/resourceproxy.py +13 -11
- c2cgeoportal_geoportal/views/shortener.py +27 -25
- c2cgeoportal_geoportal/views/theme.py +472 -332
- c2cgeoportal_geoportal/views/tinyowsproxy.py +42 -44
- c2cgeoportal_geoportal/views/vector_tiles.py +80 -0
- {c2cgeoportal_geoportal-2.6.0.dist-info → c2cgeoportal_geoportal-2.8.1.180.dist-info}/METADATA +19 -8
- c2cgeoportal_geoportal-2.8.1.180.dist-info/RECORD +191 -0
- {c2cgeoportal_geoportal-2.6.0.dist-info → c2cgeoportal_geoportal-2.8.1.180.dist-info}/WHEEL +1 -1
- {c2cgeoportal_geoportal-2.6.0.dist-info → c2cgeoportal_geoportal-2.8.1.180.dist-info}/entry_points.txt +3 -0
- tests/__init__.py +10 -5
- tests/test_cachebuster.py +3 -5
- tests/test_caching.py +18 -26
- tests/test_checker.py +1 -3
- tests/test_decimaljson.py +5 -5
- tests/test_headerstween.py +1 -3
- tests/test_i18n.py +2 -2
- tests/test_init.py +16 -20
- tests/test_locale_negociator.py +4 -6
- tests/test_mapserverproxy_route_predicate.py +1 -4
- tests/test_raster.py +15 -17
- tests/test_wmstparsing.py +10 -12
- tests/xmlstr.py +1 -3
- c2cgeoportal_geoportal/scaffolds/__init__.py +0 -227
- c2cgeoportal_geoportal/scaffolds/create/+dot+dockerignore_tmpl +0 -12
- c2cgeoportal_geoportal/scaffolds/create/+dot+github/workflows/main.yaml_tmpl +0 -89
- c2cgeoportal_geoportal/scaffolds/create/+dot+github/workflows/rebuild.yaml_tmpl +0 -78
- c2cgeoportal_geoportal/scaffolds/create/+dot+gitignore_tmpl +0 -16
- c2cgeoportal_geoportal/scaffolds/create/Dockerfile_tmpl +0 -67
- c2cgeoportal_geoportal/scaffolds/create/Makefile +0 -3
- c2cgeoportal_geoportal/scaffolds/create/build_tmpl +0 -167
- c2cgeoportal_geoportal/scaffolds/create/ci/config.yaml_tmpl +0 -23
- c2cgeoportal_geoportal/scaffolds/create/ci/requirements.txt +0 -1
- c2cgeoportal_geoportal/scaffolds/create/ci/trigger +0 -68
- c2cgeoportal_geoportal/scaffolds/create/docker-compose.override.sample.yaml +0 -54
- c2cgeoportal_geoportal/scaffolds/create/env.default_tmpl +0 -67
- c2cgeoportal_geoportal/scaffolds/create/env.project_tmpl +0 -48
- c2cgeoportal_geoportal/scaffolds/create/geoportal/+dot+dockerignore_tmpl +0 -6
- c2cgeoportal_geoportal/scaffolds/create/geoportal/+dot+eslintrc_tmpl +0 -15
- c2cgeoportal_geoportal/scaffolds/create/geoportal/+package+_geoportal/__init__.py_tmpl +0 -58
- c2cgeoportal_geoportal/scaffolds/create/geoportal/+package+_geoportal/models.py_tmpl +0 -10
- c2cgeoportal_geoportal/scaffolds/create/geoportal/+package+_geoportal/static/robot.txt +0 -3
- c2cgeoportal_geoportal/scaffolds/create/geoportal/production.ini_tmpl +0 -106
- c2cgeoportal_geoportal/scaffolds/create/geoportal/tools/extract-messages.js +0 -39
- c2cgeoportal_geoportal/scaffolds/create/geoportal/tsconfig.json_tmpl +0 -9
- c2cgeoportal_geoportal/scaffolds/create/geoportal/webpack.api.js_tmpl +0 -72
- c2cgeoportal_geoportal/scaffolds/create/mapserver/demo.map.tmpl_tmpl +0 -262
- c2cgeoportal_geoportal/scaffolds/create/mapserver/tinyows.xml +0 -36
- c2cgeoportal_geoportal/scaffolds/create/print/print-apps/+package+/config.yaml +0 -168
- c2cgeoportal_geoportal/scaffolds/create/qgisserver/geomapfish.yaml.tmpl_tmpl +0 -16
- c2cgeoportal_geoportal/scaffolds/create/spell-ignore-words.txt +0 -1
- c2cgeoportal_geoportal/scaffolds/create/tilegeneration/config.yaml.tmpl_tmpl +0 -185
- c2cgeoportal_geoportal/scaffolds/create/yamllint.yaml +0 -11
- c2cgeoportal_geoportal/scaffolds/update/+dot+upgrade.yaml_tmpl +0 -181
- c2cgeoportal_geoportal/scaffolds/update/CONST_CHANGELOG.txt_tmpl +0 -454
- c2cgeoportal_geoportal/templates/dynamic.js +0 -21
- c2cgeoportal_geoportal-2.6.0.dist-info/RECORD +0 -173
- /c2cgeoportal_geoportal/{scaffolds/create/geoportal/+package+_geoportal/static/css/desktop.css → py.typed} +0 -0
- /c2cgeoportal_geoportal/scaffolds/{create/geoportal/Makefile_tmpl → advance_create/{{cookiecutter.project}}/geoportal/Makefile} +0 -0
- /c2cgeoportal_geoportal/scaffolds/{create → advance_create/{{cookiecutter.project}}}/geoportal/alembic.ini +0 -0
- /c2cgeoportal_geoportal/scaffolds/{create → advance_create/{{cookiecutter.project}}}/geoportal/language_mapping +0 -0
- /c2cgeoportal_geoportal/scaffolds/{create → advance_create/{{cookiecutter.project}}}/geoportal/lingua-server.cfg +0 -0
- /c2cgeoportal_geoportal/scaffolds/{create → advance_create/{{cookiecutter.project}}}/geoportal/requirements.txt +0 -0
- /c2cgeoportal_geoportal/scaffolds/{create/geoportal/+package+_geoportal → advance_create/{{cookiecutter.project}}/geoportal/{{cookiecutter.package}}_geoportal}/views/__init__.py +0 -0
- /c2cgeoportal_geoportal/scaffolds/create/{geoportal/+package+_geoportal/locale/en/LC_MESSAGES/+package+_geoportal-client.po → {{cookiecutter.project}}/geoportal/{{cookiecutter.package}}_geoportal/locale/en/LC_MESSAGES/{{cookiecutter.package}}_geoportal-client.po} +0 -0
- /c2cgeoportal_geoportal/scaffolds/create/{geoportal/+package+_geoportal/static/css/iframe_api.css → {{cookiecutter.project}}/geoportal/{{cookiecutter.package}}_geoportal/static/css/desktop.css} +0 -0
- /c2cgeoportal_geoportal/scaffolds/create/{geoportal/+package+_geoportal/static/css/mobile.css → {{cookiecutter.project}}/geoportal/{{cookiecutter.package}}_geoportal/static/css/iframe_api.css} +0 -0
- /c2cgeoportal_geoportal/scaffolds/create/{geoportal/+package+_geoportal → {{cookiecutter.project}}/geoportal/{{cookiecutter.package}}_geoportal}/static/images/banner_left.png +0 -0
- /c2cgeoportal_geoportal/scaffolds/create/{geoportal/+package+_geoportal → {{cookiecutter.project}}/geoportal/{{cookiecutter.package}}_geoportal}/static/images/banner_right.png +0 -0
- /c2cgeoportal_geoportal/scaffolds/create/{geoportal/+package+_geoportal → {{cookiecutter.project}}/geoportal/{{cookiecutter.package}}_geoportal}/static/images/blank.png +0 -0
- /c2cgeoportal_geoportal/scaffolds/create/{geoportal/+package+_geoportal → {{cookiecutter.project}}/geoportal/{{cookiecutter.package}}_geoportal}/static/images/markers/marker-blue.png +0 -0
- /c2cgeoportal_geoportal/scaffolds/create/{geoportal/+package+_geoportal → {{cookiecutter.project}}/geoportal/{{cookiecutter.package}}_geoportal}/static/images/markers/marker-gold.png +0 -0
- /c2cgeoportal_geoportal/scaffolds/create/{geoportal/+package+_geoportal → {{cookiecutter.project}}/geoportal/{{cookiecutter.package}}_geoportal}/static/images/markers/marker-green.png +0 -0
- /c2cgeoportal_geoportal/scaffolds/create/{geoportal/+package+_geoportal → {{cookiecutter.project}}/geoportal/{{cookiecutter.package}}_geoportal}/static/images/markers/marker.png +0 -0
- /c2cgeoportal_geoportal/scaffolds/create/{geoportal/+package+_geoportal → {{cookiecutter.project}}/geoportal/{{cookiecutter.package}}_geoportal}/static/robot.txt.tmpl +0 -0
- /c2cgeoportal_geoportal/scaffolds/create/{mapserver → {{cookiecutter.project}}/mapserver}/data/TM_EUROPE_BORDERS-0.3.sql +0 -0
- /c2cgeoportal_geoportal/scaffolds/create/{mapserver → {{cookiecutter.project}}/mapserver}/fonts/Arial.ttf +0 -0
- /c2cgeoportal_geoportal/scaffolds/create/{mapserver → {{cookiecutter.project}}/mapserver}/fonts/Arialbd.ttf +0 -0
- /c2cgeoportal_geoportal/scaffolds/create/{mapserver → {{cookiecutter.project}}/mapserver}/fonts/Arialbi.ttf +0 -0
- /c2cgeoportal_geoportal/scaffolds/create/{mapserver → {{cookiecutter.project}}/mapserver}/fonts/Ariali.ttf +0 -0
- /c2cgeoportal_geoportal/scaffolds/create/{mapserver → {{cookiecutter.project}}/mapserver}/fonts/NotoSans-Bold.ttf +0 -0
- /c2cgeoportal_geoportal/scaffolds/create/{mapserver → {{cookiecutter.project}}/mapserver}/fonts/NotoSans-BoldItalic.ttf +0 -0
- /c2cgeoportal_geoportal/scaffolds/create/{mapserver → {{cookiecutter.project}}/mapserver}/fonts/NotoSans-Italic.ttf +0 -0
- /c2cgeoportal_geoportal/scaffolds/create/{mapserver → {{cookiecutter.project}}/mapserver}/fonts/NotoSans-Regular.ttf +0 -0
- /c2cgeoportal_geoportal/scaffolds/create/{mapserver → {{cookiecutter.project}}/mapserver}/fonts/Verdana.ttf +0 -0
- /c2cgeoportal_geoportal/scaffolds/create/{mapserver → {{cookiecutter.project}}/mapserver}/fonts/Verdanab.ttf +0 -0
- /c2cgeoportal_geoportal/scaffolds/create/{mapserver → {{cookiecutter.project}}/mapserver}/fonts/Verdanai.ttf +0 -0
- /c2cgeoportal_geoportal/scaffolds/create/{mapserver → {{cookiecutter.project}}/mapserver}/fonts/Verdanaz.ttf +0 -0
- /c2cgeoportal_geoportal/scaffolds/create/{mapserver → {{cookiecutter.project}}/mapserver}/fonts.conf +0 -0
- /c2cgeoportal_geoportal/scaffolds/create/{mapserver → {{cookiecutter.project}}/mapserver}/tinyows.xml.tmpl +0 -0
- /c2cgeoportal_geoportal/scaffolds/create/{print/print-apps/+package+ → {{cookiecutter.project}}/print/print-apps/{{cookiecutter.package}}}/legend.jrxml +0 -0
- /c2cgeoportal_geoportal/scaffolds/create/{print/print-apps/+package+ → {{cookiecutter.project}}/print/print-apps/{{cookiecutter.package}}}/logo.png +0 -0
- /c2cgeoportal_geoportal/scaffolds/create/{print/print-apps/+package+ → {{cookiecutter.project}}/print/print-apps/{{cookiecutter.package}}}/north.svg +0 -0
- /c2cgeoportal_geoportal/scaffolds/create/{print/print-apps/+package+ → {{cookiecutter.project}}/print/print-apps/{{cookiecutter.package}}}/results.jrxml +0 -0
- {c2cgeoportal_geoportal-2.6.0.dist-info → c2cgeoportal_geoportal-2.8.1.180.dist-info}/top_level.txt +0 -0
@@ -1,6 +1,4 @@
|
|
1
|
-
#
|
2
|
-
|
3
|
-
# Copyright (c) 2014-2020, Camptocamp SA
|
1
|
+
# Copyright (c) 2014-2023, Camptocamp SA
|
4
2
|
# All rights reserved.
|
5
3
|
|
6
4
|
# Redistribution and use in source and binary forms, with or without
|
@@ -31,19 +29,25 @@
|
|
31
29
|
import gettext
|
32
30
|
import os
|
33
31
|
import sys
|
34
|
-
from argparse import ArgumentParser
|
35
|
-
from typing import Any, Dict, List, Set
|
32
|
+
from argparse import ArgumentParser, Namespace
|
33
|
+
from typing import TYPE_CHECKING, Any, Dict, Iterator, List, Optional, Set
|
36
34
|
|
35
|
+
import pyramid.config
|
37
36
|
import transaction
|
38
37
|
from sqlalchemy import func
|
38
|
+
from sqlalchemy.orm.session import Session
|
39
39
|
|
40
|
-
from c2cgeoportal_geoportal.lib.bashcolor import
|
40
|
+
from c2cgeoportal_geoportal.lib.bashcolor import Color, colorize
|
41
41
|
from c2cgeoportal_geoportal.lib.fulltextsearch import Normalize
|
42
42
|
from c2cgeoportal_geoportal.lib.i18n import LOCALE_PATH
|
43
43
|
from c2cgeoportal_geoportal.scripts import fill_arguments, get_appsettings, get_session
|
44
44
|
|
45
|
+
if TYPE_CHECKING:
|
46
|
+
import c2cgeoportal_commons.models.main
|
47
|
+
|
45
48
|
|
46
|
-
def
|
49
|
+
def get_argparser() -> ArgumentParser:
|
50
|
+
"""Get the argument parser for this script."""
|
47
51
|
parser = ArgumentParser(
|
48
52
|
prog=sys.argv[0],
|
49
53
|
add_help=True,
|
@@ -53,7 +57,7 @@ def main():
|
|
53
57
|
parser.add_argument(
|
54
58
|
"--locale-folder",
|
55
59
|
default=LOCALE_PATH,
|
56
|
-
help="The folder where the locale files are stored (default
|
60
|
+
help=f"The folder where the locale files are stored (default is {LOCALE_PATH})",
|
57
61
|
)
|
58
62
|
parser.add_argument("--interfaces", action="append", help="the interfaces to export")
|
59
63
|
parser.add_argument(
|
@@ -85,7 +89,13 @@ def main():
|
|
85
89
|
)
|
86
90
|
parser.add_argument("--package", help="the application package")
|
87
91
|
fill_arguments(parser)
|
88
|
-
|
92
|
+
return parser
|
93
|
+
|
94
|
+
|
95
|
+
def main() -> None:
|
96
|
+
"""Run the command."""
|
97
|
+
|
98
|
+
options = get_argparser().parse_args()
|
89
99
|
settings = get_appsettings(options)
|
90
100
|
|
91
101
|
with transaction.manager:
|
@@ -95,7 +105,13 @@ def main():
|
|
95
105
|
|
96
106
|
|
97
107
|
class Import:
|
98
|
-
|
108
|
+
"""
|
109
|
+
To import all the themes, layer groups and layers names into the full-text search table.
|
110
|
+
|
111
|
+
Done by interface and by language.
|
112
|
+
"""
|
113
|
+
|
114
|
+
def __init__(self, session: Session, settings: pyramid.config.Configurator, options: Namespace):
|
99
115
|
self.options = options
|
100
116
|
self.imported: Set[Any] = set()
|
101
117
|
package = settings["package"]
|
@@ -106,9 +122,9 @@ class Import:
|
|
106
122
|
|
107
123
|
fts_missing_langs = [lang for lang in self.languages if lang not in self.fts_languages]
|
108
124
|
if fts_missing_langs:
|
109
|
-
msg = "Keys {} are missing in fulltextsearch languages configuration."
|
125
|
+
msg = f"Keys {fts_missing_langs} are missing in fulltextsearch languages configuration."
|
110
126
|
if os.environ.get("IGNORE_I18N_ERRORS", "FALSE") == "TRUE":
|
111
|
-
print(colorize(msg, RED))
|
127
|
+
print(colorize(msg, Color.RED))
|
112
128
|
self.languages = [lang for lang in self.languages if lang in self.fts_languages]
|
113
129
|
else:
|
114
130
|
raise KeyError(KeyError(msg))
|
@@ -122,19 +138,19 @@ class Import:
|
|
122
138
|
)
|
123
139
|
|
124
140
|
self.session = session
|
125
|
-
self.session.execute(FullTextSearch.__table__.delete().where(FullTextSearch.from_theme))
|
141
|
+
self.session.execute(FullTextSearch.__table__.delete().where(FullTextSearch.from_theme))
|
126
142
|
|
127
143
|
self._: Dict[str, gettext.NullTranslations] = {}
|
128
144
|
for lang in self.languages:
|
129
145
|
try:
|
130
146
|
self._[lang] = gettext.translation(
|
131
|
-
"{}_geoportal-client"
|
147
|
+
f"{package}_geoportal-client",
|
132
148
|
options.locale_folder.format(package=package),
|
133
149
|
[lang],
|
134
150
|
)
|
135
151
|
except OSError as e:
|
136
152
|
self._[lang] = gettext.NullTranslations()
|
137
|
-
print("Warning: {} (language: {})"
|
153
|
+
print(f"Warning: {e} (language: {lang})")
|
138
154
|
|
139
155
|
query = self.session.query(Interface)
|
140
156
|
if options.interfaces is not None:
|
@@ -156,7 +172,13 @@ class Import:
|
|
156
172
|
for theme in self.session.query(Theme).all():
|
157
173
|
self._add_theme(theme, role)
|
158
174
|
|
159
|
-
def _add_fts(
|
175
|
+
def _add_fts(
|
176
|
+
self,
|
177
|
+
item: "c2cgeoportal_commons.models.main.TreeItem",
|
178
|
+
interface: "c2cgeoportal_commons.models.main.Interface",
|
179
|
+
action: str,
|
180
|
+
role: Optional["c2cgeoportal_commons.models.main.Role"],
|
181
|
+
) -> None:
|
160
182
|
from c2cgeoportal_commons.models.main import FullTextSearch # pylint: disable=import-outside-toplevel
|
161
183
|
|
162
184
|
key = (
|
@@ -168,7 +190,7 @@ class Import:
|
|
168
190
|
self.imported.add(key)
|
169
191
|
for lang in self.languages:
|
170
192
|
fts = FullTextSearch()
|
171
|
-
fts.label = self.
|
193
|
+
fts.label = self._render_label(item, lang)
|
172
194
|
fts.role = role
|
173
195
|
fts.interface = interface
|
174
196
|
fts.lang = lang
|
@@ -177,14 +199,18 @@ class Import:
|
|
177
199
|
self.fts_languages[lang],
|
178
200
|
" ".join(
|
179
201
|
[self.fts_normalizer(self._[lang].gettext(item.name))]
|
180
|
-
+ [v.strip() for m in item.
|
202
|
+
+ [v.strip() for m in item.get_metadata("searchAlias") for v in m.value.split(",")]
|
181
203
|
),
|
182
204
|
)
|
183
205
|
fts.actions = [{"action": action, "data": item.name}]
|
184
206
|
fts.from_theme = True
|
185
207
|
self.session.add(fts)
|
186
208
|
|
187
|
-
def _add_theme(
|
209
|
+
def _add_theme(
|
210
|
+
self,
|
211
|
+
theme: "c2cgeoportal_commons.models.main.Theme",
|
212
|
+
role: Optional["c2cgeoportal_commons.models.main.Role"] = None,
|
213
|
+
) -> None:
|
188
214
|
fill = False
|
189
215
|
for interface in self.interfaces:
|
190
216
|
if interface in theme.interfaces:
|
@@ -198,13 +224,29 @@ class Import:
|
|
198
224
|
if role is None or theme.id not in self.public_theme[interface.id]:
|
199
225
|
self._add_fts(theme, interface, "add_theme", role)
|
200
226
|
|
201
|
-
def _add_block(
|
227
|
+
def _add_block(
|
228
|
+
self,
|
229
|
+
group: "c2cgeoportal_commons.models.main.LayerGroup",
|
230
|
+
interface: "c2cgeoportal_commons.models.main.Interface",
|
231
|
+
role: Optional["c2cgeoportal_commons.models.main.Role"],
|
232
|
+
) -> bool:
|
202
233
|
return self._add_group(group, interface, self.options.blocks, role)
|
203
234
|
|
204
|
-
def _add_folder(
|
235
|
+
def _add_folder(
|
236
|
+
self,
|
237
|
+
group: "c2cgeoportal_commons.models.main.LayerGroup",
|
238
|
+
interface: "c2cgeoportal_commons.models.main.Interface",
|
239
|
+
role: Optional["c2cgeoportal_commons.models.main.Role"],
|
240
|
+
) -> bool:
|
205
241
|
return self._add_group(group, interface, self.options.folders, role)
|
206
242
|
|
207
|
-
def _add_group(
|
243
|
+
def _add_group(
|
244
|
+
self,
|
245
|
+
group: "c2cgeoportal_commons.models.main.LayerGroup",
|
246
|
+
interface: "c2cgeoportal_commons.models.main.Interface",
|
247
|
+
export: bool,
|
248
|
+
role: Optional["c2cgeoportal_commons.models.main.Role"],
|
249
|
+
) -> bool:
|
208
250
|
from c2cgeoportal_commons.models.main import LayerGroup # pylint: disable=import-outside-toplevel
|
209
251
|
|
210
252
|
fill = False
|
@@ -224,13 +266,20 @@ class Import:
|
|
224
266
|
return fill
|
225
267
|
|
226
268
|
@staticmethod
|
227
|
-
def _layer_visible(
|
269
|
+
def _layer_visible(
|
270
|
+
layer: "c2cgeoportal_commons.models.main.Layer", role: "c2cgeoportal_commons.models.main.Role"
|
271
|
+
) -> bool:
|
228
272
|
for restrictionarea in layer.restrictionareas:
|
229
273
|
if role in restrictionarea.roles:
|
230
274
|
return True
|
231
275
|
return False
|
232
276
|
|
233
|
-
def _add_layer(
|
277
|
+
def _add_layer(
|
278
|
+
self,
|
279
|
+
layer: "c2cgeoportal_commons.models.main.Layer",
|
280
|
+
interface: "c2cgeoportal_commons.models.main.Interface",
|
281
|
+
role: Optional["c2cgeoportal_commons.models.main.Role"],
|
282
|
+
) -> bool:
|
234
283
|
if role is None:
|
235
284
|
fill = layer.public and interface in layer.interfaces
|
236
285
|
else:
|
@@ -240,3 +289,58 @@ class Import:
|
|
240
289
|
self._add_fts(layer, interface, "add_layer", role)
|
241
290
|
|
242
291
|
return fill
|
292
|
+
|
293
|
+
def _render_label(
|
294
|
+
self,
|
295
|
+
item: "c2cgeoportal_commons.models.main.TreeItem",
|
296
|
+
lang: str,
|
297
|
+
) -> str:
|
298
|
+
patterns = item.get_metadata("searchLabelPattern")
|
299
|
+
if not patterns:
|
300
|
+
return self._[lang].gettext(item.name)
|
301
|
+
pattern = patterns[0]
|
302
|
+
assert isinstance(pattern.value, str)
|
303
|
+
tree_paths = list(self._get_paths(item))
|
304
|
+
# Remove paths where the last element isn't a theme
|
305
|
+
tree_paths = [p for p in tree_paths if p[-1].item_type == "theme"]
|
306
|
+
result = None
|
307
|
+
current_result = None
|
308
|
+
if tree_paths:
|
309
|
+
for path in tree_paths:
|
310
|
+
if len(path) == 2:
|
311
|
+
current_result = pattern.value.format(
|
312
|
+
name=self._[lang].gettext(item.name),
|
313
|
+
theme=self._[lang].gettext(path[-1].name),
|
314
|
+
parent=self._[lang].gettext(path[1].name),
|
315
|
+
)
|
316
|
+
elif len(path) > 2:
|
317
|
+
current_result = pattern.value.format(
|
318
|
+
name=self._[lang].gettext(item.name),
|
319
|
+
theme=self._[lang].gettext(path[-1].name),
|
320
|
+
parent=self._[lang].gettext(path[1].name),
|
321
|
+
block=self._[lang].gettext(path[-2].name),
|
322
|
+
)
|
323
|
+
if result and current_result != result:
|
324
|
+
sys.stderr.write(
|
325
|
+
f"WARNING: the item {item.name} (id: {item.id}) has a label pattern and inconsistent "
|
326
|
+
f"multiple parents\n"
|
327
|
+
)
|
328
|
+
return self._[lang].gettext(item.name)
|
329
|
+
result = current_result
|
330
|
+
return result or pattern.value.format(
|
331
|
+
name=self._[lang].gettext(item.name),
|
332
|
+
theme=self._[lang].gettext(item.name),
|
333
|
+
)
|
334
|
+
|
335
|
+
def _get_paths(
|
336
|
+
self,
|
337
|
+
item: "c2cgeoportal_commons.models.main.TreeItem",
|
338
|
+
) -> Iterator[List["c2cgeoportal_commons.models.main.TreeItem"]]:
|
339
|
+
if item is None:
|
340
|
+
return
|
341
|
+
if any(item.parents):
|
342
|
+
for parent in item.parents:
|
343
|
+
for path in self._get_paths(parent):
|
344
|
+
yield [item, *path]
|
345
|
+
else:
|
346
|
+
yield [item]
|
@@ -1,6 +1,4 @@
|
|
1
|
-
#
|
2
|
-
|
3
|
-
# Copyright (c) 2012-2021, Camptocamp SA
|
1
|
+
# Copyright (c) 2012-2024, Camptocamp SA
|
4
2
|
# All rights reserved.
|
5
3
|
|
6
4
|
# Redistribution and use in source and binary forms, with or without
|
@@ -32,41 +30,51 @@ import binascii
|
|
32
30
|
import json
|
33
31
|
import sys
|
34
32
|
import time
|
33
|
+
from typing import cast
|
35
34
|
|
36
35
|
from Crypto.Cipher import AES # nosec
|
36
|
+
from Crypto.Cipher.ChaCha20_Poly1305 import ChaCha20Poly1305Cipher # nosec
|
37
37
|
|
38
38
|
from c2cgeoportal_geoportal.scripts import fill_arguments, get_appsettings
|
39
39
|
|
40
40
|
|
41
|
-
def create_token(aeskey, user, password, valid):
|
41
|
+
def create_token(aeskey: str, user: str, password: str, valid: bool) -> str:
|
42
|
+
"""Create the authenticated URL token."""
|
42
43
|
auth = {"u": user, "p": password, "t": int(time.time()) + valid * 3600 * 24}
|
43
44
|
|
44
45
|
if aeskey is None:
|
45
46
|
print("urllogin is not configured")
|
46
47
|
sys.exit(1)
|
47
|
-
cipher = AES.new(aeskey.encode("ascii"), AES.MODE_EAX)
|
48
|
+
cipher = cast(ChaCha20Poly1305Cipher, AES.new(aeskey.encode("ascii"), AES.MODE_EAX))
|
48
49
|
data = json.dumps(auth)
|
49
50
|
mod_len = len(data) % 16
|
50
51
|
if mod_len != 0:
|
51
52
|
data += "".join([" " for i in range(16 - mod_len)])
|
52
|
-
ciphertext, tag = cipher.encrypt_and_digest(data.encode("utf-8"))
|
53
|
-
return binascii.hexlify(cipher.nonce + tag + ciphertext).decode("ascii")
|
53
|
+
ciphertext, tag = cipher.encrypt_and_digest(data.encode("utf-8"))
|
54
|
+
return binascii.hexlify(cipher.nonce + tag + ciphertext).decode("ascii")
|
55
|
+
|
54
56
|
|
57
|
+
def get_argparser() -> argparse.ArgumentParser:
|
58
|
+
"""Get the argument parser for this script."""
|
55
59
|
|
56
|
-
def main():
|
57
60
|
parser = argparse.ArgumentParser(description="Generate an auth token")
|
58
|
-
fill_arguments(parser)
|
61
|
+
fill_arguments(parser, use_attribute=True)
|
59
62
|
parser.add_argument("user", help="The username")
|
60
63
|
parser.add_argument("password", help="The password")
|
61
64
|
parser.add_argument("valid", type=int, default=1, nargs="?", help="Is valid for, in days")
|
65
|
+
return parser
|
66
|
+
|
67
|
+
|
68
|
+
def main() -> None:
|
69
|
+
"""Run the command."""
|
62
70
|
|
63
|
-
args =
|
71
|
+
args = get_argparser().parse_args()
|
64
72
|
settings = get_appsettings(args)
|
65
73
|
urllogin = settings.get("urllogin", {})
|
66
74
|
aeskey = urllogin.get("aes_key")
|
67
75
|
auth_enc = create_token(aeskey, args.user, args.password, args.valid)
|
68
76
|
|
69
|
-
print(
|
77
|
+
print(f"Use: auth={auth_enc}")
|
70
78
|
|
71
79
|
|
72
80
|
if __name__ == "__main__":
|
@@ -1,86 +1,90 @@
|
|
1
|
-
<!DOCTYPE
|
1
|
+
<!DOCTYPE html>
|
2
2
|
<html lang="${lang}">
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
3
|
+
<head>
|
4
|
+
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
|
5
|
+
<meta name="Content-Language" content="${lang}" />
|
6
|
+
<title>${_('Login to Geoportal Application')}</title>
|
7
|
+
<style>
|
8
|
+
body {
|
9
|
+
background: #444444;
|
10
|
+
font-family: Helvetica, Arial, sans-serif;
|
11
|
+
}
|
12
|
+
* {
|
13
|
+
padding: 0;
|
14
|
+
margin: 0;
|
15
|
+
}
|
16
|
+
div#content {
|
17
|
+
background: #f5f5ef;
|
18
|
+
padding: 20px 30px;
|
19
|
+
width: 330px;
|
20
|
+
margin: 100px auto auto auto;
|
21
|
+
-webkit-border-radius: 10px;
|
22
|
+
border-radius: 10px;
|
23
|
+
}
|
24
|
+
td.field {
|
25
|
+
padding-top: 20px;
|
26
|
+
}
|
27
|
+
td.field p {
|
28
|
+
font-weight: bold;
|
29
|
+
color: #444444;
|
30
|
+
font-size: 80%;
|
31
|
+
margin-bottom: 3px;
|
32
|
+
}
|
33
|
+
td.field input {
|
34
|
+
-webkit-border-radius: 2px;
|
35
|
+
border-radius: 2px;
|
36
|
+
border: solid 1px #444444;
|
37
|
+
padding: 3px 6px;
|
38
|
+
font-size: 110%;
|
39
|
+
width: 250px;
|
40
|
+
}
|
41
|
+
td.buttons {
|
42
|
+
padding-top: 25px;
|
43
|
+
padding-bottom: 20px;
|
44
|
+
text-align: right;
|
45
|
+
}
|
46
|
+
td.buttons input {
|
47
|
+
padding: 1px 6px;
|
48
|
+
font-weight: bold;
|
49
|
+
color: #444444;
|
50
|
+
}
|
51
|
+
</style>
|
52
|
+
</head>
|
53
|
+
<body>
|
54
|
+
<div id="content">
|
55
|
+
<form method="POST" id="loginForm" action="${request.route_url('login', _query=login_params)}">
|
56
|
+
<table style="margin-left: auto; margin-right: auto">
|
57
|
+
<tbody>
|
58
|
+
<tr>
|
59
|
+
<td class="field">
|
60
|
+
<p>
|
61
|
+
<label for="email">${_('Username')}</label>
|
62
|
+
</p>
|
63
|
+
<input id="login" name="login" type="text" />
|
64
|
+
</td>
|
65
|
+
</tr>
|
66
|
+
<tr>
|
67
|
+
<td class="field">
|
68
|
+
<p>
|
69
|
+
<label for="password">${_('Password')}</label>
|
70
|
+
</p>
|
71
|
+
<input id="password" name="password" type="password" />
|
72
|
+
</td>
|
73
|
+
</tr>
|
74
|
+
% if two_fa:
|
75
|
+
<tr>
|
76
|
+
<td class="field">
|
77
|
+
<p><label for="otp">${_('Authentication code')}</label></p>
|
78
|
+
<input id="otp" name="otp" type="text" autocomplete="off" />
|
79
|
+
</td>
|
80
|
+
</tr>
|
81
|
+
% endif
|
82
|
+
<tr>
|
83
|
+
<td class="buttons"><input tabindex="4" value="${_('Login')}" type="submit" /></td>
|
84
|
+
</tr>
|
85
|
+
</tbody>
|
86
|
+
</table>
|
87
|
+
</form>
|
88
|
+
</div>
|
89
|
+
</body>
|
86
90
|
</html>
|
@@ -1,62 +1,62 @@
|
|
1
1
|
<!DOCTYPE html>
|
2
2
|
<html lang="${lang}">
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
3
|
+
<head>
|
4
|
+
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
|
5
|
+
<meta name="Content-Language" content="${lang}" />
|
6
|
+
<title>${_('Login to Geoportal Application')}</title>
|
7
|
+
<style>
|
8
|
+
body {
|
9
|
+
background: #444444;
|
10
|
+
font-family: Helvetica, Arial, sans-serif;
|
11
|
+
}
|
12
|
+
* {
|
13
|
+
padding: 0;
|
14
|
+
margin: 0;
|
15
|
+
}
|
16
|
+
div#content {
|
17
|
+
background: #f5f5ef;
|
18
|
+
padding: 20px 30px;
|
19
|
+
width: 330px;
|
20
|
+
margin: 100px auto auto auto;
|
21
|
+
-webkit-border-radius: 10px;
|
22
|
+
border-radius: 10px;
|
23
|
+
}
|
24
|
+
td.field {
|
25
|
+
padding-top: 20px;
|
26
|
+
}
|
27
|
+
td.field p {
|
28
|
+
font-weight: bold;
|
29
|
+
color: #444444;
|
30
|
+
font-size: 80%;
|
31
|
+
margin-bottom: 3px;
|
32
|
+
}
|
33
|
+
td.field input {
|
34
|
+
-webkit-border-radius: 2px;
|
35
|
+
border-radius: 2px;
|
36
|
+
border: solid 1px #444444;
|
37
|
+
padding: 3px 6px;
|
38
|
+
font-size: 110%;
|
39
|
+
width: 250px;
|
40
|
+
}
|
41
|
+
td.buttons {
|
42
|
+
padding-top: 25px;
|
43
|
+
padding-bottom: 20px;
|
44
|
+
text-align: right;
|
45
|
+
}
|
46
|
+
td.buttons input {
|
47
|
+
padding: 1px 6px;
|
48
|
+
font-weight: bold;
|
49
|
+
color: #444444;
|
50
|
+
}
|
51
|
+
</style>
|
52
|
+
</head>
|
53
|
+
<body>
|
54
|
+
<div id="content">
|
55
|
+
<p>
|
56
|
+
${_('The user is not correctly initialized you should login in the main application and try '
|
57
|
+
'again.')}
|
58
|
+
</p>
|
59
|
+
<p><a href="${request.route_url('base')}">${_('Main application')}</a></p>
|
60
|
+
</div>
|
61
|
+
</body>
|
62
62
|
</html>
|
@@ -1,14 +1,12 @@
|
|
1
1
|
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
-
<!DOCTYPE html
|
3
|
-
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
4
|
-
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
2
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
5
3
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
6
|
-
<head>
|
7
|
-
<meta charset="UTF-8"
|
4
|
+
<head>
|
5
|
+
<meta charset="UTF-8" />
|
8
6
|
<title>${title}</title>
|
9
|
-
</head>
|
10
|
-
<body>
|
7
|
+
</head>
|
8
|
+
<body>
|
11
9
|
<h1>${title}</h1>
|
12
10
|
<p>${_('my translation test')}</p>
|
13
|
-
</body>
|
11
|
+
</body>
|
14
12
|
</html>
|