2024-03-10
- #1021 After upgrade and start of Layman, it's needed to change GeoServer configuration by following steps:
- Log in to GeoServer Admin
- Click on Security > Authentication
- Find part "Authentication Filters" and click on "laymanHttpHeader"
- In part "Role source" choose "Role service" in left dropdown and "layman_role_service" in right dropdown.
- Click on Save button.
- #1021 Fix WFS-T error by manually changing GeoServer configuration as described in upgrade requirements.
- #1022 Fix login in demo configuration with authentication.
2024-03-06
- #1016 Flower and Celery worker containers used to wait for all dependencies and also check role service, from now on it waits only for Layman API to be ready.
- #165 Roles in REST endpoint GET Roles result are in alphabetical order.
2024-01-30
- Change environment variable LAYMAN_CLIENT_VERSION:
LAYMAN_CLIENT_VERSION=v1.18.0
- Stop using environment variable
LAYMAN_GS_ROLE_SERVICE
, it has no effect to Layman anymore. Layman now uses role service identified by new environment variable LAYMAN_ROLE_SERVICE_URI. The service is calledlayman_role_service
on GeoServer. - Set new environment variable LAYMAN_ROLE_SERVICE_URI
- Stop using environment variable
OAUTH2_INTROSPECTION_SUB_KEY
, it has no effect to Layman anymore. - If you are using Wagtail as OAuth2 provider
- After running
make upgrade-demo
ormake-upgrade-demo-full
, run also scriptv1_23_change_oauth2_sub_username_to_user_id.py
:docker compose -f docker-compose.deps.demo.yml -f docker-compose.demo.yml run --rm --no-deps -u root -e LAYMAN_WAGTAIL_DB_URI=<URI_of_Wagtail_db> layman bash -c "cd src && python3 -B v1_23_change_oauth2_sub_username_to_user_id.py"
URI_of_Wagtail_db
is PostgreSQL connection URI to Wagtail database, e.g.postgresql://user:[email protected]:5432/wagtail_db_name
- The script changes OAuth2 "sub" values in Layman prime DB schema from Wagtail usernames to Wagtail user IDs. See 940.
- After running
- #165 Add column
role_name
to tablerights
in prime DB schema. Add constraint that exactly one of columnsrole_name
andid_user
is not null. - #165 Create DB schema
_role_service
that can be used as role service. - #165 Column
name
in tableworkspace
in prime DB schema length is changed to 59 characters. - Drop DB table
right_types
.
- #165 Delete technical roles and user-role relations in GeoServer
default
role service, which is now replaced by JDBC role service.
- #165 Prior to this version, Layman enabled to use usernames and pseudo-role
EVERYONE
in access rights. From now on, Layman accepts also role names. - #165 Roles (except of
EVERYONE
) are managed by role service. - #165 New REST endpoint GET Roles with list of all roles registered in role service, that can be used in access rights.
- This new endpoint was added to Test Client into tab "Others".
- #165 POST Workspace Layers/Maps and PATCH Workspace Layer/Map saves role names mentioned in
access_rights.read
andaccess_rights.write
parameters into prime DB schema. - #165 Many requests respect roles in access rights:
- #165 POST Workspace Layers/Maps respects roles in GRANT_CREATE_PUBLIC_WORKSPACE and GRANT_PUBLISH_IN_PUBLIC_WORKSPACE
- #165 Many endpoints return previously associated role names in
access_rights.read
andaccess_rights.write
keys: - #165 Name of users and public workspaces are from now on restricted to a maximum length of 59 characters.
- 940 Use
userId
as OAuth2 "sub" instead ofusername
. This is suitable for Wagtail. - 940 Stop supporting Liferay as OAuth2 provider.
- 941 Wagtail database is now persistent when restarting Layman or Wagtail.
- All changes from v1.22.1, v1.22.2 and v1.22.3.
- #960 Handle WMS requests with HTTP error more efficiently in timgen.
- #962 Make values of
layman_metadata.publication_status
andstatus
key(s) more consistent in responses of PATCH Workspace Layer/Map and GET Workspace Layer/Map. - Timgen handles better some edge cases:
- If map's internal layer points to non-existent workspace, Timgen is faster and does not fail.
- If map's file was not obtained from Layman, Timgen fails quickly.
- Upgrade Python dependencies
- werkzeug 2.3.7 -> 3.0.7 (suggested by dependabot)
- urllib3 1.26.16 -> 1.26.18 (suggested by dependabot)
- pillow 10.0.0 -> 10.1.0 (suggested by dependabot)
- cacheout 0.14.1 -> 0.15.0
- flask 2.3.3 -> 3.0.0
- jsonschema 4.19.0 -> 4.20.0
- owslib 0.29.2 -> 0.29.3
- importlib-metadata 6.8.0 -> 7.0.0
- psycopg2-binary 2.9.7 -> 2.9.9
- redis 5.0.0 -> 5.0.1
- unidecode 1.3.6 -> 1.3.7
- platformdirs 3.10.0 -> 4.1.0
- pycodestyle 2.11.0 -> 2.11.1
- pytest 7.4.2 -> 7.4.3
- pytest-rerunfailures 12.0 -> 13.0
- pytest-timeout 2.1.0 -> 2.2.0
- Add development dependency
plantuml/plantuml
for rendering PlantUML diagrams.
2023-12-06
- Change environment variable LAYMAN_CLIENT_VERSION:
LAYMAN_CLIENT_VERSION=v1.17.2
- Improve logging in Layman Test Client related to Passport.js.
- 968 Enable to use not-so-secure SSL communication (UnsafeLegacyRenegotiation) in Layman Test Client. It can be activated by environment variable NODE_OPTIONS:
NODE_OPTIONS="--openssl-config=/code/unsafe_openssl.cnf"
2023-11-10
- Change environment variable LAYMAN_CLIENT_VERSION:
LAYMAN_CLIENT_VERSION=v1.17.1
- #958 Fix
X-Forwarded-Proto
on LTC proxy with https protocol in demo environment. - #956 Fix login to GeoServer with https protocol.
- #952 Fix patch saving publication files before access right validation.
2023-10-12
- #949 Fix reading map-layer relations from map composition that includes also other than WMS and Vector layers.
2023-10-05
- Change environment variable LAYMAN_CLIENT_VERSION:
LAYMAN_CLIENT_VERSION=v1.17.0
- Stop using environment variable
LAYMAN_GS_PROXY_BASE_URL
, it has no effect to Layman anymore.- GeoServer's Proxy Base URL is now automatically set by Layman on each start. Value is automatically derived from environment variables
LAYMAN_CLIENT_PUBLIC_URL
(protocol) andLAYMAN_PROXY_SERVER_NAME
(domain and port). URL path is always/geoserver/
.
- GeoServer's Proxy Base URL is now automatically set by Layman on each start. Value is automatically derived from environment variables
- Stop using environment variable
LAYMAN_GS_PATH
, it has no effect to Layman anymore.- GeoServer's URL path must be always
/geoserver/
(that is true for GeoServer shipped with Layman).
- GeoServer's URL path must be always
- #868 Create new table
map_layer
in prime DB schema.
- #887 Drop unique DB index on
users
table onsub
column. Create unique DB index onusers
table on (sub
,issuer_id
) columns. - #765 Fix
issuer_id
values inusers
table that were broken since v1.21.0. - #765 Remove
authn.txt
files from workspace directories. The same information as inauthn.txt
files is saved in prime DB schema. - #868 Fill table
map_layer
with relations between maps and internal layers (layers published on this Layman instance). Relations to external layers (layers of other servers) are not imported into the table.
- #868 Responses to many requests respect HTTP X-Forwarded headers of the request. Those requests are:
- GET Publications, Layers, Workspace Layers, Maps, and Workspace Maps
- GET, PATCH, and DELETE Workspace Layer
- GET, PATCH, and DELETE Workspace Map
- GET Workspace Map File
- POST and DELETE Workspace Layers
- POST and DELETE Workspace Maps
- requests to WMS and WFS endpoints
- #868 Responses to GET Workspace Layer Metadata Comparison and GET Workspace Map Metadata Comparison do not respect HTTP X-Forwarded headers of the request intentionally, in order to keep URLs in canonical form.
- #868 Relations between map and internal layers are updated in
map_layer
table when calling POST Workspace Maps, PATCH Workspace Map, DELETE Workspace Map, and DELETE Workspace Maps. - #901 Endpoints POST and PATCH accept map compositions in version
3.x.x
. - #927 SLD styles are internally published to GeoServer with
raw
parameter set toTrue
. - #880 Use Docker Compose v2 (
docker compose
) in Makefile withoutcompatibility
flag and removeMakefile_docker-compose_v1
file. Docker containers are named according to Docker Compose v2 and may have different name after upgrade. - #765 Stop saving OAuth2 claims in filesystem, use prime DB schema only.
- #893 It is possible to specify logging level by new environment variable LAYMAN_LOGLEVEL. Default level is
INFO
. - Use
psycopg2.pool.ThreadedConnectionPool
to share DB connections. - Add new test Python dependency:
- jsonpath-ng 1.6.0
- Upgrade Python dependencies
- certifi 2023.5.7 -> 2023.7.22 (suggested by dependabot)
- tornado 6.3.2 -> 6.3.3 (suggested by dependabot)
- flask 2.3.2 -> 2.3.3
- jsonschema 4.17.3 -> 4.19.0
- lxml 4.9.2 -> 4.9.3
- owslib 0.28.1 -> 0.29.2
- psycopg2-binary 2.9.5 -> 2.9.7
- redis 4.5.5 -> 5.0.0
- autopep8 2.0.1 -> 2.0.4
- flake8 6.0.0 -> 6.1.0
- pillow 9.3.0 -> 10.0.0
- pycodestyle 2.10.0 -> 2.11.0 (to be consistent with GitHub Actions)
- pytest 7.2.0 -> 7.4.2
- pytest-rerunfailures 10.3 -> 12.0
- watchdog 2.2.0 -> 3.0.0
2023-07-21
- #887 Drop unique DB index on
users
table on (sub
,issuer_id
) columns. Create unique DB index onusers
table onsub
column.
- #887 Fix creating new user workspaces for existing users that happened in v1.21.0.
2023-07-06
- Change environment variable LAYMAN_CLIENT_VERSION:
LAYMAN_CLIENT_VERSION=v1.16.0
- Rename environment variable
OAUTH2_LIFERAY_SECRET
toOAUTH2_CLIENT_SECRET
. - Rename all environment variables
OAUTH2_LIFERAY_SECRET<n>
toOAUTH2_CLIENT<n>_SECRET
. For example, variableOAUTH2_LIFERAY_SECRET4
becomesOAUTH2_CLIENT4_SECRET
. - Rename all other
OAUTH2_LIFERAY_<postfix>
environment variables toOAUTH2_<postfix>
. For example, variableOAUTH2_LIFERAY_AUTH_URL
becomesOAUTH2_AUTH_URL
. - If you are using environment variable
OAUTH2_CALLBACK_URL
, change only its URL path from/client/authn/oauth2-liferay/callback
to/client/authn/oauth2-provider/callback
. Keep protocol, domain, and port unchanged. - Stop using environment variable
LAYMAN_AUTHN_OAUTH2_PROVIDERS
, it has no effect to Layman anymore. There is exactly one OAuth2 provider Python module now, no need to set it. - Stop using environment variable
FLASK_ENV
, it has no effect to Layman anymore.- If you used environment variable
FLASK_ENV
with valuedevelopment
, add new environment variableFLASK_DEBUG
:FLASK_DEBUG=1
- If you used environment variable
- Stop using environment variable
CSW_RECORD_URL
, it has no effect to Layman anymore. Value is derived from variableCSW_PROXY_URL
. - Stop using HTTP header
AuthorizationIssUrl
when authenticating by OAuth. The header has no effect to Layman anymore. There is exactly one OAuth2 provider now, no need to distinguish it. Now, the only distinguished HTTP header when authenticating by OAuth2 isAuthorization
header. - If you are running Layman with development settings (e.g. starting it with
make start-dev
)- change values of environment variables:
OAUTH2_CLIENT_ID=VECGuQb00tWt8HZNkA4cxu6dnoQD5pF6Up3daAoK OAUTH2_CLIENT_SECRET=aY14rwkEKasNqBEZX8OnhpRk8lpHAfT7oKTlf4LriEK8oMZxhnGKcnt4bZ72pceNEl83B6LtBvhKr3BqBLFA80Pd6Ugav2rkc8bk7TE4LkaoB2qcBQmjiOiEpizsgZGx OAUTH2_AUTH_URL=http://localhost:8083/o/authorize OAUTH2_TOKEN_URL=http://wagtail:8000/o/token/ OAUTH2_INTROSPECTION_URL=http://wagtail:8000/o/introspect/ OAUTH2_INTROSPECTION_SUB_KEY=username OAUTH2_USER_PROFILE_URL=http://wagtail:8000/profile
- unset environment variable
OAUTH2_SCOPE
(previouslyOAUTH2_LIFERAY_SCOPE
) - after usual dev upgrade commands run also
make wagtail-build
- change values of environment variables:
- If your upgrade command ends with message
Error response from daemon: invalid IP address in add-host: "host-gateway"
, try to uninstall Docker Engine completely and install it again with Docker Compose plugin (see e.g. manual for Centos). Then run upgrade command again.
- #528 Add new data type
enum_wfs_wms_status
and create new string columnwfs_wms_status
inpublications
table in prime DB schema.
- #528 Fill column
wfs_wms_status
inpublications
table in prime DB schema. Set valueAVAILABLE
for each vector layer that is fully available in WFS and WMS and for each raster layer that is fully available in WMS. SetNOT_AVAILABLE
for all other layers andnull
for all existing maps. - #520 Set MetadataURL for each layer in WFS and WMS workspace in GeoServer.
- #769 New request GET Publications was added. It enables querying both layers and maps by single request.
- #769 New key
publication_type
was added to responses of requests GET Publications, GET Layers, GET Workspace Layers, GET Maps, and GET Workspace Maps. Possible values of the key arelayer
andmap
. - #528 New key
wfs_wms_status
was added to layer items in responses of requests GET Layers, GET Workspace Layers, and GET Publications. - #520 New element
MetadataURL
was added for each layer to GetCapabilities response of WFS2.0.0
and WMS1.3.0
. The element contains URL of CSW metadata record of the layer. - #800 Requests POST Workspace Layers and PATCH Workspace Layer support new parameter
time_regex_format
. Its value is later accessible in the new subkeywms
.time
.regex_format
in responses of GET Workspace Layer and PATCH Workspace Layer requests. - #764, #860 Layman accepts new types of QML styles:
- labels without symbology
- point clustering
- #857 Requests POST Workspace Layers and PATCH Workspace Layer accept
host.docker.internal
inexternal_table_uri
parameter to reachlocalhost
of host server. - #847 Fix publishing external table layers with
@
character or other dangerous characters in the username or in the password. - #833 Make Timgen WMS requests more robust (handle WMS errors, delayed retry, add timestamp to each request).
- #877 Use Docker Compose v2 (
docker compose
) in Makefile. As of now, all containers are named in the same way as previously. Old Makefile using Docker Compose v1 (docker-compose
) is archived asMakefile_docker-compose_v1
. It will be removed in the next minor release. - #815 Propagate
LAYMAN_PROXY_SERVER_NAME
value to GeoServer environment variable GEOSERVER_CSRF_WHITELIST. - #765 Remove Liferay from dev stack, use Wagtail CRX + Django OAuth Toolkit as new OAuth2 provider (authorization server).
- Upgrade Python dependencies
- flask 2.2.2 -> 2.3.2
- redis 4.5.1 -> 4.5.4
- owslib 0.27.2 -> 0.28.1
- requests 2.28.1 -> 2.31.0
- Upgrade Node.js Timgen dependencies
- vite 3.2.5 -> 3.2.7
- Document that temporal part of timeseries datetime dimension extracted by
time_regex
parameter is cut off, so the smallest possible unit of datetime dimension is one day.
2023-04-11
- #818 Fix publishing QML layer from external DB with geo-column name other than
wkb_geometry
. - #812 Fix processing of WFS-T queries with implicit namespace.
- Fix
time_regex
sample values in documentation and tests.
2023-03-01
- Change environment variable LAYMAN_CLIENT_VERSION:
LAYMAN_CLIENT_VERSION=v1.15.0
- #703 Create new json column
external_table_uri
inpublications
table in prime DB schema. - #703 Rename column
file_type
togeodata_type
inpublications
table in prime DB schema.
- #703 Fill column
external_table_uri
inpublications
table in prime DB schema. Value is set tonull
for all existing publications.
- #703 Endpoints POST Workspace Layers and PATCH Workspace Layer support new body parameter
external_table_uri
. - #703 Endpoints GET Workspace Layer and PATCH Workspace Layer return new keys:
original_data_source
with valuesfile
ordatabase_table
geodata_type
which replaces keyfile.file_type
that is deprecated nowdb
which replaces keydb_table
that is deprecated now
- #703 Attribute names in WFS-T requests must match to regex
^[a-zA-Z_][a-zA-Z_0-9]*$
, otherwise Layman error is raised. It applies to attributes of both internal and external tables, and only to attributes that not exist in database yet. - #703 Endpoint PATCH Workspace Layer raises exception if parameter
crs
is used withoutfile
parameter. It's the same behaviour as behaviour of POST Workspace Layers endpoint. - #772 Speed up endpoints GET Workspace Layer Thumbnail, GET Workspace Layer Style, GET Workspace Map Thumbnail and GET Workspace Map File.
- #755 Fix generation of some map thumbnails by downgrading Node.js of Timgen from v18 to v16.
- #755 Change Node.js dependencies of Timgen:
- http-server -> express 4
- cors-anywhere -> http-proxy-middleware 2
2023-01-11
- Change environment variable LAYMAN_CLIENT_VERSION:
LAYMAN_CLIENT_VERSION=v1.14.0
- If you are running Layman with development settings, run
make build-dev
make timgen-build
make client-build
- #348 Upgrade GeoServer to 2.21.2.
- #613 Workspace-specific WMS GetCapabilities documents includes LegendURL element for every style of every layer. Previously vector layers with QML style did not have it. GetLegendGraphic queries can be parametrized depending on layer style.
- In workspace-specific WMS GetCapabilities documents, style name consists only of style name without
<workspace>:
prefix. For example, formerly it wastestuser_wms:blue_style
, now it is onlyblues_style
. - #681 Enable to publish layer with specific SLD style.
- #681 Endpoints POST Workspace Layers and PATCH Workspace Layer normalize grayscale float raster files with alpha channel to grayscale without it with internal mask 0/1.
- Layman now uses official GeoServer docker image for demo and development purpose.
- #720 Upgrade Python dependencies
- celery 5.0.5 -> 5.2.7
- flask 2.0.2 -> 2.2.2
- unidecode 1.3.2 -> 1.3.6
- psycopg2-binary 2.9.3 -> 2.9.5
- owslib 0.22.0 -> 0.27.2
- requests 2.27.0 -> 2.28.1
- jsonschema 4.3.3 -> 4.17.3
- flower 1.0.0 -> 1.2.0
- selenium 4.1.0 -> 4.7.2
- cacheout 0.13.1 -> 0.14.1
- kombu 5.2.3 -> 5.2.4
- #720 Remove Python dependency "pyproj".
- #720 Upgrade Python dev dependencies
- pytest 6.2.5 -> 7.2.0
- watchdog 2.1.6 -> 2.2.0
- flake8 4.0.1 -> 6.0.0
- pycodestyle 2.8.0 -> 2.10.0
- pylint 2.7.4 -> 2.15.9
- autopep8 1.6.0 -> 2.0.1
- pytest-rerunfailures 10.2 -> 10.3
- pytest-timeout 2.0.2 -> 2.1.0
- #726 Upgrade Node.js of Laymen Test Client from v12 to v18 and dependencies:
- connect-redis 3 -> 6
- dotenv 8 -> 16
- http-proxy-middleware 0.21 -> 2
- isomorphic-unfetch 2 -> 3
- next 9 -> 13
- react 16 -> 18
- react-dom 16 -> 18
- redis 3 -> 4
- semantic-ui-react 0.88 -> 2
- xml-formatter 2 -> 3
- #732 Upgrade Node.js of Timgen from v10 to v18 and dependencies:
- ol 5 -> 7
- http-server 0.11 -> 14
- #732 Use "vite" instead of "parcel" and "babel" for dev & build of Timgen.
2022-11-22
- Change environment variable LAYMAN_CLIENT_VERSION:
LAYMAN_CLIENT_VERSION=v1.13.0
- #635 Create new boolean column
image_mosaic
inpublication
table.
- #635 Fill column
image_mosaic
inpublications
table in prime DB schema for all publications. Value of each publication is set tofalse
.
- #635 Endpoints POST Workspace Layers and PATCH Workspace Layer support publishing timeseries raster layers. Temporal information is read from file names using new body parameter time_regex. Timeseries data files keep their original slugified names in both Layman and GeoServer data directories (instead of renaming to
<layer_name>.<extension>
). Each timeseries is published to GeoServer as one ImageMosaic coverage store. - #446 If endpoint POST Workspace Layers receives grayscale input raster file (with or without alpha band) and if no input style was sent with the raster file, then Layman will automatically create and use customized SLD style to stabilize contrast of the layer in WMS.
- #446 Transparency of paletted GeoTIFF with transparent data values is respected in WMS. No custom style is needed. It was probably fixed in v1.16.0 by upgrade of GeoServer.
- #635 Endpoints GET Workspace Layer and PATCH Workspace Layer returns new subkeys:
file.paths
with list of paths to all main data filesimage_mosaic
for raster layers stating that layer was published to GeoServer using ImageMosaic coverage store (true
value for timeseries andfalse
otherwise)wms.time
for timeseries with list of available time instants and regular expression used to extract them from file names
- #635 Subkey
file.path
is marked deprecated for endpoints GET Workspace Layer and PATCH Workspace Layer. Usefile.paths
instead. - #635 Metadata sources returns new key 'temporal_extent'.
- #635 Endpoints POST Workspace Layers and PATCH Workspace Layer do not support combination of zip file and uncompressed main file.
- #697 Normalized GeoTIFF files are created as BigTIFF to enable publishing raster files greater than 4 GB.
- #660 Vector data files with invalid byte sequence (e.g. ShapeFile with invalid byte sequence in UTF-8 encoding) are first converted to GeoJSON, then cleaned with iconv, and finally imported to database.
- #667 Fix broken statistics during normalization of float rasters with big nodata value.
- #668 Fix broken size of raster in EPSG:3034 during normalization.
- #669 Fix slow publication of vector layers metadata to Micka. The reason was slow guessing of
spatial_resolution.scale_denominator
metadata property. - #701 After publishing to GeoServer, Layman checks that Layer is available in WMS & WFS GetCapabilities to prevent situation when GeoServer hides publishing error. It may happen when data file with wrong CRS is published.
2022-07-21
- Only versions 1.14.0 and newer can be upgraded to this version. For older versions, please upgrade to last 1.16.x first.
- Change environment variable LAYMAN_CLIENT_VERSION:
LAYMAN_CLIENT_VERSION=v1.12.0
- #576 Create new column
file_type
inpublications
table. - #541 Rename vector data DB tables to
layer_<uuid>
format.
- #576 Fill column
file_type
inpublications
table in prime DB schema for all publications. Value of each map will beNULL
. Value of each layer will be same as value offile.file_type
in GET Workspace Layer response (i.e.vector
,raster
, orunknown
).
- #551 Endpoints POST Workspace Layers and PATCH Workspace Layer support new body parameter overview_resampling.
- #576 Endpoints GET Layers and GET Workspace Layers returns new
file.file_type
key with the same value asfile.file_type
in GET Workspace Layer response (i.e.vector
,raster
, orunknown
). - #541 Layer name and map name can start with numbers.
- Maximum length of layer and map name is 210 characters.
- #606 Fix filtering and ordering publications by bounding box in case of publication with whole world bounding box in database.
- New environment variable OAUTH2_LIFERAY_SCOPE. Introduced in v1.16.2.
- New environment variable OAUTH2_LIFERAY_INTROSPECTION_SUB_KEY. Introduced in v1.16.1.
- #599 Layman supports uploading data files with upper or mixed case extensions. Introduced in v1.16.1.
- #541 Vector layers are stored in DB table with name in form
layer_<UUID>
, e.g.layer_96b918c6_d88c_42d8_b999_f3992b826958
, previously the name of the table was the same as name of the layer.
2022-06-20
- Stop Firefox instances if map thumbnail generation times out. Previously Firefox processes keeps running and were never stopped.
- Add logging for Micka response in case of exception.
2022-03-07
- Change environment variable LAYMAN_CLIENT_VERSION:
LAYMAN_CLIENT_VERSION=v1.11.0
- If you are using Liferay as OAuth2 provider, set new environment variable OAUTH2_LIFERAY_SCOPE:
If you are using Wagtail, do not set this variable at all (not even to empty string).
OAUTH2_LIFERAY_SCOPE=liferay-json-web-services.everything.read.userprofile
- If you are running Layman with development settings, run
make client-build
- New environment variable OAUTH2_LIFERAY_SCOPE.
2022-02-25
- Fix infinity loop when generating map thumbnail. One of consequences was that such infinity loops consumed all celery workers and it was not possible to complete POST/PATCH map or layer.
- Fix empty map thumbnail. In some cases, map thumbnail was generated as if anonymous user asks for the map. Now the thumbnail is generated as if user with writing rights asks for the map.
- New environment variable OAUTH2_LIFERAY_INTROSPECTION_SUB_KEY.
- #599 Layman supports uploading data files with upper or mixed case extensions.
2022-02-18
- Only versions 1.12.0 and newer can be upgraded to this version. For older versions, please upgrade to last 1.15.x first.
- Due to GeoServer upgrade, it's possible that
make upgrade-demo
fails with following error:
Waiting for GeoServer REST API, user=layman, url=http://geoserver:8080/geoserver/rest/workspaces/
Traceback (most recent call last):
File "src/wait_for_deps.py", line 158, in <module>
main()
File "src/wait_for_deps.py", line 88, in main
response.raise_for_status()
File "/usr/local/lib/python3.8/dist-packages/requests/models.py", line 960, in raise_for_status
raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 401 Client Error: for url: http://geoserver:8080/geoserver/rest/workspaces/
If you encounter such error, you can use script upgrade_v1_16_fix_gs.sh
for fixing this issue. Be aware, that you will lose some security GeoServer settings, like Layman user and admin password, so you need to set them again after. The script needs to be run from Layman`s root directory:
make stop-demo
sh src/layman/upgrade/upgrade_v1_16_fix_gs.sh
After the script finishes, either set GEOSERVER_ADMIN_PASSWORD or create LAYMAN_GS_USER in GeoServer GUI.
- Set new environment variable LAYMAN_INPUT_SRS_LIST
- Change LAYMAN_CLIENT_VERSION to
v1.10.0
- Unset environment variable LAYMAN_SETTINGS_MODULE, it has no effect anymore.
- If you are running Layman with development settings, run
make geoserver-build
make timgen-build
make client-build
- #64 Create new column
srid
inpublications
table.
- #64 Native CRS of previously uploaded layers is set to
EPSG:3857
. - #64 Native CRS of previously uploaded maps is set according their composition file (either
EPSG:3857
orEPSG:4326
) and their composition file is upgraded to version 2.0.0.
- #64 Upgrade GeoServer to 2.15.2, because 2.13.0 had serious problem with transformations of EPSG:5514.
- #64 Responses of GET Layers, GET Workspace Layers, GET Workspace Layer, PATCH Workspace Layer, GET Maps, GET Workspace Maps, GET Workspace Map, PATCH Workspace Map contains new attributes
native_crs
with native CRS in form "EPSG:<code>", e.g. "EPSG:4326"native_bounding_box
with coordinates in native CRS [minx, miny, maxx, maxy]
- #64 New environment variable LAYMAN_INPUT_SRS_LIST
- #64 Layman supports import of layers in EPSG:3034, EPSG:3035, EPSG:5514, EPSG:32633, EPSG:32634 and EPSG:3059.
- #64 New raster layers are normalized in native CRS. New vector layers are imported into DB also in native CRS. Existing layers (normalized raster files, vector tables in DB) are kept in
EPSG:3857
until they are patched with another file, or deleted. - #519 Endpoints GET Layers, GET Workspace Layers, GET Maps, GET Workspace Maps support new query parameters bbox_filter_crs and ordering_bbox_crs.
- #64 Layer thumbnails are generated in native CRS of the layer.
- #64 WMS proxy was added to WMS endpoint. In case of some special WMS GetMap requests, it changes requested CRS to fix some GeoServer issues.
- #64 For layers in
EPSG:5514
and WFS requests inCRS:84
, the features may have wrong coordinates by hundreds of meters. For requests inEPSG:4326
, coordinates are correct. - #572 Endpoints POST Workspace Layers and PATCH Workspace Layer accept also raster files with
.jpeg
extension . - #64 Map compositions are validated against map-composition-schema defined in
describedBy
key of map composition data JSON. Layman now supports only map compositions in version 2. - #489 Error responses from Micka and GeoServer are logged into log and also propagated as part of raised exception, so they can be seen from flower.
- #548 Suppress GeoServer HTTP error 409 when setting layer access rights if they already have the same value.
- #548 If Micka returns HTTP error 500 on CSW/SOAP Insert/Update/Delete, retry the request.
- #548 If GeoServer returns HTTP error 500 on GetCapabilities, retry the request.
- Remove LAYMAN_SETTINGS_MODULE, import
src/layman_settings.py
directly. - #555 Upgrade Selenium from 3 to 4
- #555 Use Firefox instead of Chrome in Selenium for map thumbnail generation and Layman Test Client tests.
2021-12-06
- #525 Keep NoData value in normalized raster files. Also NoData values are normalized as transparent always, even if Alpha channel is available.
2021-11-18
- #169 POST Workspace Layers accepts also compressed data files in ZIP format (
*.zip
) infile
parameter. PATCH Workspace Layer accepts also data file in ZIP format (*.zip
) infile
parameter. ZIP archives can be also uploaded by chunks. - #503 Raster data (e.g. GeoTIFF, JPEG2000, PNG, JPEG) sent on POST Workspace Layers and PATCH Workspace Layer are compressed during normalization to decrease occupied disk space.
- #232 Prefixes '>=' or '==' can be used in MICKA_ACCEPTED_VERSION environment variable.
- Documentation describes how to use external images in QML styles in POST Workspace Layers and PATCH Workspace Layer requests; see
style
parameter. - #169 GET Workspace Layer returns path to main file inside archive if zipped file was sent (key
file.path
). - #465 Fix situation, when Layman does not start if *.qgis file of the first layer with QML style does not exist. It was already fixed in v1.14.1.
- #464 Fix publishing layers with unusual attribute names (e.g.
x,
orČíslo
) and QML styles. It was already fixed in v1.14.1. - #459 Fix situation, when sometimes publication stayed in PENDING status after failure. It was already fixed in v1.14.1.
- #502 Fix error message, when invalid raster file is sent.
- Fix: Layers, which were created in Layman, but not published in GeoServer due to any validation/error can now be patched. Previously internal error was raised for every PATCH Workspace Layer call.
- Rename item
username
toworkspace
in error 41. - Detailed test-related documentation for developers.
- #487 Upgrade
- flask from 2.0 to 2.0.2+
- celery from 4.4.7 to 5.0.5
- kombu from 4.6.10 to 5.1.0
- flower from 0.9.7 to 1.0.0
- jsonschema from 3.2.0 to 4.0.1
- psycopg2-binary from 2.8.6 to 2.9.1
- requests from 2.25.1 to 2.26.0
- unidecode from 1.2.0 to 1.3.2
2021-09-14
- #465 Fix situation, when Layman does not start if *.qgis file of the first layer with QML style does not exist.
- #464 Fix publishing layers with unusual attribute names (e.g.
x,
orČíslo
) and QML styles. - #459 Fix situation, when sometimes publication stayed in PENDING status after failure
2021-09-08
-
It's strongly recommended to backup data directories, especially
deps/postgresql/data
, because of database upgrade. -
After stopping layman and backing up data directories, you need to migrate PostgreSQL data directory from v10 to v13. We created script that automatically migrates two databases:
gis
(Layman's database)hsrs_micka6
(Micka's database, only if exists)
If you use other databases in the postgres instance, their migration is up to you (you can inspire inside our script).
Migration script:
# Enter your layman's root directory. cd /path/to/your/layman/instance # Run script for DB migration. # It's necessary to run this script from layman's root directory ./src/layman/upgrade/upgrade_v1_14_postgres.sh
It may take some time to run this script and it will produce large temporary files (database dumps).
-
Change LAYMAN_CLIENT_VERSION to
v1.9.0
-
Set new environment variables
- LAYMAN_GS_NORMALIZED_RASTER_DIRECTORY=normalized_raster_data
- If you are running Layman with development settings, set value to
normalized_raster_data_dev
instead
- If you are running Layman with development settings, set value to
- DEFAULT_CONNECTION_TIMEOUT=10
- LAYMAN_GS_NORMALIZED_RASTER_DIRECTORY=normalized_raster_data
-
If you are running Layman with development settings, run
make build-dev
make client-build
make timgen-build
- All bounding boxes are cropped not to exceed extent of EPSG:3857 projection ([-20026376.39, -20048966.10, 20026376.39, 20048966.10]) in all sources except filesystem and DB table. Only bounding boxes are affected, not data itself.
- #167 Allow publishing also raster geospatial data using POST Workspace Layers and PATCH Workspace Layer.
- Following formats are supported:
- Following input combinations of bands and color interpretations are supported:
- Following input CRS are supported:
- EPSG:3857
- EPSG:4326
- Published raster files are normalized before registering to GeoServer. Normalization includes conversion to GeoTIFF in EPSG:3857 with overviews (pyramids). NoData values are normalized as transparent only if Alpha band is not available and NoData is set for each band. Normalized rasters are stored in
normalized_raster_data
directory inside LAYMAN_DATA_DIR. Normalized GeoTiff is then published as new layer (coverage) on GeoServer. - Raster layers are not stored in DB table. WFS is not available for raster layers. GET Workspace Layer and PATCH Workspace Layer do not return items
wfs
anddb_table
for raster layers. - Calling WFS-T endpoint starts asynchronous tasks only for vector layers.
- #167 Add
file_type
item tofile
item in GET Workspace Layer response to distinguish raster and vector layers. - #167 Metadata property
scale_denominator
was removed. Its value is now accessible as subproperty of newspatial_resolution
metadata property. The new metadata propertyspatial_resolution
has one of two subproperties:scale_denominator
used for vector dataground_sample_distance
used for raster data
- #367 When publishing or patching layer or map, it's bounding box is limited to extent of EPSG:3857 projection in all sources except filesystem and DB table. Only bounding box is affected, not data itself.
- #347 When ordering publications by title, only letters, numbers, and spaces are considered.
- #382 Map composition schema allows new properties
hs.format.externalWFS
andworkspace
. It was already introduced in v1.13.1. - #385 The
style
property can be specified using a string in SLD format, URL to SLD file or JSON object. It was already introduced in v1.13.1. - Errors
19
: 'Layer is already in process.' and29
: 'Map is already in process.' are merged into49
: 'Publication is already in process.'. - Fix: In case of synchronous error during PATCH Workspace Layer layer data on the server remains always untouched. Previously, layer data on the server could be lost.
- Fix: Raise error when more than one main layer file is sent in POST Workspace Layers or PATCH Workspace Layer.
- Fix #408: Skip non-WMS layers in thumbnail generation. Previously thumbnail generation failed.
- #418 Combination of none geometry type in layer file and any geometry type in QML file is allowed from now.
- #380 Enable to upload geojson with "id" attribute with non-unique values.
- #383 Add new Makefile target
upgrade-after-timeout
to finish upgrade in case of GeoServer call timeout. - Fix GET Workspace Layer documentation;
style
item was incorrectly used instead ofsld
. - #347 Upgrade PostgreSQL 10 to 13.3 and PostGIS 2.4 to 3.1. Use docker image from layermanager/[email protected], source is located at layermanager/[email protected].
- #367 Upgrade gdal from 2.4 to 3.3. Use docker image from osgeo/[email protected], source is located at osgeo/[email protected].
- #367 Upgrade also
- python from 3.6 to 3.8
- flask from 1.1 to 2.0
- werkzeug from 1 to 2
- chromium from 77+ to 90+
- chromedriver from 77+ to 90+
- attrs from 20 to 21
- click from 7 to 8
- itsdangerous from 1 to 2
- jinja2 from 2 to 3
- markupsafe from 1 to 2
- pytest-rerunfailures from 9 to 10
- gunicorn from 19 to 20
2021-06-25
- Fix #405. In some specific situations, GET Workspace Layer and GET Workspace Map returned PENDING state although asynchronous tasks were already finished. Also PATCH request to these publications was not possible. It's fixed now.
2021-06-07
- Map composition schema allows new properties
hs.format.externalWFS
andworkspace
(#382). Thestyle
property can be specified using a string in SLD format, URL to SLD file or JSON object (#385).
2021-05-26
- Change LAYMAN_CLIENT_VERSION to
v1.8.0
- If you are running Layman with development settings, run also
make client-build
.
- If you are running Layman with development settings, run also
- If you are getting Layman using Git, run
git remote set-url origin https://github.com/layermanager/layman.git
- If you are running Layman with development settings, run
make build-dev
make timgen-build
- Rename filesystem directory containing workspaces from
users
toworkspaces
- Layman GitHub repository was moved from
https://github.com/jirik/layman
to https://github.com/LayerManager/layman. Thanks to GitHub redirect functionality, all former urls are deprecated and still work. The same change is done for Layman Test Client (https://github.com/LayerManager/layman-test-client) - #159 WFS-T or PATCH Workspace Layer request causes
- update of bounding box and thumbnail of each edited layer
- bounding box is updated in DB, QGIS file, WMS/WFS capabilities, and CSW metadata record
- thumbnail is updated in filesystem and it is accessible using GET Workspace Layer Thumbnail
- update of thumbnail of each map that points to at least one edited layer (thumbnail is updated in filesystem and accessible using GET Workspace Map Thumbnail)
These updates run in asynchronous chain. Documentation describes concurrency of WFS-T request and its asynchronous chains with another WFS-T request, POST Workspace Layers, PATCH Workspace Layer, DELETE Workspace Layer, DELETE Workspace Layers, PATCH Workspace Map, DELETE Workspace Map, and DELETE Workspace Maps.
- update of bounding box and thumbnail of each edited layer
- #159 Object
layman_metadata
was added to GET Workspace Layer, GET Workspace Map, PATCH Workspace Layer, and PATCH Workspace Map responses. Attributelayman_metadata.publication_status
can be used for watching global state of publication (updating, complete, incomplete). - #331 Query parameter full_text_filter is also used for substring search in endpoints GET Layers, GET Worksapce Layers, GET Maps and GET Workspace Maps.
- Filesystem directory containing workspaces was renamed from
users
toworkspaces
- #159 Bounding box is sent explicitly to GeoServer for every layer.
- #72 Pipenv upgraded to v2020.11.15
2021-04-21
- Change LAYMAN_CLIENT_VERSION to
v1.7.0
- If you are running Layman with development settings, run also
make client-build
.
- If you are running Layman with development settings, run also
- Run standalone upgrade before starting Layman.
- Schema migrations (e.g.
ALTER TABLE ...
statements) and data migrations are split into separate lists. All schema migrations run before data migrations.
- Adjust prime DB schema for two migration types, schema and data. Add new data type
enum_migration_type
, add new columnmigration_type
to tabledata_version
, insert second record to the table. - #257 Adjust prime DB schema for full-text filtering (install unaccent, create immutable
my_unaccent
function, index unaccentedtitle
column inpublications
table). - #257 Create new column
updated_at
inpublications
table. - #257 Create new column
bbox
inpublications
table.
- #257 Fill column
updated_at
inpublications
table. - #302 Add URL parameter
LAYERS
to metadata properties wms_url and wfs_url in existing metadata record of each layer. This non-standard parameter holds name of the layer at given WMS/WFS. - #257 Fill column
bbox
inpublications
table.
- #257 Endpoints GET Layers, GET Worksapce Layers, GET Maps and GET Workspace Maps can filter, order, and paginate results according to new query parameters. All request parameters, response structure and response headers are described in GET Layers documentation.
- #257 Responses of GET Layers, GET Workspace Layers, GET Workspace Layer, PATCH Workspace Layer, GET Maps, GET Workspace Maps, GET Workspace Map, and PATCH Workspace Map contains new attributes
updated_at
with date and time of last PATCH/POST request to given publicationbounding_box
with bounding box coordinates in EPSG:3857
- #302 Metadata properties wms_url and wfs_url contain new URL parameter
LAYERS
whose value is name of the layer. It's non-standard way how to store name of the layer at given WMS/WFS instance within metadata record. - Migration version was split in GET Version to last-schema-migration and last-data-migration. Original last-migration stays as deprecated alias to last-schema-migration.
2021-03-16
- Change LAYMAN_CLIENT_VERSION to
v1.6.1
- If you are running Layman with development settings, run also
make client-build
.
- If you are running Layman with development settings, run also
- #273 New endpoints GET Layers and GET Layers to query publications in all workspaces.
- #273 All Layer(s) and Map(s) endpoints with
<workspace_name>
in their URL were renamed to 'Workspace Layer...' and 'Workspace Map' in the documentation. - #273 Item workspace was added to response of GET Workspace Layers and GET Workspace Maps
2021-03-10
- #285 Fix upgrade 1.10.0 error (CSW get_template_path_and_values now works even if the layer is not in GeoServer and/or in DB).
2021-03-04
- Set environment variables
- LAYMAN_QGIS_HOST=nginx
- LAYMAN_QGIS_PORT=80
- LAYMAN_QGIS_PATH=/qgis/
- LAYMAN_QGIS_DATA_DIR=/qgis/data/demo
- If you are running Layman with development settings, set environment variables
- LAYMAN_QGIS_HOST=nginx-qgis
- LAYMAN_QGIS_PORT=80
- LAYMAN_QGIS_PATH=/qgis/
- LAYMAN_QGIS_DATA_DIR=/qgis/data/dev
- Change LAYMAN_CLIENT_VERSION to
v1.5.1
- If you are running Layman with development settings, run also
make client-build
.
- If you are running Layman with development settings, run also
- Run standalone upgrade before starting Layman.
- #154 New column
style_type
inpublications
table is created. - #154 All workspaces are checked, that their name did not end with
_wms
and is not equal toworkspaces
. If there is any conflict found, startup process is stopped with error code 45. In that case, please downgrade to the previous minor release version and contact Layman contributors. - #154 All layers are copied into dedicated WMS GeoServer workspace. Styles are also moved into that workspace.
- #154 Maps with URLs pointing to any layer stored in GeoServer are rewritten to dedicated WMS workspace.
- #154 Following metadata properties are updated:
- layers:
wms_url
,graphic_url
,identifier
,layer_endpoint
- maps:
graphic_url
,identifier
,map_endpoint
,map_file_endpoint
- layers:
- #154 Rename internal directories from
/users/{workspace}/layers/{layer}/input_sld
to/users/{workspace}/layers/{layer}/input_style
- #154 Fill column
style_type
with"sld"
for all layers.
- #154 Enable to publish QGIS layer styles (QML)
- For endpoints POST Workspace Layers and PATCH Workspace Layer, parameter sld is replaced with the new parameter style and marked as deprecated. In response to endpoints GET Workspace Layer and PATCH Workspace Layer, sld is replaced by the new style item and marked as deprecated. Layman Test Client now uses style parameter.
- Parameter style accepts also QGIS layer style (QML). Layman Test Client enables to select also
*.qml
files. - Endpoint GET Workspace Layer returns in
style
attribute alsotype
, either"sld"
or"qml"
. - Endpoint GET Workspace Layer Style returns SLD style or QML style.
- Treat attribute names in QML (also known as 'launder').
- New docker container with QGIS server called
qgis
in demo configuration. - New directory LAYMAN_QGIS_DATA_DIR is used to store layer QGS files.
- WMS is moved to dedicated GeoServer workspace whose name is composed from Layman's workspace name and suffix
_wms
. WFS remains in GeoServer workspace whose name is equal to Layman's workspace name. - Layers with QGIS style are published on GeoServer dedicated WMS workspace through WMS cascade from QGIS server, where they are stored as QGS file. All layers are published directly from PostgreSQL database to GeoServer for WFS workspace.
- SLD style published in dedicated WMS GeoServer workspace.
- New environment variables LAYMAN_QGIS_HOST, LAYMAN_QGIS_PORT, LAYMAN_QGIS_PATH, and LAYMAN_QGIS_DATA_DIR.
- Workspace name can not end with '_wms'. In such case, error with code 45 is raised.
- During startup, LAYMAN_OUTPUT_SRS_LIST is ensured for all QGIS layers.
- #67 Workspace-related REST API endpoints (maps, layers) were moved from
/rest/*
to/rest/workspaces/*
. Whole path is for example:/rest/workspaces/<workspace_name>/layers
. Old endpoints are marked as deprecated (withDeprecation
header in response) and will be removed with next major release. - #99 New endpoint GET Version. It is also available in Layman Test Client.
- Endpoint GET Workspace Layer returns JSON object for db_table item. Previously incorrectly returns DB table name directly in db_table instead of name subitem.
- Undocumented attributes
type
andid
were removed from GET Workspace Layer and Get Workspace Map responses. - To indicated if Layman is running, you can call GET Version.
- Optional standalone upgrade command was implemented to avoid Gunicorn timeout.
2021-01-18
- If you are migrating from v1.9.0 with
5514
included in LAYMAN_OUTPUT_SRS_LIST, you need to manually replace definition of 5514 indeps/geoserver/data/user_projections/epsg.properties
file withand restart GeoServer.5514=PROJCS["S-JTSK / Krovak East North",GEOGCS["S-JTSK",DATUM["System Jednotne Trigonometricke Site Katastralni",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[572.213,85.334,461.94,4.9732,-1.529,-5.2484,3.5378],AUTHORITY["EPSG","6156"]],PRIMEM["Greenwich",0.0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.017453292519943295],AXIS["Geodetic longitude",EAST],AXIS["Geodetic latitude", NORTH],AUTHORITY["EPSG","4156"]],PROJECTION["Krovak",AUTHORITY["EPSG","9819"]],PARAMETER["latitude_of_center",49.5],PARAMETER["longitude_of_center",24.833333333333332],PARAMETER["azimuth", 30.288139722222223],PARAMETER["pseudo_standard_parallel_1",78.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",0.0],PARAMETER["false_northing",0.0],UNIT["m", 1.0],AXIS["X",EAST],AXIS["Y",NORTH],AUTHORITY["EPSG","5514"]]
2021-01-14
-
Set environment variable LAYMAN_OUTPUT_SRS_LIST that contains list of EPSG codes that will appear as output spatial reference systems in both WMS and WFS. Choose any EPSG codes you need and add two mandatory systems
4326
and3857
.- Sample SRS list for World:
4326,3857
- Sample SRS list for Czech Republic:
4326,3857,5514,102067,32633,32634
- Sample SRS list for Latvia:
4326,3857,3059
During startup, Layman passes definitions of each EPSG to GeoServer, either from its internal sources, or from epsg.io. If download from epsg.io fails, warning
Not able to download EPSG definition from epsg.io
appears in log. In such case, you can set EPSG definition manually and restart GeoServer.If you want to be sure that GeoServer understands each of your SRS that you passed into LAYMAN_OUTPUT_SRS_LIST, visit GeoServer's admin GUI, page Services > WMS or WFS, and click on Submit. If you see no error message, everything is OK.
It can be also useful to generate output bounding box for every supported SRS in WMS Capabilities documents. You can control this in GeoServer's admin GUI, page Services > WMS, checkbox "Output bounding box for every supported CRS".
- Sample SRS list for World:
Data manipulations that automatically run at first start of Layman:
- Data version table is created.
- GeoServer's security rules of each publication are recalculated according to publication's access rights. It fixes #200 also for existing layers.
- Mistakenly created users and roles in GeoServer, created for public workspaces, are deleted.
- One of OAuth2 HTTP headers,
AuthorizationIssUrl
, is optional if and only if there is only one OAuth2 authorization server registered at Layman. The header was mandatory in 1.8.0 and sooner. - Information about data version including migration ID is stored in PostgreSQL.
- When public workspace is created, only workspace is created on GeoServer. Previously also user and roles were mistakenly created.
2021-01-06
- The fix of #200 affects only newly posted or patched layers. To fix access rights on existing layers, you can either wait for 1.9 release (2021-01-15), or manually add ROLE_AUTHENTICATED for every layer security rule which already contains ROLE_ANONYMOUS.
- #200 Access rights EVERYONE is correctly propagated to GeoServer also for authenticated users. Only newly posted or patched layers are affected by the fix.
- One of OAuth2 HTTP headers,
AuthorizationIssUrl
, is optional if and only if there is only one OAuth2 authorization server registered at Layman. The header was mandatory before 1.8.1 in any case.
2020-12-14
- Set environment variable LAYMAN_AUTHN_HTTP_HEADER_NAME that serves as a secret. Only combination of lowercase characters and numbers must be used for the value.
- Set environment variable LAYMAN_PRIME_SCHEMA. It is the name of the DB schema, so it is subject to the restrictions given by PostgreSQL. We recommend value
_prime_schema
if possible. - Replace LAYMAN_AUTHZ_MODULE environment variable with GRANT_CREATE_PUBLIC_WORKSPACE and GRANT_PUBLISH_IN_PUBLIC_WORKSPACE. The following settings correspond best with behaviour of previously used LAYMAN_AUTHZ_MODULE:
LAYMAN_AUTHZ_MODULE=layman.authz.read_everyone_write_owner
(variable to remove)GRANT_CREATE_PUBLIC_WORKSPACE=
(new variable)GRANT_PUBLISH_IN_PUBLIC_WORKSPACE=
(new variable)
LAYMAN_AUTHZ_MODULE=layman.authz.read_everyone_write_everyone
(variable to remove)GRANT_CREATE_PUBLIC_WORKSPACE=EVERYONE
(new variable)GRANT_PUBLISH_IN_PUBLIC_WORKSPACE=EVERYONE
(new variable)
- Change LAYMAN_CLIENT_VERSION to
v1.4.1
- If you are running Layman with development settings, run also
make client-build
.
- If you are running Layman with development settings, run also
- Starting version 1.8, each user can have zero or one personal workspaces, not more (in other words, one Liferay account can be linked with zero or one personal workspaces). Layman automatically checks this at first start. If two workspace linked to single user are fond, they are reported and Layman initialization is stopped. In such case, choose which one of reported workspaces should be the only personal workspace of the user, delete authn.txt file from the other workspace, and restart layman. The other workspace becomes public.
- If you are running Layman with development settings, run also
make timgen-build
.
- We started to strictly distinguish workspace as place, where publications are stored, and user as representation of person in Layman system. This change was reflected in following places:
- In REST API documentation,
username
was replaced withworkspace_name
. It's not breaking change, as it's only naming of part of URL path. - Error messages and data, as well as Layman Test Client, also distinguishes workspace and user/username.
- In REST API documentation,
- Each workspace is now either personal, or public. Personal workspace is automatically created when user reserves his username. Creation of and posting new publication to public workspaces is controlled by GRANT_CREATE_PUBLIC_WORKSPACE and GRANT_PUBLISH_IN_PUBLIC_WORKSPACE.
- #28 It is possible to control also read access to any publication per user.
- New attribute
access_rights
added to GET Workspace Layers, GET Workspace Layer, GET Workspace Maps and GET Workspace Map responses. - New parameters
access_rights.read
andaccess_rights.write
added to POST Workspace Layers, PATCH Workspace Layer, POST Workspace Maps and PATCH Workspace Map requests. These new parameters are added to Test Client GUI. - Default values of access rights parameters (both read and write) of newly created publications are set to current authenticated user, or EVERYONE if published by anonymous.
- New attribute
- #28 At first start of Layman, access rights of existing publications are set in following way:
- everyone can read and only owner of the workspace can edit publications in personal workspaces
- anyone can read or edit publications in public workspaces.
- Security rules on GeoServer on workspace level (workspace.*.r/w) are deleted and replaced with security rules on layer level (workspace.layername.r/w) according to rules on Layman side.
- #28 Only publications with read access for EVERYONE are published to Micka as public.
- #28 New REST endpoint GET Users with list of all users registered in Layman. This new endpoint was added to Test Client into tab "Others".
- #28 WMS endpoint accepts same authentication credentials (e.g. OAuth2 headers) as Layman REST API endpoints. It's implemented using Layman's WFS proxy. This proxy authenticates the user and send user identification to GeoServer.
- #161 New method DELETE was implemented for endpoints DELETE Workspace Maps and DELETE Workspace Layers.
- #178 New attribute
screen_name
is part of response for GET Users and Get Current User. - #178 LifeRay attribute
screen_name
is preferred for creating username in Layman. Previously it was first part of email. - Attribute
groups
is no longer returned in GET Workspace Map File response. - #28 New environment variable LAYMAN_PRIME_SCHEMA.
2020-12-14
2020-11-30
There is a critical bug in this release, posting new layer breaks Layman: #175 It's solved in v1.7.4.
- If published layer has empty bounding box (i.e. no features), its bounding box on WMS/WFS endpoint is set to the whole World. This happens on POST Workspace Layers and PATCH Workspace Layer.
- #40 Enable to upload empty ShapeFile.
2020-11-09
- #133 Attribute
url
of GET Workspace Maps response was repaired. Previously, it incorrectly used map name instead of username in the URL path.
2020-09-30
- Change LAYMAN_CLIENT_VERSION to
v1.3.0
- If you are running Layman with development settings, run also
make client-build
.
- If you are running Layman with development settings, run also
- Test Client contains also GET Workspace Layer Style endpoint.
- Return real SLD style in GET Workspace Layer Style instead of just metadata
- #109 Handle records without title in GET Workspace Layers / GET Workspace Maps
2020-09-30
- #65 Set environment variable LAYMAN_GS_AUTHN_HTTP_HEADER_ATTRIBUTE. Only combination of lowercase characters and numbers must be used for the value.
- #101 Change LAYMAN_CLIENT_VERSION from
v1.1.2
tov1.2.0
- If you are running Layman with development settings, run also
make client-build
.
- If you are running Layman with development settings, run also
- #65 WFS endpoint accepts same authentication credentials (e.g. OAuth2 headers) as Layman REST API endpoints. It's implemented using Layman's WFS proxy. This proxy authenticates the user and send user identification to GeoServer. In combination with changes in v1.6.0, Layman's
read-everyone-write-owner
authorization (when active) is propagated to GeoServer and user can change only hers layers. - #88 Attribute title was added to REST endpoints GET Workspace Layers and GET Workspace Maps.
- #95 When calling WFS Transaction, Layman will automatically create missing attributes in DB before redirecting request to GeoServer. Each missing attribute is created as
VARCHAR(1024)
. Works for WFS-T 1.0, 1.1 and 2.0, actions Insert, Update and Replace. If creating attribute fails for any reason, warning is logged and request is redirected nevertheless. - #96 New REST API endpoint GET Workspace Layer Style is created, which returns Layer default SLD. New attribute
sld.url
is added to GET Workspace Layer endpoint, where URL of Layer default SLD can be obtained. It points to above mentioned GET Workspace Layer Style. - #101 Test Client has new page for WFS proxy and is capable to send authenticated queries.
- #65 Layman automatically setup HTTP authentication attribute and chain filter at startup. Secret value of this attribute can be changed in LAYMAN_GS_AUTHN_HTTP_HEADER_ATTRIBUTE and is used by Layman's WFS proxy.
2020-08-19
- #97 Before v1.6, reserved
username
could be the same as LAYMAN_GS_USER. Starting at 1.6, this leads to conflict of two GeoServer users with the same name. This patch release comes with detection of this conflict (Layman error code 41).- If you encounter error 41, you can resolve the conflict by following steps:
- In GeoServer GUI, create new GeoServer user with another name to become new LAYMAN_GS_USER and give him LAYMAN_GS_ROLE and ADMIN roles
- In GeoServer GUI, remove the old LAYMAN_GS_USER user
- Change environment settings LAYMAN_GS_USER and LAYMAN_GS_PASSWORD for the new GeoServer user
- Restart Layman
- If you encounter error 41, you can resolve the conflict by following steps:
2020-08-19
- #69 If you are running Layman with development or test settings, set LAYMAN_SETTINGS_MODULE in your
.env
file tolayman_settings
. No action is required if you are running Layman based on demo settings (probably all production instances).
- #74 Layman user and role at GeoServer defined by LAYMAN_GS_USER and LAYMAN_GS_ROLE are now created automatically on Layman's startup if an only if new environment variable GEOSERVER_ADMIN_PASSWORD is provided. There is no need to set GEOSERVER_ADMIN_PASSWORD for other reason than automatically creating Layman user and Layman role.
- No change is required. If you are migrating existing instance, Layman user and role are already created, so you don't need to set GEOSERVER_ADMIN_PASSWORD. If this is your first Layman release, GEOSERVER_ADMIN_PASSWORD is set in
.env
files starting with this version, so Layman user and role at GeoServer will be automatically created on startup. - No need to run command
make geoserver-reset-default-datadir
from now on. This command was removed from make options.
- No change is required. If you are migrating existing instance, Layman user and role are already created, so you don't need to set GEOSERVER_ADMIN_PASSWORD. If this is your first Layman release, GEOSERVER_ADMIN_PASSWORD is set in
- #62 GeoServer Proxy Base URL is now automatically set on Layman's startup according to LAYMAN_GS_PROXY_BASE_URL. If you do not set the variable, value is calculated as LAYMAN_CLIENT_PUBLIC_URL+LAYMAN_GS_PATH. If you set it to empty string, no change of Proxy Base URL will be done on GeoServer side.
- #83 All layers are created as
GEOMETRY
type, so any other type can be added (for example polygons can be added to points). - #73 Layman users are automatically created on GeoServer (either at start up of Layman or when reserved) with separate role and workspace. Username is the same as in Layman, name of role is
"USER_"+username
, name of workspace is the same as username. Read and write permissions for workspace are set according to Layman's authorization (as of now read-everyone-write-everyone or read-everyone-write-owner). - New environment variables LAYMAN_GS_USER_GROUP_SERVICE and LAYMAN_GS_ROLE_SERVICE enable to control which user/group and role services are used at GeoServer. Not setting these variables means to use default services.
- #69 Three separate identical settings files (
layman_settings_demo.py
,layman_settings_dev.py
,layman_settings_test.py
) were merged into one filelayman_settings.py
. - If username used in REST API request path is not yet reserved, HTTP requests other than POST returns (e.g. GET) HTTP error 404 (Layman code 40). Previously in case of GET request, empty list was returned.
- List of GeoServer reserved workspace names was moved from
layman_settings.py
into source code (src\layman\common\geoserver\__init__.py
) - Undocumented authentication module
layman.authn.url_path.py
that was unused for a long time, was removed. - Python setting
PG_NON_USER_SCHEMAS
is now more explicit about forbidden schema names.
2020-06-18
- Metadata records are published in SOAP envelope of CSW and they are published on Micka as "Public".
- Upgrade Micka to version v2020.014. All versions between v2020.010 and v2020.014 should work well with Layman. If you are running other version than v2020.014, you can now set environment variable MICKA_ACCEPTED_VERSION to your version so that Layman accepts your version on startup.
- New environment variable MICKA_ACCEPTED_VERSION
2020-04-23
- Update Python dependencies
- Add
md_language
metadata property - Guess metadata properties
md_language
of both Layer and Map using pycld2 librarylanguage
of Layer using pycld2 libraryscale_denominator
of Layer using distanced between vertices
- Change multiplicity of
language
metadata property from1
to1..n
according to XML Schema - Remove
language
metadata property from Map according to XML Schema - Build Layman as a part of
make start-demo*
commands. - Run demo without Micka, fix #55
- Respect public URL scheme in REST API responses, fix #58
- Show public WMS and WFS URLs in metadata comparison, fix #54
- Change WFS endpoint from
/ows
to/wfs
, because/ows
capabilities pointed to/wfs
2020-04-15
- Change LAYMAN_CLIENT_VERSION from
v1.1.1
tov1.1.2
- Upgrade Layman test client to version 1.1.2, fixing reaching
static.css
without authentication - Extend map JSON schema with ArcGIS REST API layers and static image layers
2020-04-09
- Request Geoserver through http instead of public scheme, fix #57
2020-03-30
- Post metadata record if no one found during patch, fix #52
- Use EPSG:3857 bbox when generating thumbnail, fix #53
2020-03-29
- Change LAYMAN_CLIENT_VERSION from
v1.0.0
tov1.1.1
- Remove CSW_ORGANISATION_NAME_REQUIRED from environment settings
- If you are using Layman's
make
commands with-d
suffix, use these commands without the-d
suffix from now on (e.g.make start-demo-full-d
becomesmake start-demo-full
).
- Both PATCH Workspace Layer and PATCH Workspace Map automatically update also CSW metadata records.
- Use absolute URLs in responses of Layer and Map endpoints
- Add GET Workspace Layer Metadata Comparison and GET Workspace Map Metadata Comparison endpoints.
- Add
revision_date
metadata property - Add
metadata.comparison_url
to GET Workspace Layer and GET Workspace Map responses. - Upgrade Layman test client to version 1.1.1
- Environment settings CSW_ORGANISATION_NAME_REQUIRED is not used anymore as Micka v2020 accepts records without organisation names.
- Metadata properties wms_url and wfs_url point directly to GetCapabilities documents.
- Layman now uses WMS 1.3.0 and WFS 2.0.0 in communication with GeoServer and in CSW metadata records.
- All
make
commands withdocker-compose up
now run in the background. Foreground running was removed. Usedocker logs
to inspect container logs.
2020-03-20
- Change CSW_URL from
http://micka:80/csw
tohttp://micka:80/micka/csw
- Fix URL prefix of Micka GUI in Layman v1.2.0, #49
2020-03-18
- Upgrade Micka to v2020.010.
- Add CSW_PROXY_URL to distinguish between internal CSW URL for Layman and public CSW URL for clients.
- Rename host of LAYMAN_TIMGEN_URL from
hslayers
totimgen
. - Add MICKA_HOSTPORT for demo run.
-
Publish metadata record of map to Micka on POST Workspace Maps.
-
Add
metadata
info to GET Workspace Map response. -
Extend
metadata
info withidentitier
attribute in case of both layer and map. -
Add documentation of map metadata properties
-
Use
metadataStandardName
andmetadataStandardVersion
in metadata templates -
Adjust metadata XML instead of using string formatting
-
Rename metadata properties. All metadata-record-related properties have
md_
prefix. Dataset-related properties do not have any special prefix.Old name New name data_identifier
identifier
data_organisation_name
organisation_name
dataset_language
language
date
publication_date
date_stamp
md_date_stamp
file_identifier
md_file_identifier
organisation_name
md_organisation_name
-
Add LaymanError 38 (Micka HTTP or connection error)
-
Treat attribute names in SLD (aka 'launder'), #45
-
Fix Micka's About URL in wait_for_deps
-
Assert version of Micka on startup.
-
Load data into redis on startup even in Flower.
-
Better handle Micka's HTTP errors, #43
-
Rename hslayers container to timgen (Thumbnail Image Generator)
2020-03-16
- Treat attribute names in SLD (aka 'launder'), #45
- Fix Micka's About URL in wait_for_deps
2020-03-09
- Assert version of Micka on startup.
2020-03-02
- Mute 500 error on CSW delete.
2020-02-28
Prior to 1.1.5, existing usernames, layers and maps were not imported sometimes on Layman's startup, that made it appear as they are missing. It should be fixed now by loading data into redis on startup even in Flower container.
2020-02-19
- Better handle Micka's HTTP errors, #43
2020-01-31
- Improve documentation of enviroment variables
- Show real info instead of just SUCCESS status in successfully finished tasks within GET Workspace Layer, GET Workspace Map, etc.
- Check freshness of links and image URLs in documentation within CI
- Add few words about Layman in EN ans CS
2019-12-26
- Allow requesting layman from other docker containers (fix #38)
2019-12-23
- Fix PENDING in state after celery task is removed from redis
2019-12-23
- Publish metadata record of layer to Micka on POST Workspace Layers. Connection to Micka is configurable using CSW_* environment variables.
- Delete metadata record of layer from Micka on DELETE Workspace Layer.
- Add
metadata
info to GET Workspace Layer response, including CSW URL and metadata record URL. - Documentation of metadata
- LAYMAN_PROXY_SERVER_NAME environment variable
- Do not depend on specific version of chromium-browser and chromedriver
- Save write-lock to redis on POST, PATCH and DELETE of Layer and Map
- Enable to run Layman using multiple WSGI Flask processes by moving information about tasks from memory to redis
- Use Flask decorators
- Unify async task names, call task methods in the same way (src/layman/common/tasks.py#get_task_methods, src/layman/common/tasks.py#get_task_methods#tasks_util.get_chain_of_methods, src/layman/celery.py#set_publication_task_info)