Compare commits
291
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
db72c27980 | ||
|
|
912ab12165 | ||
|
|
f1257088f2 | ||
|
|
1c611a0a4a | ||
|
|
f2ba6870d5 | ||
|
|
253d14cfce | ||
|
|
b3c77a0e00 | ||
|
|
cba0c6d420 | ||
|
|
1d8ee80c39 | ||
|
|
04a9a8773d | ||
|
|
a466628126 | ||
|
|
60b59ae1bc | ||
|
|
8ff2c962ab | ||
|
|
ffe4f9406b | ||
|
|
592f35bbec | ||
|
|
1d3b502bc7 | ||
|
|
80a76895dd | ||
|
|
78ea981e7f | ||
|
|
a4de35748b | ||
|
|
41aecca692 | ||
|
|
190c2c86ed | ||
|
|
56598d1e37 | ||
|
|
4ee6d5af9d | ||
|
|
594b0249c3 | ||
|
|
64f17880c7 | ||
|
|
59d48cb382 | ||
|
|
2da4aa8cb8 | ||
|
|
1c20c1ead3 | ||
|
|
a7023bce16 | ||
|
|
84fe91c29c | ||
|
|
68f4fc1343 | ||
|
|
2a1744998c | ||
|
|
196e10f44c | ||
|
|
01607b151d | ||
|
|
0cbd082c1d | ||
|
|
41a0f8d9af | ||
|
|
2dd10970a4 | ||
|
|
2f75a7fb1b | ||
|
|
c1e4dc5a0e | ||
|
|
fa2caf9026 | ||
|
|
f42f94da84 | ||
|
|
1f6bbc1044 | ||
|
|
a24d59dfaf | ||
|
|
91a249009b | ||
|
|
16f371dba7 | ||
|
|
86446a059c | ||
|
|
160a464d63 | ||
|
|
17d85f84f7 | ||
|
|
b602b2b188 | ||
|
|
fad8c21473 | ||
|
|
6537d961e1 | ||
|
|
56012c65e1 | ||
|
|
dd1a6607fe | ||
|
|
94d32c419c | ||
|
|
7b7cfdb499 | ||
|
|
a4f03978cf | ||
|
|
7de9dc8f9b | ||
|
|
33df476db5 | ||
|
|
b889064dbc | ||
|
|
9a0e03bf9a | ||
|
|
84c0fb496d | ||
|
|
65f29f21dc | ||
|
|
8d4597d361 | ||
|
|
5bb025323f | ||
|
|
a84ab7655d | ||
|
|
88c9074aea | ||
|
|
c4b58a6ae7 | ||
|
|
0c2c9d7682 | ||
|
|
227b92b743 | ||
|
|
de289d9b4c | ||
|
|
2fabfdfb9f | ||
|
|
b82fa1d077 | ||
|
|
8bf1a77efc | ||
|
|
37f2b1dc5c | ||
|
|
ed3e790b47 | ||
|
|
85c1cc7fa3 | ||
|
|
fa2312470a | ||
|
|
1136c18288 | ||
|
|
0e5657e635 | ||
|
|
ca0b00107a | ||
|
|
be6a69a4d6 | ||
|
|
0b530f9e36 | ||
|
|
55563d2113 | ||
|
|
1aa59dcd7e | ||
|
|
943e96f459 | ||
|
|
6b6dc6b3b8 | ||
|
|
bcb2410b12 | ||
|
|
af630f033d | ||
|
|
6e11cdf289 | ||
|
|
68b17a5c4a | ||
|
|
5ee190468e | ||
|
|
b8f2e00306 | ||
|
|
990f1e8e8f | ||
|
|
58db9c980e | ||
|
|
980b5e28dd | ||
|
|
eb63e6d047 | ||
|
|
59e76d6b26 | ||
|
|
99da6e0f81 | ||
|
|
9d71be9c45 | ||
|
|
ef88039a4a | ||
|
|
a06331eb86 | ||
|
|
ed951667ec | ||
|
|
f621d97289 | ||
|
|
1aa7d81a87 | ||
|
|
0cbcad9d91 | ||
|
|
43388ac42c | ||
|
|
eee160e5bf | ||
|
|
2637434436 | ||
|
|
4b343f7070 | ||
|
|
591d283425 | ||
|
|
f96eb4d3ca | ||
|
|
0168ca56b2 | ||
|
|
703f0ff1b6 | ||
|
|
c5582ba819 | ||
|
|
2dd45dfb93 | ||
|
|
67e1a50c80 | ||
|
|
cbb0e85a19 | ||
|
|
2756176503 | ||
|
|
1a47fdb7d6 | ||
|
|
910effd664 | ||
|
|
7ec7a7d6ae | ||
|
|
53d77f3105 | ||
|
|
45fd999010 | ||
|
|
31c0473c48 | ||
|
|
ebca25ca62 | ||
|
|
6b514bb159 | ||
|
|
314b39dd1c | ||
|
|
6ac8525bfe | ||
|
|
9eb8039698 | ||
|
|
863280d6ac | ||
|
|
19ee54fe05 | ||
|
|
229596da2b | ||
|
|
c2d9050539 | ||
|
|
9b5a8cb6fc | ||
|
|
2e2e36e0a2 | ||
|
|
880eb89719 | ||
|
|
5830053026 | ||
|
|
f815848a86 | ||
|
|
f8c354c302 | ||
|
|
d9ee884459 | ||
|
|
526aa281d9 | ||
|
|
49e9988b82 | ||
|
|
20678b43ad | ||
|
|
d4046673ee | ||
|
|
2f4c125bdd | ||
|
|
98e00d09a3 | ||
|
|
a9e02d94a2 | ||
|
|
2e37e59ed1 | ||
|
|
ae01ed077d | ||
|
|
cb55413e91 | ||
|
|
0fafda55d6 | ||
|
|
bc804ae823 | ||
|
|
127df39689 | ||
|
|
711403f024 | ||
|
|
049a569d7f | ||
|
|
e6ff9a408d | ||
|
|
06ea167ee5 | ||
|
|
7c0699b96f | ||
|
|
adf1117046 | ||
|
|
5215aa4f41 | ||
|
|
599c40b9f6 | ||
|
|
e39c104436 | ||
|
|
7b233422f5 | ||
|
|
0cfaa7740a | ||
|
|
65ab6962d8 | ||
|
|
96331cac90 | ||
|
|
815a87de0b | ||
|
|
e4cb0a35ef | ||
|
|
f609c31a32 | ||
|
|
f51c756cda | ||
|
|
dd965baae1 | ||
|
|
1719baea7a | ||
|
|
e131cd7961 | ||
|
|
b7a71140f2 | ||
|
|
2b23ff3eb8 | ||
|
|
cc061582f4 | ||
|
|
185770a35e | ||
|
|
fd9b8dcfcd | ||
|
|
8267b5afd3 | ||
|
|
e92fb8f52d | ||
|
|
b8a6d576e1 | ||
|
|
4dba56f70d | ||
|
|
776a798e17 | ||
|
|
09a97b199f | ||
|
|
d9c36c6985 | ||
|
|
5ff1f5396c | ||
|
|
092bc9a120 | ||
|
|
ca1d5495ab | ||
|
|
34407df4f7 | ||
|
|
2b1e7bdb67 | ||
|
|
c93b1e9775 | ||
|
|
30f819e2a4 | ||
|
|
7582266479 | ||
|
|
24888b23d5 | ||
|
|
2db48dc7fb | ||
|
|
91c22c0800 | ||
|
|
5146d9d215 | ||
|
|
0f0ecf7521 | ||
|
|
c827880f2a | ||
|
|
26719a1461 | ||
|
|
add792fc1e | ||
|
|
ee55f7a64f | ||
|
|
71e66d65b8 | ||
|
|
adf2d409ba | ||
|
|
ab8c236621 | ||
|
|
74a730d094 | ||
|
|
adc17a3639 | ||
|
|
a75bfbb2c7 | ||
|
|
e924ac4e67 | ||
|
|
c3cefb6ae8 | ||
|
|
ae85548f27 | ||
|
|
8581aa7840 | ||
|
|
82db4d99d4 | ||
|
|
28f446a6ad | ||
|
|
ef29aa2bab | ||
|
|
62d5414936 | ||
|
|
ce8c697d96 | ||
|
|
ad75555a0f | ||
|
|
c8eee39017 | ||
|
|
af22a30f12 | ||
|
|
c5b6611f89 | ||
|
|
7e78781044 | ||
|
|
31eb7987d8 | ||
|
|
344d4da930 | ||
|
|
65d31f2b14 | ||
|
|
434be9ea71 | ||
|
|
ace1515dfc | ||
|
|
c2fc80ecd1 | ||
|
|
1206d2f459 | ||
|
|
083fa1fefd | ||
|
|
6d9647e353 | ||
|
|
4337e875eb | ||
|
|
2aec2ec7b0 | ||
|
|
6aab869b81 | ||
|
|
3acab3f896 | ||
|
|
889fe1eb39 | ||
|
|
31a66c461a | ||
|
|
fc778295ff | ||
|
|
42511d666f | ||
|
|
5197b9bd0b | ||
|
|
26f05a693c | ||
|
|
a6319e1689 | ||
|
|
311c358580 | ||
|
|
adc2d74e54 | ||
|
|
f5cd67972b | ||
|
|
5081de1639 | ||
|
|
d46a436cc4 | ||
|
|
dde154df3f | ||
|
|
7ace9c2c22 | ||
|
|
9898e5210f | ||
|
|
ff3c3054a6 | ||
|
|
f56910db1e | ||
|
|
ce0e650c62 | ||
|
|
1361341545 | ||
|
|
04596c9f4e | ||
|
|
9e37d212b9 | ||
|
|
e6bfab7ee1 | ||
|
|
f0010afef4 | ||
|
|
59bd290d62 | ||
|
|
63248772c1 | ||
|
|
455fe97cbe | ||
|
|
f43974bbb7 | ||
|
|
fc0f5d9d98 | ||
|
|
2146870071 | ||
|
|
2e7a7a97cc | ||
|
|
49b0316b9e | ||
|
|
569cf8e0ae | ||
|
|
5710c4d97e | ||
|
|
9560bdcf0c | ||
|
|
eee50697b0 | ||
|
|
0d0eda2698 | ||
|
|
9e3e3b2291 | ||
|
|
a6fc83c35b | ||
|
|
7104ae6d23 | ||
|
|
25c72a523e | ||
|
|
fb3a159cf7 | ||
|
|
e81fdadecc | ||
|
|
f27b33a0c8 | ||
|
|
68398d2086 | ||
|
|
930a06e520 | ||
|
|
26b14671f5 | ||
|
|
153f444c3f | ||
|
|
fec99c95db | ||
|
|
00d69560ba | ||
|
|
5ad1d9d9c3 | ||
|
|
8dc69efd70 | ||
|
|
2748d1dd08 | ||
|
|
99f87a26dc | ||
|
|
acd4a1f4aa | ||
|
|
f04c73d495 | ||
|
|
5c944617d0 |
No files matched your search
+12
-12
@@ -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.
|
||||
|
||||
@@ -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
@@ -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)
|
||||
|
||||
|
||||
|
||||
@@ -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`.
|
||||
|
||||
@@ -827,19 +846,114 @@ specified as an array of dictionaries.
|
||||
|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, ig the value of thie parameter is changed, memcached server needs to be restarted. If the encryption is enabled, the DAV url will change. Default value is `NO`.
|
||||
|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`.
|
||||
|
||||
|S |SOGoGlobalAddressBookFirstEntries
|
||||
|Display first entries in Global Address Book. Default value is `NO`. If source is LDAP, the LDAP overlay `sssvlv` must be enabled on the system for server side sorting.
|
||||
|
||||
|S |SOGoGlobalAddressBookFirstEntriesCount
|
||||
|Number of entries displayed when `SOGoGlobalAddressBookFirstEntries` is enabled. Default value is `100`.
|
||||
|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
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
@@ -1164,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`,
|
||||
@@ -1467,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.
|
||||
@@ -1532,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
|
||||
@@ -1585,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`.
|
||||
|
||||
|=======================================================================
|
||||
|
||||
|
||||
@@ -1598,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]
|
||||
@@ -1613,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
|
||||
@@ -1626,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):
|
||||
|
||||
----
|
||||
@@ -1649,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:
|
||||
@@ -1670,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 🍕 and fries” and seeing it properly displayed in the SOGo
|
||||
@@ -1719,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 = (
|
||||
@@ -2504,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
|
||||
@@ -2694,6 +2841,8 @@ like this:
|
||||
}
|
||||
----
|
||||
|
||||
[[multi-domains-configuration]]
|
||||
|
||||
Multi-domains Configuration
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
@@ -3087,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.
|
||||
@@ -3678,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
|
||||
@@ -3756,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
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
@@ -3825,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`.
|
||||
|
||||
|
||||
+26
-16
@@ -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;
|
||||
@@ -351,7 +360,6 @@ static BOOL debugLeaks;
|
||||
authenticator = [SOGoWebAuthenticator sharedSOGoWebAuthenticator];
|
||||
else {
|
||||
authenticator = [SOGoDAVAuthenticator sharedSOGoDAVAuthenticator];
|
||||
[authenticator setContext: context];
|
||||
}
|
||||
|
||||
}
|
||||
@@ -368,9 +376,11 @@ static BOOL debugLeaks;
|
||||
id userFolder;
|
||||
NSData *decodedLogin;
|
||||
NSString *login;
|
||||
|
||||
login = [SOGoUser getDecryptedUsernameIfNeeded: _key withContext: _ctx];
|
||||
|
||||
WORequest *request;
|
||||
|
||||
request = [_ctx request];
|
||||
login = [SOGoUser getDecryptedUsernameIfNeeded: _key request: request];
|
||||
|
||||
user = [SOGoUser userWithLogin: login roles: nil];
|
||||
if (user)
|
||||
userFolder = [$(@"SOGoUserFolder") objectWithName: login
|
||||
@@ -479,7 +489,7 @@ static BOOL debugLeaks;
|
||||
|
||||
- (void) checkIfDaemonHasToBeShutdown
|
||||
{
|
||||
unsigned int vmem;
|
||||
unsigned long long vmem;
|
||||
|
||||
if (vMemSizeLimit > 0)
|
||||
{
|
||||
|
||||
+10
-1
@@ -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
|
||||
{
|
||||
|
||||
@@ -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 */
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
{
|
||||
|
||||
@@ -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 */
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 1006 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user