Compare commits

..
3 Commits
563 changed files with 2669 additions and 14654 deletions

No files matched your search

+1 -1
View File
@@ -34,7 +34,7 @@ ActiveSync_RESOURCE_FILES += \
ADDITIONAL_OBJCFLAGS += -Wno-deprecated-declarations
ADDITIONAL_INCLUDE_DIRS += -I../SOPE/ -I../SoObjects/
ADDITIONAL_LIB_DIRS += -L../SOPE/GDLContentStore/obj/ -L../SOPE/NGCards/obj/
ADDITIONAL_INCLUDE_DIRS += $(shell pkg-config --cflags libwbxml2)
ADDITIONAL_INCLUDE_DIRS += -I/usr/include/libwbxml-1.0/
ADDITIONAL_LDFLAGS += -Wl,--no-as-needed -lwbxml2
-include GNUmakefile.preamble
-45
View File
@@ -2,51 +2,6 @@
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)
+33 -170
View File
@@ -70,7 +70,7 @@ Assumptions
SOGo reuses many components in an infrastructure. Thus, it requires the
following:
* Database server (MariaDB, MySQL, PostgreSQL or Oracle)
* Database server (MySQL, PostgreSQL or Oracle)
* LDAP server (OpenLDAP, Novell eDirectory, Microsoft Active Directory
and others) 
* SMTP server (Postfix, Sendmail and others)
@@ -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 MariaDB/MySQL or `sope49-gdl1-oracle`
for Oracle. The installation command will thus look like this:
system, `sope49-gdl1-mysql` for 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 opendID Connect, specify `openid`.
For anything else, leave that value empty.
For C.A.S., specify `cas`. For SAML2, specify `saml2`. For anything
else, leave that value empty.
|S |SOGoTrustProxyAuthentication
|Parameter used to set whether HTTP username should be trusted.
@@ -477,19 +477,6 @@ example.
Defaults to `YES` when unset.
|S |SOGoCalendarEnableJitsiLink
|Parameter allowing users to create Jitsi link when creating an event.
Be aware that a least one of the attendees will need an account from a
platform that Jitsi supports: Google, Facebook or Github
Defaults to `NO` when unset.
|D |SOGoCalendarJitsiBaseUrl
|Only used if SOGoCalendarEnableJitsiLink is set to YES. String for the URL of
the jitsi server used for creating the meeting link.
Defaults to `https://meet.jit.si` when unset.
|S |SOGoSAML2PrivateKeyLocation
|The location of the SSL private key file on the filesystem that is used
by SOGo to sign and encrypt communications with the SAML2 identity
@@ -819,18 +806,6 @@ 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`.
@@ -1559,81 +1534,6 @@ SOGoIMAPCASServiceName should be set to the actual imap service name
expected by pam_cas, otherwise it will fail to authenticate incoming
connection properly.
Authenticating using OPENID
~~~~~~~~~~~~~~~~~~~~~~~~~~~
SOGo natively supports OPENID authentication. For activating OpenId authentication you need first to make sure that
_SOGoAuthenticationType_ is set to `openid`,
_SOGoXSRFValidationEnabled_ is set to `NO` and set the following parameters:
[cols="^4,46,50a"]
|=======================================================================
|S |OCSOpenIdURL
|Parameter used to set the database URL for openID session.
For MariaDB/MySQL, set the database URL to something like: mysql://sogo:sogo@127.0.0.1:3306/sogo/sogo_openid.
|S |SOGoOpenIdConfigUrl
|Parameter used to specify the endpoint of OpenID Provider Configuration, mandatory. For example:
https://myopenid.net/.well-known/openid-configuration
|S |SOGoOpenIdClient
|Name of your openid client, mandatory.
|S |SOGoOpenIdClientSecret
|Secret of your openid client, mandatory
|S |SOGoOpenIdScope
|Scope or your openid client, mandatory. List of words space separated like this:
"openid profile email"
|S |SOGoOpenIdEmailParam
|Name of the parameter from user profile that contains the mail/uid.
Defaults to `email` when unset.
|S |SOGoOpenIdEnableRefreshToken
|Set to `YES` to Enable the mechanism of refresh token if provided. You may have to configure
and/or add a value to your scope for it to work.
Defaults to `NO` when unset.
|S |SOGoOpenIdTokenCheckInterval
|Number of seconds before sogo check again the user's access token validity.
This is to prevent sogo to do too much request to the openid server.
Defaults to `0` when unset.
|S |SOGoOpenIdLogoutEnabled
|Allow user to end their openId with the webmail. Meaning that will disconnect them from
the others applicaitons as well.
Defaults to `NO` when unset.
|=======================================================================
The tricky part shows up for the imap and smtp sever. SOGo doesn't know the password
of the user and only have its access token. A new auth mechanism has been implemented,
the https://developers.google.com/gmail/imap/xoauth2-protocol#initial_client_response[xoauth2]
You can set it with the parameter _NGImap4AuthMechanism_ and/or _SOGoSMTPAuthenticationType_
*With dovecot:* +
Dovecot natively supports xoauth2 and can be figured as such: https://doc.dovecot.org/2.3/configuration_manual/authentication/oauth2/
*With cyrus:* +
Cyrus doesn't support xoauth2 mechanism and pluggins or homemade solutions must be found. +
_Please note, as Alinto uses dovecot, we didn't investigate cyrus' case. If one member of the community
finds a solution, we will be happy to update this documentation._
As you can see, a new database table is used for handling openid session. The table is automaticcaly created when _OCSOpenIdURL_ is set.
If the user quits the webmail without logging out or trough another application,
the session will stays in the table and be useless. That's why a new sogo-tool command has been added to clean this table.
You can put it in a cron to do that periodicly. +
See _<<sogo-tool-clean-openid-sessions,sogo-tool clean-openid-sessions>>_.
Authenticating using SAML2
~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -1676,7 +1576,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 MariaDB, MySQL and Oracle.
supported, such as MySQL and Oracle.
First, make sure that your PostgreSQL server has TCP/IP connections
support enabled.
@@ -1741,7 +1641,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 MariaDB/MySQL, set the database URL to something like:
For MySQL, set the database URL to something like:
`mysql://sogo:sogo@127.0.0.1:3306/sogo/sogo_user_profile`.
|S |OCSFolderInfoURL
@@ -1766,9 +1666,6 @@ URL could be set to something like:
See the "EMail reminders" section in this document for more information.
|S |SOGoEnableMailCleaning
|Parameter used to enable cleaning folders and mailbox (remove mail older than X days). Default value is `NO`.
|S |SOGoDisableOrganizerEventCheck
|Parameter used to disable organizer's calendar event check
@@ -1818,8 +1715,7 @@ 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 MariaDB/MySQL, make sure in your `my.cnf` file you
have:
If you're using MySQL, make sure in your `my.cnf` file you have:
----
[mysqld]
@@ -1834,11 +1730,10 @@ default-character-set=utf8
default-character-set=utf8
----
MariaDB/MySQL SSL Connection
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
MySQL SSL Connection
^^^^^^^^^^^^^^^^^^^^
Add the following settings in the `sogo.conf` file to enable SSL connection
between SOGo and MariaDB/MySQL :
Add the following settings in the `sogo.conf` file to enable SSL connection between SOGo and MySQL / MariaDB :
----
MySQL4SSLEnabled = YES;
@@ -1848,13 +1743,12 @@ MySQL4SSLCaPath = "/mysql_keys/ca-cert.pem";
----
MariaDB/MySQL complete Unicode compliance
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
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.
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.
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
@@ -1862,11 +1756,10 @@ operations on the database system.
Requirements:
* MariaDB >= 5.5
* MySQL >= 5.5
* SOGo >= 3.1.0
Strongly suggested MariaDB/MySQL configuration settings (innodb* parameters are
Strongly suggested MySQL configuration settings (innodb* parameters are
mandatory *only* for versions lower than 8.0):
----
@@ -1886,8 +1779,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 MariaDB/MySQL parameters without
reading and understanding the implication of such changes.
cause severe data loss. Do not blindly edit 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:
@@ -1907,8 +1800,8 @@ a command such as:
mysql -hHOST -uUSER -p -D SOGO < Scripts/mysql-utf8mb4.sql
----
Where `HOST`, `USER` and `SOGO` are your MariaDB/MySQL host, username and
database name respectively.
Where `HOST`, `USER` and `SOGO` are your MySQL host, username and database name
respectively.
Once SOGo is running, you can test correctness by creating an event such as
“Lunch with &#127829; and fries” and seeing it properly displayed in the SOGo
@@ -1956,12 +1849,11 @@ 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 = (
@@ -2188,7 +2080,8 @@ To disable TLS verification for localhost domains, add
|D |SOGoSMTPAuthenticationType
|Activate SMTP authentication and specifies which type is in use.
Current, Are supported `PLAIN` and 'xoauth2' for openid.
Current, only `PLAIN` is supported and other values will cause
the authentication to fail.
|D |SOGoSMTPMasterUserEnabled
|Enable specific SMTP user account for system e-mails (notifications, reminders, ...). Default is `NO`.
@@ -2371,7 +2264,6 @@ SASL mechanism. Using `AUTHENTICATE` instead of `LOGIN` is also necessary
to enable UTF-8 characters in users' passwords. To enable simple use of
`AUTHENTICATE` for this purpose, set this setting to `plain`. Please note
that this feature might be limited at this time.
Now support `xoauth2` mechanism when using openid. Be sure you imap server undesrtands this mechanism.
|D |NGImap4ConnectionGroupIdPrefix
|Prefix to prepend to names in IMAP ACL transactions, to indicate the
@@ -2518,16 +2410,6 @@ appended to the user's vacation message. For example:
See `SOGoVacationHeaderTemplateFile` for available template variables.
|D |SOGoVacationAllowZeroDays
|Parameter used to enable an option of 0 for the vacation days setting.
A value of 0 means that auto response mails are sent for every incoming mail.
This option has to be supported by the IMAP host
(see https://doc.dovecot.org/2.3/settings/pigeonhole-ext/vacation/#pigeonhole_setting-sieve_vacation_min_period
for instructions regarding Dovecot/Pigeonhole).
Defaults to `NO` when unset.
|D |SOGoForwardEnabled
|Parameter used to activate the edition from the preferences window of a
forwarding email address. Requires Sieve script support on the IMAP
@@ -2942,8 +2824,6 @@ like this:
}
----
[[multi-domains-configuration]]
Multi-domains Configuration
~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -3337,9 +3217,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 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.
* 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.
In order to use the SOGo ActiveSync support code in production
environments, you need to get a proper usage license from Microsoft.
@@ -3705,22 +3585,6 @@ sogo-tool checkup user1
sogo-tool checkup -d user1
----
[[sogo-tool-clean-openid-sessions]]
sogo-tool clean-openid-sessions
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Obviously only usefull if you have set SOGo with openId authentication.
Will clean all expired openId sessions from the database.
sogo-tool clean-openid-sessions
Example:
----
sogo-tool clean-openid-sessions
----
sogo-tool cleanup
~~~~~~~~~~~~~~~~~
@@ -4068,7 +3932,7 @@ _Defaults_ stores all parameters that can be found in Preferences panel. So it g
autoreply to many others options.
user-preferences get|set|unset defaults|settings user key [value|-f filename] [-p credentialFile [-F]]
user-preferences get|set|unset defaults|settings user key [value|-f filename] [-p credentialFile]
* First argument is the action *get*, *set* or *unset*
* Second argument is parameter type *settings* or *defaults*
@@ -4076,8 +3940,7 @@ autoreply to many others options.
* Fourth argument *key* is the name of the parameters where to make the action
* If the action is *set*, you should provide either *value* as fifth argument or a file with the value inside with *-f* filename/path
* If the action is *set* or *unset* and the *key* concerns a sieve script (filter, vacation, forward...), you
should provide a credential file, a one-line file that contains "username:password" of an admin account of your imap/sieve server. If you
want t oforce the sieve script activation add -F after.
should provide a credential file, a one-line file that contains "username:password" of an admin account of your imap/sieve server.
As there is a lot of parameters, this documentation will not go into details for each one. To know what are
the key names and their value you should got to your database in table defined by _SOGoProfileURL_ in your sogo.conf.
@@ -4106,7 +3969,7 @@ sogo-tool user-preferences unset defaults user1 Forward -p /etc/sogo/cred
*set* action:
----
sogo-tool user-preferences set defaults user1 Forward '{"forwardAddress":["sogo-tests2@sogo.alinto"],"enabled":1,"keepCopy":0}' -p cred -F
sogo-tool user-preferences set defaults user1 Forward '{"forwardAddress":["sogo-tests2@sogo.alinto"],"enabled":1,"keepCopy":0}' -p cred
----
or create a json file which contains _{"forwardAddress":["sogo-tests2@sogo.alinto"],"enabled":1,"keepCopy":0}_ then:
----
+13 -21
View File
@@ -288,16 +288,16 @@ static BOOL debugLeaks;
e = [urlStrings objectEnumerator];
while (ok && (tmp = [e nextObject]))
{
value = [defaults stringForKey: tmp];
if (value)
[self _checkTableWithCM: cm tableURL: value andType: tmp];
else
{
[self errorWithFormat: @"No value specified for '%@'", tmp];
ok = NO;
value = [defaults stringForKey: tmp];
if (value)
[self _checkTableWithCM: cm tableURL: value andType: tmp];
else
{
[self errorWithFormat: @"No value specified for '%@'", tmp];
ok = NO;
}
}
}
if (combined)
{
@@ -322,15 +322,9 @@ static BOOL debugLeaks;
// Create the email alarms table, if required
if ([defaults enableEMailAlarms])
{
[[fm alarmsFolder] createFolderIfNotExists];
}
//Create mandatory openId table, if used
if([defaults hasOpenIdType])
{
[[fm openIdFolder] createFolderIfNotExists];
}
{
[[fm alarmsFolder] createFolderIfNotExists];
}
}
return ok;
@@ -380,10 +374,8 @@ static BOOL debugLeaks;
request = [_ctx request];
login = [SOGoUser getDecryptedUsernameIfNeeded: _key request: request];
if([login isEqualToString: @"changeLanguage"])
user = nil;
else
user = [SOGoUser userWithLogin: login roles: nil];
user = [SOGoUser userWithLogin: login roles: nil];
if (user)
userFolder = [$(@"SOGoUserFolder") objectWithName: login
inContainer: self];
+1 -4
View File
@@ -31,7 +31,7 @@
*/
@class NSString, NSArray, NSURL, NSDictionary, NSException;
@class GCSChannelManager, GCSAlarmsFolder, GCSAdminFolder, GCSFolder, GCSFolderType, GCSSessionsFolder, GCSOpenIdFolder;
@class GCSChannelManager, GCSAlarmsFolder, GCSAdminFolder, GCSFolder, GCSFolderType, GCSSessionsFolder;
@interface GCSFolderManager : NSObject
{
@@ -92,9 +92,6 @@
/* admin */
- (GCSAdminFolder *)adminFolder;
/* openid */
- (GCSOpenIdFolder *) openIdFolder;
/* folder types */
- (GCSFolderType *)folderTypeWithName:(NSString *)_name;
-7
View File
@@ -38,7 +38,6 @@
#import "EOAdaptorChannel+GCS.h"
#import "GCSAlarmsFolder.h"
#import "GCSAdminFolder.h"
#import "GCSOpenIdFolder.h"
#import "GCSFolder.h"
#import "GCSFolderType.h"
#import "GCSSessionsFolder.h"
@@ -505,12 +504,6 @@ static BOOL _singleStoreMode = NO;
return [GCSAdminFolder adminFolderWithFolderManager: self];
}
/* openId */
- (GCSOpenIdFolder *) openIdFolder
{
return [GCSOpenIdFolder openIdFolderWithFolderManager: self];
}
- (NSString *)generateSQLWhereForInternalNames:(NSArray *)_names
exactMatch:(BOOL)_beExact orDirectSubfolderMatch:(BOOL)_directSubs
{
-57
View File
@@ -1,57 +0,0 @@
/* GCSAdminFolder.h - this file is part of $PROJECT_NAME_HERE$
*
* Copyright (C) 2023 Alinto
*
* This file is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2, or (at your option)
* any later version.
*
* This file is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; see the file COPYING. If not, write to
* the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
* Boston, MA 02111-1307, USA.
*/
#ifndef GCSOPENIDFOLDER_H
#define GCSOPENIDOLDER_H
@class NSCalendarDate;
@class NSException;
@class NSNumber;
@class NSString;
@class GCSFolderManager;
@interface GCSOpenIdFolder : NSObject
{
GCSFolderManager *folderManager;
}
+ (id)openIdFolderWithFolderManager:(GCSFolderManager *)newFolderManager;
- (void) setFolderManager: (GCSFolderManager *) newFolderManager;
/* operations */
- (void) createFolderIfNotExists;
- (BOOL) canConnectStore;
- (NSString *) getRefreshToken: (NSString *) _user_session useOldSession: (BOOL) use_old_session;
- (NSString *) getNewToken: (NSString *) _old_session;
- (NSException *) writeOpenIdSession: (NSString *) _user_session
withOldSession: (NSString *) _old_session
withRefreshToken: (NSString *) _refresh_token
withExpire: (NSNumber *) _expire
withRefreshExpire: (NSNumber *) _refresh_expire;
- (NSException *) deleteOpenIdSessionFor: (NSString *) _user_session;
@end
#endif /* GCSALARMSFOLDER_H */
-363
View File
@@ -1,363 +0,0 @@
/* 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
-3
View File
@@ -42,9 +42,6 @@
- (NSString *)createAdminFolderWithName:(NSString *)tableName;
- (NSDictionary *)adminAttributeTypes;
- (NSString *)createOpenIdFolderWithName:(NSString *)tableName;
- (NSDictionary *)openIdAttributeTypes;
- (NSString *) updateCPathInFolderInfo:(NSString *)tableName
withCPath2:(NSString *)c_path2;
-111
View File
@@ -95,21 +95,6 @@
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];
@@ -210,38 +195,6 @@
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
@@ -371,38 +324,6 @@
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
@@ -532,38 +453,6 @@
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
+4 -6
View File
@@ -28,14 +28,13 @@ libGDLContentStore_HEADER_FILES += \
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 \
@@ -46,14 +45,13 @@ libGDLContentStore_OBJC_FILES += \
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
+2 -2
View File
@@ -1,9 +1,9 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2024b//EN
PRODID:-//Alinto//NONSGML IANA 2024c//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Abidjan
LAST-MODIFIED:20241008T100856Z
LAST-MODIFIED:20240220T101645Z
X-LIC-LOCATION:Africa/Abidjan
BEGIN:STANDARD
TZNAME:GMT
+2 -2
View File
@@ -1,9 +1,9 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2024b//EN
PRODID:-//Alinto//NONSGML IANA 2024c//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Algiers
LAST-MODIFIED:20241008T100856Z
LAST-MODIFIED:20240220T101645Z
X-LIC-LOCATION:Africa/Algiers
BEGIN:STANDARD
TZNAME:CET
+2 -2
View File
@@ -1,9 +1,9 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2024b//EN
PRODID:-//Alinto//NONSGML IANA 2024c//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Bissau
LAST-MODIFIED:20241008T100856Z
LAST-MODIFIED:20240220T101645Z
X-LIC-LOCATION:Africa/Bissau
BEGIN:STANDARD
TZNAME:GMT
+2 -2
View File
@@ -1,9 +1,9 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2024b//EN
PRODID:-//Alinto//NONSGML IANA 2024c//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Cairo
LAST-MODIFIED:20241008T100856Z
LAST-MODIFIED:20240220T101645Z
X-LIC-LOCATION:Africa/Cairo
BEGIN:DAYLIGHT
TZNAME:EEST
+3 -3
View File
@@ -1,13 +1,13 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2024b//EN
PRODID:-//Alinto//NONSGML IANA 2024c//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Casablanca
TZUNTIL:20870511T020001Z
LAST-MODIFIED:20241008T100856Z
LAST-MODIFIED:20240220T101645Z
X-LIC-LOCATION:Africa/Casablanca
BEGIN:STANDARD
TZNAME:%z
TZNAME:+01
TZOFFSETFROM:+0100
TZOFFSETTO:+0100
DTSTART:19700101T000000
+2 -2
View File
@@ -1,9 +1,9 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2024b//EN
PRODID:-//Alinto//NONSGML IANA 2024c//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Ceuta
LAST-MODIFIED:20241008T100856Z
LAST-MODIFIED:20240220T101645Z
X-LIC-LOCATION:Africa/Ceuta
BEGIN:DAYLIGHT
TZNAME:CEST
+3 -3
View File
@@ -1,13 +1,13 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2024b//EN
PRODID:-//Alinto//NONSGML IANA 2024c//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/El_Aaiun
TZUNTIL:20870511T020001Z
LAST-MODIFIED:20241008T100856Z
LAST-MODIFIED:20240220T101645Z
X-LIC-LOCATION:Africa/El_Aaiun
BEGIN:STANDARD
TZNAME:%z
TZNAME:+01
TZOFFSETFROM:+0100
TZOFFSETTO:+0100
DTSTART:19700101T000000
@@ -1,9 +1,9 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2024b//EN
PRODID:-//Alinto//NONSGML IANA 2024c//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Johannesburg
LAST-MODIFIED:20241008T100856Z
LAST-MODIFIED:20240220T101645Z
X-LIC-LOCATION:Africa/Johannesburg
BEGIN:STANDARD
TZNAME:SAST
+2 -2
View File
@@ -1,9 +1,9 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2024b//EN
PRODID:-//Alinto//NONSGML IANA 2024c//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Juba
LAST-MODIFIED:20241008T100856Z
LAST-MODIFIED:20240220T101645Z
X-LIC-LOCATION:Africa/Juba
BEGIN:STANDARD
TZNAME:CAT
+2 -2
View File
@@ -1,9 +1,9 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2024b//EN
PRODID:-//Alinto//NONSGML IANA 2024c//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Khartoum
LAST-MODIFIED:20241008T100856Z
LAST-MODIFIED:20240220T101645Z
X-LIC-LOCATION:Africa/Khartoum
BEGIN:STANDARD
TZNAME:CAT
+2 -2
View File
@@ -1,9 +1,9 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2024b//EN
PRODID:-//Alinto//NONSGML IANA 2024c//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Lagos
LAST-MODIFIED:20241008T100856Z
LAST-MODIFIED:20240220T101645Z
X-LIC-LOCATION:Africa/Lagos
BEGIN:STANDARD
TZNAME:WAT
+2 -2
View File
@@ -1,9 +1,9 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2024b//EN
PRODID:-//Alinto//NONSGML IANA 2024c//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Maputo
LAST-MODIFIED:20241008T100856Z
LAST-MODIFIED:20240220T101645Z
X-LIC-LOCATION:Africa/Maputo
BEGIN:STANDARD
TZNAME:CAT
+2 -2
View File
@@ -1,9 +1,9 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2024b//EN
PRODID:-//Alinto//NONSGML IANA 2024c//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Monrovia
LAST-MODIFIED:20241008T100856Z
LAST-MODIFIED:20240220T101645Z
X-LIC-LOCATION:Africa/Monrovia
BEGIN:STANDARD
TZNAME:GMT
+2 -2
View File
@@ -1,9 +1,9 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2024b//EN
PRODID:-//Alinto//NONSGML IANA 2024c//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Nairobi
LAST-MODIFIED:20241008T100856Z
LAST-MODIFIED:20240220T101645Z
X-LIC-LOCATION:Africa/Nairobi
BEGIN:STANDARD
TZNAME:EAT
+2 -2
View File
@@ -1,9 +1,9 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2024b//EN
PRODID:-//Alinto//NONSGML IANA 2024c//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Ndjamena
LAST-MODIFIED:20241008T100856Z
LAST-MODIFIED:20240220T101645Z
X-LIC-LOCATION:Africa/Ndjamena
BEGIN:STANDARD
TZNAME:WAT
+2 -2
View File
@@ -1,9 +1,9 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2024b//EN
PRODID:-//Alinto//NONSGML IANA 2024c//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Sao_Tome
LAST-MODIFIED:20241008T100856Z
LAST-MODIFIED:20240220T101645Z
X-LIC-LOCATION:Africa/Sao_Tome
BEGIN:STANDARD
TZNAME:GMT
+2 -2
View File
@@ -1,9 +1,9 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2024b//EN
PRODID:-//Alinto//NONSGML IANA 2024c//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Tripoli
LAST-MODIFIED:20241008T100856Z
LAST-MODIFIED:20240220T101645Z
X-LIC-LOCATION:Africa/Tripoli
BEGIN:STANDARD
TZNAME:EET
+2 -2
View File
@@ -1,9 +1,9 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2024b//EN
PRODID:-//Alinto//NONSGML IANA 2024c//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Tunis
LAST-MODIFIED:20241008T100856Z
LAST-MODIFIED:20240220T101645Z
X-LIC-LOCATION:Africa/Tunis
BEGIN:STANDARD
TZNAME:CET
+2 -2
View File
@@ -1,9 +1,9 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2024b//EN
PRODID:-//Alinto//NONSGML IANA 2024c//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Windhoek
LAST-MODIFIED:20241008T100856Z
LAST-MODIFIED:20240220T101645Z
X-LIC-LOCATION:Africa/Windhoek
BEGIN:STANDARD
TZNAME:CAT
+2 -2
View File
@@ -1,9 +1,9 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2024b//EN
PRODID:-//Alinto//NONSGML IANA 2024c//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Adak
LAST-MODIFIED:20241008T100856Z
LAST-MODIFIED:20240220T101645Z
X-LIC-LOCATION:America/Adak
BEGIN:DAYLIGHT
TZNAME:HDT
+2 -2
View File
@@ -1,9 +1,9 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2024b//EN
PRODID:-//Alinto//NONSGML IANA 2024c//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Anchorage
LAST-MODIFIED:20241008T100856Z
LAST-MODIFIED:20240220T101645Z
X-LIC-LOCATION:America/Anchorage
BEGIN:DAYLIGHT
TZNAME:AKDT
+3 -3
View File
@@ -1,12 +1,12 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2024b//EN
PRODID:-//Alinto//NONSGML IANA 2024c//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Araguaina
LAST-MODIFIED:20241008T100856Z
LAST-MODIFIED:20240220T101645Z
X-LIC-LOCATION:America/Araguaina
BEGIN:STANDARD
TZNAME:%z
TZNAME:-03
TZOFFSETFROM:-0300
TZOFFSETTO:-0300
DTSTART:19700101T000000
@@ -1,12 +1,12 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2024b//EN
PRODID:-//Alinto//NONSGML IANA 2024c//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Argentina/Buenos_Aires
LAST-MODIFIED:20241008T100856Z
LAST-MODIFIED:20240220T101645Z
X-LIC-LOCATION:America/Argentina/Buenos_Aires
BEGIN:STANDARD
TZNAME:%z
TZNAME:-03
TZOFFSETFROM:-0300
TZOFFSETTO:-0300
DTSTART:19700101T000000
@@ -1,12 +1,12 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2024b//EN
PRODID:-//Alinto//NONSGML IANA 2024c//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Argentina/Catamarca
LAST-MODIFIED:20241008T100856Z
LAST-MODIFIED:20240220T101645Z
X-LIC-LOCATION:America/Argentina/Catamarca
BEGIN:STANDARD
TZNAME:%z
TZNAME:-03
TZOFFSETFROM:-0300
TZOFFSETTO:-0300
DTSTART:19700101T000000
@@ -1,12 +1,12 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2024b//EN
PRODID:-//Alinto//NONSGML IANA 2024c//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Argentina/Cordoba
LAST-MODIFIED:20241008T100856Z
LAST-MODIFIED:20240220T101645Z
X-LIC-LOCATION:America/Argentina/Cordoba
BEGIN:STANDARD
TZNAME:%z
TZNAME:-03
TZOFFSETFROM:-0300
TZOFFSETTO:-0300
DTSTART:19700101T000000
@@ -1,12 +1,12 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2024b//EN
PRODID:-//Alinto//NONSGML IANA 2024c//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Argentina/Jujuy
LAST-MODIFIED:20241008T100856Z
LAST-MODIFIED:20240220T101645Z
X-LIC-LOCATION:America/Argentina/Jujuy
BEGIN:STANDARD
TZNAME:%z
TZNAME:-03
TZOFFSETFROM:-0300
TZOFFSETTO:-0300
DTSTART:19700101T000000
@@ -1,12 +1,12 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2024b//EN
PRODID:-//Alinto//NONSGML IANA 2024c//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Argentina/La_Rioja
LAST-MODIFIED:20241008T100856Z
LAST-MODIFIED:20240220T101645Z
X-LIC-LOCATION:America/Argentina/La_Rioja
BEGIN:STANDARD
TZNAME:%z
TZNAME:-03
TZOFFSETFROM:-0300
TZOFFSETTO:-0300
DTSTART:19700101T000000
@@ -1,12 +1,12 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2024b//EN
PRODID:-//Alinto//NONSGML IANA 2024c//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Argentina/Mendoza
LAST-MODIFIED:20241008T100856Z
LAST-MODIFIED:20240220T101645Z
X-LIC-LOCATION:America/Argentina/Mendoza
BEGIN:STANDARD
TZNAME:%z
TZNAME:-03
TZOFFSETFROM:-0300
TZOFFSETTO:-0300
DTSTART:19700101T000000
@@ -1,12 +1,12 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2024b//EN
PRODID:-//Alinto//NONSGML IANA 2024c//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Argentina/Rio_Gallegos
LAST-MODIFIED:20241008T100856Z
LAST-MODIFIED:20240220T101645Z
X-LIC-LOCATION:America/Argentina/Rio_Gallegos
BEGIN:STANDARD
TZNAME:%z
TZNAME:-03
TZOFFSETFROM:-0300
TZOFFSETTO:-0300
DTSTART:19700101T000000
@@ -1,12 +1,12 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2024b//EN
PRODID:-//Alinto//NONSGML IANA 2024c//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Argentina/Salta
LAST-MODIFIED:20241008T100856Z
LAST-MODIFIED:20240220T101645Z
X-LIC-LOCATION:America/Argentina/Salta
BEGIN:STANDARD
TZNAME:%z
TZNAME:-03
TZOFFSETFROM:-0300
TZOFFSETTO:-0300
DTSTART:19700101T000000
@@ -1,12 +1,12 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2024b//EN
PRODID:-//Alinto//NONSGML IANA 2024c//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Argentina/San_Juan
LAST-MODIFIED:20241008T100856Z
LAST-MODIFIED:20240220T101645Z
X-LIC-LOCATION:America/Argentina/San_Juan
BEGIN:STANDARD
TZNAME:%z
TZNAME:-03
TZOFFSETFROM:-0300
TZOFFSETTO:-0300
DTSTART:19700101T000000
@@ -1,12 +1,12 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2024b//EN
PRODID:-//Alinto//NONSGML IANA 2024c//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Argentina/San_Luis
LAST-MODIFIED:20241008T100856Z
LAST-MODIFIED:20240220T101645Z
X-LIC-LOCATION:America/Argentina/San_Luis
BEGIN:STANDARD
TZNAME:%z
TZNAME:-03
TZOFFSETFROM:-0300
TZOFFSETTO:-0300
DTSTART:19700101T000000
@@ -1,12 +1,12 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2024b//EN
PRODID:-//Alinto//NONSGML IANA 2024c//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Argentina/Tucuman
LAST-MODIFIED:20241008T100856Z
LAST-MODIFIED:20240220T101645Z
X-LIC-LOCATION:America/Argentina/Tucuman
BEGIN:STANDARD
TZNAME:%z
TZNAME:-03
TZOFFSETFROM:-0300
TZOFFSETTO:-0300
DTSTART:19700101T000000
@@ -1,12 +1,12 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2024b//EN
PRODID:-//Alinto//NONSGML IANA 2024c//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Argentina/Ushuaia
LAST-MODIFIED:20241008T100856Z
LAST-MODIFIED:20240220T101645Z
X-LIC-LOCATION:America/Argentina/Ushuaia
BEGIN:STANDARD
TZNAME:%z
TZNAME:-03
TZOFFSETFROM:-0300
TZOFFSETTO:-0300
DTSTART:19700101T000000
+4 -4
View File
@@ -1,19 +1,19 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2024b//EN
PRODID:-//Alinto//NONSGML IANA 2024c//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Asuncion
LAST-MODIFIED:20241008T100856Z
LAST-MODIFIED:20240220T101645Z
X-LIC-LOCATION:America/Asuncion
BEGIN:DAYLIGHT
TZNAME:%z
TZNAME:-03
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
DTSTART:19701004T000000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU
END:DAYLIGHT
BEGIN:STANDARD
TZNAME:%z
TZNAME:-04
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
DTSTART:19700322T000000
+3 -3
View File
@@ -1,12 +1,12 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2024b//EN
PRODID:-//Alinto//NONSGML IANA 2024c//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Bahia
LAST-MODIFIED:20241008T100856Z
LAST-MODIFIED:20240220T101645Z
X-LIC-LOCATION:America/Bahia
BEGIN:STANDARD
TZNAME:%z
TZNAME:-03
TZOFFSETFROM:-0300
TZOFFSETTO:-0300
DTSTART:19700101T000000
@@ -1,9 +1,9 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2024b//EN
PRODID:-//Alinto//NONSGML IANA 2024c//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Bahia_Banderas
LAST-MODIFIED:20241008T100856Z
LAST-MODIFIED:20240220T101645Z
X-LIC-LOCATION:America/Bahia_Banderas
BEGIN:STANDARD
TZNAME:CST
+2 -2
View File
@@ -1,9 +1,9 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2024b//EN
PRODID:-//Alinto//NONSGML IANA 2024c//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Barbados
LAST-MODIFIED:20241008T100856Z
LAST-MODIFIED:20240220T101645Z
X-LIC-LOCATION:America/Barbados
BEGIN:STANDARD
TZNAME:AST
+3 -3
View File
@@ -1,12 +1,12 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2024b//EN
PRODID:-//Alinto//NONSGML IANA 2024c//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Belem
LAST-MODIFIED:20241008T100856Z
LAST-MODIFIED:20240220T101645Z
X-LIC-LOCATION:America/Belem
BEGIN:STANDARD
TZNAME:%z
TZNAME:-03
TZOFFSETFROM:-0300
TZOFFSETTO:-0300
DTSTART:19700101T000000
+2 -2
View File
@@ -1,9 +1,9 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2024b//EN
PRODID:-//Alinto//NONSGML IANA 2024c//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Belize
LAST-MODIFIED:20241008T100856Z
LAST-MODIFIED:20240220T101645Z
X-LIC-LOCATION:America/Belize
BEGIN:STANDARD
TZNAME:CST
+3 -3
View File
@@ -1,12 +1,12 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2024b//EN
PRODID:-//Alinto//NONSGML IANA 2024c//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Boa_Vista
LAST-MODIFIED:20241008T100856Z
LAST-MODIFIED:20240220T101645Z
X-LIC-LOCATION:America/Boa_Vista
BEGIN:STANDARD
TZNAME:%z
TZNAME:-04
TZOFFSETFROM:-0400
TZOFFSETTO:-0400
DTSTART:19700101T000000
+3 -3
View File
@@ -1,12 +1,12 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2024b//EN
PRODID:-//Alinto//NONSGML IANA 2024c//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Bogota
LAST-MODIFIED:20241008T100856Z
LAST-MODIFIED:20240220T101645Z
X-LIC-LOCATION:America/Bogota
BEGIN:STANDARD
TZNAME:%z
TZNAME:-05
TZOFFSETFROM:-0500
TZOFFSETTO:-0500
DTSTART:19700101T000000
+2 -2
View File
@@ -1,9 +1,9 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2024b//EN
PRODID:-//Alinto//NONSGML IANA 2024c//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Boise
LAST-MODIFIED:20241008T100856Z
LAST-MODIFIED:20240220T101645Z
X-LIC-LOCATION:America/Boise
BEGIN:DAYLIGHT
TZNAME:MDT
@@ -1,9 +1,9 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2024b//EN
PRODID:-//Alinto//NONSGML IANA 2024c//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Cambridge_Bay
LAST-MODIFIED:20241008T100856Z
LAST-MODIFIED:20240220T101645Z
X-LIC-LOCATION:America/Cambridge_Bay
BEGIN:DAYLIGHT
TZNAME:MDT
@@ -1,12 +1,12 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2024b//EN
PRODID:-//Alinto//NONSGML IANA 2024c//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Campo_Grande
LAST-MODIFIED:20241008T100856Z
LAST-MODIFIED:20240220T101645Z
X-LIC-LOCATION:America/Campo_Grande
BEGIN:STANDARD
TZNAME:%z
TZNAME:-04
TZOFFSETFROM:-0400
TZOFFSETTO:-0400
DTSTART:19700101T000000
+2 -2
View File
@@ -1,9 +1,9 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2024b//EN
PRODID:-//Alinto//NONSGML IANA 2024c//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Cancun
LAST-MODIFIED:20241008T100856Z
LAST-MODIFIED:20240220T101645Z
X-LIC-LOCATION:America/Cancun
BEGIN:STANDARD
TZNAME:EST
+3 -3
View File
@@ -1,12 +1,12 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2024b//EN
PRODID:-//Alinto//NONSGML IANA 2024c//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Caracas
LAST-MODIFIED:20241008T100856Z
LAST-MODIFIED:20240220T101645Z
X-LIC-LOCATION:America/Caracas
BEGIN:STANDARD
TZNAME:%z
TZNAME:-04
TZOFFSETFROM:-0400
TZOFFSETTO:-0400
DTSTART:19700101T000000
+3 -3
View File
@@ -1,12 +1,12 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2024b//EN
PRODID:-//Alinto//NONSGML IANA 2024c//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Cayenne
LAST-MODIFIED:20241008T100856Z
LAST-MODIFIED:20240220T101645Z
X-LIC-LOCATION:America/Cayenne
BEGIN:STANDARD
TZNAME:%z
TZNAME:-03
TZOFFSETFROM:-0300
TZOFFSETTO:-0300
DTSTART:19700101T000000
+2 -2
View File
@@ -1,9 +1,9 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2024b//EN
PRODID:-//Alinto//NONSGML IANA 2024c//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Chicago
LAST-MODIFIED:20241008T100856Z
LAST-MODIFIED:20240220T101645Z
X-LIC-LOCATION:America/Chicago
BEGIN:DAYLIGHT
TZNAME:CDT
+2 -2
View File
@@ -1,9 +1,9 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2024b//EN
PRODID:-//Alinto//NONSGML IANA 2024c//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Chihuahua
LAST-MODIFIED:20241008T100856Z
LAST-MODIFIED:20240220T101645Z
X-LIC-LOCATION:America/Chihuahua
BEGIN:STANDARD
TZNAME:CST
@@ -1,9 +1,9 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2024b//EN
PRODID:-//Alinto//NONSGML IANA 2024c//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Ciudad_Juarez
LAST-MODIFIED:20241008T100856Z
LAST-MODIFIED:20240220T101645Z
X-LIC-LOCATION:America/Ciudad_Juarez
BEGIN:DAYLIGHT
TZNAME:MDT
@@ -1,9 +1,9 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2024b//EN
PRODID:-//Alinto//NONSGML IANA 2024c//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Costa_Rica
LAST-MODIFIED:20241008T100856Z
LAST-MODIFIED:20240220T101645Z
X-LIC-LOCATION:America/Costa_Rica
BEGIN:STANDARD
TZNAME:CST
+3 -3
View File
@@ -1,12 +1,12 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2024b//EN
PRODID:-//Alinto//NONSGML IANA 2024c//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Cuiaba
LAST-MODIFIED:20241008T100856Z
LAST-MODIFIED:20240220T101645Z
X-LIC-LOCATION:America/Cuiaba
BEGIN:STANDARD
TZNAME:%z
TZNAME:-04
TZOFFSETFROM:-0400
TZOFFSETTO:-0400
DTSTART:19700101T000000
@@ -1,9 +1,9 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2024b//EN
PRODID:-//Alinto//NONSGML IANA 2024c//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Danmarkshavn
LAST-MODIFIED:20241008T100856Z
LAST-MODIFIED:20240220T101645Z
X-LIC-LOCATION:America/Danmarkshavn
BEGIN:STANDARD
TZNAME:GMT
+2 -2
View File
@@ -1,9 +1,9 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2024b//EN
PRODID:-//Alinto//NONSGML IANA 2024c//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Dawson
LAST-MODIFIED:20241008T100856Z
LAST-MODIFIED:20240220T101645Z
X-LIC-LOCATION:America/Dawson
BEGIN:STANDARD
TZNAME:MST
@@ -1,9 +1,9 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2024b//EN
PRODID:-//Alinto//NONSGML IANA 2024c//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Dawson_Creek
LAST-MODIFIED:20241008T100856Z
LAST-MODIFIED:20240220T101645Z
X-LIC-LOCATION:America/Dawson_Creek
BEGIN:STANDARD
TZNAME:MST
+2 -2
View File
@@ -1,9 +1,9 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2024b//EN
PRODID:-//Alinto//NONSGML IANA 2024c//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Denver
LAST-MODIFIED:20241008T100856Z
LAST-MODIFIED:20240220T101645Z
X-LIC-LOCATION:America/Denver
BEGIN:DAYLIGHT
TZNAME:MDT
+2 -2
View File
@@ -1,9 +1,9 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2024b//EN
PRODID:-//Alinto//NONSGML IANA 2024c//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Detroit
LAST-MODIFIED:20241008T100856Z
LAST-MODIFIED:20240220T101645Z
X-LIC-LOCATION:America/Detroit
BEGIN:DAYLIGHT
TZNAME:EDT
+2 -2
View File
@@ -1,9 +1,9 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2024b//EN
PRODID:-//Alinto//NONSGML IANA 2024c//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Edmonton
LAST-MODIFIED:20241008T100856Z
LAST-MODIFIED:20240220T101645Z
X-LIC-LOCATION:America/Edmonton
BEGIN:DAYLIGHT
TZNAME:MDT
+3 -3
View File
@@ -1,12 +1,12 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2024b//EN
PRODID:-//Alinto//NONSGML IANA 2024c//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Eirunepe
LAST-MODIFIED:20241008T100856Z
LAST-MODIFIED:20240220T101645Z
X-LIC-LOCATION:America/Eirunepe
BEGIN:STANDARD
TZNAME:%z
TZNAME:-05
TZOFFSETFROM:-0500
TZOFFSETTO:-0500
DTSTART:19700101T000000
@@ -1,9 +1,9 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2024b//EN
PRODID:-//Alinto//NONSGML IANA 2024c//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/El_Salvador
LAST-MODIFIED:20241008T100856Z
LAST-MODIFIED:20240220T101645Z
X-LIC-LOCATION:America/El_Salvador
BEGIN:STANDARD
TZNAME:CST
@@ -1,9 +1,9 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2024b//EN
PRODID:-//Alinto//NONSGML IANA 2024c//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Fort_Nelson
LAST-MODIFIED:20241008T100856Z
LAST-MODIFIED:20240220T101645Z
X-LIC-LOCATION:America/Fort_Nelson
BEGIN:STANDARD
TZNAME:MST
+3 -3
View File
@@ -1,12 +1,12 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2024b//EN
PRODID:-//Alinto//NONSGML IANA 2024c//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Fortaleza
LAST-MODIFIED:20241008T100856Z
LAST-MODIFIED:20240220T101645Z
X-LIC-LOCATION:America/Fortaleza
BEGIN:STANDARD
TZNAME:%z
TZNAME:-03
TZOFFSETFROM:-0300
TZOFFSETTO:-0300
DTSTART:19700101T000000
+2 -2
View File
@@ -1,9 +1,9 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2024b//EN
PRODID:-//Alinto//NONSGML IANA 2024c//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Glace_Bay
LAST-MODIFIED:20241008T100856Z
LAST-MODIFIED:20240220T101645Z
X-LIC-LOCATION:America/Glace_Bay
BEGIN:DAYLIGHT
TZNAME:ADT
+2 -2
View File
@@ -1,9 +1,9 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2024b//EN
PRODID:-//Alinto//NONSGML IANA 2024c//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Goose_Bay
LAST-MODIFIED:20241008T100856Z
LAST-MODIFIED:20240220T101645Z
X-LIC-LOCATION:America/Goose_Bay
BEGIN:STANDARD
TZNAME:AST
@@ -1,9 +1,9 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2024b//EN
PRODID:-//Alinto//NONSGML IANA 2024c//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Grand_Turk
LAST-MODIFIED:20241008T100856Z
LAST-MODIFIED:20240220T101645Z
X-LIC-LOCATION:America/Grand_Turk
BEGIN:STANDARD
TZNAME:EST
+2 -2
View File
@@ -1,9 +1,9 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2024b//EN
PRODID:-//Alinto//NONSGML IANA 2024c//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Guatemala
LAST-MODIFIED:20241008T100856Z
LAST-MODIFIED:20240220T101645Z
X-LIC-LOCATION:America/Guatemala
BEGIN:STANDARD
TZNAME:CST
+3 -3
View File
@@ -1,12 +1,12 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2024b//EN
PRODID:-//Alinto//NONSGML IANA 2024c//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Guayaquil
LAST-MODIFIED:20241008T100856Z
LAST-MODIFIED:20240220T101645Z
X-LIC-LOCATION:America/Guayaquil
BEGIN:STANDARD
TZNAME:%z
TZNAME:-05
TZOFFSETFROM:-0500
TZOFFSETTO:-0500
DTSTART:19700101T000000
+3 -3
View File
@@ -1,12 +1,12 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2024b//EN
PRODID:-//Alinto//NONSGML IANA 2024c//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Guyana
LAST-MODIFIED:20241008T100856Z
LAST-MODIFIED:20240220T101645Z
X-LIC-LOCATION:America/Guyana
BEGIN:STANDARD
TZNAME:%z
TZNAME:-04
TZOFFSETFROM:-0400
TZOFFSETTO:-0400
DTSTART:19700101T000000
+2 -2
View File
@@ -1,9 +1,9 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2024b//EN
PRODID:-//Alinto//NONSGML IANA 2024c//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Halifax
LAST-MODIFIED:20241008T100856Z
LAST-MODIFIED:20240220T101645Z
X-LIC-LOCATION:America/Halifax
BEGIN:DAYLIGHT
TZNAME:ADT
+2 -2
View File
@@ -1,9 +1,9 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2024b//EN
PRODID:-//Alinto//NONSGML IANA 2024c//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Havana
LAST-MODIFIED:20241008T100856Z
LAST-MODIFIED:20240220T101645Z
X-LIC-LOCATION:America/Havana
BEGIN:STANDARD
TZNAME:CST
@@ -1,9 +1,9 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2024b//EN
PRODID:-//Alinto//NONSGML IANA 2024c//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Hermosillo
LAST-MODIFIED:20241008T100856Z
LAST-MODIFIED:20240220T101645Z
X-LIC-LOCATION:America/Hermosillo
BEGIN:STANDARD
TZNAME:MST
@@ -1,9 +1,9 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2024b//EN
PRODID:-//Alinto//NONSGML IANA 2024c//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Indiana/Indianapolis
LAST-MODIFIED:20241008T100856Z
LAST-MODIFIED:20240220T101645Z
X-LIC-LOCATION:America/Indiana/Indianapolis
BEGIN:DAYLIGHT
TZNAME:EDT
@@ -1,9 +1,9 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2024b//EN
PRODID:-//Alinto//NONSGML IANA 2024c//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Indiana/Knox
LAST-MODIFIED:20241008T100856Z
LAST-MODIFIED:20240220T101645Z
X-LIC-LOCATION:America/Indiana/Knox
BEGIN:DAYLIGHT
TZNAME:CDT
@@ -1,9 +1,9 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2024b//EN
PRODID:-//Alinto//NONSGML IANA 2024c//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Indiana/Marengo
LAST-MODIFIED:20241008T100856Z
LAST-MODIFIED:20240220T101645Z
X-LIC-LOCATION:America/Indiana/Marengo
BEGIN:DAYLIGHT
TZNAME:EDT
@@ -1,9 +1,9 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2024b//EN
PRODID:-//Alinto//NONSGML IANA 2024c//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Indiana/Petersburg
LAST-MODIFIED:20241008T100856Z
LAST-MODIFIED:20240220T101645Z
X-LIC-LOCATION:America/Indiana/Petersburg
BEGIN:DAYLIGHT
TZNAME:EDT
@@ -1,9 +1,9 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2024b//EN
PRODID:-//Alinto//NONSGML IANA 2024c//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Indiana/Tell_City
LAST-MODIFIED:20241008T100856Z
LAST-MODIFIED:20240220T101645Z
X-LIC-LOCATION:America/Indiana/Tell_City
BEGIN:DAYLIGHT
TZNAME:CDT
@@ -1,9 +1,9 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2024b//EN
PRODID:-//Alinto//NONSGML IANA 2024c//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Indiana/Vevay
LAST-MODIFIED:20241008T100856Z
LAST-MODIFIED:20240220T101645Z
X-LIC-LOCATION:America/Indiana/Vevay
BEGIN:DAYLIGHT
TZNAME:EDT
@@ -1,9 +1,9 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2024b//EN
PRODID:-//Alinto//NONSGML IANA 2024c//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Indiana/Vincennes
LAST-MODIFIED:20241008T100856Z
LAST-MODIFIED:20240220T101645Z
X-LIC-LOCATION:America/Indiana/Vincennes
BEGIN:DAYLIGHT
TZNAME:EDT
@@ -1,9 +1,9 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2024b//EN
PRODID:-//Alinto//NONSGML IANA 2024c//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Indiana/Winamac
LAST-MODIFIED:20241008T100856Z
LAST-MODIFIED:20240220T101645Z
X-LIC-LOCATION:America/Indiana/Winamac
BEGIN:STANDARD
TZNAME:EST
+2 -2
View File
@@ -1,9 +1,9 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2024b//EN
PRODID:-//Alinto//NONSGML IANA 2024c//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Inuvik
LAST-MODIFIED:20241008T100856Z
LAST-MODIFIED:20240220T101645Z
X-LIC-LOCATION:America/Inuvik
BEGIN:DAYLIGHT
TZNAME:MDT
+2 -2
View File
@@ -1,9 +1,9 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2024b//EN
PRODID:-//Alinto//NONSGML IANA 2024c//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Iqaluit
LAST-MODIFIED:20241008T100856Z
LAST-MODIFIED:20240220T101645Z
X-LIC-LOCATION:America/Iqaluit
BEGIN:DAYLIGHT
TZNAME:EDT
+2 -2
View File
@@ -1,9 +1,9 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2024b//EN
PRODID:-//Alinto//NONSGML IANA 2024c//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Jamaica
LAST-MODIFIED:20241008T100856Z
LAST-MODIFIED:20240220T101645Z
X-LIC-LOCATION:America/Jamaica
BEGIN:STANDARD
TZNAME:EST
+2 -2
View File
@@ -1,9 +1,9 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2024b//EN
PRODID:-//Alinto//NONSGML IANA 2024c//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Juneau
LAST-MODIFIED:20241008T100856Z
LAST-MODIFIED:20240220T101645Z
X-LIC-LOCATION:America/Juneau
BEGIN:DAYLIGHT
TZNAME:AKDT
@@ -1,9 +1,9 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2024b//EN
PRODID:-//Alinto//NONSGML IANA 2024c//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Kentucky/Louisville
LAST-MODIFIED:20241008T100856Z
LAST-MODIFIED:20240220T101645Z
X-LIC-LOCATION:America/Kentucky/Louisville
BEGIN:DAYLIGHT
TZNAME:EDT
@@ -1,9 +1,9 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2024b//EN
PRODID:-//Alinto//NONSGML IANA 2024c//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Kentucky/Monticello
LAST-MODIFIED:20241008T100856Z
LAST-MODIFIED:20240220T101645Z
X-LIC-LOCATION:America/Kentucky/Monticello
BEGIN:DAYLIGHT
TZNAME:EDT
+3 -3
View File
@@ -1,12 +1,12 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2024b//EN
PRODID:-//Alinto//NONSGML IANA 2024c//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/La_Paz
LAST-MODIFIED:20241008T100856Z
LAST-MODIFIED:20240220T101645Z
X-LIC-LOCATION:America/La_Paz
BEGIN:STANDARD
TZNAME:%z
TZNAME:-04
TZOFFSETFROM:-0400
TZOFFSETTO:-0400
DTSTART:19700101T000000
+3 -3
View File
@@ -1,12 +1,12 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2024b//EN
PRODID:-//Alinto//NONSGML IANA 2024c//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Lima
LAST-MODIFIED:20241008T100856Z
LAST-MODIFIED:20240220T101645Z
X-LIC-LOCATION:America/Lima
BEGIN:STANDARD
TZNAME:%z
TZNAME:-05
TZOFFSETFROM:-0500
TZOFFSETTO:-0500
DTSTART:19700101T000000
@@ -1,9 +1,9 @@
BEGIN:VCALENDAR
PRODID:-//Alinto//NONSGML IANA 2024b//EN
PRODID:-//Alinto//NONSGML IANA 2024c//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Los_Angeles
LAST-MODIFIED:20241008T100856Z
LAST-MODIFIED:20240220T101645Z
X-LIC-LOCATION:America/Los_Angeles
BEGIN:DAYLIGHT
TZNAME:PDT
Loaded 100 of 563 files, more files were not shown because too many files have changed in this diff. Show more