c2cgeoportal-geoportal 2.9.0.227__py3-none-any.whl → 2.9.0.352__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 +4 -1
- c2cgeoportal_geoportal/lib/__init__.py +1 -1
- c2cgeoportal_geoportal/lib/bashcolor.py +1 -1
- c2cgeoportal_geoportal/lib/cacheversion.py +1 -1
- c2cgeoportal_geoportal/lib/caching.py +1 -1
- c2cgeoportal_geoportal/lib/check_collector.py +1 -1
- c2cgeoportal_geoportal/lib/checker.py +1 -1
- c2cgeoportal_geoportal/lib/dbreflection.py +1 -1
- c2cgeoportal_geoportal/lib/filter_capabilities.py +1 -1
- c2cgeoportal_geoportal/lib/fulltextsearch.py +1 -1
- c2cgeoportal_geoportal/lib/functionality.py +1 -1
- c2cgeoportal_geoportal/lib/headers.py +1 -1
- c2cgeoportal_geoportal/lib/i18n.py +1 -1
- c2cgeoportal_geoportal/lib/layers.py +1 -1
- c2cgeoportal_geoportal/lib/loader.py +1 -1
- c2cgeoportal_geoportal/lib/metrics.py +1 -1
- c2cgeoportal_geoportal/lib/oauth2.py +1 -1
- c2cgeoportal_geoportal/lib/oidc.py +77 -59
- c2cgeoportal_geoportal/lib/wmstparsing.py +1 -1
- c2cgeoportal_geoportal/lib/xsd.py +1 -1
- c2cgeoportal_geoportal/resources.py +1 -1
- c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/Dockerfile +1 -1
- c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/Makefile +1 -1
- c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/gunicorn.conf.py +1 -1
- c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/language_mapping +1 -0
- c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/webpack.apps.js +11 -1
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/Dockerfile +1 -1
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/Makefile +3 -3
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/build +2 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/ci/requirements.txt +2 -2
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/docker-compose-lib.yaml +2 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/env.project +1 -1
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/geoportal/vars.yaml +2 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/scripts/db-backup +1 -1
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/scripts/db-restore +1 -1
- c2cgeoportal_geoportal/scaffolds/update/{{cookiecutter.project}}/CONST_CHANGELOG.txt +6 -5
- c2cgeoportal_geoportal/scaffolds/update/{{cookiecutter.project}}/geoportal/CONST_vars.yaml +6 -3
- c2cgeoportal_geoportal/scripts/__init__.py +1 -1
- c2cgeoportal_geoportal/scripts/create_demo_theme.py +1 -1
- c2cgeoportal_geoportal/scripts/manage_users.py +1 -1
- c2cgeoportal_geoportal/scripts/urllogin.py +1 -1
- c2cgeoportal_geoportal/views/__init__.py +1 -1
- c2cgeoportal_geoportal/views/dev.py +1 -1
- c2cgeoportal_geoportal/views/entry.py +4 -2
- c2cgeoportal_geoportal/views/geometry_processing.py +1 -1
- c2cgeoportal_geoportal/views/i18n.py +1 -1
- c2cgeoportal_geoportal/views/layers.py +1 -1
- c2cgeoportal_geoportal/views/login.py +12 -4
- c2cgeoportal_geoportal/views/mapserverproxy.py +1 -1
- c2cgeoportal_geoportal/views/memory.py +1 -1
- c2cgeoportal_geoportal/views/ogcproxy.py +1 -1
- c2cgeoportal_geoportal/views/pdfreport.py +1 -1
- c2cgeoportal_geoportal/views/printproxy.py +1 -1
- c2cgeoportal_geoportal/views/profile.py +1 -1
- c2cgeoportal_geoportal/views/raster.py +1 -1
- c2cgeoportal_geoportal/views/resourceproxy.py +1 -1
- c2cgeoportal_geoportal/views/shortener.py +8 -2
- c2cgeoportal_geoportal/views/theme.py +5 -0
- c2cgeoportal_geoportal/views/vector_tiles.py +1 -1
- {c2cgeoportal_geoportal-2.9.0.227.dist-info → c2cgeoportal_geoportal-2.9.0.352.dist-info}/METADATA +6 -1
- {c2cgeoportal_geoportal-2.9.0.227.dist-info → c2cgeoportal_geoportal-2.9.0.352.dist-info}/RECORD +74 -74
- tests/test_cachebuster.py +1 -1
- tests/test_checker.py +1 -1
- tests/test_decimaljson.py +1 -1
- tests/test_headerstween.py +1 -1
- tests/test_init.py +1 -1
- tests/test_locale_negociator.py +1 -1
- tests/test_mapserverproxy_route_predicate.py +1 -1
- tests/test_raster.py +1 -1
- tests/test_wmstparsing.py +1 -1
- tests/xmlstr.py +1 -1
- {c2cgeoportal_geoportal-2.9.0.227.dist-info → c2cgeoportal_geoportal-2.9.0.352.dist-info}/WHEEL +0 -0
- {c2cgeoportal_geoportal-2.9.0.227.dist-info → c2cgeoportal_geoportal-2.9.0.352.dist-info}/entry_points.txt +0 -0
- {c2cgeoportal_geoportal-2.9.0.227.dist-info → c2cgeoportal_geoportal-2.9.0.352.dist-info}/top_level.txt +0 -0
|
@@ -416,6 +416,9 @@ def create_get_user_from_request(
|
|
|
416
416
|
if access_token_expires < datetime.datetime.now(datetime.timezone.utc):
|
|
417
417
|
if user_info_remember["refresh_token_expires"] is None:
|
|
418
418
|
return None
|
|
419
|
+
refresh_token = request.cookies.get("refresh_token")
|
|
420
|
+
if refresh_token is None:
|
|
421
|
+
return None
|
|
419
422
|
refresh_token_expires = dateutil.parser.isoparse(
|
|
420
423
|
user_info_remember["refresh_token_expires"]
|
|
421
424
|
)
|
|
@@ -432,7 +435,7 @@ def create_get_user_from_request(
|
|
|
432
435
|
return None
|
|
433
436
|
token_response = oidc.get_oidc_client(
|
|
434
437
|
request, request.host
|
|
435
|
-
).exchange_refresh_token(
|
|
438
|
+
).exchange_refresh_token(refresh_token)
|
|
436
439
|
user_info_remember = oidc.OidcRemember(request).remember(
|
|
437
440
|
token_response, request.host
|
|
438
441
|
)
|
|
@@ -32,7 +32,6 @@ import string
|
|
|
32
32
|
from typing import TYPE_CHECKING, Any, NamedTuple, Optional, TypedDict, Union
|
|
33
33
|
|
|
34
34
|
import pyramid.request
|
|
35
|
-
import pyramid.response
|
|
36
35
|
import simple_openid_connect.client
|
|
37
36
|
import simple_openid_connect.data
|
|
38
37
|
from pyramid.httpexceptions import HTTPBadRequest, HTTPInternalServerError, HTTPUnauthorized
|
|
@@ -88,9 +87,7 @@ class OidcRememberObject(TypedDict):
|
|
|
88
87
|
The JSON object that is stored in a cookie to remember the user.
|
|
89
88
|
"""
|
|
90
89
|
|
|
91
|
-
access_token: str
|
|
92
90
|
access_token_expires: str
|
|
93
|
-
refresh_token: str | None
|
|
94
91
|
refresh_token_expires: str | None
|
|
95
92
|
username: str | None
|
|
96
93
|
display_name: str | None
|
|
@@ -171,62 +168,66 @@ def get_user_from_remember(
|
|
|
171
168
|
assert models.DBSession is not None
|
|
172
169
|
|
|
173
170
|
user: static.User | DynamicUser | None
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
"
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
171
|
+
try:
|
|
172
|
+
username = remember_object["username"]
|
|
173
|
+
assert username is not None
|
|
174
|
+
email = remember_object["email"]
|
|
175
|
+
assert email is not None
|
|
176
|
+
display_name = remember_object["display_name"] or email
|
|
177
|
+
|
|
178
|
+
openid_connect_configuration = request.registry.settings.get("authentication", {}).get(
|
|
179
|
+
"openid_connect", {}
|
|
180
|
+
)
|
|
181
|
+
provide_roles = openid_connect_configuration.get("provide_roles", False)
|
|
182
|
+
if provide_roles is False:
|
|
183
|
+
user_query = models.DBSession.query(static.User)
|
|
184
|
+
match_field = openid_connect_configuration.get("match_field", "username")
|
|
185
|
+
if match_field == "username":
|
|
186
|
+
user_query = user_query.filter_by(username=username)
|
|
187
|
+
elif match_field == "email":
|
|
188
|
+
user_query = user_query.filter_by(email=email)
|
|
189
|
+
else:
|
|
190
|
+
raise HTTPInternalServerError(
|
|
191
|
+
f"Unknown match_field: '{match_field}', allowed values are 'username' and 'email'"
|
|
192
|
+
)
|
|
193
|
+
user = user_query.one_or_none()
|
|
194
|
+
if update_create_user is True:
|
|
195
|
+
if user is not None:
|
|
196
|
+
for field in openid_connect_configuration.get("update_fields", []):
|
|
197
|
+
if field == "username":
|
|
198
|
+
user.username = username
|
|
199
|
+
elif field == "display_name":
|
|
200
|
+
user.display_name = display_name
|
|
201
|
+
elif field == "email":
|
|
202
|
+
user.email = email
|
|
203
|
+
else:
|
|
204
|
+
raise HTTPInternalServerError(
|
|
205
|
+
f"Unknown update_field: '{field}', allowed values are 'username', 'display_name' and 'email'"
|
|
206
|
+
)
|
|
207
|
+
elif openid_connect_configuration.get("create_user", False) is True:
|
|
208
|
+
user = static.User(username=username, email=email, display_name=display_name)
|
|
209
|
+
models.DBSession.add(user)
|
|
191
210
|
else:
|
|
192
|
-
|
|
193
|
-
|
|
211
|
+
roles = []
|
|
212
|
+
role_names = remember_object.get("roles", [])
|
|
213
|
+
if role_names:
|
|
214
|
+
query = models.DBSession.query(main.Role).filter(main.Role.name.in_(role_names))
|
|
215
|
+
roles = query.all()
|
|
216
|
+
user = DynamicUser(
|
|
217
|
+
id=-1,
|
|
218
|
+
username=username,
|
|
219
|
+
display_name=display_name,
|
|
220
|
+
email=email,
|
|
221
|
+
settings_role=(
|
|
222
|
+
models.DBSession.query(main.Role).filter_by(name=remember_object["settings_role"]).first()
|
|
223
|
+
if remember_object.get("settings_role") is not None
|
|
224
|
+
else None
|
|
225
|
+
),
|
|
226
|
+
roles=roles,
|
|
194
227
|
)
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
for field in openid_connect_configuration.get("update_fields", []):
|
|
199
|
-
if field == "username":
|
|
200
|
-
user.username = username
|
|
201
|
-
elif field == "display_name":
|
|
202
|
-
user.display_name = display_name
|
|
203
|
-
elif field == "email":
|
|
204
|
-
user.email = email
|
|
205
|
-
else:
|
|
206
|
-
raise HTTPInternalServerError(
|
|
207
|
-
f"Unknown update_field: '{field}', allowed values are 'username', 'display_name' and 'email'"
|
|
208
|
-
)
|
|
209
|
-
elif openid_connect_configuration.get("create_user", False) is True:
|
|
210
|
-
user = static.User(username=username, email=email, display_name=display_name)
|
|
211
|
-
models.DBSession.add(user)
|
|
212
|
-
else:
|
|
213
|
-
roles = []
|
|
214
|
-
role_names = remember_object.get("roles", [])
|
|
215
|
-
if role_names:
|
|
216
|
-
query = models.DBSession.query(main.Role).filter(main.Role.name.in_(role_names))
|
|
217
|
-
roles = query.all()
|
|
218
|
-
user = DynamicUser(
|
|
219
|
-
id=-1,
|
|
220
|
-
username=username,
|
|
221
|
-
display_name=display_name,
|
|
222
|
-
email=email,
|
|
223
|
-
settings_role=(
|
|
224
|
-
models.DBSession.query(main.Role).filter_by(name=remember_object["settings_role"]).first()
|
|
225
|
-
if remember_object.get("settings_role") is not None
|
|
226
|
-
else None
|
|
227
|
-
),
|
|
228
|
-
roles=roles,
|
|
229
|
-
)
|
|
228
|
+
except KeyError:
|
|
229
|
+
_LOG.exception("Missing field in remember object")
|
|
230
|
+
return None
|
|
230
231
|
return user
|
|
231
232
|
|
|
232
233
|
|
|
@@ -266,13 +267,30 @@ class OidcRemember:
|
|
|
266
267
|
raise HTTPUnauthorized("See server logs for details")
|
|
267
268
|
|
|
268
269
|
openid_connect = self.authentication_settings.get("openid_connect", {})
|
|
270
|
+
self.request.response.set_cookie(
|
|
271
|
+
"access_token",
|
|
272
|
+
token_response.access_token,
|
|
273
|
+
max_age=token_response.expires_in,
|
|
274
|
+
secure=True,
|
|
275
|
+
httponly=True,
|
|
276
|
+
samesite="Lax",
|
|
277
|
+
domain=self.request.domain,
|
|
278
|
+
)
|
|
279
|
+
if token_response.refresh_expires_in is not None:
|
|
280
|
+
self.request.response.set_cookie(
|
|
281
|
+
"refresh_token",
|
|
282
|
+
token_response.refresh_token,
|
|
283
|
+
max_age=token_response.refresh_expires_in,
|
|
284
|
+
secure=True,
|
|
285
|
+
httponly=True,
|
|
286
|
+
samesite="Lax",
|
|
287
|
+
domain=self.request.domain,
|
|
288
|
+
)
|
|
269
289
|
remember_object: OidcRememberObject = {
|
|
270
|
-
"access_token": token_response.access_token,
|
|
271
290
|
"access_token_expires": (
|
|
272
291
|
datetime.datetime.now(datetime.timezone.utc)
|
|
273
292
|
+ datetime.timedelta(seconds=token_response.expires_in)
|
|
274
293
|
).isoformat(),
|
|
275
|
-
"refresh_token": token_response.refresh_token,
|
|
276
294
|
"refresh_token_expires": (
|
|
277
295
|
None
|
|
278
296
|
if token_response.refresh_expires_in is None
|
c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/Dockerfile
CHANGED
|
@@ -19,7 +19,7 @@ RUN make build
|
|
|
19
19
|
RUN mv webpack.apps.js webpack.apps.js.tmpl
|
|
20
20
|
|
|
21
21
|
ENTRYPOINT [ "/usr/bin/eval-templates" ]
|
|
22
|
-
CMD [ "webpack", "serve", "--open", "--mode=development"
|
|
22
|
+
CMD [ "webpack", "serve", "--open", "--mode=development" ]
|
|
23
23
|
|
|
24
24
|
###############################################################################
|
|
25
25
|
|
c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/webpack.apps.js
CHANGED
|
@@ -42,10 +42,20 @@ module.exports = {
|
|
|
42
42
|
publicPath: devServer ? '${VISIBLE_ENTRY_POINT}dev/' : '.__ENTRY_POINT__static-ngeo/',
|
|
43
43
|
},
|
|
44
44
|
devServer: {
|
|
45
|
-
|
|
45
|
+
devMiddleware: {
|
|
46
|
+
publicPath: '${VISIBLE_WEB_PROTOCOL}://${VISIBLE_WEB_HOST}${VISIBLE_ENTRY_POINT}dev/',
|
|
47
|
+
},
|
|
46
48
|
port: 8080,
|
|
47
49
|
host: 'webpack_dev_server',
|
|
48
50
|
hot: true,
|
|
51
|
+
compress: false,
|
|
52
|
+
client: {
|
|
53
|
+
webSocketURL: {
|
|
54
|
+
hostname: 'localhost',
|
|
55
|
+
port: 8080,
|
|
56
|
+
protocol: 'ws',
|
|
57
|
+
},
|
|
58
|
+
},
|
|
49
59
|
},
|
|
50
60
|
entry: entry,
|
|
51
61
|
plugins: plugins,
|
|
@@ -54,7 +54,7 @@ RUN \
|
|
|
54
54
|
&& mkdir --parent /usr/local/tomcat/webapps/ROOT/ \
|
|
55
55
|
&& mvif /tmp/config/print /tmp/config/print/print-apps /usr/local/tomcat/webapps/ROOT/ \
|
|
56
56
|
&& mv /tmp/config/geoportal/{{cookiecutter.package}}_geoportal/ /etc/geomapfish/ \
|
|
57
|
-
&& (
|
|
57
|
+
&& (mv /tmp/config/geoportal/* /etc/geomapfish/ || true) \
|
|
58
58
|
&& chmod g+w -R \
|
|
59
59
|
/etc/geomapfish \
|
|
60
60
|
/etc/mapserver \
|
|
@@ -27,14 +27,14 @@ checks: prospector eslint ## Runs the checks
|
|
|
27
27
|
|
|
28
28
|
.PHONY: prospector
|
|
29
29
|
prospector: ## Runs the Prospector checks
|
|
30
|
-
docker compose run --entrypoint= --
|
|
30
|
+
docker compose run --entrypoint= --rm --volume=$(CURDIR)/geoportal:/app geoportal \
|
|
31
31
|
prospector --output-format=pylint --die-on-tool-error
|
|
32
32
|
|
|
33
33
|
.PHONY: eslint
|
|
34
34
|
eslint: ## Runs the eslint checks
|
|
35
|
-
docker compose run --entrypoint= --
|
|
35
|
+
docker compose run --entrypoint= --rm --volume=$(CURDIR)/geoportal:/app geoportal \
|
|
36
36
|
eslint $(find {{cookiecutter.package}} -type f -name '*.js' -print 2> /dev/null)
|
|
37
|
-
docker compose run --entrypoint= --
|
|
37
|
+
docker compose run --entrypoint= --rm --volume=$(CURDIR)/geoportal:/app geoportal \
|
|
38
38
|
eslint $(find {{cookiecutter.package}} -type f -name '*.ts' -print 2> /dev/null)
|
|
39
39
|
|
|
40
40
|
.PHONY: qgis
|
|
@@ -149,6 +149,8 @@ def main() -> None:
|
|
|
149
149
|
env = {"DOCKER_BUILDKIT": "1", "COMPOSE_DOCKER_CLI_BUILD": "1"}
|
|
150
150
|
env.update(os.environ)
|
|
151
151
|
run(args, docker_compose_build_cmd, env=env) # nosec
|
|
152
|
+
except KeyboardInterrupt:
|
|
153
|
+
sys.exit(1)
|
|
152
154
|
except subprocess.CalledProcessError as e:
|
|
153
155
|
print("Error with command: " + " ".join(print_args))
|
|
154
156
|
sys.exit(e.returncode)
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
c2cciutils[checks,publish]==1.7.
|
|
2
|
-
pre-commit==4.0
|
|
1
|
+
c2cciutils[checks,publish]==1.7.5
|
|
2
|
+
pre-commit==4.3.0
|
|
@@ -65,7 +65,7 @@ C2C_AUTH_GITHUB_CLIENT_ID=210aefe26259de1e9532
|
|
|
65
65
|
#C2C_AUTH_GITHUB_CLIENT_SECRET=<github OAuth application client secret>
|
|
66
66
|
C2C_AUTH_GITHUB_SCOPE=repo
|
|
67
67
|
#C2C_AUTH_GITHUB_SECRET=<secret>
|
|
68
|
-
#C2C_AUTH_GITHUB_PROXY_URL=https://
|
|
68
|
+
#C2C_AUTH_GITHUB_PROXY_URL=https://geoservices.camptocamp.com/redirect
|
|
69
69
|
C2C_USE_SESSION=true
|
|
70
70
|
|
|
71
71
|
# For multi-tenant
|
|
@@ -65,10 +65,7 @@ Changes to apply
|
|
|
65
65
|
be sure that you import the `gmf/controller/<interface>.scss` at the top of the file, before you
|
|
66
66
|
can't use the variables.
|
|
67
67
|
|
|
68
|
-
2.
|
|
69
|
-
`env.project` should be uncomment and filled with a strong secret, e.g. with `pwgen --secure 16`.
|
|
70
|
-
|
|
71
|
-
3. Nginject migration:
|
|
68
|
+
2. Nginject migration:
|
|
72
69
|
the @ngInject annotation is no more used, you should pass an array in the function or use the $inject property.
|
|
73
70
|
e.g. before:
|
|
74
71
|
```javascript
|
|
@@ -95,13 +92,17 @@ Changes to apply
|
|
|
95
92
|
Controller.$inject = ['$scope', '$injector'];
|
|
96
93
|
```
|
|
97
94
|
|
|
98
|
-
|
|
95
|
+
3. The OGC Server 'source for image/png' is renamed to 'MapServer' and
|
|
99
96
|
'source for image/jpeg' is renamed to 'MapServer_JPEG'.
|
|
100
97
|
This is done to be able to add them in the URL path, for OGC API compatibility.
|
|
101
98
|
If you use one of them in the `vars.yaml` you have to update them. Concerned variables are:
|
|
102
99
|
`main_ogc_server`, `api.ogc_server`, `tinyowsproxy.ogc_server`,
|
|
103
100
|
`interfaces_config.<interface>.routes.ngeoPermalinkOgcserverUrl.params.ogcserver`.
|
|
104
101
|
|
|
102
|
+
5. Now MapServer will work in multi project mode by default, normally the Alembic migration script
|
|
103
|
+
update the MapServer OGC Server URL to `config://mapserver/mapserv_proxy/MapServer?map=MapServer`
|
|
104
|
+
to make it working for WMS/WFS and for OGC API.
|
|
105
|
+
|
|
105
106
|
|
|
106
107
|
=============
|
|
107
108
|
Version 2.8.0
|
|
@@ -310,8 +310,8 @@ vars:
|
|
|
310
310
|
autoRotate: False
|
|
311
311
|
gmfWMSSourceOptions:
|
|
312
312
|
# The default value is 1.5 but it add a slight blur on the layer,
|
|
313
|
-
#
|
|
314
|
-
ratio:
|
|
313
|
+
# 2 is also possible but it uses many network and can break on some mobile devices.
|
|
314
|
+
ratio: 1
|
|
315
315
|
|
|
316
316
|
dynamic_constants:
|
|
317
317
|
interface: interface
|
|
@@ -765,7 +765,7 @@ vars:
|
|
|
765
765
|
- name: directedFilterAttributes
|
|
766
766
|
type: list
|
|
767
767
|
description: >
|
|
768
|
-
Comma-separated list of
|
|
768
|
+
Comma-separated list of attribute names which should have rules already ready when using the
|
|
769
769
|
filter tools.
|
|
770
770
|
relevant_for:
|
|
771
771
|
- layer_wms
|
|
@@ -943,6 +943,9 @@ vars:
|
|
|
943
943
|
fr: french
|
|
944
944
|
en: english
|
|
945
945
|
de: german
|
|
946
|
+
it: italian
|
|
947
|
+
# Fallback on italian for Romansh
|
|
948
|
+
rm: italian
|
|
946
949
|
|
|
947
950
|
servers:
|
|
948
951
|
internal: http://localhost/
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright (c) 2011-
|
|
1
|
+
# Copyright (c) 2011-2025, Camptocamp SA
|
|
2
2
|
# All rights reserved.
|
|
3
3
|
|
|
4
4
|
# Redistribution and use in source and binary forms, with or without
|
|
@@ -148,9 +148,11 @@ def canvas_view(request: pyramid.request.Request, interface_config: dict[str, An
|
|
|
148
148
|
def custom_view(
|
|
149
149
|
request: pyramid.request.Request, interface_config: dict[str, Any]
|
|
150
150
|
) -> pyramid.response.Response:
|
|
151
|
-
"""Get view used as entry point of a canvas interface."""
|
|
151
|
+
"""Get view used as entry point of a canvas or custom interface."""
|
|
152
152
|
|
|
153
153
|
set_common_headers(request, "index", Cache.PUBLIC_NO, content_type="text/html")
|
|
154
|
+
# Force urllogin to be converted to cookie when requesting the main HTML page
|
|
155
|
+
request.user # noqa
|
|
154
156
|
|
|
155
157
|
html_filename = interface_config.get("html_filename", f"{interface_config['name']}.html")
|
|
156
158
|
if not html_filename.startswith("/"):
|
|
@@ -296,10 +296,11 @@ class Login:
|
|
|
296
296
|
if self.authentication_settings.get("openid_connect", {}).get("enabled", False):
|
|
297
297
|
client = oidc.get_oidc_client(self.request, self.request.host)
|
|
298
298
|
if hasattr(client, "revoke_token"):
|
|
299
|
-
|
|
300
|
-
client.revoke_token(
|
|
301
|
-
|
|
302
|
-
|
|
299
|
+
access_token = self.request.cookies.get("access_token")
|
|
300
|
+
client.revoke_token(access_token)
|
|
301
|
+
refresh_token = self.request.cookies.get("refresh_token")
|
|
302
|
+
if refresh_token is not None:
|
|
303
|
+
client.revoke_token(refresh_token)
|
|
303
304
|
|
|
304
305
|
headers = forget(self.request)
|
|
305
306
|
|
|
@@ -377,6 +378,10 @@ class Login:
|
|
|
377
378
|
_LOG.info("The login '%s' does not exist.", login)
|
|
378
379
|
raise HTTPUnauthorized("See server logs for details")
|
|
379
380
|
|
|
381
|
+
if user.deactivated:
|
|
382
|
+
_LOG.info("The login '%s' is deactivated.", login)
|
|
383
|
+
raise HTTPUnauthorized("See server logs for details")
|
|
384
|
+
|
|
380
385
|
if self.two_factor_auth:
|
|
381
386
|
if not self._validate_2fa_totp(user, otp):
|
|
382
387
|
_LOG.info("The second factor is wrong for user '%s'.", login)
|
|
@@ -640,6 +645,9 @@ class Login:
|
|
|
640
645
|
client = oidc.get_oidc_client(self.request, self.request.host)
|
|
641
646
|
assert models.DBSession is not None
|
|
642
647
|
|
|
648
|
+
if "code_verifier" not in self.request.cookies or "code_challenge" not in self.request.cookies:
|
|
649
|
+
raise HTTPBadRequest("Missing code verifier or code challenge cookies.")
|
|
650
|
+
|
|
643
651
|
token_response = client.authorization_code_flow.handle_authentication_result(
|
|
644
652
|
"?" + urllib.parse.urlencode(self.request.params),
|
|
645
653
|
code_verifier=self.request.cookies["code_verifier"],
|
|
@@ -90,9 +90,15 @@ class Shortener:
|
|
|
90
90
|
|
|
91
91
|
url = self.request.params["url"]
|
|
92
92
|
|
|
93
|
+
url_length = len(url)
|
|
94
|
+
if "#" in url:
|
|
95
|
+
url_parsed = urlparse(url)
|
|
96
|
+
if url_parsed.fragment:
|
|
97
|
+
url_length -= len(url_parsed.fragment) + 1
|
|
98
|
+
|
|
93
99
|
# see: https://httpd.apache.org/docs/2.2/mod/core.html#limitrequestline
|
|
94
|
-
if
|
|
95
|
-
raise HTTPBadRequest(f"The parameter url is too long ({
|
|
100
|
+
if url_length > 8190:
|
|
101
|
+
raise HTTPBadRequest(f"The parameter url is too long ({url_length} > {8190})")
|
|
96
102
|
|
|
97
103
|
allowed_hosts = self.settings.get("allowed_hosts", [])
|
|
98
104
|
url_hostname, ok = is_allowed_url(self.request, url, allowed_hosts)
|
|
@@ -831,6 +831,11 @@ class Theme:
|
|
|
831
831
|
theme_theme = {
|
|
832
832
|
"id": theme.id,
|
|
833
833
|
"name": theme.name,
|
|
834
|
+
"public": (
|
|
835
|
+
theme.public
|
|
836
|
+
or self.request.get_organization_role("anonymous")
|
|
837
|
+
in [role.name for role in theme.restricted_roles]
|
|
838
|
+
),
|
|
834
839
|
"icon": icon,
|
|
835
840
|
"children": children,
|
|
836
841
|
"functionalities": self._get_functionalities(theme),
|
{c2cgeoportal_geoportal-2.9.0.227.dist-info → c2cgeoportal_geoportal-2.9.0.352.dist-info}/METADATA
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: c2cgeoportal-geoportal
|
|
3
|
-
Version: 2.9.0.
|
|
3
|
+
Version: 2.9.0.352
|
|
4
4
|
Summary: c2cgeoportal geoportal
|
|
5
5
|
Home-page: https://github.com/camptocamp/c2cgeoportal/
|
|
6
6
|
Author: Camptocamp
|
|
@@ -27,7 +27,9 @@ Requires-Dist: PyYAML
|
|
|
27
27
|
Requires-Dist: SQLAlchemy
|
|
28
28
|
Requires-Dist: Shapely
|
|
29
29
|
Requires-Dist: alembic
|
|
30
|
+
Requires-Dist: basicauth
|
|
30
31
|
Requires-Dist: bottle
|
|
32
|
+
Requires-Dist: bs4
|
|
31
33
|
Requires-Dist: c2cgeoportal-commons[upgrade]
|
|
32
34
|
Requires-Dist: c2cwsgiutils
|
|
33
35
|
Requires-Dist: defusedxml
|
|
@@ -36,6 +38,7 @@ Requires-Dist: geojson
|
|
|
36
38
|
Requires-Dist: isodate
|
|
37
39
|
Requires-Dist: lingva
|
|
38
40
|
Requires-Dist: papyrus
|
|
41
|
+
Requires-Dist: pkce
|
|
39
42
|
Requires-Dist: psycopg2
|
|
40
43
|
Requires-Dist: pycryptodome
|
|
41
44
|
Requires-Dist: pyotp
|
|
@@ -49,6 +52,8 @@ Requires-Dist: rasterio
|
|
|
49
52
|
Requires-Dist: redis
|
|
50
53
|
Requires-Dist: requests
|
|
51
54
|
Requires-Dist: setuptools >=78.1.1
|
|
55
|
+
Requires-Dist: simple-openid-connect
|
|
56
|
+
Requires-Dist: tilecloud
|
|
52
57
|
Requires-Dist: transaction
|
|
53
58
|
|
|
54
59
|
c2cgeoportal is the server part of `GeoMapFish <http://geomapfish.org/>`_,
|
{c2cgeoportal_geoportal-2.9.0.227.dist-info → c2cgeoportal_geoportal-2.9.0.352.dist-info}/RECORD
RENAMED
|
@@ -1,47 +1,47 @@
|
|
|
1
|
-
c2cgeoportal_geoportal/__init__.py,sha256=
|
|
1
|
+
c2cgeoportal_geoportal/__init__.py,sha256=knkBNKoGXM6jjWtMXsp65W6r5M6Yij949MjtX4MioQ4,40227
|
|
2
2
|
c2cgeoportal_geoportal/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
3
|
-
c2cgeoportal_geoportal/resources.py,sha256=
|
|
4
|
-
c2cgeoportal_geoportal/lib/__init__.py,sha256=
|
|
3
|
+
c2cgeoportal_geoportal/resources.py,sha256=rDruIDlzwktqj_A-DFA7ZkWwkasVZ4KELCmUe61ghGI,2158
|
|
4
|
+
c2cgeoportal_geoportal/lib/__init__.py,sha256=9BI0fqGiCOhegf7WmsP4_FxnlXzhZfguIwiIF1b2JI8,10431
|
|
5
5
|
c2cgeoportal_geoportal/lib/authentication.py,sha256=Y45moPenxJ2dH3gIuk7yPr4tiS0Yw0OLw-bK8Ug92nE,10037
|
|
6
|
-
c2cgeoportal_geoportal/lib/bashcolor.py,sha256=
|
|
7
|
-
c2cgeoportal_geoportal/lib/cacheversion.py,sha256=
|
|
8
|
-
c2cgeoportal_geoportal/lib/caching.py,sha256=
|
|
9
|
-
c2cgeoportal_geoportal/lib/check_collector.py,sha256=
|
|
10
|
-
c2cgeoportal_geoportal/lib/checker.py,sha256=
|
|
6
|
+
c2cgeoportal_geoportal/lib/bashcolor.py,sha256=3Yr3QtDtvRO-KCKAPJNmxsMd6SqVwDusyZ8TfCy206w,1889
|
|
7
|
+
c2cgeoportal_geoportal/lib/cacheversion.py,sha256=5jtedQO6BK3lv7-q1dK1sFbuSuNFpZLr18K6gYXuTig,3040
|
|
8
|
+
c2cgeoportal_geoportal/lib/caching.py,sha256=r_nxHCfW5Jeb8Uzg_TXy9F45uzeG-234CexmFva2WEE,7124
|
|
9
|
+
c2cgeoportal_geoportal/lib/check_collector.py,sha256=endYjO9CmKlGimYuyeZKIBOb3izvbVVQXAhV8jwO7QU,3396
|
|
10
|
+
c2cgeoportal_geoportal/lib/checker.py,sha256=2svFaFjwQNGGqinacti-gpYiC2VAvJHkIL_R_PPX2T4,12547
|
|
11
11
|
c2cgeoportal_geoportal/lib/common_headers.py,sha256=5UYHNBLHhIQZdHLj17ZeTUnCFwLLg9Yu5i47tkHZYLw,6456
|
|
12
|
-
c2cgeoportal_geoportal/lib/dbreflection.py,sha256=
|
|
13
|
-
c2cgeoportal_geoportal/lib/filter_capabilities.py,sha256=
|
|
14
|
-
c2cgeoportal_geoportal/lib/fulltextsearch.py,sha256=
|
|
15
|
-
c2cgeoportal_geoportal/lib/functionality.py,sha256=
|
|
16
|
-
c2cgeoportal_geoportal/lib/headers.py,sha256=
|
|
17
|
-
c2cgeoportal_geoportal/lib/i18n.py,sha256=
|
|
18
|
-
c2cgeoportal_geoportal/lib/layers.py,sha256=
|
|
12
|
+
c2cgeoportal_geoportal/lib/dbreflection.py,sha256=cwMlq3QkTxMo0mCt3qNjGbN8pPJIre2UuLCRifs5feo,9759
|
|
13
|
+
c2cgeoportal_geoportal/lib/filter_capabilities.py,sha256=L_3rsVmMEHrWSCzTldrUI946Zz6kLntbWeqp9XRMFE0,14343
|
|
14
|
+
c2cgeoportal_geoportal/lib/fulltextsearch.py,sha256=fmvQr96hITq1ahvn8O7Acx8M5Zs_XL5SB4300cN6S2g,2265
|
|
15
|
+
c2cgeoportal_geoportal/lib/functionality.py,sha256=PXV5xmTg5EctMxYLaoKamw4-3COs2qRieDA66WYUmUA,6279
|
|
16
|
+
c2cgeoportal_geoportal/lib/headers.py,sha256=5EUWRhyQaP1768nSSvFUqurw772NAuw493sle8u535o,2631
|
|
17
|
+
c2cgeoportal_geoportal/lib/i18n.py,sha256=LHn21DCWHMIeMKfzNoxD0jF4gXL3p4fJq6qCz5_Ffh4,1852
|
|
18
|
+
c2cgeoportal_geoportal/lib/layers.py,sha256=x9iusOA65WSOcTpPEt1pyyZkH3d-5v8whQnqI2xbDt4,4911
|
|
19
19
|
c2cgeoportal_geoportal/lib/lingva_extractor.py,sha256=pS-B5oTcEkW__XUop6rWKdpJhn4i7C8YNtU9JDNMEik,37601
|
|
20
|
-
c2cgeoportal_geoportal/lib/loader.py,sha256=
|
|
21
|
-
c2cgeoportal_geoportal/lib/metrics.py,sha256=
|
|
22
|
-
c2cgeoportal_geoportal/lib/oauth2.py,sha256=
|
|
23
|
-
c2cgeoportal_geoportal/lib/oidc.py,sha256=
|
|
24
|
-
c2cgeoportal_geoportal/lib/wmstparsing.py,sha256=
|
|
25
|
-
c2cgeoportal_geoportal/lib/xsd.py,sha256=
|
|
20
|
+
c2cgeoportal_geoportal/lib/loader.py,sha256=oN76GhbLbdmCWp3DFTq16HJSylnDApuS1Ea8D-DQA3o,2613
|
|
21
|
+
c2cgeoportal_geoportal/lib/metrics.py,sha256=dAPdJtrtTPbwVuULZZ5dJC1JJCDbC0rJA7dtvsqIo40,4847
|
|
22
|
+
c2cgeoportal_geoportal/lib/oauth2.py,sha256=03nV635IkGyu0EckvUc_0akG9YzpG3PSZ2ILt2TVieI,41107
|
|
23
|
+
c2cgeoportal_geoportal/lib/oidc.py,sha256=PK6ot63GDg1LA82nVqvzNT8sI8-oyqk4vGpfm_MzCg0,13912
|
|
24
|
+
c2cgeoportal_geoportal/lib/wmstparsing.py,sha256=KFMEv7Skqc9HFA1m7x2xQMu4Bk2gJsyp5XTGwLLXb7w,12379
|
|
25
|
+
c2cgeoportal_geoportal/lib/xsd.py,sha256=_JDDlMIsvThb9DGmHS3XMazlRYG3AQK8kHQ4pq6sH8s,7031
|
|
26
26
|
c2cgeoportal_geoportal/scaffolds/advance_create/cookiecutter.json,sha256=1LVOM-j_nd00J89q0EI3bQUvIysbidApaVHDibA2ydk,524
|
|
27
27
|
c2cgeoportal_geoportal/scaffolds/advance_create/ci/config.yaml,sha256=8wB9gdivpSPH6wAy5JWhv3MDh_XzOGQX2KY5eYRtNpA,403
|
|
28
28
|
c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/.dockerignore,sha256=rPtGQNYXYoj-D94VwnVT_x-HvqldTNoz2oT7DjGpyqk,147
|
|
29
29
|
c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/.eslintrc.yaml,sha256=txdVU8ikuADtWxCHWjyOBtT8wiXzf-LhT9ZMVtBiwhY,241
|
|
30
30
|
c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/.prospector.yaml,sha256=rtVvKNsow04qQr_yXZ1yF1mPvLsyt_6Cp4Og-8yjUf4,378
|
|
31
|
-
c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/Dockerfile,sha256=
|
|
32
|
-
c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/Makefile,sha256
|
|
31
|
+
c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/Dockerfile,sha256=HfCI1zpZ1mjnAHXGSaLUS1ntHd-q9YhnQSh7gVNZQvo,2883
|
|
32
|
+
c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/Makefile,sha256=-qE76wtRwY-Xr5M35ZzsamKbP6YBhncrtg_68E2VhA8,153
|
|
33
33
|
c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/alembic.ini,sha256=U_L9gWSDWTGr-4HgQORcW5Q10TsafD6RWEudITSyEWQ,985
|
|
34
34
|
c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/alembic.yaml,sha256=9HMFJ_UekLUzXM5bPtixNNkeHMalo50hKjkxM_2tG2E,458
|
|
35
35
|
c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/development.ini,sha256=SXwggEi14iish10vtLscY5kemC1nZqnQuLQSK9DgppY,3061
|
|
36
|
-
c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/gunicorn.conf.py,sha256=
|
|
37
|
-
c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/language_mapping,sha256=
|
|
36
|
+
c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/gunicorn.conf.py,sha256=C1ljEuJadGaVtqIdrYAG91Ebd7iKjVeVBZduBjvf14s,4981
|
|
37
|
+
c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/language_mapping,sha256=mFkl42NLiR_hUZIUFqx089IQOTuJeoOspyoovpWrFVU,36
|
|
38
38
|
c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/lingva-client.cfg,sha256=Q5OugT3Ns7HEFxcBCejDHEkMtEUGhk__6-yONGg2ImM,117
|
|
39
39
|
c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/lingva-server.cfg,sha256=1mRNwhmqmxlJwKucLauitmY9MHgWAyCr4N6TaqHkKsU,107
|
|
40
40
|
c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/production.ini,sha256=ptWxF3jAE1A3IAQ7KdYSpGbPdAm3g-S-SIFXdZuFk3o,1137
|
|
41
41
|
c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/requirements.txt,sha256=n6hSj_r5f8NmSamv1Jo7Ly6bxby8ziEeXoMmY_psgtY,55
|
|
42
42
|
c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/setup.py,sha256=dZ-f23wZNh4TuHXCmyHRrlWR0kTVN3PKTT1FQilDeDk,694
|
|
43
43
|
c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/webpack.api.js,sha256=w_NXNXu_m6lE0fUrdxyyo-I1CfEyLWUzaMXMdHD4n5I,1102
|
|
44
|
-
c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/webpack.apps.js,sha256=
|
|
44
|
+
c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/webpack.apps.js,sha256=M65D7DPhTay63_5VuwFsLbzGXdCPLJED0grFQ7Wv11I,2187
|
|
45
45
|
c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/webpack.commons.js,sha256=0i3s1Bi1pKQzCxTR-tfAxLsHWq3SEUF7Cw5YJxMBzMM,216
|
|
46
46
|
c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/webpack.config.js,sha256=IFHj1YVu2aitTtQWVV6E5BaU0YDHz1qeoixaLbtRXPA,643
|
|
47
47
|
c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/{{cookiecutter.package}}_geoportal/__init__.py,sha256=u5R-1oSRn-KraRUMFqk0o2Jwd935HM7z18DICJOG9Qo,1270
|
|
@@ -63,17 +63,17 @@ c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/.gitignore,sha2
|
|
|
63
63
|
c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/.pre-commit-config.yaml,sha256=rW61ldm4Yhzj_8XSb2tZHQ10hlQ6avm-3WIv7yS5S64,774
|
|
64
64
|
c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/.prettierignore,sha256=PcDfauWwzv1pnJgC9HR1zvv06Q01CwzGzzc0iLSNcZk,9
|
|
65
65
|
c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/.prettierrc.yaml,sha256=WbjZCtw0hBlDB2FYJanFJzAvUsNTxgwn62YBZ-Xbwkw,43
|
|
66
|
-
c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/Dockerfile,sha256=
|
|
67
|
-
c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/Makefile,sha256=
|
|
66
|
+
c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/Dockerfile,sha256=pAuz1tB5N_V2uqRpVTQOTiqKJFe1jF1kemRh2h8P6Mw,3275
|
|
67
|
+
c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/Makefile,sha256=FcBsbXbi3eMnzVu7_RrQlrutInh-php3ncDizmUPeZI,3086
|
|
68
68
|
c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/README.rst,sha256=QJcaUtT05atb5x8SJYflSt0YIJkbAz0Zh39_FYtyFks,423
|
|
69
|
-
c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/build,sha256=
|
|
69
|
+
c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/build,sha256=5NvuCRfGQvIHwswE8dvTYoBQ9q1hyFKVfyx_GfRbI4w,7068
|
|
70
70
|
c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/docker-compose-db.yaml,sha256=sNzJxDQX54WfKgJhhVhDm4a05z3Rz1j6Oocl1QHzeyQ,518
|
|
71
|
-
c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/docker-compose-lib.yaml,sha256=
|
|
71
|
+
c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/docker-compose-lib.yaml,sha256=15Yj5mxF9VepDS6klJGQArIVHuIrfdXobH-2DjC0pxQ,13825
|
|
72
72
|
c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/docker-compose-qgis.yaml,sha256=YE44s31kI79j5ypud4RS69sSDGFH1ROHNNAkyWxZ4jk,576
|
|
73
73
|
c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/docker-compose.override.sample.yaml,sha256=X5vtxQ0pvLy6FSrooVmt90j4C4YNxtkSKzbPDOb4uB8,2615
|
|
74
74
|
c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/docker-compose.yaml,sha256=ZpQ33JhdBxkoUNBV9kB5f07p8DpqgvJ3-Mp0SzLnJ6w,2380
|
|
75
75
|
c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/env.default,sha256=nqNpC44SfFcmlbfHIPyjRBHyFT57_bpzd5mpBo-7ShE,3300
|
|
76
|
-
c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/env.project,sha256=
|
|
76
|
+
c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/env.project,sha256=2b9geIY0sbH76HFuZJ8QToXWDptb7jgyGWuxQRs89ws,2112
|
|
77
77
|
c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/project.yaml,sha256=PQZ87F25DbcQS_AcaT-uVmcdclkVnM3v-Te7onivXc8,655
|
|
78
78
|
c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/pyproject.toml,sha256=RnvMmtD40v3rju1HoIOX7pQfVHUKPptxaVDoZxuF7oU,107
|
|
79
79
|
c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/run_alembic.sh,sha256=VcrDFPAGlrxXtn4N8RcPhI90uZ8shDrGowALuwx8gnM,235
|
|
@@ -84,8 +84,8 @@ c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/.github/workflo
|
|
|
84
84
|
c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/.github/workflows/update_l10n.yaml,sha256=AEm3dpJDVnYKy61mduSkPk10tJEkQMmhb1TQdbm0nlU,2335
|
|
85
85
|
c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/ci/config.yaml,sha256=8doQOoZkZq4ICjOqH96egW1lsJFgL33hTPhmee8OHCs,360
|
|
86
86
|
c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/ci/docker-compose-check,sha256=7lnVTaaoUrC5MPGpwH2IWbzYc2KaeQMWguahsoY9Rf8,615
|
|
87
|
-
c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/ci/requirements.txt,sha256=
|
|
88
|
-
c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/geoportal/vars.yaml,sha256=
|
|
87
|
+
c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/ci/requirements.txt,sha256=76D4ylPFiXz65j84ND8ygSQtW53dUWNEZEF9DsCczeE,52
|
|
88
|
+
c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/geoportal/vars.yaml,sha256=xHLgFqZ1pNBl1z7PSSZ2Ci3MHBZuVm9H7dTvCCL2I9w,12009
|
|
89
89
|
c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/geoportal/{{cookiecutter.package}}_geoportal/locale/en/LC_MESSAGES/{{cookiecutter.package}}_geoportal-client.po,sha256=hKLs5f7EJz05ACRtyTlCtssCo99PMuj-FfOJXchMZFk,162
|
|
90
90
|
c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/geoportal/{{cookiecutter.package}}_geoportal/static/robot.txt.tmpl,sha256=JR_vIqMlHq1oSgyWPN2mtZyEpsqhjKQQecaW2pxvK54,88
|
|
91
91
|
c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/geoportal/{{cookiecutter.package}}_geoportal/static/css/desktop.css,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -129,66 +129,66 @@ c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/print/print-app
|
|
|
129
129
|
c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/print/print-apps/{{cookiecutter.package}}/north.svg,sha256=rnHO-cNiy9ZyfwvI-o2dYipzuu-vh9rn0nE45FjfOPo,2925
|
|
130
130
|
c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/print/print-apps/{{cookiecutter.package}}/results.jrxml,sha256=gf5grUvt-oG_H0LnsNvBWMDGqvH3uuW_wfy0O-n5ui4,1309
|
|
131
131
|
c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/qgisserver/pg_service.conf.tmpl,sha256=WcjfsfsfNLHAfbg84HgEIb64EDnnJJWGnyAdPTXD0PI,296
|
|
132
|
-
c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/scripts/db-backup,sha256=
|
|
133
|
-
c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/scripts/db-restore,sha256=
|
|
132
|
+
c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/scripts/db-backup,sha256=4UKYnok7_U3SNIwLNCg2HxSBgvcle87ZevPzylJLC0c,5205
|
|
133
|
+
c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/scripts/db-restore,sha256=KvIZtviKuFtkgX7rRTWJqZXpr3VHBybA-5pAsXr-U64,5425
|
|
134
134
|
c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/scripts/multi-tenant-update-po,sha256=w89-jvwo4v_KGrFyH6xIiQkh4cIK1PCLxmGwZ2mq630,1097
|
|
135
135
|
c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
136
136
|
c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/tests/test_app.py,sha256=RXBFB9xc-SJ6D2UVHjooGoWbMvROiMTOxi2evFnkAtE,2961
|
|
137
137
|
c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/tilegeneration/config.yaml.tmpl,sha256=9fRuzdxmdnuMX_s0iaWOYwTmdDgvljGgXNfWnZTg5Ow,6171
|
|
138
138
|
c2cgeoportal_geoportal/scaffolds/update/cookiecutter.json,sha256=SoXjnW7KpNpm1fSGDEIZrr-_LbR7yiYmXKbdeXatflw,617
|
|
139
139
|
c2cgeoportal_geoportal/scaffolds/update/{{cookiecutter.project}}/.upgrade.yaml,sha256=8tPCziX4Wh6a2EOdjpLtvyqNtKcI7Rtjo8-bLQO8_Gg,2741
|
|
140
|
-
c2cgeoportal_geoportal/scaffolds/update/{{cookiecutter.project}}/CONST_CHANGELOG.txt,sha256=
|
|
140
|
+
c2cgeoportal_geoportal/scaffolds/update/{{cookiecutter.project}}/CONST_CHANGELOG.txt,sha256=5DeH4OUb9X2iTNFNETJwKqKSosW1KSzzpQ5zRDDlVUM,11945
|
|
141
141
|
c2cgeoportal_geoportal/scaffolds/update/{{cookiecutter.project}}/CONST_create_template/tests/test_testapp.py,sha256=FNZI6uMsZttVpWi0_TEmBgV6MjQDUmE5ar9be3FFkV8,1794
|
|
142
142
|
c2cgeoportal_geoportal/scaffolds/update/{{cookiecutter.project}}/geoportal/.CONST_vars.yaml.swp,sha256=ZaB6IqVy0WDyGXRP7VQf8_LL_wjccSdthJtdIzw8FmE,16384
|
|
143
143
|
c2cgeoportal_geoportal/scaffolds/update/{{cookiecutter.project}}/geoportal/CONST_config-schema.yaml,sha256=XUtfJo3UNryr-a6RMxxi3K3XazfYL5WXN6vrreJYrUI,23696
|
|
144
|
-
c2cgeoportal_geoportal/scaffolds/update/{{cookiecutter.project}}/geoportal/CONST_vars.yaml,sha256=
|
|
145
|
-
c2cgeoportal_geoportal/scripts/__init__.py,sha256=
|
|
144
|
+
c2cgeoportal_geoportal/scaffolds/update/{{cookiecutter.project}}/geoportal/CONST_vars.yaml,sha256=Ex638hLeg-n5F95Ng6dnlUTlW4jnlDi-c7r_2xb2Yok,49435
|
|
145
|
+
c2cgeoportal_geoportal/scripts/__init__.py,sha256=KtDC_hpgvmuC83YFvdEQ4Xezk0wjhUAaBimpoOQrQso,2929
|
|
146
146
|
c2cgeoportal_geoportal/scripts/c2cupgrade.py,sha256=oWgl5ngJaUVXDKJqJ33aZB8ET_XcFxsYZb18KqO4-yo,36825
|
|
147
|
-
c2cgeoportal_geoportal/scripts/create_demo_theme.py,sha256
|
|
148
|
-
c2cgeoportal_geoportal/scripts/manage_users.py,sha256=
|
|
147
|
+
c2cgeoportal_geoportal/scripts/create_demo_theme.py,sha256=dVTKUGqKFYcRVMRcLpdaNZQdp2pk8HKuSADt6ukj_XA,3263
|
|
148
|
+
c2cgeoportal_geoportal/scripts/manage_users.py,sha256=Q-kDVMjV7aqu--gOL_JcHxMaGY4ourqbHlCz-qeWh3Q,5586
|
|
149
149
|
c2cgeoportal_geoportal/scripts/pcreate.py,sha256=xU87K_JYwFE6U4zEGjHvqNj2iiSuAhPkfWMpI576mZ8,11245
|
|
150
150
|
c2cgeoportal_geoportal/scripts/theme2fts.py,sha256=tVEeqf1l_PaTw3qpNX2ZvJHu4JO6IgY6upir24HPxJM,17616
|
|
151
|
-
c2cgeoportal_geoportal/scripts/urllogin.py,sha256=
|
|
151
|
+
c2cgeoportal_geoportal/scripts/urllogin.py,sha256=70cxepUejV0t94XClUC03VTsb-GlCAXwTQuF4i8m8Ag,3319
|
|
152
152
|
c2cgeoportal_geoportal/templates/login.html,sha256=Jy8CUw2KrSviePknsvWJLDqCUXam-vPhnMUv7UcD4Pc,2475
|
|
153
153
|
c2cgeoportal_geoportal/templates/notlogin.html,sha256=XLCwJ8q7hqk6GIaxwhyMOaMZZZvsD_MMZaCERO8n2AY,1528
|
|
154
154
|
c2cgeoportal_geoportal/templates/testi18n.html,sha256=Br6Vf5zTDdaH0L07saV_8dIIT3C9xnSqh4quzTELo2s,369
|
|
155
|
-
c2cgeoportal_geoportal/views/__init__.py,sha256=
|
|
156
|
-
c2cgeoportal_geoportal/views/dev.py,sha256=
|
|
155
|
+
c2cgeoportal_geoportal/views/__init__.py,sha256=MJIH9RtjwicULXcSsyEnDd7BgHVf3o-7Ii825X0wsN4,2639
|
|
156
|
+
c2cgeoportal_geoportal/views/dev.py,sha256=XcJZE9SrPpJr_P2FM75CHINWEg-wQqNW_2n5uSLsSAw,2539
|
|
157
157
|
c2cgeoportal_geoportal/views/dynamic.py,sha256=w92NRkIn0Ahahn0LG9F-KpMOx0lhffZxK4ecn6k8i40,8907
|
|
158
|
-
c2cgeoportal_geoportal/views/entry.py,sha256=
|
|
158
|
+
c2cgeoportal_geoportal/views/entry.py,sha256=95f04wfE5NiTLPgCBQTvnQ-SD6t7ofVLLfrEIqr_ng4,7048
|
|
159
159
|
c2cgeoportal_geoportal/views/fulltextsearch.py,sha256=i6d0-1N2pNG6KWq9Bih_kD4TQAZ54zMbuOFZTN-fqaU,8602
|
|
160
|
-
c2cgeoportal_geoportal/views/geometry_processing.py,sha256=
|
|
161
|
-
c2cgeoportal_geoportal/views/i18n.py,sha256=
|
|
162
|
-
c2cgeoportal_geoportal/views/layers.py,sha256=
|
|
163
|
-
c2cgeoportal_geoportal/views/login.py,sha256=
|
|
164
|
-
c2cgeoportal_geoportal/views/mapserverproxy.py,sha256=
|
|
165
|
-
c2cgeoportal_geoportal/views/memory.py,sha256=
|
|
166
|
-
c2cgeoportal_geoportal/views/ogcproxy.py,sha256=
|
|
167
|
-
c2cgeoportal_geoportal/views/pdfreport.py,sha256=
|
|
168
|
-
c2cgeoportal_geoportal/views/printproxy.py,sha256=
|
|
169
|
-
c2cgeoportal_geoportal/views/profile.py,sha256=
|
|
160
|
+
c2cgeoportal_geoportal/views/geometry_processing.py,sha256=IWzAgi29nytLIB3PdjoLqXUoSXEO9HcMjjNWEE9shv4,2958
|
|
161
|
+
c2cgeoportal_geoportal/views/i18n.py,sha256=9e5VIGmKgOUTAn8R3ch98VXDpH70UZpHZ9hLkzHAW14,5343
|
|
162
|
+
c2cgeoportal_geoportal/views/layers.py,sha256=qGO_eQw09pcG9KerEe5y7ktlgUqcJywBPMm4KE14g44,29226
|
|
163
|
+
c2cgeoportal_geoportal/views/login.py,sha256=7JloyIXcYvWSA1m2dpStEZFZbTjw_dClIVyeEfZ6IKg,29579
|
|
164
|
+
c2cgeoportal_geoportal/views/mapserverproxy.py,sha256=zaTveZ0NK6KCcXWougfLNKqy5SIzlDUNnzGxQ0NVhKM,9498
|
|
165
|
+
c2cgeoportal_geoportal/views/memory.py,sha256=s8l5ewxjl_kaK7sH45SmMdr3ZZqvpW4QLKCaSh9i5YA,3754
|
|
166
|
+
c2cgeoportal_geoportal/views/ogcproxy.py,sha256=81S4du9IgTLe7t67QyjMNuUGZYkwaDY10hxPwLhizxg,5215
|
|
167
|
+
c2cgeoportal_geoportal/views/pdfreport.py,sha256=0nHsTmeTCGh_iymPYPiefxZpHh8TWkBWBC26VBwJaGA,9622
|
|
168
|
+
c2cgeoportal_geoportal/views/printproxy.py,sha256=gAtxZuciOUmkwlYyl6k7OTRS8yZZuF-bkxSxZdopU7k,5958
|
|
169
|
+
c2cgeoportal_geoportal/views/profile.py,sha256=l27iwAQMbbZXDjBbN1qWkK80JKxs5Gn6g7fafMqhNgI,8431
|
|
170
170
|
c2cgeoportal_geoportal/views/proxy.py,sha256=XxOGR8Snqrd1CKkUiK4IjavCR8PiUsd3tlEM9lZE9TI,10468
|
|
171
|
-
c2cgeoportal_geoportal/views/raster.py,sha256=
|
|
172
|
-
c2cgeoportal_geoportal/views/resourceproxy.py,sha256=
|
|
173
|
-
c2cgeoportal_geoportal/views/shortener.py,sha256=
|
|
174
|
-
c2cgeoportal_geoportal/views/theme.py,sha256=
|
|
171
|
+
c2cgeoportal_geoportal/views/raster.py,sha256=L7VHTquNvJHC8JoIKOlDWOR0J1xiDbIEWNTd0PW9zqg,9242
|
|
172
|
+
c2cgeoportal_geoportal/views/resourceproxy.py,sha256=k81YAOPDgPC7NF-YvNJN-J16u4iX-RRLXRBijQ5BWnU,3189
|
|
173
|
+
c2cgeoportal_geoportal/views/shortener.py,sha256=aSIhmzDQ0xfSzdku-W0evfZ6PFr8wc0VSsi9UMmahA8,6722
|
|
174
|
+
c2cgeoportal_geoportal/views/theme.py,sha256=wTCEMn08aBN6GiTGxiTiEG-TNgjrRMpTys-5nYSQOps,56364
|
|
175
175
|
c2cgeoportal_geoportal/views/tinyowsproxy.py,sha256=_wPN1Vfo4RNcCQ1xRPU_funie7mDPocL-ox_4hlF1-Y,8178
|
|
176
|
-
c2cgeoportal_geoportal/views/vector_tiles.py,sha256=
|
|
176
|
+
c2cgeoportal_geoportal/views/vector_tiles.py,sha256=CDt62u8c93dFDiga_4qg6LqQqflC9ijO9aamhNXOrn0,3575
|
|
177
177
|
tests/__init__.py,sha256=QJY_VGdOehpa3uMdeiF0boDPvH8BVgxPWJRzyDTcvwA,3826
|
|
178
|
-
tests/test_cachebuster.py,sha256=
|
|
178
|
+
tests/test_cachebuster.py,sha256=D3A0DoCPZHsjMBNqEub1nXYqVI7WST1otDK9rTWiZmo,2923
|
|
179
179
|
tests/test_caching.py,sha256=Juj7uwjOkjbPlTd-ll65SgWFzj3d2yDyf-eQ7ELk2eY,13222
|
|
180
|
-
tests/test_checker.py,sha256=
|
|
181
|
-
tests/test_decimaljson.py,sha256=
|
|
182
|
-
tests/test_headerstween.py,sha256=
|
|
180
|
+
tests/test_checker.py,sha256=mKCfSmpiyVZh8n2rT40dFkTdyZLoD266-CwxqW04UnI,3638
|
|
181
|
+
tests/test_decimaljson.py,sha256=Jnp40YJyERCgioSRknX2auZFOF41RKSwzctjGghKis4,2223
|
|
182
|
+
tests/test_headerstween.py,sha256=GXRndeNk6eE55X-39YdzRsHafnjZRd1_w7cev4kHnY8,2524
|
|
183
183
|
tests/test_i18n.py,sha256=-mAW0UyeNF9uqkq6O_Z0mK8gGwlHlTWI0gb9Ri_bk1M,994
|
|
184
|
-
tests/test_init.py,sha256=
|
|
185
|
-
tests/test_locale_negociator.py,sha256=
|
|
186
|
-
tests/test_mapserverproxy_route_predicate.py,sha256=
|
|
187
|
-
tests/test_raster.py,sha256=
|
|
188
|
-
tests/test_wmstparsing.py,sha256=
|
|
189
|
-
tests/xmlstr.py,sha256=
|
|
190
|
-
c2cgeoportal_geoportal-2.9.0.
|
|
191
|
-
c2cgeoportal_geoportal-2.9.0.
|
|
192
|
-
c2cgeoportal_geoportal-2.9.0.
|
|
193
|
-
c2cgeoportal_geoportal-2.9.0.
|
|
194
|
-
c2cgeoportal_geoportal-2.9.0.
|
|
184
|
+
tests/test_init.py,sha256=qkgRBDRJsBY05Af010Lvv6rVgnhRfcL2TlJUaPI9odQ,7624
|
|
185
|
+
tests/test_locale_negociator.py,sha256=Zdr_mHp7lm5-aLKdaL9dmcxv8qMapBvCmsf524_fNv0,3044
|
|
186
|
+
tests/test_mapserverproxy_route_predicate.py,sha256=aH5r5MliqE5RF4J7Q-luQQ6sgOcMUKqXf5mC9zxl5QM,3043
|
|
187
|
+
tests/test_raster.py,sha256=IzwJMGti82B51aVfy2QbeNeJXn3B6bM-JnbYpt5KqB4,11948
|
|
188
|
+
tests/test_wmstparsing.py,sha256=DMUFSrJAyRfOhosD8Ap5251NCxfaX7vmkWmexdc6CDU,9054
|
|
189
|
+
tests/xmlstr.py,sha256=vozYRYG4sBPhasl4PemLUZxg-jAtQxUY5ntp1uDoxik,5985
|
|
190
|
+
c2cgeoportal_geoportal-2.9.0.352.dist-info/METADATA,sha256=CEv3sVdqL-eC1QJR8MZC9xkzJfnEBFp1xiKIeOF5L6g,2049
|
|
191
|
+
c2cgeoportal_geoportal-2.9.0.352.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
|
|
192
|
+
c2cgeoportal_geoportal-2.9.0.352.dist-info/entry_points.txt,sha256=3dnX260FsLX_AubeNMdyeta_z1X4CxcD3steAlfPx2I,1414
|
|
193
|
+
c2cgeoportal_geoportal-2.9.0.352.dist-info/top_level.txt,sha256=PJIbY7Nx51dDrJ052f5mDA7c6Tehm5aD-Gb32L_CtJA,29
|
|
194
|
+
c2cgeoportal_geoportal-2.9.0.352.dist-info/RECORD,,
|
tests/test_cachebuster.py
CHANGED
tests/test_checker.py
CHANGED
tests/test_decimaljson.py
CHANGED
tests/test_headerstween.py
CHANGED
tests/test_init.py
CHANGED
tests/test_locale_negociator.py
CHANGED
tests/test_raster.py
CHANGED
tests/test_wmstparsing.py
CHANGED
tests/xmlstr.py
CHANGED
{c2cgeoportal_geoportal-2.9.0.227.dist-info → c2cgeoportal_geoportal-2.9.0.352.dist-info}/WHEEL
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|