Commit graph

178 commits

Author SHA1 Message Date
f255c3c8a5 feat(websockets): Authenticate with signed tokens.
Authentication is now done using a signed token provided by the Django
server, sent by the JS client and checked by the WebSocket server.

The token contains a `permissions` key that's checked to ensure the user
has access to the map "room", where events will be shared by the peers.
2024-06-07 18:21:30 +02:00
Yohan Boniface
99207638d9 fix: make sure to order datalayer versions by time
When we changed from id to uuid, we broke the sorting, which
supposed to have a constant id as string prefix from version to
the other.
2024-03-25 20:13:34 +01:00
Yohan Boniface
288c7983fc fix: Path.replace called instead str.replace 2024-03-25 14:40:48 +01:00
Yohan Boniface
01e94d45dc
Merge pull request #1666 from umap-project/almet/fix-same-second-last-modified
fix: Replace Last-Modified with custom headers
2024-03-14 18:15:36 +01:00
David Larlet
d050a70017
Set CORS-related header for oEmbed and map views 2024-03-13 14:02:34 -04:00
Yohan Boniface
409c79415f fix: deal with i18n in oembed URLs 2024-03-13 18:03:20 +01:00
29992e10e6 fix: Replace Last-Modified with custom headers.
`X-Datalayer-Version` and `X-Datalayer-Reference` are now used instead
of the `Last-Modified` and `If-Unmodified-Since` headers.

`Last-Modified` is granular to the second, which led to problems with
the versionning. The new system uses timestamps instead.

This commit also changes the way versions were created. Previously,
the associated version was coming from two different places:
the last modified time from the filesystem and a `time.time()` call
done when saving the model, which could result in the two getting
out of sync.
2024-03-08 22:34:54 +01:00
Yohan Boniface
6396ee5e58
Merge pull request #1661 from umap-project/schema-i18n
Add minimal schema module
2024-03-05 17:57:40 +01:00
Yohan Boniface
6ed5ebc9fb
Merge pull request #1630 from umap-project/datalayer-uuids
chore: replace datalayer ids with uuids
2024-03-05 17:26:50 +01:00
Yohan Boniface
bfcdfdcfc1 chore: bump ruff 2024-03-05 17:23:49 +01:00
b0c1f56979 chore: factorize json.dumps in an util function.
In order to use the Django JSON Encoder by default.
2024-03-05 11:25:37 +01:00
Yohan Boniface
e7bd94a099 wip: do not expose UMAP_SCHEMA for now 2024-03-04 17:43:40 +01:00
Yohan Boniface
a7a854dd74 wip: move default options to schema
This commit also introduce a new settings UMAP_SCHEMA, that could
be used to easily override schema default, like the default color, the
default path weigth and so on. I'm not documenting yet, because I'm
not yet totally sure we want this.
2024-03-04 17:43:40 +01:00
Yohan Boniface
40d0095b3c
Merge pull request #1658 from umap-project/catch-mail-error
fix: catch SMTPException when sending secret edit link
2024-03-01 17:45:18 +01:00
d0738e93e7 fix: allow empty datalayers reference on merges.
Previously, an error was thrown when the reference datalayer
had no `features`defined.

When looking for features, it now defaults to an empty list if the key
doesn't exist.
2024-02-29 22:41:20 +01:00
Yohan Boniface
9cad054746 fix: catch SMTPException when sending secret edit link 2024-02-26 19:41:07 +01:00
99d7b8a6e1 chore: ruff format 2024-02-26 15:01:19 +01:00
c5fd72fe2b chore: use Django JSON serializer when calling json.dumps 2024-02-26 15:01:19 +01:00
Yohan Boniface
1db2455d51 chore: replace settings.FROM_EMAIL by settings.DEFAULT_FROM_EMAIL
DEFAULT_FROM_EMAIL is a Django standard setting
2024-02-16 11:49:38 +01:00
David Larlet
c86e01ffd0
Merge pull request #1601 from umap-project/oembed-quote
fix: encode the whole url parameter for OEmbed
2024-02-13 08:29:19 -05:00
Yohan Boniface
e1ae60a4ff chore: remove duplicate "map updated" message
It is already handled by the front-end, and as it also handle the
"map created" message (including anonymous link form), I arbitrated
to keep all front-end side
2024-02-13 12:15:35 +01:00
David Larlet
cf319ca53e
fix: only query OEmbed map on id and fallback to 404 2024-02-12 21:14:21 -05:00
David Larlet
9426570b6e
fix: encode the whole url parameter for OEmbed
See https://github.com/umap-project/umap/pull/1526#issuecomment-1937040472
2024-02-12 15:58:16 -05:00
David Larlet
afdc732204
Merge pull request #1430 from umap-project/download-all-from-dashboard
Ability to clone, delete and download all maps from user’s dashboard
2024-02-08 09:51:01 -05:00
David Larlet
1acadc746a
fix: use the regular delete view instead of ajax 2024-02-07 17:38:39 -05:00
David Larlet
8a6e992b9c
Ability to clone a map and overall UI improvements 2024-02-07 12:32:00 -05:00
David Larlet
5d69d3c22f
Provide a link to delete maps from user’s dashboard 2024-02-07 12:32:00 -05:00
David Larlet
46cf432eb4
Paginate user’s maps combined downloads 2024-02-07 12:32:00 -05:00
David Larlet
5476cbee0f
Ability to download all maps from user’s dashboard 2024-02-07 12:32:00 -05:00
Yohan Boniface
c334f7554e feat: add experimental "map preview"
This is the same as "map new", but it is not in edit mode. This
allow to click on the elements and see the popups instead of editing
it when using a `dataUrl` query string.
This way of using uMap is not documented, but it's used by some
partners (Deveco recently, data.gouv.fr historicaly).

In the same time, this PR adds two things:
- possibility to pass data direclty in querystring (instead of an URL):
  in the case of Deveco, they have pages where only point is shown (for
  each company)
- possibility to pass style options directly from query string: may
  allow for example to control the `popupTemplate`, eg. to use a table
  one that will display all properties of the clicked feature

Note: dataUrl and such also works in normal "map new" view. There are
two use cases around those parameters, from external sites:
- see this data on uMap (should point on map preview)
- create a map with those data (should point on map new)
2024-02-07 13:57:20 +01:00
Yohan Boniface
da7d09527b chore: catch error when using Request, and make remote URL working again
I decided to remove the check `is_ajax` from `validate_url` to simplify
and edge case, and because I think it was more or less useless.
Basically, when getting remote data, we have two cases:
- direct call to the remote URL
- proxy through our `ajax_proxy` system (to work around CORS limitations)

In the first case, we cannot set the `X-Requested-With` header, otherwise
preflight step will fail, and in the second case, until now, we needed
to set this header for this `is_ajax` check to pass. So keeping this check
would mean adapting the behaviour of the Request/ServerRequest class in
a non elegant way. So let's make it simple…
2024-02-05 07:22:53 +01:00
Yohan Boniface
ab966722f9 wip: rework request error flow 2024-02-05 07:22:53 +01:00
Yohan Boniface
8b2778116d wip: make the getMore button work again with new Request 2024-02-05 07:22:53 +01:00
Yohan Boniface
074fc1bc18
Merge pull request #1552 from umap-project/preconnect-tilelayer
feat: set preconnect link for tilelayer
2024-01-29 18:26:24 +01:00
Yohan Boniface
dd57794ca6
Merge pull request #1562 from umap-project/svg-default-icon
feat: use svg for default icon (circle)
2024-01-29 18:05:45 +01:00
Yohan Boniface
caeb9d5b44
Merge pull request #1531 from umap-project/home-highlighted
Introduce UMAP_HOME_FEED to control which maps are shown on the home page
2024-01-29 12:48:24 +01:00
Yohan Boniface
256d6c631c feat: use svg for default icon (circle)
fix #1560
2024-01-29 12:24:16 +01:00
Yohan Boniface
d4e253190f feat: set preconnect link for tilelayer 2024-01-22 18:14:41 +01:00
Yohan Boniface
5a6f1c1bcc chore: remove unused import 2024-01-17 22:27:05 +01:00
Yohan Boniface
9f377da1b2 Introduce UMAP_HOME_FEED to control which maps are shown on the home page
For now we have only three modes:
- latest, which is the default and shows the last updated maps
- highlighted, which shows only the map that have been starred by a least
  one staff member
- None, which does not show any map
2024-01-16 12:31:50 +01:00
David Larlet
df76ffd80e
feat: Create an oEmbed endpoint for maps
Fix #162
2024-01-11 15:08:10 -05:00
David Larlet
c4e55d82cb
Fix imports 2023-12-27 13:43:47 -05:00
David Larlet
7484e52142
Improve maps’ pagination for the dashboard 2023-12-27 13:26:31 -05:00
David Larlet
8d11815625
Move _urls_for_js to utils.py (circular imports) 2023-12-27 11:41:08 -05:00
f37ed700f6 [feat] add a simple conflict resolution mecanism.
The server tries to merge conflicting saves of
the same layer.

What it does:

- use the `If-Unmodified-Since` header to check
  if changes happened to the stored data ;
- Compare the incoming version with its reference version
  to get a diff.
- Reapply the diff on top of the latest version.
- If the merge is not possible, return a
  "422 Conflict" HTTP response.
- If the merge worked, return the merged document,
  to be updated by the client.
2023-11-29 13:04:24 +01:00
72b0bc44ad [chore] remove python2 imports 2023-11-24 23:31:18 +01:00
35dc1acb07 [fix] Use timezone aware datetimes 2023-11-24 23:31:18 +01:00
Yohan Boniface
160c4ae420 Do not exclude DEMO and SHOWCASE maps anymore from home
Those maps can be excluded by setting their share_status=OPEN

cf #1414
2023-11-21 10:15:31 +01:00
Yohan Boniface
9af5375dbf Fix heavy request for getting user maps
This was creating a huge INNER JOIN, and is replaced
by a UNION

cf https://explain.dalibo.com/plan/91af244fg9d1ec21

Also remove the conditional queryset, as now "my maps"
is serverd by the dashboard page, so we can only serve
public maps on this URL.
2023-11-18 20:09:19 +01:00
David Larlet
13ca7e3e5d
Add tests for favicon-related views 2023-11-15 14:13:33 -05:00