Commit Graph
5029 Commits
Author SHA1 Message Date
Dominik Schmidt b2d8a13c24 feat(search): add range aggregations
Numeric and date ranges on both engines: bleve folds them from doc values, OpenSearch uses range and date_range aggregations. The proto gains BucketRange and bucketDefinition.ranges, the aggregation package the range parser (bounds are numbers or RFC3339 dates, one kind per aggregation, anything else is rejected), the kind of an option and the validation of ranges against the field type. Every requested range is answered in request order, an empty one with a count of zero, with no space answering too; size does not cut ranges, keyAsNumber sorts them by their lower bound. Range keys read from..to. AGG-04, 05 and 07 to 09 in the parity suite.
2026-10-06 10:50:28 +02:00
Dominik Schmidt 713fae1f8c feat(search): add terms aggregations
Term buckets on both engines: bleve folds them from doc values (its facets read numbers as prefix-coded terms), OpenSearch uses terms aggregations. A request gets every bucket, up to 65535 per space (the OpenSearch default for search.max_buckets, held on bleve as well); beyond that it is refused. The proto gains AggregationOption, BucketDefinition (sort, minimum count), AggregationResult and Bucket. The new aggregation package merges the per-space results by position, so several aggregations on one field stay apart, and shapes them per BucketDefinition (minimum count, sort, size). It also validates aggregations against the index mapping (a field the index knows and a client may name, of a type whose values are buckets; the mapping overrides mark the internal fields): the search service relies on it, the graph endpoint asks it first to save the round trip, next to its own checks against the spec, and with the field names of the request so an error reads like the request. A request names a field like the driveItem property, exactly so. A number is keyed as it is, a bool as true or false on both engines, an empty value is no bucket. Pinned in the parity suite as AGG-01 to 03, 17, 34, 37 and 39; the paging rows AGG-41 to 43 pin the first commit through the same matrix machinery, which also shortens long answer lists in the README.
2026-10-06 10:49:18 +02:00
Dominik Schmidt f605ca7e7e refactor(search): move the opensearch facet bridge to mapping.ToProto
convert.copyFacet rebuilt every facet by hand on the way into the index; mapping.ToProto is the generic counterpart of the FromProto the graph endpoint uses, so both directions share one bridge.
2026-10-06 10:48:06 +02:00
Dominik Schmidt 5b840ddc7d feat(graph): add POST /search/query
MS Graph style search endpoint: searchRequest with KQL queryString, from/size pagination (values outside the spec's bounds are rejected), entityTypes validated to driveItem, hits as driveItems with webUrl, parentReference, remoteItem for shares, the facets and @libre.graph.permissions.actions.allowedValues, which the search service now projects onto the Entity from the same permission set as the WebDAV report. Properties the endpoint does not evaluate yet (aggregations, aggregationFilters, sortProperties) answer 501 instead of being ignored, an unknown $expand answers 400, and a failing search service keeps its status. Hits reuse what the drive item listing has, which moves a little: the thumbnails helper is named for the drive item it fills (setDriveItemThumbnailsByID, it served shares only), the web URL of an id gets a helper (webURLForID), and the facets come out of the proto through one generic mapping.FromProto instead of a copy per facet.
2026-10-06 10:47:03 +02:00
Dominik Schmidt e83dac7d24 feat(search): offset paging with a stable order
The search service takes a `from` offset next to the page size and applies it after the cross-space merge; every space answers the full prefix up to from+size, since an offset cannot be distributed. Pages are stable: both engines and the merge break score ties by id, and OpenSearch counts every match (track_total_hits). No engine pages beyond the first 10000 matches, the OpenSearch result window, so a from and size reaching beyond it are rejected on both engines. `page_size` becomes optional on the wire: absent is the default of 200, 0 asks for no matches, -1 for all; WebDAV and the tags listing set it accordingly, and the WebDAV report's `<oc:offset>`, parsed since the report exists and never read, now pages the merged list. The gRPC wrapper passes the request through and keys its cache by the whole request.
2026-10-06 10:45:57 +02:00
Alex d761a484da feat(web): use the OpenCloud brand colors for the primary color role (#3631) 2026-10-06 09:50:25 +02:00
Alex Ababii c1dc12deee feat(guestauth): upd readme with guest links flow diagram 2026-10-06 08:08:28 +02:00
Alex Ababii 2c898250a9 feat(guestauth): upd file manager lock, addtional filetrs for shareExpired and shareRemoved events, common config loading fix 2026-10-06 08:08:28 +02:00
Alex Ababii c5879ca1b2 feat(guestauth): renaming guest ivitations to guest links for consistency with libre-graph-api 2026-10-06 08:08:28 +02:00
Alex Ababii a1a8221f68 feat(guestauth): global flag to disable the guest links feature 2026-10-06 08:08:26 +02:00
Alex Ababii 340851de70 feat(guestauth): updated redeem endpoint response and dependencies 2026-10-06 08:07:44 +02:00
Alex Ababii e17a9a3ae9 feat(guestauth): aligned readme 2026-10-06 08:07:44 +02:00
Alex Ababii d0847093bf feat(guestauth): prefix for cookie 2026-10-06 08:07:44 +02:00
Alex Ababii cbf3ee8c0b feat(guestauth): guestauth service rename to auth-guest 2026-10-06 08:07:44 +02:00
Alex Ababii f86e339233 feat(guestauth): grantee email in GuestTokenCreated event 2026-10-06 08:07:44 +02:00
Alex Ababii cf77e47ce4 feat(guestauth): used file lock instead of mutex in file strorage implementation 2026-10-06 08:07:43 +02:00
Alex Ababii eac68b9354 feat(guestauth): upd redeem response error format 2026-10-06 08:07:43 +02:00
Alex Ababii 9088273778 feat(guestauth): upd token record expiry proporety value on add 2026-10-06 08:07:43 +02:00
Alex Ababii b920654815 feat(guetauth): upd the redeem route 2026-10-06 08:07:43 +02:00
Alex Ababii e5c3be7c67 feat(guestauth): moved SecretHash to a method instead of field in struct 2026-10-06 08:07:43 +02:00
Alex Ababii b4aa47c029 feat(guestauth): renamed Storage interface and dependencies to Manager 2026-10-06 08:07:43 +02:00
Alex Ababii 2106f60fd8 feat(guestauth): upd version tags for env vars 2026-10-06 08:07:43 +02:00
Alex Ababii fdf52e4eaf feat(guestauth): upd service readme 2026-10-06 08:07:43 +02:00
Alex Ababii d359a7da1f feat(guestauth): removed uneeded config field 2026-10-06 08:07:43 +02:00
Alex Ababii 45bc705a74 feat(guestauth): cookie set always to true due to codacy mention 2026-10-06 08:07:43 +02:00
Alex Ababii 6ea563de96 feat(guestauth): added mocks for tests, made services dependencies to be based on interfaces 2026-10-06 08:07:43 +02:00
Alex Ababii 402a0c04a1 feat(guestauth): register guestauth proxy 2026-10-06 08:07:43 +02:00
Alex Ababii 2fc5fb36c3 feat(guestauth): used renamio for file write 2026-10-06 08:07:43 +02:00
Alex Ababii ffa70f5579 feat(guestauth): upd events handlers tests 2026-10-06 08:07:43 +02:00
Alex Ababii ecb546fe46 feat(guestauth): create jwt token and setup cookies on redeem token call 2026-10-06 08:07:43 +02:00
Alex Ababii 7af24c09a8 feat(guestauth): handle events and a bit of cleanup 2026-10-06 08:07:43 +02:00
Alex Ababii a60ec8cbc3 feat(guestauth): handler for redeem action and http service 2026-10-06 08:07:43 +02:00
Alex Ababii 06f7d12c4c feat(guestauth): storage implementation for guest auth tokens 2026-10-06 08:07:43 +02:00
Alex Ababii c5e52f97c6 feat(guestauth): token service 2026-10-06 08:07:43 +02:00
Alex Ababii 0448b456b0 feat(guestauth): added consumer and some basic event handling logic with stubs 2026-10-06 08:07:43 +02:00
Alex Ababii 19fc7dfb8b feat(guestauth): added guestauth service skeleton 2026-10-06 08:07:43 +02:00
Viktor Scharf af425afb3b [full-ci] chore: bump reva to 2.51.0 (#3657)
* chore: bump reva to 2.51.0

* replaceversion placeholder
2026-10-05 17:08:52 +02:00
Viktor Scharf ef10888431 [full-ci] chore: bump web to v8.1.0 (#3656)
* chore: bump web to v8.1.0

* trigger ci
2026-10-05 17:00:07 +02:00
Jörn Friedrich Dreyer 3215739190 Merge pull request #3593 from opencloud-eu/port-11707
Add delete stale nodes command
2026-10-05 15:44:59 +02:00
Andre Duffeck 8f2adf2138 Reindex disabled spaces once they get enabled again (#3579)
Spaces that are disabled while reindexing are skipped. They are now
remembered in a NATS KV bucket (including whether a forced rescan was
requested) and reindexed when the SpaceEnabled event comes in. The
entry is removed when the space gets deleted.
2026-10-05 14:28:58 +02:00
Jörn Friedrich Dreyer 5ff51c1856 docs(storage-users): document the delete-stale-nodes command
Signed-off-by: Jörn Friedrich Dreyer <jfd@butonic.de>
2026-10-05 14:12:21 +02:00
Jörn Friedrich Dreyer fabf82850e fix(storage-users): use user.oc. metadata prefix for stale node detection
Signed-off-by: Jörn Friedrich Dreyer <jfd@butonic.de>
2026-10-05 14:12:21 +02:00
Jörn Friedrich Dreyer ad6ff3ee86 fix(storage-users): add delete-stale-nodes command
Signed-off-by: Jörn Friedrich Dreyer <jfd@butonic.de>
2026-10-05 14:12:21 +02:00
Michael Barzandv.scharf b955c7c4f0 feat: add new editor roles (#3637)
* feat: add new editor roles

* add tests for additional roles

* fix: disable new roles in config

* adjust tests

* fix listGrantsShareRole test

---------

Co-authored-by: v.scharf <v.scharf@opencloud.eu>
2026-10-05 14:07:30 +02:00
Dominik Schmidt 63c1f15cee fix(search): take the photo iso from exif:IsoSpeedRatings
Base ISO is a Canon maker note tag holding Canon's raw encoded value, not the iso of the shot: other cameras got no iso, Canon photos a wrong one (256 for an ISO 800 shot). exif:IsoSpeedRatings is there on tika 3 and tika 4.
2026-10-03 11:12:18 +02:00
Dominik Schmidt 4006344505 fix(search): read the tika 4 live photo keys
Tika 4 prefixes its metadata keys (mp4:, img:), so the live photo facet was never built there. Live photo support needs tika 4: tika 3 got the video keys only in 3.3.2 and never the still image time. The content key is read through one lookup, marked tika 4 and tika 3 legacy.
2026-10-03 11:12:17 +02:00
Florian Schade c10b106f1b Merge pull request #3633 from fschade/fix-collaboration-extension-handling
feat(collaboration): let admins disable wopi extensions
2026-10-02 13:37:02 +02:00
Dominik Schmidt 3b37e292bd Merge pull request #3643 from opencloud-eu/fix/parity-matrix-runes
fix(search): ellipsize parity matrix labels by runes, not bytes
2026-10-02 13:36:57 +02:00
Dominik Schmidt b2039f6abe fix(search): ellipsize parity matrix labels by runes, not bytes
The byte-based truncation cut through the two-byte UTF-8 sequence of
Motörhead's ö, committing invalid UTF-8 into the parity README. Shared
rune-based ellipsize helper; matrix regenerated.
2026-10-02 12:48:51 +02:00
Florian Schade 938687d1d5 fix(collaboration): send LastModifiedTime and the EuroOffice file size 2026-10-02 12:20:04 +02:00