Compare commits

..
305 Commits
Author SHA1 Message Date
Hivert Quentin db72c27980 opendid part2 2025-02-27 09:21:54 +01:00
Hivert Quentin 912ab12165 squashed 2024-10-30 10:00:59 +01:00
Hivert Quentin f1257088f2 fix(calendar): prevent to return the same user twice in ldap groups 2024-10-29 17:14:25 +01:00
Hivert Quentin 1c611a0a4a chore(js/css): update generated files 2024-10-23 01:00:36 -04:00
smizrahi f2ba6870d5 feat(core): Add new SOGoURLCreateAccount option to add a create account link below login form 2024-10-22 16:03:50 +02:00
smizrahi 253d14cfce fix(core): Specify application name in WORequest to avoid computing app name in SOPE. Sometimes the app name is wrongly defined due to invalid URL calls. 2024-10-22 09:46:00 +02:00
smizrahi b3c77a0e00 fix(mail): Add 'Return-Receipt-To' header for mail receipt 2024-10-16 09:44:53 +02:00
Hivert Quentin cba0c6d420 chore(release): 5.11.2 2024-10-15 16:21:02 +02:00
Hivert Quentin 1d8ee80c39 fix(mail): modify the message-id to not start by <XX- that trigger a native spamassassin rule
https://github.com/apache/spamassassin/blob/ed9239e5d1f3d3607207e7557e81a41e18d24988/rulesrc/sandbox/felicity/70_other.cf#L267
2024-10-14 16:56:42 +02:00
Hivert Quentin 04a9a8773d fix(security) : fix a security issue introduced in 5.11.1 2024-10-11 15:10:19 +02:00
WoodySlum a466628126 Merge pull request #360 from robertsilen/patch-1
docs(core): add MariaDB to System requirements
2024-10-09 14:44:09 +02:00
Hivert Quentin 60b59ae1bc chore(js/css): update generated files 2024-10-09 01:00:35 -04:00
Hivert Quentin 8ff2c962ab chore(release): 5.11.1 2024-10-08 12:23:01 +02:00
Hivert Quentin ffe4f9406b chore(timezones): Update to version 2024b 2024-10-08 12:12:04 +02:00
Hivert Quentin 592f35bbec i18n(de): Update German translations 2024-10-08 11:59:48 +02:00
Hivert Quentin 1d3b502bc7 i18n(pt_BR): Update BrazilianPortuguese translations 2024-10-08 11:59:48 +02:00
Hivert Quentin 80a76895dd i18n(uk): Update Ukrainian translations 2024-10-08 11:59:47 +02:00
Hivert Quentin 78ea981e7f i18n(ru): Update Russian translations 2024-10-08 11:59:47 +02:00
Hivert Quentin a4de35748b i18n(pt): Update Portuguese translations 2024-10-08 11:59:46 +02:00
Hivert Quentin 41aecca692 i18n(tr_TR): Update TurkishTurkey translations 2024-10-08 11:59:46 +02:00
Hivert Quentin 190c2c86ed chore(js/css): update generated files 2024-10-08 09:50:34 +00:00
Hivert Quentin 56598d1e37 feat(login): add parameters to prevent uneccesary connection request when the domain is unknown 2024-10-01 17:53:46 +02:00
WoodySlum 4ee6d5af9d Merge pull request #361 from jmallach/wbxml2-include
chore(packaging): Use pkgconfig to compute cflags for wbxml2 instead of hardcoding them
2024-10-01 11:19:57 +02:00
smizrahi 594b0249c3 chore(packaging): Add default build directives for deb packages 2024-10-01 11:18:30 +02:00
smizrahi 64f17880c7 fix(tests): Add timeout on all async tests 2024-09-26 21:02:50 +02:00
smizrahi 59d48cb382 fix(mail): Fix assertion when there is an empty image in the mail. Fixes #6035. 2024-09-13 15:53:53 +02:00
Hivert Quentin 2da4aa8cb8 chore(js/css): update generated files 2024-09-13 01:00:36 -04:00
Hivert Quentin 1c20c1ead3 feat(sieve): add from on notificatons 2024-09-12 10:49:15 +02:00
Hivert Quentin a7023bce16 fix(security): Prevent user to add html script in its preferences 2024-09-12 08:45:56 +02:00
Hivert Quentin 84fe91c29c fix(sogo-tool): prevent a bug when restoring two events with same id 2024-09-11 17:56:45 +02:00
Hivert Quentin 68f4fc1343 fix(mail): improve algo to fetch imap folders for mail view 2024-09-11 09:05:53 +02:00
smizrahi 2a1744998c fix(calendar): Fix regression on repeat task 2024-09-09 14:10:33 +02:00
Jordi Mallach 196e10f44c Use pkgconfig to compute cflags for wbxml2 instead of hardcoding them
libwbxml2 recently changed their API version from 1.0 to 1.1. Avoid
a build failure by retrieving the include dir from the provided
pkgconfig definition.
2024-09-05 08:44:38 +02:00
Hivert Quentin 01607b151d chore(js/css): update generated files 2024-09-05 01:00:37 -04:00
smizrahi 0cbd082c1d fix(mail): Fix highlighsearch html rendering on subject 2024-09-04 18:03:36 +02:00
smizrahi 41a0f8d9af fix(mail): Fix HTML mail rendering issue 2024-09-04 15:10:05 +02:00
Hivert Quentin 2dd10970a4 fix(ckeditor5): prevent ckeditor5 to preview media 2024-09-03 13:37:19 +02:00
smizrahi 2f75a7fb1b fix(calendar): Fix all day recurring event displayed on 2 days when a DST change occurs at the endDate 2024-08-28 10:27:00 +02:00
Hivert Quentin c1e4dc5a0e chore(js/css): update generated files 2024-08-28 01:00:36 -04:00
smizrahi fa2caf9026 fix(mail): Add an option in Preferences to display full email instead of name alone in mailboxes. Fix issue caused by advanced search. 2024-08-27 18:40:36 +02:00
Hivert Quentin f42f94da84 chore(js/css): update generated files 2024-08-21 01:00:55 -04:00
smizrahi 1f6bbc1044 fix(mail): Fix issue where unread counter is invalid when whanging folder. Fixes #6001. 2024-08-20 14:52:03 +02:00
Hivert Quentin a24d59dfaf chore(js/css): update generated files 2024-08-20 01:00:53 -04:00
smizrahi 91a249009b fix(mail): Fix issue where unread counter is invalid when whanging folder. Fixes #6001. 2024-08-19 18:16:33 +02:00
Hivert Quentin 16f371dba7 chore(js/css): update generated files 2024-08-17 01:00:52 -04:00
smizrahi 86446a059c fix(mail): Fix issue where mailto: links are badly formatted when html composing 2024-08-16 12:58:31 +02:00
robertsilen 160a464d63 add MariaDB 2024-08-15 16:34:55 +03:00
Robert Silén 17d85f84f7 add MariaDB to SOGoInstallationGuide.asciidoc 2024-08-10 09:45:47 +03:00
Hivert Quentin b602b2b188 chore(release): 5.11.0 2024-08-07 11:10:59 +02:00
Hivert Quentin fad8c21473 i18n(cy): Update Welsh translations 2024-08-07 10:50:30 +02:00
Hivert Quentin 6537d961e1 i18n(uk): Update Ukrainian translations 2024-08-07 10:50:30 +02:00
Hivert Quentin 56012c65e1 i18n(tr_TR): Update TurkishTurkey translations 2024-08-07 10:50:30 +02:00
Hivert Quentin dd1a6607fe i18n(sv): Update Swedish translations 2024-08-07 10:50:30 +02:00
Hivert Quentin 94d32c419c i18n(es_AR): Update SpanishArgentina translations 2024-08-07 10:50:30 +02:00
Hivert Quentin 7b7cfdb499 i18n(sk): Update Slovak translations 2024-08-07 10:50:30 +02:00
Hivert Quentin a4f03978cf i18n(sr@latin): Update SerbianLatin translations 2024-08-07 10:50:29 +02:00
Hivert Quentin 7de9dc8f9b i18n(sr): Update Serbian translations 2024-08-07 10:50:29 +02:00
Hivert Quentin 33df476db5 i18n(ru): Update Russian translations 2024-08-07 10:50:28 +02:00
Hivert Quentin b889064dbc i18n(ro_RO): Update Romanian translations 2024-08-07 10:50:28 +02:00
Hivert Quentin 9a0e03bf9a i18n(pt): Update Portuguese translations 2024-08-07 10:50:27 +02:00
Hivert Quentin 84c0fb496d i18n(pl): Update Polish translations 2024-08-07 10:50:26 +02:00
Hivert Quentin 65f29f21dc i18n(nn_NO): Update NorwegianNynorsk translations 2024-08-07 10:50:26 +02:00
Hivert Quentin 8d4597d361 i18n(sr_ME@latin): Update Montenegrin translations 2024-08-07 10:50:26 +02:00
Hivert Quentin 5bb025323f i18n(mk_MK): Update Macedonian translations 2024-08-07 10:50:24 +02:00
Hivert Quentin a84ab7655d i18n(lt): Update Lithuanian translations 2024-08-07 10:50:23 +02:00
Hivert Quentin 88c9074aea i18n(lv): Update Latvian translations 2024-08-07 10:50:23 +02:00
Hivert Quentin c4b58a6ae7 i18n(kk): Update Kazakh translations 2024-08-07 10:50:23 +02:00
Hivert Quentin 0c2c9d7682 i18n(ja): Update Japanese translations 2024-08-07 10:50:22 +02:00
Hivert Quentin 227b92b743 i18n(it): Update Italian translations 2024-08-07 10:50:22 +02:00
Hivert Quentin de289d9b4c i18n(id_ID): Update Indonesian translations 2024-08-07 10:50:22 +02:00
Hivert Quentin 2fabfdfb9f i18n(is): Update Icelandic translations 2024-08-07 10:50:21 +02:00
Hivert Quentin b82fa1d077 i18n(hu): Update Hungarian translations 2024-08-07 10:50:20 +02:00
Hivert Quentin 8bf1a77efc i18n(he): Update Hebrew translations 2024-08-07 10:50:20 +02:00
Hivert Quentin 37f2b1dc5c i18n(de): Update German translations 2024-08-07 10:50:20 +02:00
Hivert Quentin ed3e790b47 i18n(fi): Update Finnish translations 2024-08-07 10:50:20 +02:00
Hivert Quentin 85c1cc7fa3 i18n(nl): Update Dutch translations 2024-08-07 10:50:20 +02:00
Hivert Quentin fa2312470a i18n(hr_HR): Update Croatian translations 2024-08-07 10:50:19 +02:00
Hivert Quentin 1136c18288 i18n(zh_TW): Update ChineseTaiwan translations 2024-08-07 10:50:19 +02:00
Hivert Quentin 0e5657e635 i18n(zh_CN): Update ChineseChina translations 2024-08-07 10:50:18 +02:00
Hivert Quentin ca0b00107a i18n(ca): Update Catalan translations 2024-08-07 10:50:18 +02:00
Hivert Quentin be6a69a4d6 i18n(bg_BG): Update Bulgarian translations 2024-08-07 10:50:18 +02:00
Hivert Quentin 0b530f9e36 i18n(bs_BA): Update Bosnian translations 2024-08-07 10:50:18 +02:00
Hivert Quentin 55563d2113 i18n(eu): Update Basque translations 2024-08-07 10:50:18 +02:00
Hivert Quentin 1aa59dcd7e i18n(ar): Update Arabic translations 2024-08-07 10:50:18 +02:00
Hivert Quentin 943e96f459 i18n(nb_NO): Update NorwegianBokmal translations 2024-08-07 10:50:18 +02:00
Hivert Quentin 6b6dc6b3b8 i18n(gl): Update Galician translations 2024-08-07 10:50:18 +02:00
Hivert Quentin bcb2410b12 i18n(da_DK): Update Danish translations 2024-08-07 10:49:40 +02:00
Hivert Quentin af630f033d i18n(pt_BR): Update BrazilianPortuguese translations 2024-08-07 10:49:40 +02:00
Hivert Quentin 6e11cdf289 i18n(es_ES): Update SpanishSpain translations 2024-08-07 10:49:40 +02:00
Hivert Quentin 68b17a5c4a i18n(sl_SI): Update Slovenian translations 2024-08-07 10:49:39 +02:00
Hivert Quentin 5ee190468e i18n(cs): Update Czech translations 2024-08-07 10:49:38 +02:00
Hivert Quentin b8f2e00306 chore(css): update theme-default 2024-08-07 10:48:59 +02:00
smizrahi 990f1e8e8f fix(preferences): Can not save preferences when there is a constraint on mail 2024-08-05 11:09:27 +02:00
smizrahi 58db9c980e fix(mail): When the signature is empty, the -- seperator appears. 2024-08-05 08:47:09 +02:00
smizrahi 980b5e28dd fix(calendar): Fix all day recurring event displayed on 2 days when a DST change occurs at the endDate 2024-07-23 15:21:59 +02:00
smizrahi eb63e6d047 i18n(calendar): Change Email Attendees to Email Attendees (internal users 2024-07-22 10:12:14 +02:00
Hivert Quentin 59e76d6b26 chore(js/css): update generated files 2024-07-20 01:00:58 -04:00
smizrahi 99da6e0f81 fix(mail): Update len value as data is modified in loop. This fixes the issue on sanitizedContentUsingVoidTags whenthere are meta html tags in mail content. 2024-07-19 13:31:20 +02:00
smizrahi 9d71be9c45 fix(mail): Restore scroll position when refreshing emails 2024-07-19 11:45:05 +02:00
smizrahi ef88039a4a fix(mail): Fix invalid content when forwarding a text/plain mail. Fixes #5983. 2024-07-11 17:41:14 +02:00
smizrahi a06331eb86 fix(doc): Fix typo with SOGoURLEncryptionEnabled in documentation 2024-07-11 16:48:21 +02:00
smizrahi ed951667ec feat(mail): Improve mail search (advanced search) 2024-07-02 11:12:54 +02:00
smizrahi f621d97289 feat(mail): Improve mail search (advanced search) 2024-07-01 12:56:31 +02:00
Hivert Quentin 1aa7d81a87 chore(js/css): update generated files 2024-06-26 01:00:50 -04:00
smizrahi 0cbcad9d91 feat(mail): Improve mail search (advanced search) 2024-06-25 14:28:27 +02:00
smizrahi 43388ac42c fix(mail): Fix invalid content when forwarding a text/plain mail. Fixes #5983. 2024-06-24 16:41:07 +02:00
smizrahi eee160e5bf fix(calendar): Fix issue on template introduced in commit #275617650 2024-06-19 09:37:22 +02:00
smizrahi 2637434436 feat(calendar): Add option to disable email appointmoint notifications when using caldav 2024-06-12 12:00:41 +02:00
smizrahi 4b343f7070 fix(core): Fix int overflow on vms and rss computation 2024-06-11 15:32:39 +02:00
smizrahi 591d283425 feat(mail): Add location in email ics representation template 2024-06-10 16:35:49 +02:00
smizrahi f96eb4d3ca fix(chore): Remove check on -p option to sogo-ealarms-notify as the SMTP Master account has been implemented 2024-06-05 16:28:43 +02:00
smizrahi 0168ca56b2 feat(core): Add MySQL/MariaDB SSL connection support 2024-06-05 11:30:40 +02:00
Hivert Quentin 703f0ff1b6 chore(js/css): update generated files 2024-06-05 01:00:53 -04:00
WoodySlum c5582ba819 Merge pull request #338 from helsinki-systems/escape-css-selectors
fix(calendar(js)): escape CSS selector names (@leonklingele)
2024-06-04 11:15:10 +02:00
WoodySlum 2dd45dfb93 Merge pull request #337 from helsinki-systems/prevent-double-event-creation
fix(calendar(js)): prevent duplicate event creation in case of an event conflict (@leonklingele)
2024-06-04 11:14:26 +02:00
Hivert Quentin 67e1a50c80 chore(js/css): update generated files 2024-06-04 01:00:52 -04:00
WoodySlum cbb0e85a19 Merge pull request #358 from smortex/fix-disabled-calendar-view-buttons
fix(calendar): Fix disabled change view buttons (@smortex)
2024-06-03 22:45:12 +02:00
smizrahi 2756176503 fix(calendar): Fix empty recurence list when creating event from mail 2024-06-03 22:41:42 +02:00
smizrahi 1a47fdb7d6 fix(mail): Fix advanced search no select/action on results. Fixes #5978 2024-06-03 14:34:04 +02:00
Romain Tartière 910effd664 fix(calendar): fix disabled change view buttons
When viewing a calendar, 4 buttons allow to switch between the day,
week, month and multicolumnday views.  Each of these view show the
button to swith to the day view as disabled, regradless of which view is
in use.

Adjust markup to disable the button of the current view instead of the
one used to switch to the day view.
2024-05-30 11:40:56 -10:00
smizrahi 7ec7a7d6ae fix(mail): Fix not called draft expunge function when sending mail. 2024-05-29 10:07:55 +02:00
smizrahi 53d77f3105 perf(calendar): Optimization of date computation when handle attendees. Report of 77b2d9f8. 2024-05-28 11:32:05 +02:00
smizrahi 45fd999010 fix(calendar): Memory optimization on _appendCycleException 2024-05-28 11:22:46 +02:00
Hivert Quentin 31c0473c48 fix(calendar): fix crash when using a 2*16bits chars at the 75th char of ics file 2024-05-24 15:57:56 +02:00
Hivert Quentin ebca25ca62 chore(js/css): update generated files 2024-05-23 01:00:53 -04:00
smizrahi 6b514bb159 chore(packaging): Add Ubuntu 24.04 (Noble Numbat) 2024-05-22 10:55:33 +02:00
smizrahi 314b39dd1c fix(ui): Fix invalid display when creating new appointment / mail on mobile. Initialize isFullscreen to if screen is in portrait. Fixes #5970. 2024-05-22 10:35:16 +02:00
smizrahi 6ac8525bfe feat(mail): Add 'View raw message' mail contextual option. This option open message in a popup without HTML mail CSS content modification. 2024-05-22 10:15:58 +02:00
smizrahi 9eb8039698 feat(mail): Improve mail search (advanced search) 2024-05-21 09:25:20 +02:00
smizrahi 863280d6ac fix(mail): Remove some css when generating UIxMailPartHTMLViewer. Sometimes, the mail contains SOGo mail template in the content, and broke mail display. 2024-05-10 14:51:09 +02:00
smizrahi 19ee54fe05 fix(mail): Fix template issues with Galician and Basque 2024-04-30 10:21:26 +02:00
Hivert Quentin 229596da2b chore(js/css): update generated files 2024-04-30 01:00:47 -04:00
smizrahi c2d9050539 fix(core): Notify sgCkeditor component when clicking the send button to update content. Fixes #5952. 2024-04-29 22:21:33 +02:00
Hivert Quentin 9b5a8cb6fc style(vacation): Modify the tooltip of the mail panel when vacation is enabled 2024-04-29 15:08:57 +02:00
Hivert Quentin 2e2e36e0a2 fix(attachment): properly download openxmlformats in attachments 2024-04-29 14:21:03 +02:00
Hivert Quentin 880eb89719 fix(calendar): resource was busy even if they have delegated 2024-04-18 10:11:38 +02:00
Hivert Quentin 5830053026 fix(calendar): resource was busy even if they have delegated 2024-04-17 15:23:11 +02:00
Hivert Quentin f815848a86 chore(js/css): update generated files 2024-04-11 01:00:50 -04:00
smizrahi f8c354c302 fix(mail): Fix Exception when using delegated identities. Closes #5951 2024-04-10 17:18:03 +02:00
smizrahi d9ee884459 fix(calendar): Fix assertion when is_cycle is set but without c_cycleinfo. Fixes #5950. 2024-04-10 15:47:17 +02:00
Hivert Quentin 526aa281d9 fix(contacts): can now reset contacts categories more than once 2024-04-10 11:26:06 +02:00
smizrahi 49e9988b82 fix(calendar): Fix assertion when is_cycle is set but without c_cycleinfo. Fix tests. 2024-04-09 08:59:09 +02:00
Hivert Quentin 20678b43ad chore(js/css): update generated files 2024-04-09 01:00:56 -04:00
smizrahi d4046673ee fix(calendar): Fix assertion when is_cycle is set but without c_cycleinfo 2024-04-08 13:57:07 +02:00
smizrahi 2f4c125bdd fix(core): Add timer to avoid spamming onEditorChanged for CKEditor 5. Fixes #5944. Added onblur event 2024-04-08 12:45:18 +02:00
smizrahi 98e00d09a3 feat(core): Update to ckeditor 5. Fixes #5920. Add SOGoForceRawHtmlSignature to disable raw-html-embed. Removed CKEditor signature box style when composing mail. Fix issue where raw-html-embed was added when changind signature 2024-04-08 10:37:33 +02:00
smizrahi a9e02d94a2 feat(core): Update to ckeditor 5. Fixes #5920. Add raw-html-embed only on html signatures 2024-04-04 18:20:23 +02:00
Hivert Quentin 2e37e59ed1 fix(vulnerability): prevent cross-site scripting when previewing attachments 2024-04-03 17:34:16 +02:00
smizrahi ae01ed077d fix(calendar): Fix issue where a calendar's subscribed user can give acl to another user 2024-04-03 10:48:39 +02:00
smizrahi cb55413e91 fix(calendar): Fix issue where a calendar's subscribed user can give acl to another user 2024-04-03 09:18:53 +02:00
smizrahi 0fafda55d6 fix(calendar): Fix issue where a calendar's subscribed user can give acl to another user 2024-04-02 18:55:30 +02:00
smizrahi bc804ae823 fix(core): Add timer to avoid spamming onEditorChanged for CKEditor 5. Fixes #5944. 2024-04-02 11:11:46 +02:00
smizrahi 127df39689 fix(core): Clean html parasite code to avoid ckeditor hangs. Fixes #5944. 2024-03-27 10:05:13 +01:00
Hivert Quentin 711403f024 chore(js/css): update generated files 2024-03-20 01:00:54 -04:00
smizrahi 049a569d7f fix(mail): Fix errors while spamming arrow keys on mail list. The transition was not finished 2024-03-19 16:08:54 +01:00
smizrahi e6ff9a408d fix(mail): Add encoding fallback when there are ISO char in file name. Fixes #5388. 2024-03-18 15:15:35 +01:00
smizrahi 06ea167ee5 fix(mail): Removed bracket display when inline text or inline html 2024-03-18 15:15:35 +01:00
Hivert Quentin 7c0699b96f fix(languages): somme "array" strings were using the wrong comma delimiter 2024-03-14 16:05:01 +01:00
Hivert Quentin adf1117046 fix(event): resource was considered busy for an event he has delegated 2024-03-13 14:42:12 +01:00
smizrahi 5215aa4f41 fix(calendar): Fix NSData returns instead of NSString on c_cycleinfo depending on database issue. CLoses #5940. 2024-03-12 09:45:23 +01:00
Hivert Quentin 599c40b9f6 chore(js/css): update generated files 2024-03-12 01:00:55 -04:00
smizrahi e39c104436 fix(core): On some emails print, first page is blank. Closes #5602. 2024-03-11 16:31:04 +01:00
smizrahi 7b233422f5 fix(calendar): Fix issue when doubleclick creates an event of 2 days after creating an event > 1 days 2024-03-11 16:14:22 +01:00
smizrahi 0cfaa7740a feat(core): Update to ckeditor 5. Add remove format button and code plugin. 2024-03-11 11:11:24 +01:00
smizrahi 65ab6962d8 feat(core): Update to ckeditor 5. Fixes #5920. Change to add raw-html-embed on all signatures 2024-03-11 10:29:41 +01:00
Hivert Quentin 96331cac90 feat(mail): add options to not add X-Foward header in mail 2024-03-07 15:36:40 +01:00
Hivert Quentin 815a87de0b fix(event): user was considered busy for an event he has delegated 2024-03-07 12:10:05 +01:00
Hivert Quentin e4cb0a35ef fix(event): fix rdate timezones 2024-03-07 10:10:10 +01:00
Hivert Quentin f609c31a32 feat(ytnef): add possibility to add event to calendar from winmail.dat 2024-03-06 16:50:38 +01:00
Hivert Quentin f51c756cda chore(js/css): update generated files 2024-03-06 01:01:00 -05:00
smizrahi dd965baae1 feat(core): Update to ckeditor 5. Fixes #5920. Encapsulate signature in raw-html-embed div when there are tables inside. Changed settings for raw html to enable preview. 2024-03-05 21:57:01 +01:00
Hivert Quentin 1719baea7a chore(shortkey): change shortkey for marking as junk from j to shift+j
It was too common for people to obliviously mark a mail as junk...
2024-03-05 17:26:37 +01:00
Hivert Quentin e131cd7961 chore(js/css): update generated files 2024-03-05 01:00:51 -05:00
smizrahi b7a71140f2 feat(core): Update to ckeditor 5. Fixes #5920. Add directives to preserve HTML raw data. 2024-03-04 15:49:47 +01:00
smizrahi 2b23ff3eb8 feat(core): Update to ckeditor 5. Fixes #5920. Added disableNativeSpellChecker. Added htmlEmbed plugin. 2024-03-04 15:07:52 +01:00
smizrahi cc061582f4 chore(sogo-tool): Fix compilation issue with updateSecretFromEncryptedData. Fixes #5935 2024-03-01 14:51:57 +01:00
smizrahi 185770a35e docs(installation): Improve documentation on 5.10.1 2024-02-28 16:56:22 +01:00
smizrahi fd9b8dcfcd fix(core): Add disableSubgroups option in SOGoUserSources LDAP settings to avoid infinite recursive loop when using a group name with the same name as a member. Fixes #5913 2024-02-28 11:08:51 +01:00
Hivert Quentin 8267b5afd3 chore(js/css): update generated files 2024-02-28 01:00:59 -05:00
smizrahi e92fb8f52d feat(core): Update to ckeditor 5. Fixes #5920. 2024-02-27 14:29:59 +01:00
smizrahi b8a6d576e1 fix(core): Improve error logging on url encryption 2024-02-27 13:46:06 +01:00
smizrahi 4dba56f70d fix(addressbook): Removed SOGoGlobalAddressBookFirstEntries (use listRequiresDot instead) and move SOGoGlobalAddressBookFirstEntriesCount to globalAddressBookFirstEntriesCount in source scope. This fixed the broken listRequiresDot in 5.10 2024-02-26 15:40:49 +01:00
smizrahi 776a798e17 fix(mail): Fix ukrainian encoding issue. Fixes #5702. 2024-02-26 10:09:56 +01:00
Hivert Quentin 09a97b199f chore(theme): fix comment section of theme-default 2024-02-22 08:59:43 +01:00
Hivert Quentin d9c36c6985 chore(js/css): update generated files 2024-02-21 01:00:51 -05:00
Hivert Quentin 5ff1f5396c chore(release): 5.10.0 2024-02-20 13:40:57 +01:00
Hivert Quentin 092bc9a120 chore(timezones): Update to version 2024a 2024-02-20 11:22:17 +01:00
Hivert Quentin ca1d5495ab i18n(cy): Update Welsh translations 2024-02-20 11:10:31 +01:00
Hivert Quentin 34407df4f7 i18n(uk): Update Ukrainian translations 2024-02-20 11:10:31 +01:00
Hivert Quentin 2b1e7bdb67 i18n(tr_TR): Update TurkishTurkey translations 2024-02-20 11:10:31 +01:00
Hivert Quentin c93b1e9775 i18n(sv): Update Swedish translations 2024-02-20 11:10:31 +01:00
Hivert Quentin 30f819e2a4 i18n(es_ES): Update SpanishSpain translations 2024-02-20 11:10:31 +01:00
Hivert Quentin 7582266479 i18n(es_AR): Update SpanishArgentina translations 2024-02-20 11:10:31 +01:00
Hivert Quentin 24888b23d5 i18n(sl_SI): Update Slovenian translations 2024-02-20 11:10:31 +01:00
Hivert Quentin 2db48dc7fb i18n(sk): Update Slovak translations 2024-02-20 11:10:31 +01:00
Hivert Quentin 91c22c0800 i18n(sr@latin): Update SerbianLatin translations 2024-02-20 11:10:31 +01:00
Hivert Quentin 5146d9d215 i18n(sr): Update Serbian translations 2024-02-20 11:10:31 +01:00
Hivert Quentin 0f0ecf7521 i18n(ru): Update Russian translations 2024-02-20 11:10:31 +01:00
Hivert Quentin c827880f2a i18n(ro_RO): Update Romanian translations 2024-02-20 11:10:31 +01:00
Hivert Quentin 26719a1461 i18n(pt): Update Portuguese translations 2024-02-20 11:10:31 +01:00
Hivert Quentin add792fc1e i18n(nn_NO): Update NorwegianNynorsk translations 2024-02-20 11:10:31 +01:00
Hivert Quentin ee55f7a64f i18n(nb_NO): Update NorwegianBokmal translations 2024-02-20 11:10:31 +01:00
Hivert Quentin 71e66d65b8 i18n(sr_ME@latin): Update Montenegrin translations 2024-02-20 11:10:31 +01:00
Hivert Quentin adf2d409ba i18n(mk_MK): Update Macedonian translations 2024-02-20 11:10:31 +01:00
Hivert Quentin ab8c236621 i18n(lt): Update Lithuanian translations 2024-02-20 11:10:31 +01:00
Hivert Quentin 74a730d094 i18n(lv): Update Latvian translations 2024-02-20 11:10:29 +01:00
Hivert Quentin adc17a3639 i18n(kk): Update Kazakh translations 2024-02-20 11:10:29 +01:00
Hivert Quentin a75bfbb2c7 i18n(ja): Update Japanese translations 2024-02-20 11:10:29 +01:00
Hivert Quentin e924ac4e67 i18n(it): Update Italian translations 2024-02-20 11:10:29 +01:00
Hivert Quentin c3cefb6ae8 i18n(id_ID): Update Indonesian translations 2024-02-20 11:10:29 +01:00
Hivert Quentin ae85548f27 i18n(is): Update Icelandic translations 2024-02-20 11:10:29 +01:00
Hivert Quentin 8581aa7840 i18n(hu): Update Hungarian translations 2024-02-20 11:10:29 +01:00
Hivert Quentin 82db4d99d4 i18n(he): Update Hebrew translations 2024-02-20 11:10:29 +01:00
Hivert Quentin 28f446a6ad i18n(de): Update German translations 2024-02-20 11:10:29 +01:00
Hivert Quentin ef29aa2bab i18n(gl): Update Galician translations 2024-02-20 11:10:29 +01:00
Hivert Quentin 62d5414936 i18n(fr): Update French translations 2024-02-20 11:10:29 +01:00
Hivert Quentin ce8c697d96 i18n(fi): Update Finnish translations 2024-02-20 11:10:29 +01:00
Hivert Quentin ad75555a0f i18n(nl): Update Dutch translations 2024-02-20 11:10:29 +01:00
Hivert Quentin c8eee39017 i18n(da_DK): Update Danish translations 2024-02-20 11:10:29 +01:00
Hivert Quentin af22a30f12 i18n(cs): Update Czech translations 2024-02-20 11:10:29 +01:00
Hivert Quentin c5b6611f89 i18n(hr_HR): Update Croatian translations 2024-02-20 11:10:29 +01:00
Hivert Quentin 7e78781044 i18n(zh_TW): Update ChineseTaiwan translations 2024-02-20 11:10:29 +01:00
Hivert Quentin 31eb7987d8 i18n(zh_CN): Update ChineseChina translations 2024-02-20 11:10:29 +01:00
Hivert Quentin 344d4da930 i18n(ca): Update Catalan translations 2024-02-20 11:10:29 +01:00
Hivert Quentin 65d31f2b14 i18n(bg_BG): Update Bulgarian translations 2024-02-20 11:10:29 +01:00
Hivert Quentin 434be9ea71 i18n(pt_BR): Update BrazilianPortuguese translations 2024-02-20 11:10:29 +01:00
Hivert Quentin ace1515dfc i18n(bs_BA): Update Bosnian translations 2024-02-20 11:10:29 +01:00
Hivert Quentin c2fc80ecd1 i18n(eu): Update Basque translations 2024-02-20 11:10:29 +01:00
Hivert Quentin 1206d2f459 i18n(ar): Update Arabic translations 2024-02-20 11:10:28 +01:00
Hivert Quentin 083fa1fefd i18n(pl): Update Polish translations 2024-02-20 11:10:24 +01:00
Hivert Quentin 6d9647e353 chore(js/css): update theme default 2024-02-20 09:43:21 +00:00
Hivert Quentin 4337e875eb chore(js/css): update generated files 2024-02-20 09:05:28 +00:00
Hivert Quentin 2aec2ec7b0 doc(secret): Add documentation for the sogo secret 2024-02-20 09:37:13 +01:00
Hivert Quentin 6aab869b81 fix(contacts): c_cn could be null whereas it isn't 2024-02-19 10:59:01 +01:00
smizrahi 3acab3f896 fix(calendar): Fix high memory usage when importing an ics 2024-02-14 11:08:32 +01:00
Hivert Quentin 889fe1eb39 Revert "fix(memory): reduce memory usage when working with events with a lot of alarms defined in the ics file"
This reverts commit ff3c3054a6.
2024-02-13 17:39:41 +01:00
smizrahi 31a66c461a fix(core): Add missing method WORequest+SOGo.h 2024-02-13 11:46:39 +01:00
smizrahi fc778295ff feat(core): Add URL encryption for GDPR compliancy. Disable url encryption for caldav. 2024-02-12 14:52:01 +01:00
smizrahi 42511d666f feat(core): Add URL encryption for GDPR compliancy. Check for null termination when decrypting. Disable url encryption for anonymous user. 2024-02-12 13:47:41 +01:00
Hivert Quentin 5197b9bd0b fix(crypto): check if NSData is null terminated 2024-02-12 11:50:35 +01:00
smizrahi 26f05a693c docs(contributing): Changed invalid links 2024-02-09 19:46:57 +01:00
Hivert Quentin a6319e1689 fix(crypto): add protections for decryption 2024-02-09 16:16:19 +01:00
Hivert Quentin 311c358580 chore(js/css): update generated files 2024-02-08 11:09:07 -05:00
Hivert Quentin adc2d74e54 feat(accounts): Can now add smtp server to auxilliary accounts 2024-02-08 17:07:25 +01:00
Hivert Quentin f5cd67972b chore(js/css): update generated files 2024-02-08 01:00:53 -05:00
smizrahi 5081de1639 fix(js): Remove check version for ckeditor 2024-02-07 16:41:13 +01:00
smizrahi d46a436cc4 chore(js/css): update generated files 2024-02-07 15:35:37 +00:00
Hivert Quentin dde154df3f feat(accounts): Add parameter to encrypt/decrypt auxiliary account's passwords
remove release of autorelease object
2024-02-07 16:13:13 +01:00
smizrahi 7ace9c2c22 feat(core): Add URL encryption for GDPR compliancy. Change base64 encoding with SOPE one. 2024-02-06 18:21:53 +01:00
Hivert Quentin 9898e5210f feat(accounts): Add parameter to encrypt/decrypt auxiliary account's password 2024-02-06 18:06:51 +01:00
Hivert Quentin ff3c3054a6 fix(memory): reduce memory usage when working with events with a lot of alarms defined in the ics file 2024-02-05 18:01:44 +01:00
smizrahi f56910db1e fix(mail): Use text/plain fallback if an error occured while parsing html message 2024-02-05 10:50:07 +01:00
Hivert Quentin ce0e650c62 feat(sogo-tool): update user-preferences to encrypt/decrypt auxiliary accounts' password 2024-02-04 16:41:00 +01:00
Richard 1361341545 fix missing ld flag in GNUmakefile
fix undefined symbol: TNEFParseMemory when compiling from source
2024-02-02 16:06:50 +01:00
Hivert Quentin 04596c9f4e feat(accounts): Add parameter to encrypt/decrypt auxiliary account's passwords 2024-02-02 16:02:09 +01:00
Hivert Quentin 9e37d212b9 chore(js/css): update generated files 2024-02-02 01:00:49 -05:00
Hivert Quentin e6bfab7ee1 feat(accounts): Add parameter to encrypt/decrypt auxiliary account's password 2024-02-01 16:55:41 +01:00
Hivert Quentin f0010afef4 feat(accounts): Can now add smtp server to auxilliary accounts 2024-02-01 16:55:41 +01:00
Hivert Quentin 59bd290d62 chore(js/css): update generated files 2024-02-01 01:00:49 -05:00
smizrahi 63248772c1 feat(core): Add message of the day. Fix theming issue. 2024-01-31 15:05:42 +01:00
smizrahi 455fe97cbe feat(core): Add message of the day. Remove all html tags except for anchor tags (mobile only) 2024-01-29 17:16:08 +01:00
smizrahi f43974bbb7 feat(core): Add URL encryption for GDPR compliancy. Fix MALLOC exception - replaced lib with openssl 2024-01-29 16:17:11 +01:00
smizrahi fc0f5d9d98 feat(core): Add URL encryption for GDPR compliancy. Fix redirect issue 2024-01-29 10:56:17 +01:00
smizrahi 2146870071 fix(mail): Fix security @import css injection 2024-01-23 15:01:47 +00:00
smizrahi 2e7a7a97cc feat(core): Add message of the day 2024-01-23 11:11:22 +01:00
smizrahi 49b0316b9e feat(core): Add message of the day 2024-01-23 10:29:57 +01:00
Hivert Quentin 569cf8e0ae chore(js/css): update generated files 2024-01-23 01:00:50 -05:00
smizrahi 5710c4d97e fix(mail): Fix unsupported koi-u encoding 2024-01-22 16:03:39 +01:00
smizrahi 9560bdcf0c fix(docs): Fix typo in documentation 2024-01-22 14:53:19 +01:00
smizrahi eee50697b0 feat(core): Add message of the day 2024-01-22 14:34:22 +01:00
smizrahi 0d0eda2698 fix(mail): Disable inline images in attachments when HTML emails writing is disabled. Fixes #5877. 2024-01-22 09:40:10 +01:00
smizrahi 9e3e3b2291 fix(mail): Fix inline pdf attachement issue when Hide inline attachment option is set. Now the option hides only inline images 2024-01-17 17:57:33 +01:00
smizrahi a6fc83c35b fix(mail): Fix inline pdf attachement issue when Hide inline attachment option is set. Now the option hides only inline images. 2024-01-17 10:06:19 +01:00
smizrahi 7104ae6d23 feat(core): Add URL encryption for GDPR compliancy. Change base64 encoding with SOPE one. 2024-01-15 14:26:40 +01:00
smizrahi 25c72a523e Add logs on NSString+Crypto.m for debugging 2024-01-15 14:05:10 +01:00
Hivert Quentin fb3a159cf7 chore(js/css): update generated files 2024-01-10 01:00:48 -05:00
Hivert Quentin e81fdadecc fix(acl): bool was not set to NO 2024-01-09 17:25:29 +01:00
smizrahi f27b33a0c8 fix(preferences): Add error message when SOGoCreateIdentitiesDisabled is enabled and user try to activate html fields with browser inspector. Check changes of email and replyTo. 2024-01-09 17:05:00 +01:00
smizrahi 68398d2086 feat(calendar): Add double click to calendar create events 2024-01-09 14:10:05 +01:00
smizrahi 930a06e520 feat(core): Add URL encryption for GDPR compliancy 2024-01-09 11:01:17 +01:00
smizrahi 26b14671f5 fix(password recovery): Add default from mail parameter 2024-01-09 10:28:41 +01:00
smizrahi 153f444c3f Merge branch 'master' into feature-gdpr-no-caldav 2024-01-09 08:44:16 +01:00
Hivert Quentin fec99c95db chore(js/css): update generated files 2024-01-04 01:00:49 -05:00
smizrahi 00d69560ba fix(mail): Fix inline text issue when Hide inline attachment option is set 2024-01-03 09:11:14 +01:00
Hivert Quentin 5ad1d9d9c3 chore(js/css): update generated files 2024-01-03 01:00:47 -05:00
Hivert Quentin 8dc69efd70 fix(calendar): Couldn't choose some reminder options when creating events 2024-01-02 17:21:24 +01:00
smizrahi 2748d1dd08 feat(core): Add URL encryption for GDPR compliancy. Remove dav encryption 2024-01-02 13:46:46 +01:00
Hivert Quentin 99f87a26dc chore(js/css): update generated files 2023-12-23 01:00:48 -05:00
smizrahi acd4a1f4aa fix(calendar): Prevent clicking on delete event button when network is slow 2023-12-22 13:08:38 +00:00
smizrahi 10d789fb1f feat(core): Add URL encryption for GDPR compliancy 2023-12-22 11:33:40 +01:00
smizrahi d505b874f7 Merge branch 'master' into feature-gdpr 2023-12-20 18:01:40 +01:00
Hivert Quentin cbeaa4cc11 chore(ytnef): missing symbols with centos 2023-12-20 17:02:32 +01:00
Hivert Quentin 427f7f4b4f feature(contact): Show 100 first results for global address book. Fix commit #17eca6f 2023-12-20 15:36:37 +01:00
Hivert Quentin d68bbc836c chore(js/css): update generated files 2023-12-19 01:00:44 -05:00
smizrahi 51b6c0d9a3 fix(ui): Fix text/placeholder overlaps when Chrome autofill applies 2023-12-18 22:42:13 +01:00
Hivert Quentin 5f2e4889f3 chore(js/css): update generated files 2023-12-18 08:27:23 -05:00
smizrahi 37379ba416 fix(preferences): Fix error 500 when changing password 2023-12-18 14:24:50 +01:00
smizrahi 17eca6f96a feature(contact): Show 100 first results for global address book 2023-12-18 08:34:53 +01:00
Hivert Quentin 26c7462eb0 fix(contacts): Custom contacts categories in sogo.conf wasn't working 2023-12-14 18:11:10 +01:00
smizrahi 9ef49bb56f feat(core): Add URL encryption for GDPR compliancy (fix some dav issues) 2023-10-18 16:37:08 +02:00
smizrahi 54a1f922f9 Merge branch 'master' into feature-gdpr 2023-10-18 13:29:29 +02:00
smizrahi 64a6319635 feat(core): Add URL encryption for GDPR compliancy (refactoring) 2023-10-17 16:43:50 +02:00
smizrahi 31c6f78913 feat(core): Add URL encryption for GDPR compliancy 2023-10-17 16:17:25 +02:00
Leon Klingele f04c73d495 fix(calendar(js)): prevent duplicate event creation in case of an event conflict
In case of an calendar event conflict the form submit button was not
disabled after use, allowing it to be clicked again.
This could have resulted in a double creation of the submit event.
2023-05-10 17:13:23 +02:00
Leon Klingele 5c944617d0 fix(calendar(js)): escape CSS selector names
SOGo uses the name of calendar categories verbatim to construct a CSS
selector without escaping characters such as "/". This patch ensures
those selector names are properly escaped so calendar categories
applied to a calendar event match the according selector and appear
in the correct color.

This patch makes use of the CSS escape API which is supported by all
major browsers. See https://caniuse.com/mdn-api_css_escape.

Also see https://mathiasbynens.be/notes/css-escapes.
2023-05-10 17:07:49 +02:00
1005 changed files with 14030 additions and 9831 deletions

No files matched your search

+12 -12
View File
@@ -3,7 +3,7 @@
## Reporting Bugs and Suggesting Enhancements
If you encounter a possible bug with SOGo, you can access our
[bug tracking system](https://sogo.nu/bugs/).
[bug tracking system](https://bugs.sogo.nu/).
Please make sure to respect the following guidelines when reporting a bug:
@@ -19,25 +19,25 @@ Begin by reading [SOGo Developer's Guide](../Documentation/SOGoDevelopersGuide.a
### Translations
Three type of files must be translated. The first type are **Localizable.strings**; they can be
translated online using **[Transifex](https://www.transifex.com/inverse/sogo/)**. To use Transifex,
translated online using **[Transifex](https://www.transifex.com/alinto/sogo/)**. To use Transifex,
you must first sign up for a [free account](https://www.transifex.com/signup/). Once registered,
[request a new team](https://www.transifex.com/inverse/teams/) for your language. Once authorized,
[request a new team](https://www.transifex.com/alinto/teams/) for your language. Once authorized,
you'll be able to start/continue translating SOGo in your language.
The second type are **wox and html templates**. Only words outside the tags (<>) must be
translated. Start by duplicating the English templates:
* [UI/Templates/SOGoACLEnglishAdditionAdvisory.wox](https://raw.githubusercontent.com/inverse-inc/sogo/master/UI/Templates/SOGoACLEnglishAdditionAdvisory.wox)
* [UI/Templates/SOGoACLEnglishRemovalAdvisory.wox](https://raw.githubusercontent.com/inverse-inc/sogo/master/UI/Templates/SOGoACLEnglishRemovalAdvisory.wox)
* [UI/Templates/SOGoACLEnglishModificationAdvisory.wox](https://raw.githubusercontent.com/inverse-inc/sogo/master/UI/Templates/SOGoACLEnglishModificationAdvisory.wox)
* [UI/Templates/SOGoFolderEnglishAdditionAdvisory.wox](https://raw.githubusercontent.com/inverse-inc/sogo/master/UI/Templates/SOGoFolderEnglishAdditionAdvisory.wox)
* [UI/Templates/SOGoFolderEnglishRemovalAdvisory.wox](https://raw.githubusercontent.com/inverse-inc/sogo/master/UI/Templates/SOGoFolderEnglishRemovalAdvisory.wox)
* [SoObjects/Mailer/SOGoMailEnglishForward.wo/SOGoMailEnglishForward.html](https://raw.githubusercontent.com/inverse-inc/sogo/master/SoObjects/Mailer/SOGoMailEnglishForward.wo/SOGoMailEnglishForward.html)
* [SoObjects/Mailer/SOGoMailEnglishReply.wo/SOGoMailEnglishReply.html](https://raw.githubusercontent.com/inverse-inc/sogo/master/SoObjects/Mailer/SOGoMailEnglishReply.wo/SOGoMailEnglishReply.html)
* [UI/Templates/SOGoACLEnglishAdditionAdvisory.wox](https://raw.githubusercontent.com/alinto/sogo/master/UI/Templates/SOGoACLEnglishAdditionAdvisory.wox)
* [UI/Templates/SOGoACLEnglishRemovalAdvisory.wox](https://raw.githubusercontent.com/alinto/sogo/master/UI/Templates/SOGoACLEnglishRemovalAdvisory.wox)
* [UI/Templates/SOGoACLEnglishModificationAdvisory.wox](https://raw.githubusercontent.com/alinto/sogo/master/UI/Templates/SOGoACLEnglishModificationAdvisory.wox)
* [UI/Templates/SOGoFolderEnglishAdditionAdvisory.wox](https://raw.githubusercontent.com/alinto/sogo/master/UI/Templates/SOGoFolderEnglishAdditionAdvisory.wox)
* [UI/Templates/SOGoFolderEnglishRemovalAdvisory.wox](https://raw.githubusercontent.com/alinto/sogo/master/UI/Templates/SOGoFolderEnglishRemovalAdvisory.wox)
* [SoObjects/Mailer/SOGoMailEnglishForward.wo/SOGoMailEnglishForward.html](https://raw.githubusercontent.com/alinto/sogo/master/SoObjects/Mailer/SOGoMailEnglishForward.wo/SOGoMailEnglishForward.html)
* [SoObjects/Mailer/SOGoMailEnglishReply.wo/SOGoMailEnglishReply.html](https://raw.githubusercontent.com/alinto/sogo/master/SoObjects/Mailer/SOGoMailEnglishReply.wo/SOGoMailEnglishReply.html)
The third type is the locale file formatted as a **plist**. Duplicate the English locale. Beware that words with other characters than [a-zA-Z] (accents, non-latin...) must be between double quotes ("). You can look at other files as arabic or french to have an example:
* [UI/MainUI/English.lproj/Locale](https://raw.githubusercontent.com/inverse-inc/sogo/master/UI/MainUI/English.lproj/Locale)
* [UI/MainUI/English.lproj/Locale](https://raw.githubusercontent.com/alinto/sogo/master/UI/MainUI/English.lproj/Locale)
Once translated, create an archive with all the files and [contact
us](https://sogo.nu/support.html#/commercial). We'll integrate it in the next version of SOGo.
@@ -107,7 +107,7 @@ The body should include the motivation for the change and contrast this with pre
#### Footer
The footer should contain any information about **Breaking Changes** and is also the
place to reference [Mantis](https://sogo.nu/bugs/) issues that this commit **Fixes** or **Resolves**.
place to reference [Mantis](https://bugs.sogo.nu) issues that this commit **Fixes** or **Resolves**.
> Breaking Changes are intended to be highlighted in the CHANGELOG as changes that will require
> community users to modify their code after updating to a version that contains this commit.
+1 -1
View File
@@ -34,7 +34,7 @@ ActiveSync_RESOURCE_FILES += \
ADDITIONAL_OBJCFLAGS += -Wno-deprecated-declarations
ADDITIONAL_INCLUDE_DIRS += -I../SOPE/ -I../SoObjects/
ADDITIONAL_LIB_DIRS += -L../SOPE/GDLContentStore/obj/ -L../SOPE/NGCards/obj/
ADDITIONAL_INCLUDE_DIRS += -I/usr/include/libwbxml-1.0/
ADDITIONAL_INCLUDE_DIRS += $(shell pkg-config --cflags libwbxml2)
ADDITIONAL_LDFLAGS += -Wl,--no-as-needed -lwbxml2
-include GNUmakefile.preamble
+252
View File
@@ -2,6 +2,258 @@
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
### [5.11.2](https://github.com/Alinto/sogo/compare/SOGo-5.11.1...SOGo-5.11.2) (2024-10-15)
### Bug Fixes
* **mail:** modify the message-id to not start by XX- that trigger a native spamassassin rule ([1d8ee80](https://github.com/Alinto/sogo/commit/1d8ee80c394382d26e50457cda9f9292b0f4f63b))
* **security:** fix a security issue introduced in 5.11.1 with parameter SOGoForbidUnknownDomainsAuth ([04a9a87](https://github.com/Alinto/sogo/commit/04a9a8773dfb30dcc86c6146eed175a9a115f6b2))
## [5.11.1](https://github.com/Alinto/sogo/compare/SOGo-5.11.0...SOGo-5.11.1) (2024-10-08)
### Enhancements
* **login:** add parameters to prevent uneccesary connection request when the domain is unknown ([56598d1](https://github.com/Alinto/sogo/commit/56598d1e3777265ebb09fa19e7a719f673aaee40))
* **sieve:** add from on notificatons ([1c20c1e](https://github.com/Alinto/sogo/commit/1c20c1ead3094ca109a5334fdf33726a0e638365))
* **build:** Use pkgconfig to compute cflags for wbxml2 instead of hardcoding them. Thanks to [jmallach](https://github.com/jmallach)
### Regression Fixes
* **calendar:** Fix regression on repeat task ([2a17449](https://github.com/Alinto/sogo/commit/2a1744998c0023f3cbaddd6ee90275ee1baf6cc3))
* **mail:** Add an option in Preferences to display full email instead of name alone in mailboxes. Fix issue caused by advanced search. ([fa2caf9](https://github.com/Alinto/sogo/commit/fa2caf902666367e247850ce9da82737b5ec6bbb))
### Bug Fixes
* **calendar:** Fix all day recurring event displayed on 2 days when a DST change occurs at the endDate ([2f75a7f](https://github.com/Alinto/sogo/commit/2f75a7fb1b57cbb4d98ec1596fe5b3d98cdd0934))
* **ckeditor5:** prevent ckeditor5 to preview media ([2dd1097](https://github.com/Alinto/sogo/commit/2dd10970a4e0cbe8f2e8a9c0241d139d4ce006fa))
* **mail:** Fix assertion when there is an empty image in the mail. Fixes [#6035](https://bugs.sogo.nu/view.php?id=6035). ([59d48cb](https://github.com/Alinto/sogo/commit/59d48cb38285ab019013972baa3e5269b6188a5e))
* **mail:** Fix highlighsearch html rendering on subject ([0cbd082](https://github.com/Alinto/sogo/commit/0cbd082c1d48c70d87e58a8bb8ae05183676e2a1))
* **mail:** Fix HTML mail rendering issue ([41a0f8d](https://github.com/Alinto/sogo/commit/41a0f8d9afc3a9d29f26c4109620252a82002ae4))
* **mail:** Fix issue where mailto: links are badly formatted when html composing ([86446a0](https://github.com/Alinto/sogo/commit/86446a059ce70adf103c27768040e52087000812))
* **mail:** Fix issue where unread counter is invalid when whanging folder. Fixes [#6001](https://bugs.sogo.nu/view.php?id=6001). ([1f6bbc1](https://github.com/Alinto/sogo/commit/1f6bbc1044e8c4f715b96b1b95bfb0eef888e7a3) [91a2490](https://github.com/Alinto/sogo/commit/91a249009b4a700b0a2b335450b32a73985b8dd1))
* **mail:** improve algo to fetch imap folders for mail view ([68f4fc1](https://github.com/Alinto/sogo/commit/68f4fc134312bc28031e2be0167c117f67c6f0b8))
* **security:** Prevent user to add html script in its preferences ([a7023bc](https://github.com/Alinto/sogo/commit/a7023bce1642ec1fd25fe68f0541407d78f321a0))
* **sogo-tool:** prevent a bug when restoring two events with same id ([84fe91c](https://github.com/Alinto/sogo/commit/84fe91c29c24440980df4311d0ae0835337f1ec4))
* **tests:** Add timeout on all async tests ([64f1788](https://github.com/Alinto/sogo/commit/64f17880c739e9feef8ce69ed221d83586b773a1))
### Localization
* **de:** Update German translations ([592f35b](https://github.com/Alinto/sogo/commit/592f35bbec2823e72f1790c8b629c485f3e5500d))
* **pt_BR:** Update BrazilianPortuguese translations ([1d3b502](https://github.com/Alinto/sogo/commit/1d3b502bc78f50c9038027036036c6d37d7fe340))
* **pt:** Update Portuguese translations ([a4de357](https://github.com/Alinto/sogo/commit/a4de35748babced2f385046d97055fec8d80e667))
* **ru:** Update Russian translations ([78ea981](https://github.com/Alinto/sogo/commit/78ea981e7f4254a8353e276c309fe54443bdd090))
* **tr_TR:** Update TurkishTurkey translations ([41aecca](https://github.com/Alinto/sogo/commit/41aecca692f93134c6dd0d535ed7479182f7fd23))
* **uk:** Update Ukrainian translations ([80a7689](https://github.com/Alinto/sogo/commit/80a76895dd59402e884d0226f59bd8edd7e8a9c1))
## [5.11.0](https://github.com/Alinto/sogo/compare/SOGo-5.10.0...SOGo-5.11.0) (2024-08-07)
### Features
* **core:** Add MySQL/MariaDB SSL connection support ([0168ca5](https://github.com/Alinto/sogo/commit/0168ca56b2e5f51ac98be2a78ddfcea4a688b74f))
* **core:** Update to ckeditor 5 ([0cfaa77](https://github.com/Alinto/sogo/commit/0cfaa7740af509389e43c395649ea82a3fb432be) [e92fb8f](https://github.com/Alinto/sogo/commit/e92fb8f52d615b72a6945760aecdf95039e1cbf2) [b7a7114](https://github.com/Alinto/sogo/commit/b7a71140f2b3eefb494a3acc151fe556ce1d3ce4) [a9e02d9](https://github.com/Alinto/sogo/commit/a9e02d94a26cd30c9e56196a1ec24ddec0c4db9c) [98e00d0](https://github.com/Alinto/sogo/commit/98e00d09a3e31b388592e2d1068d89bc57ff1d99) [2b23ff3](https://github.com/Alinto/sogo/commit/2b23ff3eb8dac6acc570b1aaa6e0baff72dd17ea) [65ab696](https://github.com/Alinto/sogo/commit/65ab6962d870baeba7cb4b3c1b66eb6447174e1b) [dd965ba](https://github.com/Alinto/sogo/commit/dd965baae110176c6144ccd64cbade3ef757966a))
* **mail:** Improve mail search (advanced search) ([ed95166](https://github.com/Alinto/sogo/commit/ed951667ec610b8ad48a49a606b6b1c33c60914d) [f621d97](https://github.com/Alinto/sogo/commit/f621d972893c94977cda432efe3dcc837ec8bf58) [0cbcad9](https://github.com/Alinto/sogo/commit/0cbcad9d91cd52afcfd14034786457a106013182) [9eb8039](https://github.com/Alinto/sogo/commit/9eb80396988bd7c8ac3a1f44dbc48147ced20750))
### Enhancements
* **calendar:** Add option to disable email appointmoint notifications when using caldav ([2637434](https://github.com/Alinto/sogo/commit/2637434436c19157ce6255fb071dcb99cf57ad89))
* **mail:** Add 'View raw message' mail contextual option. This option open message in a popup without HTML mail CSS content modification. ([6ac8525](https://github.com/Alinto/sogo/commit/6ac8525bfe161409c0565e3dca1e9e92f87c1c08))
* **mail:** Add location in email ics representation template ([591d283](https://github.com/Alinto/sogo/commit/591d2834252441a9593f27012f7b148d38b9a511))
* **mail:** add options to not add X-Foward header in mail ([96331ca](https://github.com/Alinto/sogo/commit/96331cac905ee7b6dc1adfda083dcefffe0f8795))
* **ytnef:** add possibility to add event to calendar from winmail.dat ([f609c31](https://github.com/Alinto/sogo/commit/f609c31a324683dd4c210284f672618cfffb9908))
* **calendar:** Optimization of date computation when handle attendees. Report of 77b2d9f8. ([53d77f3](https://github.com/Alinto/sogo/commit/53d77f3105c2d7f6aa2be1cac691dd19a4754df8))
### Bug Fixes
* **addressbook:** Removed SOGoGlobalAddressBookFirstEntries (use listRequiresDot instead) and move SOGoGlobalAddressBookFirstEntriesCount to globalAddressBookFirstEntriesCount in source scope. This fixed the broken listRequiresDot in 5.10 ([4dba56f](https://github.com/Alinto/sogo/commit/4dba56f70dbda81822b3fd26e1420c367c1b7298))
* **attachment:** properly download openxmlformats in attachments ([2e2e36e](https://github.com/Alinto/sogo/commit/2e2e36e0a2b759d5d734bdefc274f127937e9b89))
* **calendar(js):** escape CSS selector names ([5c94461](https://github.com/Alinto/sogo/commit/5c944617d0efdc03a72a677e9f60922cb3ab90bd))
* **calendar(js):** prevent duplicate event creation in case of an event conflict ([f04c73d](https://github.com/Alinto/sogo/commit/f04c73d495dfce6e93d33ceb0964f1ee6aeb51a5))
* **calendar:** Fix all day recurring event displayed on 2 days when a DST change occurs at the endDate ([980b5e2](https://github.com/Alinto/sogo/commit/980b5e28dd0c4cfd42619c64872bb08674d64765))
* **calendar:** Fix assertion when is_cycle is set but without c_cycleinfo ([d404667](https://github.com/Alinto/sogo/commit/d4046673eebf21180f494e516a39a7b04243f669) [49e9988](https://github.com/Alinto/sogo/commit/49e9988b82b206ae751feb10979f5e0859d2ec77) [d9ee884](https://github.com/Alinto/sogo/commit/d9ee88445997a21623b33129fe28466042229696))
* **calendar:** fix crash when using a 2*16bits chars at the 75th char of ics file ([31c0473](https://github.com/Alinto/sogo/commit/31c0473c48238de2288e5a5c0c8295fc67710d32))
* **calendar:** fix disabled change view buttons ([910effd](https://github.com/Alinto/sogo/commit/910effd664e24a3fc5343145f24a2e2d9cf58027))
* **calendar:** Fix empty recurence list when creating event from mail ([2756176](https://github.com/Alinto/sogo/commit/27561765038358243a628853b47b20c2db256dc2))
* **calendar:** Fix issue on template introduced in commit [#275617650](https://bugs.sogo.nu/view.php?id=275617650) ([eee160e](https://github.com/Alinto/sogo/commit/eee160e5bf60b2e59b96adabae805d61c5d85292))
* **calendar:** Fix issue when doubleclick creates an event of 2 days after creating an event > 1 days ([7b23342](https://github.com/Alinto/sogo/commit/7b233422f5790147dd2522261c3b79dac85bfd6c))
* **calendar:** Fix issue where a calendar's subscribed user can give acl to another user ([ae01ed0](https://github.com/Alinto/sogo/commit/ae01ed077dcca8d3c3778cde6645075dada9b92d) [cb55413](https://github.com/Alinto/sogo/commit/cb55413e91ac0f10b649abaaeaa5fdab141f0958) [0fafda5](https://github.com/Alinto/sogo/commit/0fafda55d633401c1eeadcbfafd9ae251234787a))
* **calendar:** Fix NSData returned instead of NSString on c_cycleinfo depending on database issue. CLoses [#5940](https://bugs.sogo.nu/view.php?id=5940). ([5215aa4](https://github.com/Alinto/sogo/commit/5215aa4f4114acc09bc923542e4fe23fa2779d3b))
* **calendar:** Memory optimization on _appendCycleException ([45fd999](https://github.com/Alinto/sogo/commit/45fd999010a80ee39c7fa26f96c1460ddf0d3af9))
* **calendar:** resource was busy even if they have delegated ([880eb89](https://github.com/Alinto/sogo/commit/880eb897191c906d141afafe628d66f9a5025640) [5830053](https://github.com/Alinto/sogo/commit/58300530260469594f40db7ee3b67e34ba60d1ce))
* **chore:** Remove check on -p option to sogo-ealarms-notify as the SMTP Master account has been implemented ([f96eb4d](https://github.com/Alinto/sogo/commit/f96eb4d3ca32a916ecc63221d022014f736cd94b))
* **contacts:** can now reset contacts categories more than once ([526aa28](https://github.com/Alinto/sogo/commit/526aa281d9a92e9fd29046b8a1551aea16c58772))
* **core:** Add disableSubgroups option in SOGoUserSources LDAP settings to avoid infinite recursive loop when using a group name with the same name as a member. Fixes [#5913](https://bugs.sogo.nu/view.php?id=5913) ([fd9b8dc](https://github.com/Alinto/sogo/commit/fd9b8dcfcd07217e7456a67c2e69f13fca743874))
* **core:** Add timer to avoid spamming onEditorChanged for CKEditor 5. Fixes [#5944](https://bugs.sogo.nu/view.php?id=5944). ([bc804ae](https://github.com/Alinto/sogo/commit/bc804ae823a8a61e6cb02495759f75a104c77753) [2f4c125](https://github.com/Alinto/sogo/commit/2f4c125bdd9b5eebbba41e2204e2fc9c93a3eebd))
* **core:** Clean html parasite code to avoid ckeditor hangs. Fixes [#5944](https://bugs.sogo.nu/view.php?id=5944). ([127df39](https://github.com/Alinto/sogo/commit/127df3968998c96d5349f7368adba1e5e371ed4c))
* **core:** Fix int overflow on vms and rss computation ([4b343f7](https://github.com/Alinto/sogo/commit/4b343f707016f2b45fbd71c6c2f039b50a076f30))
* **core:** Improve error logging on url encryption ([b8a6d57](https://github.com/Alinto/sogo/commit/b8a6d576e19828ffddf6c8e3c3353efd03836b2e))
* **core:** Notify sgCkeditor component when clicking the send button to update content. Fixes [#5952](https://bugs.sogo.nu/view.php?id=5952). ([c2d9050](https://github.com/Alinto/sogo/commit/c2d9050539c13f843f2a7395b0b9a24a4b8db3f3))
* **core:** On some emails print, first page is blank. Closes [#5602](https://bugs.sogo.nu/view.php?id=5602). ([e39c104](https://github.com/Alinto/sogo/commit/e39c1044364d68df49ea6142072928d0b0e4c1eb))
* **doc:** Fix typo with SOGoURLEncryptionEnabled in documentation ([a06331e](https://github.com/Alinto/sogo/commit/a06331eb86aad8ec9a30f30df55aa4282a78654c))
* **event:** fix rdate timezones ([e4cb0a3](https://github.com/Alinto/sogo/commit/e4cb0a35ef34b496d8b7e0d6e2e10fe0844e37f8))
* **event:** resource was considered busy for an event he has delegated ([adf1117](https://github.com/Alinto/sogo/commit/adf111704642126272301ab7961603fb0b787c9e))
* **event:** user was considered busy for an event he has delegated ([815a87d](https://github.com/Alinto/sogo/commit/815a87de0b8bc8e8a7431b8a7b3aedc66d4dde2a))
* **languages:** somme "array" strings were using the wrong comma delimiter ([7c0699b](https://github.com/Alinto/sogo/commit/7c0699b96ff1539011e04a1d60f8f4c7334e79b1))
* **mail:** Add encoding fallback when there are ISO char in file name. Fixes [#5388](https://bugs.sogo.nu/view.php?id=5388). ([e6ff9a4](https://github.com/Alinto/sogo/commit/e6ff9a408d94d2817ce0d9b9f078811e19ea4a39))
* **mail:** Fix advanced search no select/action on results. Fixes [#5978](https://bugs.sogo.nu/view.php?id=5978) ([1a47fdb](https://github.com/Alinto/sogo/commit/1a47fdb7d62242001c770ac28df84bf8c999c179))
* **mail:** Fix errors while spamming arrow keys on mail list. The transition was not finished ([049a569](https://github.com/Alinto/sogo/commit/049a569d7faff5f3a507671d17bc0da309ec14ac))
* **mail:** Fix Exception when using delegated identities. Closes [#5951](https://bugs.sogo.nu/view.php?id=5951) ([f8c354c](https://github.com/Alinto/sogo/commit/f8c354c302b34b1676764a869481f8a6160f6120))
* **mail:** Fix invalid content when forwarding a text/plain mail. Fixes [#5983](https://bugs.sogo.nu/view.php?id=5983). ([ef88039](https://github.com/Alinto/sogo/commit/ef88039a4a3d590de09cf75da5668db9d6fd29f0) [43388ac](https://github.com/Alinto/sogo/commit/43388ac42c99a6fc47cc4191291f81d45faf9a8d))
* **mail:** Fix not called draft expunge function when sending mail. ([7ec7a7d](https://github.com/Alinto/sogo/commit/7ec7a7d6aead1a7aee025324e2ae64696b2d087c))
* **mail:** Fix template issues with Galician and Basque ([19ee54f](https://github.com/Alinto/sogo/commit/19ee54fe055bc6a45bae6e5f71dcdb60bad766fd))
* **mail:** Fix ukrainian encoding issue. Fixes [#5702](https://bugs.sogo.nu/view.php?id=5702). ([776a798](https://github.com/Alinto/sogo/commit/776a798e173e6bacc29c8ab3d32bddabd383da55))
* **mail:** Fix unsupported koi-u encoding ([5710c4d](https://github.com/Alinto/sogo/commit/5710c4d97e2fbcf3ff0b187f1100892d8efcacb2))
* **mail:** Remove some css when generating UIxMailPartHTMLViewer. Sometimes, the mail contains SOGo mail template in the content, and broke mail display. ([863280d](https://github.com/Alinto/sogo/commit/863280d6ac54783a7fe6a8ce3fcdd8c3a4c4e4ff))
* **mail:** Removed bracket display when inline text or inline html ([06ea167](https://github.com/Alinto/sogo/commit/06ea167ee58c65f54cf4474927d977513d380b3b))
* **mail:** Restore scroll position when refreshing emails ([9d71be9](https://github.com/Alinto/sogo/commit/9d71be9c45eb9b9af0cb62be99a440ea7652248b))
* **mail:** Update len value as data is modified in loop. This fixes the issue on sanitizedContentUsingVoidTags whenthere are meta html tags in mail content. ([99da6e0](https://github.com/Alinto/sogo/commit/99da6e0f81a99f94e453ece7fe0761fcf1186fb6))
* **mail:** When the signature is empty, the -- seperator appears. ([58db9c9](https://github.com/Alinto/sogo/commit/58db9c980eb518dc726e908307988b98cf7a4d84))
* **preferences:** Can not save preferences when there is a constraint on mail ([990f1e8](https://github.com/Alinto/sogo/commit/990f1e8e8fda67537a3a4ed3a067011e3b81e7dd))
* **ui:** Fix invalid display when creating new appointment / mail on mobile. Initialize isFullscreen to if screen is in portrait. Fixes [#5970](https://bugs.sogo.nu/view.php?id=5970). ([314b39d](https://github.com/Alinto/sogo/commit/314b39dd1c65e321920fdc095915c2954a53b944))
* **vulnerability:** prevent cross-site scripting when previewing attachments ([2e37e59](https://github.com/Alinto/sogo/commit/2e37e59ed140d4aee0ff2fba579ca5f83f2c5920))
### Localization
* **ar:** Update Arabic translations ([1aa59dc](https://github.com/Alinto/sogo/commit/1aa59dcd7e5755873ac0a68c770ecb33efe50077))
* **bg_BG:** Update Bulgarian translations ([be6a69a](https://github.com/Alinto/sogo/commit/be6a69a4d600da2ac3bccd00d10b185871295c2a))
* **bs_BA:** Update Bosnian translations ([0b530f9](https://github.com/Alinto/sogo/commit/0b530f9e36a996f9910432b5410ce14e0c74a979))
* **calendar:** Change Email Attendees to Email Attendees (internal users ([eb63e6d](https://github.com/Alinto/sogo/commit/eb63e6d047c4f3967b83f17c6457d353acf2d9ae))
* **ca:** Update Catalan translations ([ca0b001](https://github.com/Alinto/sogo/commit/ca0b00107a65b2cd5b78d084d8591a99d6055d07))
* **cs:** Update Czech translations ([5ee1904](https://github.com/Alinto/sogo/commit/5ee190468e7616e2fb05a90fd146dbb0a76ccb6a))
* **cy:** Update Welsh translations ([fad8c21](https://github.com/Alinto/sogo/commit/fad8c21473bdb975826a37f728f7da76a21afd6f))
* **da_DK:** Update Danish translations ([bcb2410](https://github.com/Alinto/sogo/commit/bcb2410b1224981f0fec618f2e073197d2539666))
* **de:** Update German translations ([37f2b1d](https://github.com/Alinto/sogo/commit/37f2b1dc5c630ea58ad356c568d706bb81747cb7))
* **es_AR:** Update SpanishArgentina translations ([94d32c4](https://github.com/Alinto/sogo/commit/94d32c419c525067415c8ff9c2aa44fd00c361ed))
* **es_ES:** Update SpanishSpain translations ([6e11cdf](https://github.com/Alinto/sogo/commit/6e11cdf2893727ae77625cad1d0be4cd0e60e1bd))
* **eu:** Update Basque translations ([55563d2](https://github.com/Alinto/sogo/commit/55563d21132c43841fe009ea93e71bae5058a37c))
* **fi:** Update Finnish translations ([ed3e790](https://github.com/Alinto/sogo/commit/ed3e790b47f60b2b2548888c23eeb1945c7d8156))
* **gl:** Update Galician translations ([6b6dc6b](https://github.com/Alinto/sogo/commit/6b6dc6b3b845357b2d9986abe3b84e91484f7c58))
* **he:** Update Hebrew translations ([8bf1a77](https://github.com/Alinto/sogo/commit/8bf1a77efc12eeaf41b4f6d32aec6eddfe5f4f5c))
* **hr_HR:** Update Croatian translations ([fa23124](https://github.com/Alinto/sogo/commit/fa2312470adff5026c1d8b75c3e32109b55e51a4))
* **hu:** Update Hungarian translations ([b82fa1d](https://github.com/Alinto/sogo/commit/b82fa1d0771b082d07e3c654e41a3ef82888e525))
* **id_ID:** Update Indonesian translations ([de289d9](https://github.com/Alinto/sogo/commit/de289d9b4cd7b0ed6050183acb020c8e1c4054ca))
* **is:** Update Icelandic translations ([2fabfdf](https://github.com/Alinto/sogo/commit/2fabfdfb9f78df085531a4525707311004d6c4ed))
* **it:** Update Italian translations ([227b92b](https://github.com/Alinto/sogo/commit/227b92b7434ded7f54affe9aad629b08a3e2badf))
* **ja:** Update Japanese translations ([0c2c9d7](https://github.com/Alinto/sogo/commit/0c2c9d7682a9ca66ac4d3778ae0efc907f525aa8))
* **kk:** Update Kazakh translations ([c4b58a6](https://github.com/Alinto/sogo/commit/c4b58a6ae75110482801b4aa2141b564b8943476))
* **lt:** Update Lithuanian translations ([a84ab76](https://github.com/Alinto/sogo/commit/a84ab7655d05aec16c0d247d13f6da3b46a95221))
* **lv:** Update Latvian translations ([88c9074](https://github.com/Alinto/sogo/commit/88c9074aeab8759d841ea79db2245520fe998543))
* **mk_MK:** Update Macedonian translations ([5bb0253](https://github.com/Alinto/sogo/commit/5bb025323f63b93b984707ffa507d900846f6ec5))
* **nb_NO:** Update NorwegianBokmal translations ([943e96f](https://github.com/Alinto/sogo/commit/943e96f459cc5a8fd93ec8da36f064f251d30dc2))
* **nl:** Update Dutch translations ([85c1cc7](https://github.com/Alinto/sogo/commit/85c1cc7fa3f3e21b6a158cd51c3e640e94f0e81e))
* **nn_NO:** Update NorwegianNynorsk translations ([65f29f2](https://github.com/Alinto/sogo/commit/65f29f21dc2d957e3bcabdedb8873e71f65461ee))
* **pl:** Update Polish translations ([84c0fb4](https://github.com/Alinto/sogo/commit/84c0fb496d5727ccb4248b96b36d57a620ef440a))
* **pt_BR:** Update BrazilianPortuguese translations ([af630f0](https://github.com/Alinto/sogo/commit/af630f033d3cc1188019e1f3cfe0ebb852f3560f))
* **pt:** Update Portuguese translations ([9a0e03b](https://github.com/Alinto/sogo/commit/9a0e03bf9afdf049bcce0045411400931c6ce9f1))
* **ro_RO:** Update Romanian translations ([b889064](https://github.com/Alinto/sogo/commit/b889064dbc7e137298ef8e70538f6a7196477596))
* **ru:** Update Russian translations ([33df476](https://github.com/Alinto/sogo/commit/33df476db55890fcae1c40bd29e9e81017c86e72))
* **sk:** Update Slovak translations ([7b7cfdb](https://github.com/Alinto/sogo/commit/7b7cfdb499766867430e49376185105cfbf2ab4f))
* **sl_SI:** Update Slovenian translations ([68b17a5](https://github.com/Alinto/sogo/commit/68b17a5c4a6a2e015d32dc79c7b33d348be1a5f2))
* **sr_ME@latin:** Update Montenegrin translations ([8d4597d](https://github.com/Alinto/sogo/commit/8d4597d3610928191313986490eafb44f3077ca5))
* **sr@latin:** Update SerbianLatin translations ([a4f0397](https://github.com/Alinto/sogo/commit/a4f03978cfc815d3a337d94d5a46bbe10166306a))
* **sr:** Update Serbian translations ([7de9dc8](https://github.com/Alinto/sogo/commit/7de9dc8f9ba3e62d082d91f4305c5be6c9d2a7c6))
* **sv:** Update Swedish translations ([dd1a660](https://github.com/Alinto/sogo/commit/dd1a6607fe3ed9e65991d349588179acb7f2eb6c))
* **tr_TR:** Update TurkishTurkey translations ([56012c6](https://github.com/Alinto/sogo/commit/56012c65e191937b5132c091f6366b6b24546a5f))
* **uk:** Update Ukrainian translations ([6537d96](https://github.com/Alinto/sogo/commit/6537d961e13604ae373e787664f6fa91f9912ab5))
* **zh_CN:** Update ChineseChina translations ([0e5657e](https://github.com/Alinto/sogo/commit/0e5657e635012cd2568e30060741e7114ef1a591))
* **zh_TW:** Update ChineseTaiwan translations ([1136c18](https://github.com/Alinto/sogo/commit/1136c182885d716dc2613d58f59a58fdcf8d8168))
## [5.10.0](https://github.com/Alinto/sogo/compare/SOGo-5.9.1...SOGo-5.10.0) (2024-02-20)
### Features
* **accounts:** Add parameter to encrypt/decrypt auxiliary account's password ([9898e52](https://github.com/Alinto/sogo/commit/9898e5210fb275f1fdd11a8287be673becb78073) [e6bfab7](https://github.com/Alinto/sogo/commit/e6bfab7ee17ca789d6e07be06577c742dfc9bb3f) [dde154d](https://github.com/Alinto/sogo/commit/dde154df3f766d7aa670835bb20686d9ef1eb302) [04596c9](https://github.com/Alinto/sogo/commit/04596c9f4e0ee480a63772b7ef9a51e183b2af52) [ce0e650](https://github.com/Alinto/sogo/commit/ce0e650c62e542c5c9e9817f1d91c7a5b6794712))
* **accounts:** Can now add smtp server to auxilliary accounts ([adc2d74](https://github.com/Alinto/sogo/commit/adc2d74e544531ee94f3148ab32754a657c50cd8) [f0010af](https://github.com/Alinto/sogo/commit/f0010afef4d7a36b75d552ce42e48fa151772d9d)) *This feature has been sponsored by a user from the community: [sogouser5646](https://bugs.sogo.nu/view_user_page.php?id=3108)*
* **calendar:** Add double click to calendar create events ([68398d2](https://github.com/Alinto/sogo/commit/68398d2086452f7b4eaae65eb005b2bbdedd3a9d))
* **contact:** Show 100 first results for global address book ([17eca6f](https://github.com/Alinto/sogo/commit/17eca6f96a4537a580d66a4abb8ba13e965892c8))
* **core:** Add message of the day ([2e7a7a9](https://github.com/Alinto/sogo/commit/2e7a7a97ccff6887bda1ef7b0d5c2f051c233fe5) [49b0316](https://github.com/Alinto/sogo/commit/49b0316b9e87ad1f6f6524e4e3d7c8f5031ff072) [eee5069](https://github.com/Alinto/sogo/commit/eee50697b09c03af251996cec593131ffd3609a6) [6324877](https://github.com/Alinto/sogo/commit/63248772c168cff618e6f1d831c0170dc80d56ff) [455fe97](https://github.com/Alinto/sogo/commit/455fe97cbe9c76dddefd74a9f945cb029d3731ba)) *This feature has been sponsored by the [University Of Cologne](https://portal.uni-koeln.de/en/uoc-home)*
* **core:** Add URL encryption for GDPR compliancy ([930a06e](https://github.com/Alinto/sogo/commit/930a06e520de1d0d00f58c6be6def32679e4e68c) [10d789f](https://github.com/Alinto/sogo/commit/10d789fb1fe8157a19c71252fb9c485b90d9993c) [31c6f78](https://github.com/Alinto/sogo/commit/31c6f78913f109d081d5032ad010042e112a1f88) [64a6319](https://github.com/Alinto/sogo/commit/64a63196357b91bd8cfc92396c8fde16481d9b84) [7ace9c2](https://github.com/Alinto/sogo/commit/7ace9c2c222f086be196acc5c65bca2376abb0ab) [7104ae6](https://github.com/Alinto/sogo/commit/7104ae6d234ff5f2b2fbc59dea6c6b8b736c50f4) [42511d6](https://github.com/Alinto/sogo/commit/42511d666fe9cf979e59e590b2510c436a70460a) [fc77829](https://github.com/Alinto/sogo/commit/fc778295ffc1730a873d2c965efcf30ed04c748b) [f43974b](https://github.com/Alinto/sogo/commit/f43974bbb799ba5d2ea53587139a0d5569ae0082) [fc0f5d9](https://github.com/Alinto/sogo/commit/fc0f5d9d984df9a30a2a9e0ca25cdbbd15847a34) [2748d1d](https://github.com/Alinto/sogo/commit/2748d1dd081358c353624591fe302b1684488a4e))
### Bug Fixes
* **acl:** bool was not set to NO ([e81fdad](https://github.com/Alinto/sogo/commit/e81fdadeccb3882717a852defe561afcf216b9a8))
* **addressbook:** Fix exception when using multiple address book source and searching. Fixes [#5906](https://bugs.sogo.nu/view.php?id=5906). ([f85c531](https://github.com/Alinto/sogo/commit/f85c53190c38c4e28536f78e43623f6776248291))
* **build:** fix missing ld flag in GNUmakefile ([136134](https://github.com/Alinto/sogo/commit/1361341545e7f45b86f8e7ed5ac7407a34ed361e)). *This fix has been made by @konsultaner*
* **calendar:** Couldn't choose some reminder options when creating events ([8dc69ef](https://github.com/Alinto/sogo/commit/8dc69efd70bf93c9a41811d16ad24d578981407e))
* **calendar:** Fix high memory usage when importing an ics ([3acab3f](https://github.com/Alinto/sogo/commit/3acab3f89612bde3e74b7f108e47ea3ff4bd9bb6))
* **calendar:** Prevent clicking on delete event button when network is slow ([acd4a1f](https://github.com/Alinto/sogo/commit/acd4a1f4aa2177eb2b71ba9951307fe9c6adc7ce))
* **contacts:** c_cn could be null whereas it isn't ([6aab869](https://github.com/Alinto/sogo/commit/6aab869b81e3c73c55ee6bc4f79128324cc08031))
* **contacts:** Custom contacts categories in sogo.conf wasn't working ([26c7462](https://github.com/Alinto/sogo/commit/26c7462eb0e1a86c9d644a27724f81d8ae496cb7))
* **core:** Add missing method WORequest+SOGo.h ([31a66c4](https://github.com/Alinto/sogo/commit/31a66c461abc72ee287a9b21b2fdb560655df7a8))
* **core:** *SOPE* Add error handler on sax parsing (pushBytes) ([ff9a7f9](https://github.com/Alinto/sope/commit/ff9a7f9ab93f20b9106327babfce971b8b06672e))
* **crypto:** add protections for decryption ([a6319e1](https://github.com/Alinto/sogo/commit/a6319e1689c351f9292350917f1f3e983ab0a7f5))
* **crypto:** check if NSData is null terminated ([5197b9b](https://github.com/Alinto/sogo/commit/5197b9bd0b0150503824dfc68a6910116c2bf344))
* **docs:** Fix typo in documentation ([9560bdc](https://github.com/Alinto/sogo/commit/9560bdcf0cd1139ce49f8c16127d0e227ee63a9b))
* **gnustep:** *SOPE* chance constant name when using gnutspe > 1.29 ([393f20c](https://github.com/Alinto/sope/commit/393f20cce158b45f780346d5604d740ac7f295a6)) *This fix has been made by @binary-jam*
* **http:** *SOPE* http header host was not correct for local url ([4b9366d](https://github.com/Alinto/sope/commit/4b9366d60c49729b5024b5d814ec643f8b3c3fa0))
* **imap:** *SOPE* Fix some cases where IMAP delimiter was returned as empty([1160846](https://github.com/Alinto/sope/commit/1160846ac35a51d0ae85e73f5c1e0ec2ab3f0216))
* **js:** Remove check version for ckeditor ([5081de1](https://github.com/Alinto/sogo/commit/5081de1639162be9d259a3c921fb05084f879ce4))
* **mail:** Disable inline images in attachments when HTML emails writing is disabled. Fixes [#5877](https://bugs.sogo.nu/view.php?id=5877). ([0d0eda2](https://github.com/Alinto/sogo/commit/0d0eda26984e825c8af82528c749238678baf159))
* **mail:** Fix inline pdf attachement issue when Hide inline attachment option is set. Now the option hides only inline images ([9e3e3b2](https://github.com/Alinto/sogo/commit/9e3e3b22911133c3da5ad5bb6f51e9b7d158a35f) [a6fc83c](https://github.com/Alinto/sogo/commit/a6fc83c35bf62430b4a626107ff62cfcf9532539))
* **mail:** Fix inline text issue when Hide inline attachment option is set ([00d6956](https://github.com/Alinto/sogo/commit/00d69560ba3526f68396e5a1febf1e1d9d58726b))
* **mail:** Fix security [@import](https://github.com/import) css injection ([2146870](https://github.com/Alinto/sogo/commit/21468700718ed71774eaf2979ee59330fc569424))
* **mail:** Use text/plain fallback if an error occured while parsing html message ([f56910d](https://github.com/Alinto/sogo/commit/f56910db1efe25d2ce1d36db787c010a9f2a36f9))
* **mail:**: *SOPE* allow 'GMT' timezone in mail header ([604c8ef](https://github.com/Alinto/sope/commit/604c8ef291b2755dc5c821a9fcea7aafdef5eb7b))
* **password recovery:** Add default from mail parameter ([26b1467](https://github.com/Alinto/sogo/commit/26b14671f5e3edc6ff40212d4bbe153c0decb2eb))
* **preferences:** Add error message when SOGoCreateIdentitiesDisabled is enabled and user try to activate html fields with browser inspector. Check changes of email and replyTo. ([f27b33a](https://github.com/Alinto/sogo/commit/f27b33a0c8b4a98490090faec20912b349ab35fe))
* **preferences:** Fix error 500 when changing password ([37379ba](https://github.com/Alinto/sogo/commit/37379ba416abb7beef56439f2a584a0445e17c7f))
* **sql:** *SOPE* remove deprecated param for mysql ([3d4613c8](https://github.com/Alinto/sope/commit/3d4613c89f6537fa0bcaefe6105c517513bd84c1))
* **ui:** Fix text/placeholder overlaps when Chrome autofill applies ([51b6c0d](https://github.com/Alinto/sogo/commit/51b6c0d9a3ee1b2c43011b2f29ff50f78327caad))
### Localization
* **ar:** Update Arabic translations ([1206d2f](https://github.com/Alinto/sogo/commit/1206d2f459cd2446010b2e2badb096d6c4b71902))
* **bg_BG:** Update Bulgarian translations ([65d31f2](https://github.com/Alinto/sogo/commit/65d31f2b144d04a882454cd6cf8f301837b05a0a))
* **bs_BA:** Update Bosnian translations ([ace1515](https://github.com/Alinto/sogo/commit/ace1515dfcebf809b22afa46b86941c390189d9a))
* **ca:** Update Catalan translations ([344d4da](https://github.com/Alinto/sogo/commit/344d4da9308fb72ed399c04fb94277d9eb903b17))
* **cs:** Update Czech translations ([af22a30](https://github.com/Alinto/sogo/commit/af22a30f12eaeb55ad782e34575208f936f267c6))
* **cy:** Update Welsh translations ([ca1d549](https://github.com/Alinto/sogo/commit/ca1d5495ab0d88a1196666201c4e9242ee74d93b))
* **da_DK:** Update Danish translations ([c8eee39](https://github.com/Alinto/sogo/commit/c8eee39017382b1bcc5b5e752cd77331defe698e))
* **de:** Update German translations ([28f446a](https://github.com/Alinto/sogo/commit/28f446a6ad63dc0b74fde94b3a599ac57f76346c))
* **es_AR:** Update SpanishArgentina translations ([7582266](https://github.com/Alinto/sogo/commit/7582266479043aa4f5acfcada2eef85a7c0b6010))
* **es_ES:** Update SpanishSpain translations ([30f819e](https://github.com/Alinto/sogo/commit/30f819e2a42545b468f37f6d9e0506ebdf240874))
* **eu:** Update Basque translations ([c2fc80e](https://github.com/Alinto/sogo/commit/c2fc80ecd1b83d368332047fc732195874adb6a3))
* **fi:** Update Finnish translations ([ce8c697](https://github.com/Alinto/sogo/commit/ce8c697d96322decb9008ce35a04b3df26e694a8))
* **fr:** Update French translations ([62d5414](https://github.com/Alinto/sogo/commit/62d5414936f5d71cb82a8a6f1e2725c0bbed32bb))
* **gl:** Update Galician translations ([ef29aa2](https://github.com/Alinto/sogo/commit/ef29aa2bab7fad5cdfe22223f71191f9a067953e))
* **he:** Update Hebrew translations ([82db4d9](https://github.com/Alinto/sogo/commit/82db4d99d429d35a9764a43b94b25bbb2231d309))
* **hr_HR:** Update Croatian translations ([c5b6611](https://github.com/Alinto/sogo/commit/c5b6611f8977e7e15c4971c34a1961ae56a821c2))
* **hu:** Update Hungarian translations ([8581aa7](https://github.com/Alinto/sogo/commit/8581aa7840bb8c4346c62c344e79ce64db72a806))
* **id_ID:** Update Indonesian translations ([c3cefb6](https://github.com/Alinto/sogo/commit/c3cefb6ae8865c5544f2a33033525c4cdea42aab))
* **is:** Update Icelandic translations ([ae85548](https://github.com/Alinto/sogo/commit/ae85548f2734e7c93a83426ec78f8b0eb991a35d))
* **it:** Update Italian translations ([e924ac4](https://github.com/Alinto/sogo/commit/e924ac4e67f74c517aecd691d343700980ddd384))
* **ja:** Update Japanese translations ([a75bfbb](https://github.com/Alinto/sogo/commit/a75bfbb2c7ac03f7dadf5ae48dfbd312a7c4c367))
* **kk:** Update Kazakh translations ([adc17a3](https://github.com/Alinto/sogo/commit/adc17a3639fed8a69417079f68caef9a86cfce01))
* **lt:** Update Lithuanian translations ([ab8c236](https://github.com/Alinto/sogo/commit/ab8c236621a08b92bfc90654e6e620c47319b9f7))
* **lv:** Update Latvian translations ([74a730d](https://github.com/Alinto/sogo/commit/74a730d094a7184c5aa3febb8f0bcd610fa6f113))
* **mk_MK:** Update Macedonian translations ([adf2d40](https://github.com/Alinto/sogo/commit/adf2d409bad3c7dbf53bcc141604d807591f665c))
* **nb_NO:** Update NorwegianBokmal translations ([ee55f7a](https://github.com/Alinto/sogo/commit/ee55f7a64fb456aa1b791636752a331d70a7a407))
* **nl:** Update Dutch translations ([ad75555](https://github.com/Alinto/sogo/commit/ad75555a0f6ec7f8b00310f323813d513d949088))
* **nn_NO:** Update NorwegianNynorsk translations ([add792f](https://github.com/Alinto/sogo/commit/add792fc1e7020b64a4ec8f905740172dad9be35))
* **pl:** Update Polish translations ([083fa1f](https://github.com/Alinto/sogo/commit/083fa1fefd8704aebc7b7e3f24eff5f2ad5d41c8))
* **pt_BR:** Update BrazilianPortuguese translations ([434be9e](https://github.com/Alinto/sogo/commit/434be9ea71e21205ba8f08c0b78bf22e50a600d7))
* **pt:** Update Portuguese translations ([26719a1](https://github.com/Alinto/sogo/commit/26719a146189301d7daf30035698bd6a332c245a))
* **ro_RO:** Update Romanian translations ([c827880](https://github.com/Alinto/sogo/commit/c827880f2a1e812a959c63c7d6e9752fafd69023))
* **ru:** Update Russian translations ([0f0ecf7](https://github.com/Alinto/sogo/commit/0f0ecf75218df232268faf8c9aa030bcd1511051))
* **sk:** Update Slovak translations ([2db48dc](https://github.com/Alinto/sogo/commit/2db48dc7fb68515daf9218106d61944d1a46617d))
* **sl_SI:** Update Slovenian translations ([24888b2](https://github.com/Alinto/sogo/commit/24888b23d59b7e3b874ff312c96d474260fd5366))
* **sr_ME@latin:** Update Montenegrin translations ([71e66d6](https://github.com/Alinto/sogo/commit/71e66d65b8d10e3f0371c92cbf7719c1fecf7708))
* **sr@latin:** Update SerbianLatin translations ([91c22c0](https://github.com/Alinto/sogo/commit/91c22c08001952de7563eb9627bf6da2eddcb721))
* **sr:** Update Serbian translations ([5146d9d](https://github.com/Alinto/sogo/commit/5146d9d2156799914cc9c392102c4ee86e3eceaf))
* **sv:** Update Swedish translations ([c93b1e9](https://github.com/Alinto/sogo/commit/c93b1e977539cd11bc52057b6ffcdf57334bb572))
* **tr_TR:** Update TurkishTurkey translations ([2b1e7bd](https://github.com/Alinto/sogo/commit/2b1e7bdb67312e5ea34d370b22c8e9d60550bc93))
* **uk:** Update Ukrainian translations ([34407df](https://github.com/Alinto/sogo/commit/34407df4f7713646cf8cd1a7bd60b875965fd617))
* **zh_CN:** Update ChineseChina translations ([31eb798](https://github.com/Alinto/sogo/commit/31eb7987d8d95f23b94360ad854f9077298e0975))
* **zh_TW:** Update ChineseTaiwan translations ([7e78781](https://github.com/Alinto/sogo/commit/7e78781044f7d43f3c347e5fcc9e2285212ae445))
## [5.9.1](https://github.com/Alinto/sogo/compare/SOGo-5.9.0...SOGo-5.9.1) (2023-12-12)
+223 -29
View File
@@ -70,7 +70,7 @@ Assumptions
SOGo reuses many components in an infrastructure. Thus, it requires the
following:
* Database server (MySQL, PostgreSQL or Oracle)
* Database server (MariaDB, MySQL, PostgreSQL or Oracle)
* LDAP server (OpenLDAP, Novell eDirectory, Microsoft Active Directory
and others) 
* SMTP server (Postfix, Sendmail and others)
@@ -165,7 +165,7 @@ The following operating systems are currently supported by SOGo:
* Red Hat Enterprise Linux (RHEL) Server 7, 8 and 9
* Community ENTerprise Operating System (CentOS) 7, 8 and 9
* Debian GNU/Linux 7.0 (Wheezy), 8.0 (Jessie), 9.0 (Stretch), 10 (Buster), 11 (Bullseye) and 12 (Bookworm)
* Ubuntu 14.04 (Trusty), 16.04 (Xenial), 18.04 (Bionic), 20.04 (Focal) and 22.04 (Jammy)
* Ubuntu 14.04 (Trusty), 16.04 (Xenial), 18.04 (Bionic), 20.04 (Focal), 22.04 (Jammy) and 24.04 (Noble)
Make sure the required components are started automatically at boot time
and that they are running before proceeding with the SOGo configuration.
@@ -265,8 +265,8 @@ This will install SOGo and its dependencies such as GNUstep, the SOPE
packages and memcached. Once the base packages are installed, you need
to install the proper database connector suitable for your environment.
You need to install `sope49-gdl1-postgresql` for the PostgreSQL database
system, `sope49-gdl1-mysql` for MySQL or `sope49-gdl1-oracle` for Oracle.
The installation command will thus look like this:
system, `sope49-gdl1-mysql` for MariaDB/MySQL or `sope49-gdl1-oracle`
for Oracle. The installation command will thus look like this:
yum install sope49-gdl1-postgresql
@@ -437,8 +437,8 @@ Defaults to `300`.
|S |SOGoAuthenticationType
|Parameter used to define the way by which users will be authenticated.
For C.A.S., specify `cas`. For SAML2, specify `saml2`. For anything
else, leave that value empty.
For C.A.S., specify `cas`. For SAML2, specify `saml2`. For opendID Connect, specify `openid`.
For anything else, leave that value empty.
|S |SOGoTrustProxyAuthentication
|Parameter used to set whether HTTP username should be trusted.
@@ -530,6 +530,10 @@ This could be `America/New_York`, `Europe/Berlin`, `Asia/Tokyo` or
In our example, we set the time zone to `America/Montreal`.
|D |SOGoMailDisableXForward
|Parameter used to prevent sogo from adding the mail header X-Forward that
contains the user ip. Set to 'YES' to disable this header. Default to 'NO'.
|D |SOGoMailDomain
|Parameter used to set the default domain name used by SOGo. SOGo uses
this parameter to build the list of valid email addresses for users.
@@ -802,12 +806,27 @@ Default value is `YES`, or enabled.
authentication and global address books. Multiple sources can be
specified as an array of dictionaries.
|S |SOGoForbidUnknownDomainsAuth
|Boolean. If set to `YES`, prevent user that try to connect with an unknown domain.
The known domains are set in parameter `SOGoDomainAllowed` and/or the domains listed in a <<multi-domains-configuration, Multi-domains Configuration>>. Default value is `NO`.
Obiously, if your users can connect without specifying a domain, let this parameter to `NO`.
|S |SOGoDomainAllowed
|Parameter used to define which domains SOGo should allowed during a connection request. This parameter is an array of strings.
|S |SOGoURLCreateAccount
|Add a link below the login form and set the link using the value of this setting.
|S |SOGoPasswordRecoveryEnabled
|Boolean enable password recovery with secret question or secondary e-mail. Default value is `NO`.
|S |SOGoPasswordRecoveryDomains
|List of domains where password recovery is enabled, for example `(example.org, example.net)`. If empty array `()`, disabled for all domains. If not set, enabled for all domains.
|D |SOGoPasswordRecoveryFrom
|From email when `SOGoPasswordRecoverySecondaryEmail` is set and no user domain is defined - otherwise it will use noreply@foo.bar where foo.bar is the selected user domain. Default value is `noreply@domain.com`.
|U |SOGoPasswordRecoveryMode
|User password recovery mode. Values can be `Disabled`, `SecretQuestion` or `SecondaryEmail`.
@@ -826,10 +845,115 @@ specified as an array of dictionaries.
|D |SOGoCreateIdentitiesDisabled
|Disable identity creation for users in preferences. If `YES`, users won't be able to add new identities and will allow to change only full name, signature and default identity. Default value is `NO`. Note : If this settings is set to `YES`, it will not be possible to crete auxiliary mail accounts.
|S |SOGoURLEncryptionEnabled
|Enable URL encryption to make SOGo GDPR compatible. Setting this parameter to `YES` will encrypt username in URL. The encryption data are cached to avoid high cpu usage, if the value of thie parameter is changed, memcached server needs to be restarted. Default value is `NO`.
|S |SOGoURLEncryptionPassphrase
|Passphrase for `SOGoURLEncryptionEnabled`. The string must be 128 bits (16 characters). If this settings change, the cache server must be restarted, and the DAV url will change. Default value is `SOGoSuperSecret0`.
|D |SOGoForceRawHtmlSignature
|Add `<div class="raw-html-embed sogo-raw-html-embed">` around signature to avoid CKEditor 5 modifying HTML code and breaking signature (https://bugs.sogo.nu/view.php?id=5920). Default value is `YES` (tag is added).
|=======================================================================
[[Secret-for-sensitive-data]]
Secret for sensitive data
~~~~~~~~~~~~~~~~~~~~~~~~~
_Since 5.10_
SOGo can store sensitive data in its database. In default behavior, SOGo will not do anything and store them in plain text.
Starting with 5.10, you can now set a secret for SOGo to encrypt this data in database.
The encryption method is AES-GCM with a 256 bits key.
Two parameters in your sogo.conf are needed to do that
[cols="^4,46,50a"]
|=======================================================================
|S |SOGoSecretType
|Parameter to define what kind is the secret: 'plain' to directly put the secret in _SOGoSecretValue_, 'env'
to put the name of a environment variable in _SOGoSecretValue_ or 'none' to not use any secret.
For now, it is only used to encrypt/decrypt auxiliary account's password. the secret must be
256 bits long i.e. 32 utf8 chars string.
Defaults to 'none' when unset
|S |SOGoSecretValue
|Parameter used whenever SOGo need a secret to encrypt/decrypt. For now,
only for password of auxiliary accounts. If _SOGoSecretType_ is 'plain',
directly put the secret here. if _SOGoSecretType_ is 'env', put the name
of the environment variable here. Must be set with _SOGoSecretType_.
If _SOGoSecretType_ is not 'none', sogo won't start is the value is unfetchable or incorrect
There is no default value
|=======================================================================
If you want to use an environment variable, set:
----
SOGoSecretType = "env";
SOGoSecretValue = "SOGO_SECRET";
----
SOGO_SECRET must be an environment variable containing a 32 chars (256 bits) string. Note that SOGO_SECRET must be accessible
to the unix user 'sogo'. If you use sogo with systemd or init.d, be sure your process have access to that environment variable.
If you want to directly put the secret in your sogo.conf:
----
SOGoSecretType = "plain";
SOGoSecretValue = "secret_is_a_32_characters_string";
----
*Note that if _SOGoSecretType_ is set to something different than 'none', sogo will check the secret and won't start if it is not ok.
The reason will be given in the log (size, can't found the env...)*
If you want to use a secret for the first time or change the secret. There is a a _sogo-tool_ command to encrypt all
your sensitive data. Check the doc of _<<sogo-tool-update-secret,sogo-tool update-secret>>_
**How to use a secret for the first time?**
- Stop sogo
- Modify your sogo.conf to add your secret
- Use the sogo-tool command to encrypt all sensitive data that are already in your database
----
sogo-tool update-secret -n myNewSecret
----
- Restart sogo
**How to change the value of the secret?**
- Stop sogo
- Modify your sogo.conf to modify your secret
- Use the sogo-tool command to encrypt all sensitive data with the new secret, you will need to pass your current secret too.
----
sogo-tool update-secret -n myNewSecret -p myCurrentSecret
----
- Restart sogo
**I can't stop sogo in my environement**
In that case, simply modify the sogo.conf and use the sogo-tool. If you're unluncky, a user would have made
a request that will encrypt its data without the correct secret at the same time you run sogo-tool.
If that's the case, the wrong behavior and their solution are listed below.
**Unexpected behavior**
Be aware that it must have a synchronisation between the secret in your sogo.conf and the sensitive data in your database. Meaning if the
data is not encrypted with the correct secret, some wrong behavior can happens. There are listed here as well as their solution.
As for now, it only affects the IMAP's passwords of auxiliary accounts and here the unexpected behavior in case of mismatch of secret are:
- *The auxiliary account of the user is correctly set but it can't see any mail folders*: The user will have to go to preferences -> mail -> imap accounts.
Then it simply has to edit its account, put its password again and save the preferences. The password will be correctly encrypted then.
- *the user has errors and blank pages*: Should not happen, please open a ticket. But, if it does, do this to unstuck the user:
----
sogo-tool user-preferences unset default <user> AuxiliaryMailAccounts
----
user being the full mail address or just the username if domainless. After that, the user will have to set its auxiliary accounts again.
Authentication using LDAP
~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -1154,14 +1278,21 @@ Defaults to `NO` when unset.
(with read-only access). Note that if set to `NO`, autocompletion will
not work for entries in this source and thus, freebusy lookups.
!displayName (optional)
!If set as an address book, the human identification name of the LDAP
|displayName (optional)
|If set as an address book, the human identification name of the LDAP
repository
|listRequiresDot (optional)
|If set to `YES`, listing of this LDAP source is only possible when performing a search (respecting the SOGoSearchMinimumWordLength parameter) or when explicitly typing a single dot.
Defaults to `YES` when unset.
|globalAddressBookFirstEntriesCount (optional)
|Number of entries displayed when `listRequiresDot` is enabled. Default value is `-1` (all records / equals to SOGoLDAPQueryLimit). This parameter must be less or equal to SOGoLDAPQueryLimit. If source is LDAP, the LDAP overlay sssvlv must be enabled on the system for server side sorting.
|disableSubgroups (optional)
|If set to `YES`, disable recursive search. Consider this option when groups have the same name than a member (https://bugs.sogo.nu/view.php?id=5913).
Defaults to `NO` when unset.
|ModulesConstraints (optional)
|Limits the access of any module through a constraint based on an LDAP
attribute; must be a dictionary with keys `Mail`, and/or `Calendar`,
@@ -1457,7 +1588,7 @@ appointments, tasks and contacts information. It also uses the database
system to store personal preferences of SOGo users. In this guide, we
assume you use PostgreSQL so commands provided the create the database
are related to this application. However, other database servers are
supported, such as MySQL and Oracle.
supported, such as MariaDB, MySQL and Oracle.
First, make sure that your PostgreSQL server has TCP/IP connections
support enabled.
@@ -1522,7 +1653,7 @@ The following table describes the parameters that were set:
|Parameter used to set the database URL so that SOGo can retrieve user
profiles.
For MySQL, set the database URL to something like:
For MariaDB/MySQL, set the database URL to something like:
`mysql://sogo:sogo@127.0.0.1:3306/sogo/sogo_user_profile`.
|S |OCSFolderInfoURL
@@ -1575,6 +1706,14 @@ if you set this parameter.
For PostgresSQL, set the database URL to something like:
`postgresql://sogo:sogo@127.0.0.1:5432/sogo/sogo_cache_folder`.
|S |OCSAdminURL
|Parameter used to set the database URL so that SOGo can use to store
all administration elements.
For PostgresSQL, set the database URL to something like:
`postgresql://sogo:sogo@127.0.0.1:5432/sogo/sogo_admin`.
|=======================================================================
@@ -1588,7 +1727,8 @@ In addition to the seven tables described above, two other tables get
created in the database: `sogo_quick_appointment` and `sogo_quick_contact`
which store calendar and contact information.
If you're using MySQL, make sure in your `my.cnf` file you have:
If you're using MariaDB/MySQL, make sure in your `my.cnf` file you
have:
----
[mysqld]
@@ -1603,12 +1743,27 @@ default-character-set=utf8
default-character-set=utf8
----
MySQL complete Unicode compliance
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
MariaDB/MySQL SSL Connection
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
By default MySQL only supports a subset of UTF-8, meaning that characters such
as emoji are not handled properly. Some extra steps at installation can be
undertaken to leverage full Unicode support under MySQL.
Add the following settings in the `sogo.conf` file to enable SSL connection
between SOGo and MariaDB/MySQL :
----
MySQL4SSLEnabled = YES;
MySQL4SSLKeyPath = "/mysql_keys/client-key.pem";
MySQL4SSLCertPath = "/mysql_keys/client-cert.pem";
MySQL4SSLCaPath = "/mysql_keys/ca-cert.pem";
----
MariaDB/MySQL complete Unicode compliance
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
By default MariaDB/MySQL only supports a subset of UTF-8, meaning that
characters such as emoji are not handled properly. Some extra steps at
installation can be undertaken to leverage full Unicode support under
MariaDB/MySQL.
IMPORTANT: Switching to complete Unicode compliance on an already-deployed SOGo
is out of scope of this document, as it would typically involve delicate manual
@@ -1616,10 +1771,11 @@ operations on the database system.
Requirements:
* MariaDB >= 5.5
* MySQL >= 5.5
* SOGo >= 3.1.0
Strongly suggested MySQL configuration settings (innodb* parameters are
Strongly suggested MariaDB/MySQL configuration settings (innodb* parameters are
mandatory *only* for versions lower than 8.0):
----
@@ -1639,8 +1795,8 @@ innodb_large_prefix = TRUE # MySQL < 8.0 only
----
CAUTION: Changing InnoDB parameters on an already deployed database server can
cause severe data loss. Do not blindly edit MySQL parameters without reading
and understanding the implication of such changes.
cause severe data loss. Do not blindly edit MariaDB/MySQL parameters without
reading and understanding the implication of such changes.
A parameter must be added to `sogo.conf` to turn on complete Unicode
compliance:
@@ -1660,8 +1816,8 @@ a command such as:
mysql -hHOST -uUSER -p -D SOGO < Scripts/mysql-utf8mb4.sql
----
Where `HOST`, `USER` and `SOGO` are your MySQL host, username and database name
respectively.
Where `HOST`, `USER` and `SOGO` are your MariaDB/MySQL host, username and
database name respectively.
Once SOGo is running, you can test correctness by creating an event such as
“Lunch with &#127829; and fries” and seeing it properly displayed in the SOGo
@@ -1709,11 +1865,12 @@ they have the same name as popular LDAP attributes (such as `givenName`,
|userPasswordPolicy
|An array of dictionaries that define regular expressions used to determine whether a new password
is valid.
|An array of dictionaries that define regular expressions used to determine
whether a new password is valid.
Each dictionary must contain the key "regex" associated to a string representing a regular
expression. It can also contain the key "label" to briefly describe the constraint to the user. Example:
Each dictionary must contain the key "regex" associated to a string
representing a regular expression. It can also contain the key "label" to
briefly describe the constraint to the user. Example:
----
userPasswordPolicy = (
@@ -2494,7 +2651,7 @@ Defaults to `inline` when unset.
|Show recipients or sender full email in mailboxes if set to `YES`. Default value is `NO`.
|U |SOGoMailHideInlineAttachments
|Hide inline message as attachements if set to `YES`. Default value is `NO`.
|Hide attachements for inline images if set to `YES`. Default value is `NO`.
|U |SOGoMailCustomFullName
@@ -2684,6 +2841,8 @@ like this:
}
----
[[multi-domains-configuration]]
Multi-domains Configuration
~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -3077,9 +3236,9 @@ instructions. On the SOGo side, _SOGoEnablePublicAccess_ must be set to
need to adjust the word size of your IMAP server. In Dovecot, the parameter
to increase is "imap_max_line_length" while under Cyrus IMAP Server, the
parameter is "maxword". We suggest a buffer of 2MB.
* If you are using MySQL, make sure you set "max_allowed_packet" to a large value
since the EAS cache size can be large for mailboxes with thousands of messages.
A 64M or even 128M value is recommended.
* If you are using MariaDB/MySQL, make sure you set "max_allowed_packet" to a
large value since the EAS cache size can be large for mailboxes with thousands
of messages. A 64M or even 128M value is recommended.
In order to use the SOGo ActiveSync support code in production
environments, you need to get a proper usage license from Microsoft.
@@ -3668,6 +3827,7 @@ Two contacts are considered duplicates when they have the same mails or display
are duplicates, each one will get a score. The ones with the highest score will be kept and the others
will be discarded. If two records have the same score, the first one to have reach it will be kept.
The scores are distributed as such:
* Record which has been the last modified: +1
* Record has the most content: +2
* Record has the most quick field set: +3
@@ -3746,6 +3906,37 @@ Example:
sogo-tool update-autoreply -p /var/sogo/cred
----
[[sogo-tool-update-secret]]
sogo-tool update-secret
~~~~~~~~~~~~~~~~~~~~~~~
_New in 5.10_
Please read this section before <<Secret-for-sensitive-data, Secret for sensitive data>>
This command will encrypt/decrypt sensitive data in your database. For now it only affects the IMAP's passwords of auxiliary account.
A secret is a 32 chars utf-8 string (256 bits). Be careful, the secret use here must match the secret of _SOGoSecretValue_.
sogo-tool update-secret -n newSecret -o oldSecret
If your data are still plain and you want to encrypt them, use:
----
sogo-tool update-secret -n myNewSecret
----
If your data are already encrypted with 'oldSecret' but you want to encrypt them with a new secret value 'myNewSecret':
----
sogo-tool update-secret -n myNewSecret -o oldSecret
----
If your data are already encrypted with 'oldSecret' but you want to decrypt them to plain data:
----
sogo-tool update-secret -o oldSecret
----
sogo-tool user-preferences
~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -3815,6 +4006,9 @@ current version of SOGo from the previous release.
[cols="100a"]
|=======================================================================
h|5.11
|Parameters `SOGoGlobalAddressBookFirstEntries` and `SOGoGlobalAddressBookFirstEntriesCount` has been removed. Please use `listRequiresDot` and `globalAddressBookFirstEntriesCount` instead. Signature are now between a div tag to avoid CKEditor changing the content - set `SOGoForceRawHtmlSignature` to `NO` to leave signature (https://bugs.sogo.nu/view.php?id=5920).
h|5.9.0
|Run the shell script `sql-update-5.8.4_to_5.9.0.sh` (if you are using MySQL). This will change the `c_defaults` to `MEDIUMTEXT`.
+32 -15
View File
@@ -288,16 +288,16 @@ static BOOL debugLeaks;
e = [urlStrings objectEnumerator];
while (ok && (tmp = [e nextObject]))
{
value = [defaults stringForKey: tmp];
if (value)
[self _checkTableWithCM: cm tableURL: value andType: tmp];
else
{
value = [defaults stringForKey: tmp];
if (value)
[self _checkTableWithCM: cm tableURL: value andType: tmp];
else
{
[self errorWithFormat: @"No value specified for '%@'", tmp];
ok = NO;
}
[self errorWithFormat: @"No value specified for '%@'", tmp];
ok = NO;
}
}
if (combined)
{
@@ -314,14 +314,23 @@ static BOOL debugLeaks;
{
fm = [GCSFolderManager defaultFolderManager];
// Create the sessions table
[[fm adminFolder] createFolderIfNotExists];
// Create the sessions table
[[fm sessionsFolder] createFolderIfNotExists];
// Create the email alarms table, if required
if ([defaults enableEMailAlarms])
{
[[fm alarmsFolder] createFolderIfNotExists];
}
{
[[fm alarmsFolder] createFolderIfNotExists];
}
//Create mandatory openId table, if used
if([defaults hasOpenIdType])
{
[[fm openIdFolder] createFolderIfNotExists];
}
}
return ok;
@@ -349,8 +358,10 @@ static BOOL debugLeaks;
{
if ([[context request] handledByDefaultHandler])
authenticator = [SOGoWebAuthenticator sharedSOGoWebAuthenticator];
else
else {
authenticator = [SOGoDAVAuthenticator sharedSOGoDAVAuthenticator];
}
}
return authenticator;
@@ -363,10 +374,16 @@ static BOOL debugLeaks;
{
SOGoUser *user;
id userFolder;
NSData *decodedLogin;
NSString *login;
WORequest *request;
user = [SOGoUser userWithLogin: _key roles: nil];
request = [_ctx request];
login = [SOGoUser getDecryptedUsernameIfNeeded: _key request: request];
user = [SOGoUser userWithLogin: login roles: nil];
if (user)
userFolder = [$(@"SOGoUserFolder") objectWithName: _key
userFolder = [$(@"SOGoUserFolder") objectWithName: login
inContainer: self];
else
userFolder = nil;
@@ -472,7 +489,7 @@ static BOOL debugLeaks;
- (void) checkIfDaemonHasToBeShutdown
{
unsigned int vmem;
unsigned long long vmem;
if (vMemSizeLimit > 0)
{
+10 -1
View File
@@ -48,7 +48,16 @@ main (int argc, char **argv, char **env)
rc = 0;
sd = [SOGoSystemDefaults sharedSystemDefaults];
[NSTimeZone setDefaultTimeZone: [sd timeZone]];
WOWatchDogApplicationMain (@"SOGo", argc, (void *) argv);
//Check if sogo secret is set and correct
if([sd isSogoSecretSet] && ![sd sogoSecretValue])
{
rc =-1;
NSLog (@"Sogo secret is not correctly set");
}
else
{
WOWatchDogApplicationMain (@"SOGo", argc, (void *) argv);
}
}
else
{
+53
View File
@@ -0,0 +1,53 @@
/* GCSAdminFolder.h - this file is part of $PROJECT_NAME_HERE$
*
* Copyright (C) 2023 Alinto
*
* This file is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2, or (at your option)
* any later version.
*
* This file is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; see the file COPYING. If not, write to
* the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
* Boston, MA 02111-1307, USA.
*/
#ifndef GCSALARMSFOLDER_H
#define GCSALARMSFOLDER_H
@class NSCalendarDate;
@class NSException;
@class NSNumber;
@class NSString;
@class GCSFolderManager;
@interface GCSAdminFolder : NSObject
{
GCSFolderManager *folderManager;
}
+ (id)adminFolderWithFolderManager:(GCSFolderManager *)newFolderManager;
- (void) setFolderManager: (GCSFolderManager *) newFolderManager;
/* operations */
- (NSString *)getMotd;
- (void) createFolderIfNotExists;
- (BOOL) canConnectStore;
- (NSException *)writeMotd:(NSString *)motd;
- (NSException *)deleteMotd;
@end
#endif /* GCSALARMSFOLDER_H */
+347
View File
@@ -0,0 +1,347 @@
/* GCSAdminFolder.m - this file is part of SOGo
*
* Copyright (C) 2023 Alinto
*
* This file is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2, or (at your option)
* any later version.
*
* This file is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; see the file COPYING. If not, write to
* the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
* Boston, MA 02111-1307, USA.
*/
#import <NGExtensions/NSObject+Logs.h>
#import <NGExtensions/NSNull+misc.h>
#import <GDLAccess/EOAdaptorContext.h>
#import <GDLAccess/EOAttribute.h>
#import <GDLAccess/EOEntity.h>
#import <GDLAccess/EOSQLQualifier.h>
#import "EOQualifier+GCS.h"
#import "GCSChannelManager.h"
#import "GCSFolderManager.h"
#import "GCSSpecialQueries.h"
#import "NSURL+GCS.h"
#import "GCSAdminFolder.h"
static NSString *adminFolderURLString = nil;
#warning GCSAdminFolder should share a common ancestor with GCSFolder
@implementation GCSAdminFolder
+ (void) initialize
{
NSUserDefaults *ud;
if (!adminFolderURLString)
{
ud = [NSUserDefaults standardUserDefaults];
ASSIGN (adminFolderURLString,
[ud stringForKey: @"OCSAdminURL"]);
}
}
+ (id) adminFolderWithFolderManager: (GCSFolderManager *) newFolderManager
{
GCSAlarmsFolder *newFolder;
if (adminFolderURLString)
{
newFolder = [self new];
[newFolder autorelease];
[newFolder setFolderManager: newFolderManager];
}
else
{
[self errorWithFormat: @"'OCSAdminURL' is not set"];
newFolder = nil;
}
return newFolder;
}
- (void) setFolderManager: (GCSFolderManager *) newFolderManager
{
ASSIGN (folderManager, newFolderManager);
}
/* accessors */
- (NSURL *) _location
{
NSURL *location;
if (adminFolderURLString)
location = [NSURL URLWithString: adminFolderURLString];
else
{
[self warnWithFormat: @"'OCSAdminURL' is not set"];
location = nil;
}
return location;
}
- (GCSChannelManager *) _channelManager
{
return [folderManager channelManager];
}
- (NSString *) _storeTableName
{
return [[self _location] gcsTableName];
}
- (EOEntity *) _storeTableEntityForChannel: (EOAdaptorChannel *) tc
{
static EOEntity *entity = nil;
EOAttribute *attribute;
NSString *tableName;
NSString *columns[] = { @"c_key", @"c_content", nil };
NSString **column;
NSMutableArray *keys;
NSDictionary *types;
if (!entity)
{
entity = [EOEntity new];
tableName = [self _storeTableName];
[entity setName: tableName];
[entity setExternalName: tableName];
types = [[tc specialQueries] adminAttributeTypes];
column = columns;
while (*column)
{
attribute = [EOAttribute new];
[attribute setName: *column];
[attribute setColumnName: *column];
[attribute setExternalType: [types objectForKey: *column]];
[entity addAttribute: attribute];
[attribute release];
column++;
}
keys = [NSMutableArray arrayWithCapacity: 1];
[keys addObject: [entity attributeNamed: @"c_key"]];
[entity setPrimaryKeyAttributes: keys];
keys = [NSMutableArray arrayWithCapacity: 1];
[keys addObject: [entity attributeNamed: @"c_content"]];
[entity setClassProperties: keys];
[entity setAttributesUsedForLocking: [NSArray array]];
}
return entity;
}
/* connection */
- (EOAdaptorChannel *) _acquireStoreChannel
{
return [[self _channelManager] acquireOpenChannelForURL: [self _location]];
}
- (void) _releaseChannel: (EOAdaptorChannel *) _channel
{
[[self _channelManager] releaseChannel:_channel immediately: YES];
}
- (BOOL) canConnectStore
{
return [[self _channelManager] canConnect:[self _location]];
}
- (void) createFolderIfNotExists
{
EOAdaptorChannel *tc;
NSString *sql, *tableName;
GCSSpecialQueries *queries;
tc = [self _acquireStoreChannel];
tableName = [self _storeTableName];
queries = [tc specialQueries];
sql = [NSString stringWithFormat: @"SELECT 1 FROM %@ WHERE 1 = 2",
[self _storeTableName]];
if ([tc evaluateExpressionX: sql])
{
sql = [queries createAdminFolderWithName: tableName];
if (![tc evaluateExpressionX: sql])
[self logWithFormat:
@"admin folder table '%@' successfully created!",
tableName];
}
else
[tc cancelFetch];
[self _releaseChannel: tc];
}
/* operations */
/* table has the following fields:
c_key VARCHAR(255) NOT NULL
c_content MEDIUMTEXT NOT NULL
*/
- (NSDictionary *) recordForEntryWithKey: (NSString *) key
{
EOAdaptorChannel *tc;
EOAdaptorContext *context;
NSException *error;
NSArray *attrs;
NSDictionary *record;
EOEntity *entity;
EOSQLQualifier *qualifier;
record = nil;
tc = [self _acquireStoreChannel];
if (tc)
{
context = [tc adaptorContext];
entity = [self _storeTableEntityForChannel: tc];
qualifier = [[EOSQLQualifier alloc] initWithEntity: entity
qualifierFormat:
@"c_key='%@'",
key];
[qualifier autorelease];
[context beginTransaction];
error = [tc selectAttributesX: [entity attributesUsedForFetch]
describedByQualifier: qualifier
fetchOrder: nil
lock: NO];
if (error)
[self errorWithFormat:@"%s: cannot execute fetch: %@",
__PRETTY_FUNCTION__, error];
else
{
attrs = [tc describeResults: NO];
record = [tc fetchAttributes: attrs withZone: NULL];
[tc cancelFetch];
}
[context rollbackTransaction];
[self _releaseChannel: tc];
}
return record;
}
- (NSString *) getMotd {
NSDictionary *r;
r = [self recordForEntryWithKey: @"motd"];
if (r && [r objectForKey:@"c_content"]) {
return [r objectForKey:@"c_content"];
}
return nil;
}
- (NSDictionary *) _newRecordWithKey: (NSString *) key
content: (NSString *) content
{
return [NSDictionary dictionaryWithObjectsAndKeys: key, @"c_key",
content, @"c_content",
nil];
}
- (NSException *) writeMotd: (NSString *)motd
{
NSDictionary *record, *newRecord;
NSException *error;
EOAdaptorChannel *tc;
EOAdaptorContext *context;
EOEntity *entity;
EOSQLQualifier *qualifier;
error = nil;
tc = [self _acquireStoreChannel];
if (tc)
{
context = [tc adaptorContext];
newRecord = [self _newRecordWithKey: @"motd" content: motd];
record = [self recordForEntryWithKey: @"motd"];
entity = [self _storeTableEntityForChannel: tc];
[context beginTransaction];
if (record)
{
qualifier = [[EOSQLQualifier alloc] initWithEntity: entity
qualifierFormat:
@"c_key='motd'"];
[qualifier autorelease];
error = [tc updateRowX: newRecord describedByQualifier: qualifier];
}
else
error = [tc insertRowX: newRecord forEntity: entity];
if (error)
{
[context rollbackTransaction];
[self errorWithFormat:@"%s: cannot write record: %@",
__PRETTY_FUNCTION__, error];
}
else
[context commitTransaction];
[self _releaseChannel: tc];
}
return error;
}
- (NSException *) deleteRecordForKey: (NSString *) key
{
EOAdaptorChannel *tc;
EOAdaptorContext *context;
EOEntity *entity;
EOSQLQualifier *qualifier;
NSException *error;
error = nil;
tc = [self _acquireStoreChannel];
if (tc)
{
context = [tc adaptorContext];
entity = [self _storeTableEntityForChannel: tc];
qualifier = [[EOSQLQualifier alloc] initWithEntity: entity
qualifierFormat:
@"c_key='%@'",
key];
[qualifier autorelease];
[context beginTransaction];
error = [tc deleteRowsDescribedByQualifierX: qualifier];
if (error)
{
[context rollbackTransaction];
[self errorWithFormat:@"%s: cannot delete record: %@",
__PRETTY_FUNCTION__, error];
}
else
[context commitTransaction];
[self _releaseChannel: tc];
}
return error;
}
- (NSException *) deleteMotd
{
return [self deleteRecordForKey:@"motd"];
}
@end
+1 -1
View File
@@ -202,7 +202,7 @@ static NSString *alarmsFolderURLString = nil;
/* table has the following fields:
c_path VARCHAR(255) NOT NULL
c_name VARCHAR(255) NOT NULLo
c_name VARCHAR(255) NOT NULL
c_uid VARCHAR(255) NOT NULL
c_recurrence_id INT NULL
c_alarm_number INT NOT NULL
+7 -1
View File
@@ -31,7 +31,7 @@
*/
@class NSString, NSArray, NSURL, NSDictionary, NSException;
@class GCSChannelManager, GCSAlarmsFolder, GCSFolder, GCSFolderType, GCSSessionsFolder;
@class GCSChannelManager, GCSAlarmsFolder, GCSAdminFolder, GCSFolder, GCSFolderType, GCSSessionsFolder, GCSOpenIdFolder;
@interface GCSFolderManager : NSObject
{
@@ -89,6 +89,12 @@
/* sessions */
- (GCSSessionsFolder *)sessionsFolder;
/* admin */
- (GCSAdminFolder *)adminFolder;
/* openid */
- (GCSOpenIdFolder *) openIdFolder;
/* folder types */
- (GCSFolderType *)folderTypeWithName:(NSString *)_name;
+14
View File
@@ -37,6 +37,8 @@
#import "GCSChannelManager.h"
#import "EOAdaptorChannel+GCS.h"
#import "GCSAlarmsFolder.h"
#import "GCSAdminFolder.h"
#import "GCSOpenIdFolder.h"
#import "GCSFolder.h"
#import "GCSFolderType.h"
#import "GCSSessionsFolder.h"
@@ -497,6 +499,18 @@ static BOOL _singleStoreMode = NO;
return [GCSSessionsFolder sessionsFolderWithFolderManager: self];
}
/* admin */
- (GCSAdminFolder *) adminFolder
{
return [GCSAdminFolder adminFolderWithFolderManager: self];
}
/* openId */
- (GCSOpenIdFolder *) openIdFolder
{
return [GCSOpenIdFolder openIdFolderWithFolderManager: self];
}
- (NSString *)generateSQLWhereForInternalNames:(NSArray *)_names
exactMatch:(BOOL)_beExact orDirectSubfolderMatch:(BOOL)_directSubs
{
+57
View File
@@ -0,0 +1,57 @@
/* GCSAdminFolder.h - this file is part of $PROJECT_NAME_HERE$
*
* Copyright (C) 2023 Alinto
*
* This file is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2, or (at your option)
* any later version.
*
* This file is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; see the file COPYING. If not, write to
* the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
* Boston, MA 02111-1307, USA.
*/
#ifndef GCSOPENIDFOLDER_H
#define GCSOPENIDOLDER_H
@class NSCalendarDate;
@class NSException;
@class NSNumber;
@class NSString;
@class GCSFolderManager;
@interface GCSOpenIdFolder : NSObject
{
GCSFolderManager *folderManager;
}
+ (id)openIdFolderWithFolderManager:(GCSFolderManager *)newFolderManager;
- (void) setFolderManager: (GCSFolderManager *) newFolderManager;
/* operations */
- (void) createFolderIfNotExists;
- (BOOL) canConnectStore;
- (NSString *) getRefreshToken: (NSString *) _user_session useOldSession: (BOOL) use_old_session;
- (NSString *) getNewToken: (NSString *) _old_session;
- (NSException *) writeOpenIdSession: (NSString *) _user_session
withOldSession: (NSString *) _old_session
withRefreshToken: (NSString *) _refresh_token
withExpire: (NSNumber *) _expire
withRefreshExpire: (NSNumber *) _refresh_expire;
- (NSException *) deleteOpenIdSessionFor: (NSString *) _user_session;
@end
#endif /* GCSALARMSFOLDER_H */
+363
View File
@@ -0,0 +1,363 @@
/* GCSAdminFolder.m - this file is part of SOGo
*
* Copyright (C) 2023 Alinto
*
* This file is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2, or (at your option)
* any later version.
*
* This file is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; see the file COPYING. If not, write to
* the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
* Boston, MA 02111-1307, USA.
*/
#import <NGExtensions/NSObject+Logs.h>
#import <NGExtensions/NSNull+misc.h>
#import <GDLAccess/EOAdaptorContext.h>
#import <GDLAccess/EOAttribute.h>
#import <GDLAccess/EOEntity.h>
#import <GDLAccess/EOSQLQualifier.h>
#import "EOQualifier+GCS.h"
#import "GCSChannelManager.h"
#import "GCSFolderManager.h"
#import "GCSSpecialQueries.h"
#import "NSURL+GCS.h"
#import "GCSOpenIdFolder.h"
static NSString *openIdFolderURLString = nil;
#warning GCSOpenIdFolder should share a common ancestor with GCSFolder
@implementation GCSOpenIdFolder
+ (void) initialize
{
NSUserDefaults *ud;
if (!openIdFolderURLString)
{
ud = [NSUserDefaults standardUserDefaults];
ASSIGN (openIdFolderURLString, [ud stringForKey: @"OCSOpenIdURL"]);
}
}
+ (id) openIdFolderWithFolderManager: (GCSFolderManager *) newFolderManager
{
GCSOpenIdFolder *newFolder;
if (openIdFolderURLString)
{
newFolder = [self new];
[newFolder autorelease];
[newFolder setFolderManager: newFolderManager];
}
else
{
[self errorWithFormat: @"'OCSOpenIdURL' is not set"];
newFolder = nil;
}
return newFolder;
}
- (void) setFolderManager: (GCSFolderManager *) newFolderManager
{
ASSIGN (folderManager, newFolderManager);
}
/* accessors */
- (NSURL *) _location
{
NSURL *location;
if (openIdFolderURLString)
location = [NSURL URLWithString: openIdFolderURLString];
else
{
[self warnWithFormat: @"'OCSOpenIdURL' is not set"];
location = nil;
}
return location;
}
- (GCSChannelManager *) _channelManager
{
return [folderManager channelManager];
}
- (NSString *) _storeTableName
{
return [[self _location] gcsTableName];
}
- (EOEntity *) _storeTableEntityForChannel: (EOAdaptorChannel *) tc
{
static EOEntity *entity = nil;
EOAttribute *attribute;
NSString *tableName;
NSString *columns[] = {@"c_user_session", @"c_old_session", @"c_session_started", @"c_refresh_token", @"c_access_token_expires_in", @"c_refresh_token_expires_in", nil };
NSString **column;
NSMutableArray *keys;
NSDictionary *types;
if (!entity)
{
entity = [EOEntity new];
tableName = [self _storeTableName];
[entity setName: tableName];
[entity setExternalName: tableName];
types = [[tc specialQueries] openIdAttributeTypes];
column = columns;
while (*column)
{
attribute = [EOAttribute new];
[attribute setName: *column];
[attribute setColumnName: *column];
[attribute setExternalType: [types objectForKey: *column]];
[entity addAttribute: attribute];
[attribute release];
column++;
}
keys = [NSMutableArray arrayWithCapacity: 1];
[keys addObject: [entity attributeNamed: @"c_user_session"]];
[entity setPrimaryKeyAttributes: keys];
keys = [NSMutableArray arrayWithCapacity: 5];
[keys addObject: [entity attributeNamed: @"c_old_session"]];
[keys addObject: [entity attributeNamed: @"c_session_started"]];
[keys addObject: [entity attributeNamed: @"c_refresh_token"]];
[keys addObject: [entity attributeNamed: @"c_access_token_expires_in"]];
[keys addObject: [entity attributeNamed: @"c_refresh_token_expires_in"]];
[entity setClassProperties: keys];
[entity setAttributesUsedForLocking: [NSArray array]];
}
return entity;
}
/* connection */
- (EOAdaptorChannel *) _acquireStoreChannel
{
return [[self _channelManager] acquireOpenChannelForURL: [self _location]];
}
- (void) _releaseChannel: (EOAdaptorChannel *) _channel
{
[[self _channelManager] releaseChannel:_channel immediately: YES];
}
- (BOOL) canConnectStore
{
return [[self _channelManager] canConnect:[self _location]];
}
- (void) createFolderIfNotExists
{
EOAdaptorChannel *tc;
NSString *sql, *tableName;
GCSSpecialQueries *queries;
tc = [self _acquireStoreChannel];
tableName = [self _storeTableName];
queries = [tc specialQueries];
sql = [NSString stringWithFormat: @"SELECT 1 FROM %@ WHERE 1 = 2", tableName];
if ([tc evaluateExpressionX: sql])
{
sql = [queries createOpenIdFolderWithName: tableName];
if (![tc evaluateExpressionX: sql])
[self logWithFormat: @"openid folder table '%@' successfully created!", tableName];
}
else
[tc cancelFetch];
[self _releaseChannel: tc];
}
/* operations */
/* table has the following fields:
c_user_session varchar(255) NOT NULL,
c_session_started int(11) NOT NULL,
c_refresh_token varchar(4096) DEFAULT '',
c_access_token_expires_in int(11) NOT NULL,
c_refresh_token_expires_in int(11) DEFAULT NULL,
*/
- (NSDictionary *) recordForSession: (NSString *) _user_session useOldSession: (BOOL) use_old_session
{
EOAdaptorChannel *tc;
EOAdaptorContext *context;
NSException *error;
NSArray *attrs;
NSDictionary *record;
EOEntity *entity;
EOSQLQualifier *qualifier;
record = nil;
tc = [self _acquireStoreChannel];
if (tc)
{
context = [tc adaptorContext];
entity = [self _storeTableEntityForChannel: tc];
if(!use_old_session)
qualifier = [[EOSQLQualifier alloc] initWithEntity: entity
qualifierFormat: @"c_user_session='%@'", _user_session];
else
qualifier = [[EOSQLQualifier alloc] initWithEntity: entity
qualifierFormat: @"c_old_session='%@'", _user_session];
[qualifier autorelease];
[context beginTransaction];
error = [tc selectAttributesX: [entity attributesUsedForFetch]
describedByQualifier: qualifier
fetchOrder: nil
lock: NO];
if (error)
[self errorWithFormat:@"%s: cannot execute fetch: %@", __PRETTY_FUNCTION__, error];
else
{
attrs = [tc describeResults: NO];
record = [tc fetchAttributes: attrs withZone: NULL];
[tc cancelFetch];
}
[context rollbackTransaction];
[self _releaseChannel: tc];
}
return record;
}
- (NSString *) getRefreshToken: (NSString *) _user_session
{
NSDictionary *r;
r = [self recordForSession: _user_session useOldSession: NO];
if (r && [r objectForKey:@"c_refresh_token"])
return [r objectForKey:@"c_refresh_token"];
return nil;
}
- (NSString *) getNewToken: (NSString *) _old_session
{
NSDictionary *r;
r = [self recordForSession: _old_session useOldSession: YES];
if (r && [r objectForKey:@"c_user_session"])
return [r objectForKey:@"c_user_session"];
return nil;
}
- (NSException *) writeOpenIdSession: (NSString *) _user_session
withOldSession: (NSString *) _old_session
withRefreshToken: (NSString *) _refresh_token
withExpire: (NSNumber *) _expire
withRefreshExpire: (NSNumber *) _refresh_expire
{
NSDictionary *record, *newRecord;
NSException *error;
NSCalendarDate *nowDate;
int now, nowExpire, nowRefreshExpire;
EOAdaptorChannel *tc;
EOAdaptorContext *context;
EOEntity *entity;
EOSQLQualifier *qualifier;
error = nil;
tc = [self _acquireStoreChannel];
if (tc)
{
context = [tc adaptorContext];
nowDate = [NSCalendarDate date];
now = (nowDate ? (int)[nowDate timeIntervalSince1970] : 0);
nowExpire = now + [_expire intValue];
if(_refresh_expire)
nowRefreshExpire = now + [_refresh_expire intValue];
else
nowRefreshExpire = -1;
if(!_old_session)
_old_session = @"";
newRecord = [NSDictionary dictionaryWithObjectsAndKeys: _user_session, @"c_user_session",
_old_session, @"c_old_session",
[NSNumber numberWithInt:now], @"c_session_started",
_refresh_token, @"c_refresh_token",
[NSNumber numberWithInt:nowExpire] , @"c_access_token_expires_in",
[NSNumber numberWithInt:nowRefreshExpire] , @"c_refresh_token_expires_in",
nil];
record = [self recordForSession: _user_session useOldSession: NO];
entity = [self _storeTableEntityForChannel: tc];
[context beginTransaction];
if (!record)
{
//If the session already exist no need to update it as it is unique
error = [tc insertRowX: newRecord forEntity: entity];
}
if (error)
{
[context rollbackTransaction];
[self errorWithFormat:@"%s: cannot write record: %@", __PRETTY_FUNCTION__, error];
}
else
[context commitTransaction];
[self _releaseChannel: tc];
}
return error;
}
- (NSException *) deleteOpenIdSessionFor: (NSString *) _user_session
{
EOAdaptorChannel *tc;
EOAdaptorContext *context;
EOEntity *entity;
EOSQLQualifier *qualifier;
NSException *error;
error = nil;
tc = [self _acquireStoreChannel];
if (tc)
{
context = [tc adaptorContext];
entity = [self _storeTableEntityForChannel: tc];
qualifier = [[EOSQLQualifier alloc] initWithEntity: entity
qualifierFormat: @"c_user_session='%@'",_user_session];
[qualifier autorelease];
[context beginTransaction];
error = [tc deleteRowsDescribedByQualifierX: qualifier];
if (error)
{
[context rollbackTransaction];
[self errorWithFormat:@"%s: cannot delete record: %@", __PRETTY_FUNCTION__, error];
}
else
[context commitTransaction];
[self _releaseChannel: tc];
}
return error;
}
@end
+8 -2
View File
@@ -39,8 +39,14 @@
- (NSString *) createSessionsFolderWithName: (NSString *) tableName;
- (NSDictionary *) sessionsAttributeTypes;
- (NSString *) updateCPathInFolderInfo: (NSString *) tableName
withCPath2: (NSString *) c_path2;
- (NSString *)createAdminFolderWithName:(NSString *)tableName;
- (NSDictionary *)adminAttributeTypes;
- (NSString *)createOpenIdFolderWithName:(NSString *)tableName;
- (NSDictionary *)openIdAttributeTypes;
- (NSString *) updateCPathInFolderInfo:(NSString *)tableName
withCPath2:(NSString *)c_path2;
@end
+197
View File
@@ -81,6 +81,35 @@
return nil;
}
- (NSString *) createAdminFolderWithName: (NSString *) tableName
{
[self subclassResponsibility: _cmd];
return nil;
}
- (NSDictionary *) adminAttributeTypes
{
[self subclassResponsibility: _cmd];
return nil;
}
- (NSString *) createOpenIdFolderWithName: (NSString *) tableName
{
[self subclassResponsibility: _cmd];
return nil;
}
- (NSDictionary *) openIdAttributeTypes
{
[self subclassResponsibility: _cmd];
return nil;
}
- (NSString *) createFolderTableWithName: (NSString *) tableName
{
[self subclassResponsibility: _cmd];
@@ -157,6 +186,62 @@
return types;
}
- (NSString *) createAdminFolderWithName: (NSString *) tableName
{
static NSString *sqlFolderFormat
= (@"CREATE TABLE %@ ("
@" c_key VARCHAR(255) NOT NULL,"
@" c_content TEXT NOT NULL)");
return [NSString stringWithFormat: sqlFolderFormat, tableName];
}
- (NSDictionary *) adminAttributeTypes
{
static NSMutableDictionary *types = nil;
if (!types)
{
types = [NSMutableDictionary new];
[types setObject: @"varchar" forKey: @"c_key"];
[types setObject: @"varchar" forKey: @"c_content"];
}
return types;
}
- (NSString *) createOpenIdFolderWithName: (NSString *) tableName
{
static NSString *sqlFolderFormat
= (@"CREATE TABLE %@ ("
@" c_user_session VARCHAR(4096) NOT NULL,"
@" c_old_session VARCHAR(4096) NULL,"
@" c_session_started INT4 NOT NULL,"
@" c_refresh_token VARCHAR(4096) NULL,"
@" c_access_token_expires_in INT4 NOT NULL,"
@" c_refresh_token_expires_in INT4 NULL)");
return [NSString stringWithFormat: sqlFolderFormat, tableName];
}
- (NSDictionary *) openIdAttributeTypes
{
static NSMutableDictionary *types = nil;
if (!types)
{
types = [NSMutableDictionary new];
[types setObject: @"varchar" forKey: @"c_user_session"];
[types setObject: @"varchar" forKey: @"c_old_session"];
[types setObject: @"int" forKey: @"c_session_started"];
[types setObject: @"varchar" forKey: @"c_refresh_token"];
[types setObject: @"int" forKey: @"c_access_token_expires_in"];
[types setObject: @"int" forKey: @"c_refresh_token_expires_in"];
}
return types;
}
- (NSString *) createFolderTableWithName: (NSString *) tableName
{
static NSString *sqlFolderFormat
@@ -262,6 +347,62 @@
return types;
}
- (NSString *) createAdminFolderWithName: (NSString *) tableName
{
static NSString *sqlFolderFormat
= (@"CREATE TABLE %@ ("
@" c_key VARCHAR(255) NOT NULL,"
@" c_content MEDIUMTEXT NOT NULL)");
return [NSString stringWithFormat: sqlFolderFormat, tableName];
}
- (NSDictionary *) adminAttributeTypes
{
static NSMutableDictionary *types = nil;
if (!types)
{
types = [NSMutableDictionary new];
[types setObject: @"varchar" forKey: @"c_key"];
[types setObject: @"varchar" forKey: @"c_content"];
}
return types;
}
- (NSString *) createOpenIdFolderWithName: (NSString *) tableName
{
static NSString *sqlFolderFormat
= (@"CREATE TABLE %@ ("
@" c_user_session VARCHAR(4096) NOT NULL,"
@" c_old_session VARCHAR(4096) NULL,"
@" c_session_started INT4 NOT NULL,"
@" c_refresh_token VARCHAR(4096) NULL,"
@" c_access_token_expires_in INT4 NOT NULL,"
@" c_refresh_token_expires_in INT4 NULL)");
return [NSString stringWithFormat: sqlFolderFormat, tableName];
}
- (NSDictionary *) openIdAttributeTypes
{
static NSMutableDictionary *types = nil;
if (!types)
{
types = [NSMutableDictionary new];
[types setObject: @"varchar" forKey: @"c_user_session"];
[types setObject: @"varchar" forKey: @"c_old_session"];
[types setObject: @"int" forKey: @"c_session_started"];
[types setObject: @"varchar" forKey: @"c_refresh_token"];
[types setObject: @"int" forKey: @"c_access_token_expires_in"];
[types setObject: @"int" forKey: @"c_refresh_token_expires_in"];
}
return types;
}
- (NSString *) createFolderTableWithName: (NSString *) tableName
{
static NSString *sqlFolderFormat
@@ -367,6 +508,62 @@
return types;
}
- (NSString *) createAdminFolderWithName: (NSString *) tableName
{
static NSString *sqlFolderFormat
= (@"CREATE TABLE %@ ("
@" c_key VARCHAR2(255) NOT NULL,"
@" c_content VARCHAR2(65535) NOT NULL)");
return [NSString stringWithFormat: sqlFolderFormat, tableName];
}
- (NSDictionary *) adminAttributeTypes
{
static NSMutableDictionary *types = nil;
if (!types)
{
types = [NSMutableDictionary new];
[types setObject: @"varchar2" forKey: @"c_key"];
[types setObject: @"varchar2" forKey: @"c_content"];
}
return types;
}
- (NSString *) createOpenIdFolderWithName: (NSString *) tableName
{
static NSString *sqlFolderFormat
= (@"CREATE TABLE %@ ("
@" c_user_session VARCHAR2(4096) NOT NULL,"
@" c_old_session VARCHAR2(4096) NULL,"
@" c_session_started INTEGER NOT NULL,"
@" c_refresh_token VARCHAR2(4096) NULL,"
@" c_access_token_expires_in INTEGER NOT NULL,"
@" c_refresh_token_expires_in INTEGER NULL)");
return [NSString stringWithFormat: sqlFolderFormat, tableName];
}
- (NSDictionary *) openIdAttributeTypes
{
static NSMutableDictionary *types = nil;
if (!types)
{
types = [NSMutableDictionary new];
[types setObject: @"varchar2" forKey: @"c_user_session"];
[types setObject: @"varchar2" forKey: @"c_old_session"];
[types setObject: @"integer" forKey: @"c_session_started"];
[types setObject: @"varchar2" forKey: @"c_refresh_token"];
[types setObject: @"integer" forKey: @"c_access_token_expires_in"];
[types setObject: @"integer" forKey: @"c_refresh_token_expires_in"];
}
return types;
}
- (NSString *) createFolderTableWithName: (NSString *) tableName
{
static NSString *sqlFolderFormat
+8 -4
View File
@@ -25,15 +25,17 @@ libGDLContentStore_HEADER_FILES += \
EOAdaptorChannel+GCS.h \
\
GCSAlarmsFolder.h \
GCSAdminFolder.h \
GCSContext.h \
GCSFieldInfo.h \
GCSFolder.h \
GCSFolder.h \
GCSFolderManager.h \
GCSFolderType.h \
GCSChannelManager.h \
GCSOpenIdFolder.h \
GCSSessionsFolder.h \
GCSSpecialQueries.h \
GCSStringFormatter.h \
GCSStringFormatter.h \
libGDLContentStore_OBJC_FILES += \
NSURL+GCS.m \
@@ -41,15 +43,17 @@ libGDLContentStore_OBJC_FILES += \
EOQualifier+GCS.m \
\
GCSAlarmsFolder.m \
GCSAdminFolder.m \
GCSContext.m \
GCSFieldInfo.m \
GCSFolder.m \
GCSFolder.m \
GCSFolderManager.m \
GCSFolderType.m \
GCSChannelManager.m \
GCSOpenIdFolder.m \
GCSSessionsFolder.m \
GCSSpecialQueries.m \
GCSStringFormatter.m \
GCSStringFormatter.m \
# framework support
+17 -9
View File
@@ -45,19 +45,27 @@
[foldedString appendString: self];
else
{
subStringRange = NSMakeRange (0, 75);
[foldedString appendFormat: @"%@\r\n",
[self substringWithRange: subStringRange]];
subStringRange = NSMakeRange (75, 74);
//Check if the 75th chars is a 2*16bits chars, in this case, cut one char before
unichar c = [self characterAtIndex: 74];
int substringCut;
if (c >= 0xD800 && c <= 0xDBFF)
substringCut = 74;
else
substringCut = 75;
subStringRange = NSMakeRange (0, substringCut);
[foldedString appendFormat: @"%@\r\n", [self substringWithRange: subStringRange]];
subStringRange = NSMakeRange (substringCut, 74);
while ((length - subStringRange.location) > 75)
{
[foldedString appendFormat: @" %@\r\n",
[self substringWithRange: subStringRange]];
subStringRange.location += 74;
c = [self characterAtIndex: (subStringRange.location+subStringRange.length-1)];
if (c >= 0xD800 && c <= 0xDBFF)
subStringRange.length--;
[foldedString appendFormat: @" %@\r\n", [self substringWithRange: subStringRange]];
subStringRange.location += subStringRange.length;
}
subStringRange.length = length - subStringRange.location;
[foldedString appendFormat: @" %@",
[self substringWithRange: subStringRange]];
[foldedString appendFormat: @" %@", [self substringWithRange: subStringRange]];
}
return foldedString;
+2 -2
View File
@@ -1,9 +1,9 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2023c//EN
PRODID:-//Alinto//NONSGML IANA 2024b//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Abidjan
LAST-MODIFIED:20230523T092157Z
LAST-MODIFIED:20241008T100856Z
X-LIC-LOCATION:Africa/Abidjan
BEGIN:STANDARD
TZNAME:GMT
+2 -2
View File
@@ -1,9 +1,9 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2023c//EN
PRODID:-//Alinto//NONSGML IANA 2024b//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Algiers
LAST-MODIFIED:20230523T092157Z
LAST-MODIFIED:20241008T100856Z
X-LIC-LOCATION:Africa/Algiers
BEGIN:STANDARD
TZNAME:CET
+2 -2
View File
@@ -1,9 +1,9 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2023c//EN
PRODID:-//Alinto//NONSGML IANA 2024b//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Bissau
LAST-MODIFIED:20230523T092157Z
LAST-MODIFIED:20241008T100856Z
X-LIC-LOCATION:Africa/Bissau
BEGIN:STANDARD
TZNAME:GMT
+2 -2
View File
@@ -1,9 +1,9 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2023c//EN
PRODID:-//Alinto//NONSGML IANA 2024b//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Cairo
LAST-MODIFIED:20230523T092157Z
LAST-MODIFIED:20241008T100856Z
X-LIC-LOCATION:Africa/Cairo
BEGIN:DAYLIGHT
TZNAME:EEST
+3 -3
View File
@@ -1,13 +1,13 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2023c//EN
PRODID:-//Alinto//NONSGML IANA 2024b//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Casablanca
TZUNTIL:20870511T020001Z
LAST-MODIFIED:20230523T092157Z
LAST-MODIFIED:20241008T100856Z
X-LIC-LOCATION:Africa/Casablanca
BEGIN:STANDARD
TZNAME:+01
TZNAME:%z
TZOFFSETFROM:+0100
TZOFFSETTO:+0100
DTSTART:19700101T000000
+2 -2
View File
@@ -1,9 +1,9 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2023c//EN
PRODID:-//Alinto//NONSGML IANA 2024b//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Ceuta
LAST-MODIFIED:20230523T092157Z
LAST-MODIFIED:20241008T100856Z
X-LIC-LOCATION:Africa/Ceuta
BEGIN:DAYLIGHT
TZNAME:CEST
+3 -3
View File
@@ -1,13 +1,13 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2023c//EN
PRODID:-//Alinto//NONSGML IANA 2024b//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/El_Aaiun
TZUNTIL:20870511T020001Z
LAST-MODIFIED:20230523T092157Z
LAST-MODIFIED:20241008T100856Z
X-LIC-LOCATION:Africa/El_Aaiun
BEGIN:STANDARD
TZNAME:+01
TZNAME:%z
TZOFFSETFROM:+0100
TZOFFSETTO:+0100
DTSTART:19700101T000000
@@ -1,9 +1,9 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2023c//EN
PRODID:-//Alinto//NONSGML IANA 2024b//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Johannesburg
LAST-MODIFIED:20230523T092157Z
LAST-MODIFIED:20241008T100856Z
X-LIC-LOCATION:Africa/Johannesburg
BEGIN:STANDARD
TZNAME:SAST
+2 -2
View File
@@ -1,9 +1,9 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2023c//EN
PRODID:-//Alinto//NONSGML IANA 2024b//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Juba
LAST-MODIFIED:20230523T092157Z
LAST-MODIFIED:20241008T100856Z
X-LIC-LOCATION:Africa/Juba
BEGIN:STANDARD
TZNAME:CAT
+2 -2
View File
@@ -1,9 +1,9 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2023c//EN
PRODID:-//Alinto//NONSGML IANA 2024b//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Khartoum
LAST-MODIFIED:20230523T092157Z
LAST-MODIFIED:20241008T100856Z
X-LIC-LOCATION:Africa/Khartoum
BEGIN:STANDARD
TZNAME:CAT
+2 -2
View File
@@ -1,9 +1,9 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2023c//EN
PRODID:-//Alinto//NONSGML IANA 2024b//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Lagos
LAST-MODIFIED:20230523T092157Z
LAST-MODIFIED:20241008T100856Z
X-LIC-LOCATION:Africa/Lagos
BEGIN:STANDARD
TZNAME:WAT
+2 -2
View File
@@ -1,9 +1,9 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2023c//EN
PRODID:-//Alinto//NONSGML IANA 2024b//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Maputo
LAST-MODIFIED:20230523T092157Z
LAST-MODIFIED:20241008T100856Z
X-LIC-LOCATION:Africa/Maputo
BEGIN:STANDARD
TZNAME:CAT
+2 -2
View File
@@ -1,9 +1,9 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2023c//EN
PRODID:-//Alinto//NONSGML IANA 2024b//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Monrovia
LAST-MODIFIED:20230523T092157Z
LAST-MODIFIED:20241008T100856Z
X-LIC-LOCATION:Africa/Monrovia
BEGIN:STANDARD
TZNAME:GMT
+2 -2
View File
@@ -1,9 +1,9 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2023c//EN
PRODID:-//Alinto//NONSGML IANA 2024b//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Nairobi
LAST-MODIFIED:20230523T092157Z
LAST-MODIFIED:20241008T100856Z
X-LIC-LOCATION:Africa/Nairobi
BEGIN:STANDARD
TZNAME:EAT
+2 -2
View File
@@ -1,9 +1,9 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2023c//EN
PRODID:-//Alinto//NONSGML IANA 2024b//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Ndjamena
LAST-MODIFIED:20230523T092157Z
LAST-MODIFIED:20241008T100856Z
X-LIC-LOCATION:Africa/Ndjamena
BEGIN:STANDARD
TZNAME:WAT
+2 -2
View File
@@ -1,9 +1,9 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2023c//EN
PRODID:-//Alinto//NONSGML IANA 2024b//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Sao_Tome
LAST-MODIFIED:20230523T092157Z
LAST-MODIFIED:20241008T100856Z
X-LIC-LOCATION:Africa/Sao_Tome
BEGIN:STANDARD
TZNAME:GMT
+2 -2
View File
@@ -1,9 +1,9 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2023c//EN
PRODID:-//Alinto//NONSGML IANA 2024b//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Tripoli
LAST-MODIFIED:20230523T092157Z
LAST-MODIFIED:20241008T100856Z
X-LIC-LOCATION:Africa/Tripoli
BEGIN:STANDARD
TZNAME:EET
+2 -2
View File
@@ -1,9 +1,9 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2023c//EN
PRODID:-//Alinto//NONSGML IANA 2024b//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Tunis
LAST-MODIFIED:20230523T092157Z
LAST-MODIFIED:20241008T100856Z
X-LIC-LOCATION:Africa/Tunis
BEGIN:STANDARD
TZNAME:CET
+2 -2
View File
@@ -1,9 +1,9 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2023c//EN
PRODID:-//Alinto//NONSGML IANA 2024b//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Windhoek
LAST-MODIFIED:20230523T092157Z
LAST-MODIFIED:20241008T100856Z
X-LIC-LOCATION:Africa/Windhoek
BEGIN:STANDARD
TZNAME:CAT
+2 -2
View File
@@ -1,9 +1,9 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2023c//EN
PRODID:-//Alinto//NONSGML IANA 2024b//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Adak
LAST-MODIFIED:20230523T092157Z
LAST-MODIFIED:20241008T100856Z
X-LIC-LOCATION:America/Adak
BEGIN:DAYLIGHT
TZNAME:HDT
+2 -2
View File
@@ -1,9 +1,9 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2023c//EN
PRODID:-//Alinto//NONSGML IANA 2024b//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Anchorage
LAST-MODIFIED:20230523T092157Z
LAST-MODIFIED:20241008T100856Z
X-LIC-LOCATION:America/Anchorage
BEGIN:DAYLIGHT
TZNAME:AKDT
+3 -3
View File
@@ -1,12 +1,12 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2023c//EN
PRODID:-//Alinto//NONSGML IANA 2024b//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Araguaina
LAST-MODIFIED:20230523T092157Z
LAST-MODIFIED:20241008T100856Z
X-LIC-LOCATION:America/Araguaina
BEGIN:STANDARD
TZNAME:-03
TZNAME:%z
TZOFFSETFROM:-0300
TZOFFSETTO:-0300
DTSTART:19700101T000000
@@ -1,12 +1,12 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2023c//EN
PRODID:-//Alinto//NONSGML IANA 2024b//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Argentina/Buenos_Aires
LAST-MODIFIED:20230523T092157Z
LAST-MODIFIED:20241008T100856Z
X-LIC-LOCATION:America/Argentina/Buenos_Aires
BEGIN:STANDARD
TZNAME:-03
TZNAME:%z
TZOFFSETFROM:-0300
TZOFFSETTO:-0300
DTSTART:19700101T000000
@@ -1,12 +1,12 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2023c//EN
PRODID:-//Alinto//NONSGML IANA 2024b//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Argentina/Catamarca
LAST-MODIFIED:20230523T092157Z
LAST-MODIFIED:20241008T100856Z
X-LIC-LOCATION:America/Argentina/Catamarca
BEGIN:STANDARD
TZNAME:-03
TZNAME:%z
TZOFFSETFROM:-0300
TZOFFSETTO:-0300
DTSTART:19700101T000000
@@ -1,12 +1,12 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2023c//EN
PRODID:-//Alinto//NONSGML IANA 2024b//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Argentina/Cordoba
LAST-MODIFIED:20230523T092157Z
LAST-MODIFIED:20241008T100856Z
X-LIC-LOCATION:America/Argentina/Cordoba
BEGIN:STANDARD
TZNAME:-03
TZNAME:%z
TZOFFSETFROM:-0300
TZOFFSETTO:-0300
DTSTART:19700101T000000
@@ -1,12 +1,12 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2023c//EN
PRODID:-//Alinto//NONSGML IANA 2024b//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Argentina/Jujuy
LAST-MODIFIED:20230523T092157Z
LAST-MODIFIED:20241008T100856Z
X-LIC-LOCATION:America/Argentina/Jujuy
BEGIN:STANDARD
TZNAME:-03
TZNAME:%z
TZOFFSETFROM:-0300
TZOFFSETTO:-0300
DTSTART:19700101T000000
@@ -1,12 +1,12 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2023c//EN
PRODID:-//Alinto//NONSGML IANA 2024b//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Argentina/La_Rioja
LAST-MODIFIED:20230523T092157Z
LAST-MODIFIED:20241008T100856Z
X-LIC-LOCATION:America/Argentina/La_Rioja
BEGIN:STANDARD
TZNAME:-03
TZNAME:%z
TZOFFSETFROM:-0300
TZOFFSETTO:-0300
DTSTART:19700101T000000
@@ -1,12 +1,12 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2023c//EN
PRODID:-//Alinto//NONSGML IANA 2024b//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Argentina/Mendoza
LAST-MODIFIED:20230523T092157Z
LAST-MODIFIED:20241008T100856Z
X-LIC-LOCATION:America/Argentina/Mendoza
BEGIN:STANDARD
TZNAME:-03
TZNAME:%z
TZOFFSETFROM:-0300
TZOFFSETTO:-0300
DTSTART:19700101T000000
@@ -1,12 +1,12 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2023c//EN
PRODID:-//Alinto//NONSGML IANA 2024b//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Argentina/Rio_Gallegos
LAST-MODIFIED:20230523T092157Z
LAST-MODIFIED:20241008T100856Z
X-LIC-LOCATION:America/Argentina/Rio_Gallegos
BEGIN:STANDARD
TZNAME:-03
TZNAME:%z
TZOFFSETFROM:-0300
TZOFFSETTO:-0300
DTSTART:19700101T000000
@@ -1,12 +1,12 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2023c//EN
PRODID:-//Alinto//NONSGML IANA 2024b//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Argentina/Salta
LAST-MODIFIED:20230523T092157Z
LAST-MODIFIED:20241008T100856Z
X-LIC-LOCATION:America/Argentina/Salta
BEGIN:STANDARD
TZNAME:-03
TZNAME:%z
TZOFFSETFROM:-0300
TZOFFSETTO:-0300
DTSTART:19700101T000000
@@ -1,12 +1,12 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2023c//EN
PRODID:-//Alinto//NONSGML IANA 2024b//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Argentina/San_Juan
LAST-MODIFIED:20230523T092157Z
LAST-MODIFIED:20241008T100856Z
X-LIC-LOCATION:America/Argentina/San_Juan
BEGIN:STANDARD
TZNAME:-03
TZNAME:%z
TZOFFSETFROM:-0300
TZOFFSETTO:-0300
DTSTART:19700101T000000
@@ -1,12 +1,12 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2023c//EN
PRODID:-//Alinto//NONSGML IANA 2024b//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Argentina/San_Luis
LAST-MODIFIED:20230523T092157Z
LAST-MODIFIED:20241008T100856Z
X-LIC-LOCATION:America/Argentina/San_Luis
BEGIN:STANDARD
TZNAME:-03
TZNAME:%z
TZOFFSETFROM:-0300
TZOFFSETTO:-0300
DTSTART:19700101T000000
@@ -1,12 +1,12 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2023c//EN
PRODID:-//Alinto//NONSGML IANA 2024b//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Argentina/Tucuman
LAST-MODIFIED:20230523T092157Z
LAST-MODIFIED:20241008T100856Z
X-LIC-LOCATION:America/Argentina/Tucuman
BEGIN:STANDARD
TZNAME:-03
TZNAME:%z
TZOFFSETFROM:-0300
TZOFFSETTO:-0300
DTSTART:19700101T000000
@@ -1,12 +1,12 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2023c//EN
PRODID:-//Alinto//NONSGML IANA 2024b//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Argentina/Ushuaia
LAST-MODIFIED:20230523T092157Z
LAST-MODIFIED:20241008T100856Z
X-LIC-LOCATION:America/Argentina/Ushuaia
BEGIN:STANDARD
TZNAME:-03
TZNAME:%z
TZOFFSETFROM:-0300
TZOFFSETTO:-0300
DTSTART:19700101T000000
+4 -4
View File
@@ -1,19 +1,19 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2023c//EN
PRODID:-//Alinto//NONSGML IANA 2024b//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Asuncion
LAST-MODIFIED:20230523T092157Z
LAST-MODIFIED:20241008T100856Z
X-LIC-LOCATION:America/Asuncion
BEGIN:DAYLIGHT
TZNAME:-03
TZNAME:%z
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
DTSTART:19701004T000000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU
END:DAYLIGHT
BEGIN:STANDARD
TZNAME:-04
TZNAME:%z
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
DTSTART:19700322T000000
+3 -3
View File
@@ -1,12 +1,12 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2023c//EN
PRODID:-//Alinto//NONSGML IANA 2024b//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Bahia
LAST-MODIFIED:20230523T092157Z
LAST-MODIFIED:20241008T100856Z
X-LIC-LOCATION:America/Bahia
BEGIN:STANDARD
TZNAME:-03
TZNAME:%z
TZOFFSETFROM:-0300
TZOFFSETTO:-0300
DTSTART:19700101T000000
@@ -1,9 +1,9 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2023c//EN
PRODID:-//Alinto//NONSGML IANA 2024b//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Bahia_Banderas
LAST-MODIFIED:20230523T092157Z
LAST-MODIFIED:20241008T100856Z
X-LIC-LOCATION:America/Bahia_Banderas
BEGIN:STANDARD
TZNAME:CST
+2 -2
View File
@@ -1,9 +1,9 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2023c//EN
PRODID:-//Alinto//NONSGML IANA 2024b//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Barbados
LAST-MODIFIED:20230523T092157Z
LAST-MODIFIED:20241008T100856Z
X-LIC-LOCATION:America/Barbados
BEGIN:STANDARD
TZNAME:AST
+3 -3
View File
@@ -1,12 +1,12 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2023c//EN
PRODID:-//Alinto//NONSGML IANA 2024b//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Belem
LAST-MODIFIED:20230523T092157Z
LAST-MODIFIED:20241008T100856Z
X-LIC-LOCATION:America/Belem
BEGIN:STANDARD
TZNAME:-03
TZNAME:%z
TZOFFSETFROM:-0300
TZOFFSETTO:-0300
DTSTART:19700101T000000
+2 -2
View File
@@ -1,9 +1,9 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2023c//EN
PRODID:-//Alinto//NONSGML IANA 2024b//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Belize
LAST-MODIFIED:20230523T092157Z
LAST-MODIFIED:20241008T100856Z
X-LIC-LOCATION:America/Belize
BEGIN:STANDARD
TZNAME:CST
+3 -3
View File
@@ -1,12 +1,12 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2023c//EN
PRODID:-//Alinto//NONSGML IANA 2024b//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Boa_Vista
LAST-MODIFIED:20230523T092157Z
LAST-MODIFIED:20241008T100856Z
X-LIC-LOCATION:America/Boa_Vista
BEGIN:STANDARD
TZNAME:-04
TZNAME:%z
TZOFFSETFROM:-0400
TZOFFSETTO:-0400
DTSTART:19700101T000000
+3 -3
View File
@@ -1,12 +1,12 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2023c//EN
PRODID:-//Alinto//NONSGML IANA 2024b//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Bogota
LAST-MODIFIED:20230523T092157Z
LAST-MODIFIED:20241008T100856Z
X-LIC-LOCATION:America/Bogota
BEGIN:STANDARD
TZNAME:-05
TZNAME:%z
TZOFFSETFROM:-0500
TZOFFSETTO:-0500
DTSTART:19700101T000000
+2 -2
View File
@@ -1,9 +1,9 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2023c//EN
PRODID:-//Alinto//NONSGML IANA 2024b//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Boise
LAST-MODIFIED:20230523T092157Z
LAST-MODIFIED:20241008T100856Z
X-LIC-LOCATION:America/Boise
BEGIN:DAYLIGHT
TZNAME:MDT
@@ -1,9 +1,9 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2023c//EN
PRODID:-//Alinto//NONSGML IANA 2024b//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Cambridge_Bay
LAST-MODIFIED:20230523T092157Z
LAST-MODIFIED:20241008T100856Z
X-LIC-LOCATION:America/Cambridge_Bay
BEGIN:DAYLIGHT
TZNAME:MDT
@@ -1,12 +1,12 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2023c//EN
PRODID:-//Alinto//NONSGML IANA 2024b//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Campo_Grande
LAST-MODIFIED:20230523T092157Z
LAST-MODIFIED:20241008T100856Z
X-LIC-LOCATION:America/Campo_Grande
BEGIN:STANDARD
TZNAME:-04
TZNAME:%z
TZOFFSETFROM:-0400
TZOFFSETTO:-0400
DTSTART:19700101T000000
+2 -2
View File
@@ -1,9 +1,9 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2023c//EN
PRODID:-//Alinto//NONSGML IANA 2024b//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Cancun
LAST-MODIFIED:20230523T092157Z
LAST-MODIFIED:20241008T100856Z
X-LIC-LOCATION:America/Cancun
BEGIN:STANDARD
TZNAME:EST
+3 -3
View File
@@ -1,12 +1,12 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2023c//EN
PRODID:-//Alinto//NONSGML IANA 2024b//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Caracas
LAST-MODIFIED:20230523T092157Z
LAST-MODIFIED:20241008T100856Z
X-LIC-LOCATION:America/Caracas
BEGIN:STANDARD
TZNAME:-04
TZNAME:%z
TZOFFSETFROM:-0400
TZOFFSETTO:-0400
DTSTART:19700101T000000
+3 -3
View File
@@ -1,12 +1,12 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2023c//EN
PRODID:-//Alinto//NONSGML IANA 2024b//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Cayenne
LAST-MODIFIED:20230523T092157Z
LAST-MODIFIED:20241008T100856Z
X-LIC-LOCATION:America/Cayenne
BEGIN:STANDARD
TZNAME:-03
TZNAME:%z
TZOFFSETFROM:-0300
TZOFFSETTO:-0300
DTSTART:19700101T000000
+2 -2
View File
@@ -1,9 +1,9 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2023c//EN
PRODID:-//Alinto//NONSGML IANA 2024b//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Chicago
LAST-MODIFIED:20230523T092157Z
LAST-MODIFIED:20241008T100856Z
X-LIC-LOCATION:America/Chicago
BEGIN:DAYLIGHT
TZNAME:CDT
+2 -2
View File
@@ -1,9 +1,9 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2023c//EN
PRODID:-//Alinto//NONSGML IANA 2024b//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Chihuahua
LAST-MODIFIED:20230523T092157Z
LAST-MODIFIED:20241008T100856Z
X-LIC-LOCATION:America/Chihuahua
BEGIN:STANDARD
TZNAME:CST
@@ -1,9 +1,9 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2023c//EN
PRODID:-//Alinto//NONSGML IANA 2024b//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Ciudad_Juarez
LAST-MODIFIED:20230523T092157Z
LAST-MODIFIED:20241008T100856Z
X-LIC-LOCATION:America/Ciudad_Juarez
BEGIN:DAYLIGHT
TZNAME:MDT
@@ -1,9 +1,9 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2023c//EN
PRODID:-//Alinto//NONSGML IANA 2024b//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Costa_Rica
LAST-MODIFIED:20230523T092157Z
LAST-MODIFIED:20241008T100856Z
X-LIC-LOCATION:America/Costa_Rica
BEGIN:STANDARD
TZNAME:CST
+3 -3
View File
@@ -1,12 +1,12 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2023c//EN
PRODID:-//Alinto//NONSGML IANA 2024b//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Cuiaba
LAST-MODIFIED:20230523T092157Z
LAST-MODIFIED:20241008T100856Z
X-LIC-LOCATION:America/Cuiaba
BEGIN:STANDARD
TZNAME:-04
TZNAME:%z
TZOFFSETFROM:-0400
TZOFFSETTO:-0400
DTSTART:19700101T000000
@@ -1,9 +1,9 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2023c//EN
PRODID:-//Alinto//NONSGML IANA 2024b//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Danmarkshavn
LAST-MODIFIED:20230523T092157Z
LAST-MODIFIED:20241008T100856Z
X-LIC-LOCATION:America/Danmarkshavn
BEGIN:STANDARD
TZNAME:GMT
+2 -2
View File
@@ -1,9 +1,9 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2023c//EN
PRODID:-//Alinto//NONSGML IANA 2024b//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Dawson
LAST-MODIFIED:20230523T092157Z
LAST-MODIFIED:20241008T100856Z
X-LIC-LOCATION:America/Dawson
BEGIN:STANDARD
TZNAME:MST
@@ -1,9 +1,9 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2023c//EN
PRODID:-//Alinto//NONSGML IANA 2024b//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Dawson_Creek
LAST-MODIFIED:20230523T092157Z
LAST-MODIFIED:20241008T100856Z
X-LIC-LOCATION:America/Dawson_Creek
BEGIN:STANDARD
TZNAME:MST
+2 -2
View File
@@ -1,9 +1,9 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2023c//EN
PRODID:-//Alinto//NONSGML IANA 2024b//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Denver
LAST-MODIFIED:20230523T092157Z
LAST-MODIFIED:20241008T100856Z
X-LIC-LOCATION:America/Denver
BEGIN:DAYLIGHT
TZNAME:MDT
+2 -2
View File
@@ -1,9 +1,9 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2023c//EN
PRODID:-//Alinto//NONSGML IANA 2024b//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Detroit
LAST-MODIFIED:20230523T092157Z
LAST-MODIFIED:20241008T100856Z
X-LIC-LOCATION:America/Detroit
BEGIN:DAYLIGHT
TZNAME:EDT
+2 -2
View File
@@ -1,9 +1,9 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2023c//EN
PRODID:-//Alinto//NONSGML IANA 2024b//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Edmonton
LAST-MODIFIED:20230523T092157Z
LAST-MODIFIED:20241008T100856Z
X-LIC-LOCATION:America/Edmonton
BEGIN:DAYLIGHT
TZNAME:MDT
+3 -3
View File
@@ -1,12 +1,12 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2023c//EN
PRODID:-//Alinto//NONSGML IANA 2024b//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Eirunepe
LAST-MODIFIED:20230523T092157Z
LAST-MODIFIED:20241008T100856Z
X-LIC-LOCATION:America/Eirunepe
BEGIN:STANDARD
TZNAME:-05
TZNAME:%z
TZOFFSETFROM:-0500
TZOFFSETTO:-0500
DTSTART:19700101T000000
@@ -1,9 +1,9 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2023c//EN
PRODID:-//Alinto//NONSGML IANA 2024b//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/El_Salvador
LAST-MODIFIED:20230523T092157Z
LAST-MODIFIED:20241008T100856Z
X-LIC-LOCATION:America/El_Salvador
BEGIN:STANDARD
TZNAME:CST
@@ -1,9 +1,9 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2023c//EN
PRODID:-//Alinto//NONSGML IANA 2024b//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Fort_Nelson
LAST-MODIFIED:20230523T092157Z
LAST-MODIFIED:20241008T100856Z
X-LIC-LOCATION:America/Fort_Nelson
BEGIN:STANDARD
TZNAME:MST
+3 -3
View File
@@ -1,12 +1,12 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2023c//EN
PRODID:-//Alinto//NONSGML IANA 2024b//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Fortaleza
LAST-MODIFIED:20230523T092157Z
LAST-MODIFIED:20241008T100856Z
X-LIC-LOCATION:America/Fortaleza
BEGIN:STANDARD
TZNAME:-03
TZNAME:%z
TZOFFSETFROM:-0300
TZOFFSETTO:-0300
DTSTART:19700101T000000
+2 -2
View File
@@ -1,9 +1,9 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2023c//EN
PRODID:-//Alinto//NONSGML IANA 2024b//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Glace_Bay
LAST-MODIFIED:20230523T092157Z
LAST-MODIFIED:20241008T100856Z
X-LIC-LOCATION:America/Glace_Bay
BEGIN:DAYLIGHT
TZNAME:ADT
+2 -2
View File
@@ -1,9 +1,9 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2023c//EN
PRODID:-//Alinto//NONSGML IANA 2024b//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Goose_Bay
LAST-MODIFIED:20230523T092157Z
LAST-MODIFIED:20241008T100856Z
X-LIC-LOCATION:America/Goose_Bay
BEGIN:STANDARD
TZNAME:AST
@@ -1,9 +1,9 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2023c//EN
PRODID:-//Alinto//NONSGML IANA 2024b//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Grand_Turk
LAST-MODIFIED:20230523T092157Z
LAST-MODIFIED:20241008T100856Z
X-LIC-LOCATION:America/Grand_Turk
BEGIN:STANDARD
TZNAME:EST
+2 -2
View File
@@ -1,9 +1,9 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2023c//EN
PRODID:-//Alinto//NONSGML IANA 2024b//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Guatemala
LAST-MODIFIED:20230523T092157Z
LAST-MODIFIED:20241008T100856Z
X-LIC-LOCATION:America/Guatemala
BEGIN:STANDARD
TZNAME:CST
+3 -3
View File
@@ -1,12 +1,12 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2023c//EN
PRODID:-//Alinto//NONSGML IANA 2024b//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Guayaquil
LAST-MODIFIED:20230523T092157Z
LAST-MODIFIED:20241008T100856Z
X-LIC-LOCATION:America/Guayaquil
BEGIN:STANDARD
TZNAME:-05
TZNAME:%z
TZOFFSETFROM:-0500
TZOFFSETTO:-0500
DTSTART:19700101T000000
+3 -3
View File
@@ -1,12 +1,12 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2023c//EN
PRODID:-//Alinto//NONSGML IANA 2024b//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Guyana
LAST-MODIFIED:20230523T092157Z
LAST-MODIFIED:20241008T100856Z
X-LIC-LOCATION:America/Guyana
BEGIN:STANDARD
TZNAME:-04
TZNAME:%z
TZOFFSETFROM:-0400
TZOFFSETTO:-0400
DTSTART:19700101T000000
+2 -2
View File
@@ -1,9 +1,9 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2023c//EN
PRODID:-//Alinto//NONSGML IANA 2024b//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Halifax
LAST-MODIFIED:20230523T092157Z
LAST-MODIFIED:20241008T100856Z
X-LIC-LOCATION:America/Halifax
BEGIN:DAYLIGHT
TZNAME:ADT
+2 -2
View File
@@ -1,9 +1,9 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2023c//EN
PRODID:-//Alinto//NONSGML IANA 2024b//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Havana
LAST-MODIFIED:20230523T092157Z
LAST-MODIFIED:20241008T100856Z
X-LIC-LOCATION:America/Havana
BEGIN:STANDARD
TZNAME:CST
@@ -1,9 +1,9 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2023c//EN
PRODID:-//Alinto//NONSGML IANA 2024b//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Hermosillo
LAST-MODIFIED:20230523T092157Z
LAST-MODIFIED:20241008T100856Z
X-LIC-LOCATION:America/Hermosillo
BEGIN:STANDARD
TZNAME:MST
@@ -1,9 +1,9 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2023c//EN
PRODID:-//Alinto//NONSGML IANA 2024b//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Indiana/Indianapolis
LAST-MODIFIED:20230523T092157Z
LAST-MODIFIED:20241008T100856Z
X-LIC-LOCATION:America/Indiana/Indianapolis
BEGIN:DAYLIGHT
TZNAME:EDT
@@ -1,9 +1,9 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2023c//EN
PRODID:-//Alinto//NONSGML IANA 2024b//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Indiana/Knox
LAST-MODIFIED:20230523T092157Z
LAST-MODIFIED:20241008T100856Z
X-LIC-LOCATION:America/Indiana/Knox
BEGIN:DAYLIGHT
TZNAME:CDT
@@ -1,9 +1,9 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2023c//EN
PRODID:-//Alinto//NONSGML IANA 2024b//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Indiana/Marengo
LAST-MODIFIED:20230523T092157Z
LAST-MODIFIED:20241008T100856Z
X-LIC-LOCATION:America/Indiana/Marengo
BEGIN:DAYLIGHT
TZNAME:EDT
@@ -1,9 +1,9 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2023c//EN
PRODID:-//Alinto//NONSGML IANA 2024b//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Indiana/Petersburg
LAST-MODIFIED:20230523T092157Z
LAST-MODIFIED:20241008T100856Z
X-LIC-LOCATION:America/Indiana/Petersburg
BEGIN:DAYLIGHT
TZNAME:EDT
@@ -1,9 +1,9 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2023c//EN
PRODID:-//Alinto//NONSGML IANA 2024b//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Indiana/Tell_City
LAST-MODIFIED:20230523T092157Z
LAST-MODIFIED:20241008T100856Z
X-LIC-LOCATION:America/Indiana/Tell_City
BEGIN:DAYLIGHT
TZNAME:CDT
@@ -1,9 +1,9 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2023c//EN
PRODID:-//Alinto//NONSGML IANA 2024b//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Indiana/Vevay
LAST-MODIFIED:20230523T092157Z
LAST-MODIFIED:20241008T100856Z
X-LIC-LOCATION:America/Indiana/Vevay
BEGIN:DAYLIGHT
TZNAME:EDT
@@ -1,9 +1,9 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2023c//EN
PRODID:-//Alinto//NONSGML IANA 2024b//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Indiana/Vincennes
LAST-MODIFIED:20230523T092157Z
LAST-MODIFIED:20241008T100856Z
X-LIC-LOCATION:America/Indiana/Vincennes
BEGIN:DAYLIGHT
TZNAME:EDT
@@ -1,9 +1,9 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2023c//EN
PRODID:-//Alinto//NONSGML IANA 2024b//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Indiana/Winamac
LAST-MODIFIED:20230523T092157Z
LAST-MODIFIED:20241008T100856Z
X-LIC-LOCATION:America/Indiana/Winamac
BEGIN:STANDARD
TZNAME:EST
+2 -2
View File
@@ -1,9 +1,9 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2023c//EN
PRODID:-//Alinto//NONSGML IANA 2024b//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Inuvik
LAST-MODIFIED:20230523T092157Z
LAST-MODIFIED:20241008T100856Z
X-LIC-LOCATION:America/Inuvik
BEGIN:DAYLIGHT
TZNAME:MDT
+2 -2
View File
@@ -1,9 +1,9 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2023c//EN
PRODID:-//Alinto//NONSGML IANA 2024b//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Iqaluit
LAST-MODIFIED:20230523T092157Z
LAST-MODIFIED:20241008T100856Z
X-LIC-LOCATION:America/Iqaluit
BEGIN:DAYLIGHT
TZNAME:EDT
+2 -2
View File
@@ -1,9 +1,9 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2023c//EN
PRODID:-//Alinto//NONSGML IANA 2024b//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Jamaica
LAST-MODIFIED:20230523T092157Z
LAST-MODIFIED:20241008T100856Z
X-LIC-LOCATION:America/Jamaica
BEGIN:STANDARD
TZNAME:EST
Loaded 100 of 1005 files, more files were not shown because too many files have changed in this diff. Show more