Commit Graph

2881 Commits

Author SHA1 Message Date
Peter Bieringer
7d690b3325 sharing/delete: fix 2026-07-19 10:58:43 +02:00
Peter Bieringer
a7867fe37e make isort happy 2026-07-19 10:35:13 +02:00
Peter Bieringer
fe5fd55723 sharing: add forgotten backmap for delete 2026-07-19 10:24:23 +02:00
TowyTowy
651e30211c Fix: serve_resource/serve_folder ignore mimetypes and fallback_mimetype parameters
httputils._serve_traversable looked up the Content-Type in the
module-level MIMETYPES/FALLBACK_MIMETYPE constants instead of the
mimetypes/fallback_mimetype parameters that serve_resource() and
serve_folder() accept and pass through. The parameters exist since the
helper was extracted for use by web plugins (33fcda7c, "Extract
httputils.serve_folder"), and the sibling parameters path_prefix and
index_file are honored, but a custom web plugin passing its own
mimetype mapping (e.g. to serve .json, .ico or .mjs files with a
correct Content-Type) silently got the built-in mapping and
application/octet-stream fallback instead.

Use the parameters for the lookup. No behavior change for the built-in
web module, which relies on the defaults.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-18 12:10:37 +02:00
TowyTowy
f38688456d Fix: free-busy REPORT always fails when max_freebusy_occurrence is 0
free_busy_report() explicitly handles [reporting] max_freebusy_occurrence = 0
as "limit disabled" when fetching occurrences (n=0 lets time_range_fill
return all occurrences), but the subsequent limit check
'len(occurrences) >= max_occurrence' is trivially true for
max_occurrence == 0, so every free-busy query on a non-empty calendar
raised ValueError ("FREEBUSY occurrences limit of 0 hit") and was
answered with HTTP 400.

Skip the limit check when the limit is disabled, consistent with how
xml_report() treats the same setting ('if max_occurrence and ...').
Behavior for positive limits is unchanged.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-07-17 01:06:51 +02:00
TowyTowy
c2a73cdc2d Fix: bday conversion clobbers NICKNAME when FN is empty
The share-by-map BDAY-to-ICS conversion builds a placeholder mapping for
the SUMMARY/DESCRIPTION/alarm templates. Each block sets the fallback
marker for its own placeholder (e.g. {nickname} -> '!nickname!', {n:f} ->
'!n:f!'), but the {fn} block wrote the empty-FN fallback to {nickname}
instead of {fn}.

As a result, for a VCARD whose FN is present but empty, a genuine
NICKNAME was overwritten with '!fn!' in the generated event, and the
{fn} placeholder never received its '!fn!' marker, so a '[{fn}|...]'
fallback in a template failed to resolve.

Assign the fallback to {fn}, matching the surrounding blocks.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-07-15 20:28:25 +02:00
TowyTowy
f48dc47177 Fix: text-match filter crashes on structured property (vCard N/ADR)
A CardDAV addressbook-query REPORT with a text-match prop-filter on a
structured property (e.g. N or ADR) returned HTTP 500. vobject parses
these into Name/Address objects rather than plain strings, so text_match
called .lower() on a non-string and raised AttributeError. Coerce
non-string values to their text representation before matching.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-07-15 11:26:45 +02:00
TowyTowy
a7da8ddd4b tests: guard REPORT response type to satisfy mypy
Assert the response is a dict before indexing, matching the existing
pattern used elsewhere in test_expand.py, so the Lint (mypy) job passes.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-07-13 13:00:41 +02:00
TowyTowy
9d46d5b63d Fix: expand REPORT leaves recurrence properties on expanded instances
_strip_single_event() removed the recurrence-defining properties (RRULE,
EXDATE, EXRULE, RDATE) with a single try/except around sequential
delattr() calls. When one of them was absent (e.g. an event with no
EXDATE), the AttributeError aborted the whole block and the following
properties -- notably RDATE -- were left on the expanded
single-occurrence VEVENTs returned by a calendar-data expand REPORT.

Remove each property independently so a missing one no longer prevents
removal of the others. Add a regression test and fixture.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-07-12 22:30:47 +02:00
Max Berger
1f1e94340d Fix new JS verification errors and force specific TSC version
The new TSC compiler does stricter checking on the JS documentation
strings. All documentation strings have been updated to pass with
the current version (7.0.2)

In addition, the version of the TSC compiler used during the github
action will be fixed to 7.0.2, so that we don't get these type of
sudden errors again in the future. Unfortunately this means we need
to periodically update this manually.
2026-07-12 09:31:54 +02:00
TowyTowy
e557c0cd5e Fix: time-range filter matches VEVENT with whole-day DURATION
A calendar-query REPORT with a time-range filter failed to return a
VEVENT that has a whole-day DURATION (e.g. DURATION:P1D or P2D) whenever
the queried range fell inside the event but after DTSTART.

The VEVENT time-range logic in radicale/item/filter.py gated the
"non-zero duration" branch (rfc4791-9.9 line 2) on timedelta.seconds
instead of timedelta.total_seconds(). For a duration that is an exact
multiple of 24h, timedelta.seconds is 0 (the days component holds the
value), so the event was treated as zero-length (line 3) and only
matched a one-second window at its start. An identical event expressed
with DTEND matched correctly, confirming the defect is isolated to the
DURATION path.

Use total_seconds() so multi-day durations are handled correctly. Adds a
regression test (event11, DURATION:P2D) covering both an inside-range
match and an outside-range non-match.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-11 15:58:39 +02:00
Peter Bieringer
38a4715a7f imap_append_domain: make "@" mandatory and add some failsafe checks 2026-07-05 12:54:57 +02:00
Michael Bartel
b3770c4f2d Append domain to login before trying IMAP connection
Append email domain to login before trying connect to the IMAP server. Use this instead of strip_domain,
which removes the domain before trying the IMAP connection, to avoid the domain in the folder names of the collection.
2026-07-05 12:27:09 +02:00
Peter Bieringer
69b265b539 mark also windows for non-reliable sleep times 2026-06-28 22:15:44 +02:00
Peter Bieringer
ed6095620e add test case 2026-06-28 21:19:47 +02:00
Peter Bieringer
64005c967b fix trailing space bug introduced by Microsoft 2026-06-28 21:19:27 +02:00
Arkadiusz Juszczyk
828691e3c4 sharing: URL-encode-aware backmap of REPORT/PROPPATCH hrefs
make_href percent-encodes hrefs (an '@' in an email principal becomes
%40), but the backmap compared against the raw PathMapped, so the
rewrite was skipped and the owner's real path leaked -- editing a shared
collection then failed with 403. Compare and rewrite on the quoted form.
2026-06-24 01:02:28 +02:00
Peter Bieringer
3f973a870d add test cases for PERIOD support 2026-06-21 16:31:29 +02:00
Peter Bieringer
8bcd43742a add test whether vobject supports PERIOD 2026-06-21 16:30:53 +02:00
Peter Bieringer
47fdd34058 rename var to avoid name overlap 2026-06-21 16:28:17 +02:00
Peter Bieringer
af8d679e35 include UID in error message 2026-06-21 16:18:36 +02:00
Peter Bieringer
ddaa187e03 catch not resolvable tag 2026-06-19 06:13:49 +02:00
Peter Bieringer
a62e3076ab lost line 2026-06-19 06:05:51 +02:00
Peter Bieringer
ecb0cc8647 extend item verification code on commandline 2026-06-19 06:02:31 +02:00
Peter Bieringer
a5b2303fb2 fix loglevel and indent 2026-06-18 08:32:40 +02:00
Max Berger
ea8f4a4477 UI: disable conversion mode buttons on edit
The conversion type cannot be changed once a share is created, so disable the edit buttons.
2026-06-13 21:13:45 +02:00
Max Berger
d612b00ba0 UI Bugfix: Allow changing of data onn previously unconfigured share 2026-06-12 08:22:42 +02:00
Peter Bieringer
d76a443c5d sharing/bday/tests: add missing file 2026-06-11 15:27:57 +02:00
Peter Bieringer
048845f615 sharing/bday/template: adjust+add test cases 2026-06-11 08:55:29 +02:00
Peter Bieringer
65282cd828 fix json/csv encoding 2026-06-11 08:55:09 +02:00
Peter Bieringer
21a7467a79 sharing/bday/template: code cleanup related to placeholder replacement 2026-06-11 08:54:47 +02:00
Peter Bieringer
2d4c05a824 sharing/bday/template: improve placeholder replacement 2026-06-11 08:54:10 +02:00
Peter Bieringer
8b57adadc2 sharing/bday: add detection for vcard not having valid year 2026-06-11 08:53:24 +02:00
Peter Bieringer
2c198da3fc sharing/bday/template: change trigger separator 2026-06-11 08:51:54 +02:00
Peter Bieringer
64761ae119 sharing/update: positive test with equal conversion 2026-06-09 21:49:39 +02:00
Peter Bieringer
25e376874e sharing/update: add test case changing Conversion 2026-06-09 21:35:27 +02:00
Peter Bieringer
169d6c3b45 sharing/test: align changed result codes 2026-06-09 21:35:11 +02:00
Peter Bieringer
a5a42546b4 sharing/update: check given Conversion 2026-06-09 21:34:42 +02:00
Peter Bieringer
26342d2a62 sharing: adjust result codes for unsupported calls 2026-06-09 21:34:15 +02:00
Peter Bieringer
f65dc9d096 sharing: code cosmetics 2026-06-09 21:33:17 +02:00
Peter Bieringer
61b10194b5 Merge pull request #2154 from maxberger/master
ui: Allow action configs for bday conversion
2026-06-09 22:20:29 +03:00
Peter Bieringer
f684d38147 rework tests with proxy simulation 2026-06-09 07:28:57 +02:00
Peter Bieringer
83b00f1b7b sharing/bday conversion: add additional test cases via proxy 2026-06-08 21:59:57 +02:00
Peter Bieringer
8e9216cd08 sharing: report+propfind honor base_prefix on backmap 2026-06-08 21:59:24 +02:00
Peter Bieringer
8aec777e16 flake8 fix 2026-06-08 21:44:33 +02:00
Peter Bieringer
9d1cb26f0b add 2 inode test cases 2026-06-08 06:31:55 +02:00
Max Berger
1d8d734dca ui: Allow action configs for bday conversion 2026-06-07 14:21:43 +02:00
Peter Bieringer
5914deff28 add 2nd testcase 2026-06-07 08:24:27 +02:00
Peter Bieringer
20c0eaa236 extend with conditional remove if dtstart has no tzinfo set 2026-06-07 08:23:49 +02:00
Peter Bieringer
fca73efc02 fix typo 2026-06-06 23:22:05 +02:00