Compare commits
109
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1a8273ead5 | ||
|
|
b5deb663ad | ||
|
|
9aab41975d | ||
|
|
fcb688723f | ||
|
|
077ba07314 | ||
|
|
6bbe8100b9 | ||
|
|
9954c3607b | ||
|
|
085fc4a9eb | ||
|
|
e36d0d219b | ||
|
|
c5fb3482e2 | ||
|
|
bc4c9ba0e6 | ||
|
|
54debcf47d | ||
|
|
6d8d4f7c39 | ||
|
|
4b397f68f5 | ||
|
|
fdb88abc12 | ||
|
|
d3e5a004db | ||
|
|
9f4440b07f | ||
|
|
3e61a52673 | ||
|
|
532b8dc202 | ||
|
|
828f85c720 | ||
|
|
aa6575c42b | ||
|
|
1ba83ec57d | ||
|
|
bbc04913b9 | ||
|
|
1dcf475d3b | ||
|
|
1bf955d193 | ||
|
|
264f94b64d | ||
|
|
d7fc5a52b8 | ||
|
|
5f6168d536 | ||
|
|
c792ddb601 | ||
|
|
c31b3f4592 | ||
|
|
f4adf6267d | ||
|
|
aae9e6065f | ||
|
|
20e7c890de | ||
|
|
961702de67 | ||
|
|
3ac01f7051 | ||
|
|
bbd17f5531 | ||
|
|
8c4f56c971 | ||
|
|
1d0b6a622c | ||
|
|
ade923d21d | ||
|
|
54f8af30ce | ||
|
|
5c48745c94 | ||
|
|
4ec3d2091a | ||
|
|
3616e56289 | ||
|
|
47548f0939 | ||
|
|
068f1f3154 | ||
|
|
c88f95586a | ||
|
|
07c75280bb | ||
|
|
0fadd4cb72 | ||
|
|
eb7f551e88 | ||
|
|
148fab9409 | ||
|
|
7c59e6b3bf | ||
|
|
ca425e6752 | ||
|
|
9e431d08a2 | ||
|
|
788ece452b | ||
|
|
696b8eed4d | ||
|
|
ab9f0c1bf1 | ||
|
|
4a68909060 | ||
|
|
1f8dc12929 | ||
|
|
7c6b6743e0 | ||
|
|
4be3ba227c | ||
|
|
3aa14a43e2 | ||
|
|
f6d18c208e | ||
|
|
7c36a65b7c | ||
|
|
52ae03d064 | ||
|
|
a860101003 | ||
|
|
397d0ee5fc | ||
|
|
da15327c92 | ||
|
|
f273d3e513 | ||
|
|
9a3a06c957 | ||
|
|
5753a52ab4 | ||
|
|
b86f59411a | ||
|
|
20d6b98f07 | ||
|
|
80abd1d896 | ||
|
|
4438a2e647 | ||
|
|
81406434d6 | ||
|
|
65f7b2552a | ||
|
|
d23bb125a3 | ||
|
|
39fa4fc38f | ||
|
|
ae4d6a07f3 | ||
|
|
d43f3378a5 | ||
|
|
2bf0780942 | ||
|
|
4367ca5247 | ||
|
|
7617db7383 | ||
|
|
4d5cf314b5 | ||
|
|
7b0319d616 | ||
|
|
0f2faec7d4 | ||
|
|
51cf90d620 | ||
|
|
ef6f53f48c | ||
|
|
1f379d51fd | ||
|
|
a98d4b9944 | ||
|
|
e0677705aa | ||
|
|
f110498d3f | ||
|
|
2912e07e0b | ||
|
|
ac6abb66ec | ||
|
|
6bb9796550 | ||
|
|
7d8b8a4ba3 | ||
|
|
d72cc8fdef | ||
|
|
83bdc145f9 | ||
|
|
60f2f1b9fc | ||
|
|
0bc20b1b79 | ||
|
|
5c2020dc3e | ||
|
|
0dccf10505 | ||
|
|
6de11e58ee | ||
|
|
4c09ebfb6e | ||
|
|
d1d9024eca | ||
|
|
7328623e11 | ||
|
|
c53f09ddec | ||
|
|
50ba658fbd | ||
|
|
a1f2670485 |
No files matched your search
@@ -17,7 +17,9 @@ Simply clone the source code of the SOGo repo and open id with Visual Code Studi
|
||||
When it's all build, go to http://127.0.0.1/SOGo. You have 3 users to login with:
|
||||
`sogo-tests1`, `sogo-tests2`, `sogo-tests3` with all the same password `sogo`
|
||||
|
||||
You can only send mail and receive mail within the domain `example.org`
|
||||
You can only send mail and receive mail among those three users.
|
||||
|
||||
**If you have troubles, you may need to build sogo once, see the next section for that.**
|
||||
|
||||
## How to work on SOGo
|
||||
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
*/obj/
|
||||
.scss-lint-config.yml_
|
||||
ActiveSync/ActiveSync.SOGo
|
||||
API/API.SOGo
|
||||
Documentation/*.docbook
|
||||
Documentation/*.pdf
|
||||
Documentation/*.html
|
||||
|
||||
+1
-1
@@ -1,3 +1,3 @@
|
||||
[submodule "UI/WebServerResources/angular-material"]
|
||||
path = UI/WebServerResources/angular-material
|
||||
url = https://github.com/angular/material
|
||||
url = https://github.com/Alinto/material.git
|
||||
@@ -0,0 +1,28 @@
|
||||
|
||||
# GNUstep makefile
|
||||
|
||||
include common.make
|
||||
|
||||
BUNDLE_NAME = API
|
||||
|
||||
API_PRINCIPAL_CLASS = SOGoAPIProduct
|
||||
|
||||
API_OBJC_FILES = \
|
||||
SOGoAPIProduct.m \
|
||||
SOGoAPI.m \
|
||||
SOGoAPIVersion.m \
|
||||
SOGoAPIUserFolder.m \
|
||||
SOGoAPIDispatcher.m
|
||||
|
||||
API_RESOURCE_FILES += \
|
||||
product.plist
|
||||
|
||||
API_LANGUAGES = $(SOGO_LANGUAGES)
|
||||
|
||||
API_LOCALIZED_RESOURCE_FILES = Localizable.strings
|
||||
|
||||
ADDITIONAL_INCLUDE_DIRS += -I../SOPE/ -I../SoObjects/
|
||||
|
||||
-include GNUmakefile.preamble
|
||||
include $(GNUSTEP_MAKEFILES)/bundle.make
|
||||
-include GNUmakefile.postamble
|
||||
@@ -0,0 +1,16 @@
|
||||
# compile settings
|
||||
|
||||
ADDITIONAL_CPPFLAGS += \
|
||||
-DSOGO_MAJOR_VERSION=$(MAJOR_VERSION) \
|
||||
-DSOGO_MINOR_VERSION=$(MINOR_VERSION) \
|
||||
-DSOGO_PATCH_VERSION=$(SUBMINOR_VERSION) \
|
||||
-DSOGO_LIBDIR="@\"$(SOGO_LIBDIR)\""
|
||||
|
||||
ADDITIONAL_INCLUDE_DIRS += \
|
||||
-D_GNU_SOURCE -I../SOPE/ -I../SoObjects/
|
||||
|
||||
ADDITIONAL_LIB_DIRS += \
|
||||
-L../SoObjects/SOGo/SOGo.framework/sogo -lSOGo \
|
||||
-L../SOPE/GDLContentStore/$(GNUSTEP_OBJ_DIR)/ -lGDLContentStore \
|
||||
-L../SOPE/NGCards/$(GNUSTEP_OBJ_DIR)/ -lNGCards \
|
||||
-lEOControl -lNGStreams -lNGMime -lNGExtensions -lNGObjWeb -lWEExtensions
|
||||
@@ -0,0 +1,35 @@
|
||||
/*
|
||||
Copyright (C) 2004-2005 SKYRIX Software AG
|
||||
|
||||
This file is part of SOPE.
|
||||
|
||||
SOPE is free software; you can redistribute it and/or modify it under
|
||||
the terms of the GNU Lesser General Public License as published by the
|
||||
Free Software Foundation; either version 2, or (at your option) any
|
||||
later version.
|
||||
|
||||
SOPE 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 Lesser General Public
|
||||
License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with SOPE; see the file COPYING. If not, write to the
|
||||
Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
|
||||
02111-1307, USA.
|
||||
*/
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
#import <Foundation/NSObject.h>
|
||||
#import <Foundation/NSDictionary.h>
|
||||
#import <Foundation/NSArray.h>
|
||||
|
||||
@class WOContext;
|
||||
|
||||
@interface SOGoAPI : NSObject
|
||||
- (NSArray *) methodAllowed;
|
||||
- (BOOL) needAuth;
|
||||
- (NSArray *) paramNeeded;
|
||||
- (NSDictionary *) action: (WOContext*) ctx withParam: (NSDictionary *) param;
|
||||
|
||||
@end
|
||||
@@ -0,0 +1,52 @@
|
||||
/*
|
||||
Copyright (C) todo...
|
||||
*/
|
||||
|
||||
#import <SOGoAPI.h>
|
||||
|
||||
|
||||
@implementation SOGoAPI
|
||||
|
||||
- (id) init
|
||||
{
|
||||
[super init];
|
||||
|
||||
return self;
|
||||
}
|
||||
|
||||
- (void) dealloc
|
||||
{
|
||||
[super dealloc];
|
||||
}
|
||||
|
||||
- (NSArray *) methodAllowed
|
||||
{
|
||||
NSArray *result;
|
||||
|
||||
result = [NSArray arrayWithObjects:@"GET",nil];
|
||||
return result;
|
||||
}
|
||||
|
||||
- (BOOL) needAuth
|
||||
{
|
||||
return YES;
|
||||
}
|
||||
|
||||
- (NSArray *) paramNeeded
|
||||
{
|
||||
return nil;
|
||||
}
|
||||
|
||||
- (NSDictionary *) action: (WOContext*) ctx withParam: (NSDictionary *) param
|
||||
{
|
||||
NSDictionary* result;
|
||||
|
||||
result = [[NSDictionary alloc] initWithObjectsAndKeys:
|
||||
@"API not defined", @"error",
|
||||
nil];
|
||||
[result autorelease];
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
@end /* SOGoAPI */
|
||||
Whitespace-only changes.
@@ -0,0 +1,54 @@
|
||||
/*
|
||||
|
||||
Copyright (c) 2014-2015, Inverse inc.
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
* Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
* Neither the name of the Inverse inc. nor the
|
||||
names of its contributors may be used to endorse or promote products
|
||||
derived from this software without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
|
||||
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
*/
|
||||
|
||||
#import <Foundation/NSObject.h>
|
||||
#import <SOGo/WORequest+SOGo.h>
|
||||
#import <SOGo/WOResponse+SOGo.h>
|
||||
|
||||
@class NSCalendarDate;
|
||||
@class NSException;
|
||||
@class NSMutableDictionary;
|
||||
@class NSURL;
|
||||
@class NSNumber;
|
||||
|
||||
static volatile BOOL apiShouldTerminate = NO;
|
||||
|
||||
@interface SOGoAPIDispatcher : NSObject
|
||||
{
|
||||
|
||||
id context;
|
||||
BOOL debugOn;
|
||||
}
|
||||
|
||||
- (NSException *) dispatchRequest: (WORequest*) theRequest
|
||||
inResponse: (WOResponse*) theResponse
|
||||
context: (id) theContext;
|
||||
|
||||
@end
|
||||
@@ -0,0 +1,399 @@
|
||||
/*
|
||||
|
||||
Copyright (c) 2014, Inverse inc.
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
* Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
* Neither the name of the Inverse inc. nor the
|
||||
names of its contributors may be used to endorse or promote products
|
||||
derived from this software without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
|
||||
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
*/
|
||||
|
||||
#include "SOGoAPIDispatcher.h"
|
||||
|
||||
#import <Foundation/NSAutoreleasePool.h>
|
||||
#import <NGObjWeb/NSException+HTTP.h>
|
||||
#import <NGObjWeb/WOContext+SoObjects.h>
|
||||
#import <NGObjWeb/WOCoreApplication.h>
|
||||
#import <NGExtensions/NSObject+Logs.h>
|
||||
#import <NGExtensions/NSString+misc.h>
|
||||
#import <NGExtensions/NSString+Encoding.h>
|
||||
#import <SOGo/SOGoSystemDefaults.h>
|
||||
#import <SOGo/SOGoUser.h>
|
||||
#import <SOGo/SOGoUserManager.h>
|
||||
#import <SOGo/NSString+Utilities.h>
|
||||
#import <SOGo/WORequest+SOGo.h>
|
||||
#import <SOGo/WOResponse+SOGo.h>
|
||||
#import <SOGo/NSArray+Utilities.h>
|
||||
#import <SOGo/NSString+Utilities.h>
|
||||
#import <SOGo/SOGoOpenIdSession.h>
|
||||
|
||||
|
||||
void handle_api_terminate(int signum)
|
||||
{
|
||||
NSLog(@"Forcing termination of API loop.");
|
||||
apiShouldTerminate = YES;
|
||||
[[WOCoreApplication application] terminateAfterTimeInterval: 1];
|
||||
}
|
||||
|
||||
@implementation SOGoAPIDispatcher
|
||||
|
||||
- (id) init
|
||||
{
|
||||
[super init];
|
||||
|
||||
debugOn = [[SOGoSystemDefaults sharedSystemDefaults] apiDebugEnabled];
|
||||
apiShouldTerminate = NO;
|
||||
|
||||
signal(SIGTERM, handle_api_terminate);
|
||||
|
||||
return self;
|
||||
}
|
||||
|
||||
- (void) dealloc
|
||||
{
|
||||
[super dealloc];
|
||||
}
|
||||
|
||||
- (void) _sendAPIErrorResponse: (WOResponse* ) response
|
||||
withMessage: (NSString *) message
|
||||
withStatus: (unsigned int) status
|
||||
{
|
||||
NSDictionary *msg;
|
||||
msg = [[NSDictionary alloc] initWithObjectsAndKeys:
|
||||
message, @"error",
|
||||
nil];
|
||||
[response setStatus: status];
|
||||
[response setContent: [msg jsonRepresentation]];
|
||||
}
|
||||
|
||||
- (NSString *) _getActionFromUri: (NSString *) _uri
|
||||
{
|
||||
/*
|
||||
_uri always start with /SOGo/SOGoAPI
|
||||
full _uri example /SOGo/SOGoAPI/Action/subaction1?param1¶m2
|
||||
*/
|
||||
|
||||
NSString *uriWithoutParams, *action, *prefix;
|
||||
NSArray *uriSplits;
|
||||
|
||||
prefix = @"/SOGo/SOGoAPI";
|
||||
action = @"";
|
||||
|
||||
uriWithoutParams = [_uri urlWithoutParameters];
|
||||
if(![uriWithoutParams hasPrefix: prefix])
|
||||
{
|
||||
[self errorWithFormat: @"Uri for API request does not start with /SOGo/SOGoAPI: %@", uriWithoutParams];
|
||||
return nil;
|
||||
}
|
||||
else
|
||||
{
|
||||
uriWithoutParams = [uriWithoutParams substringFromIndex:[prefix length]];
|
||||
}
|
||||
|
||||
//remove first and last '/'' if needed
|
||||
if([uriWithoutParams hasPrefix: @"/"])
|
||||
{
|
||||
uriWithoutParams = [uriWithoutParams substringFromIndex:1];
|
||||
}
|
||||
if([uriWithoutParams hasSuffix: @"/"])
|
||||
{
|
||||
uriWithoutParams = [uriWithoutParams substringToIndex:([uriWithoutParams length] -1)];
|
||||
}
|
||||
if([uriWithoutParams length] == 0)
|
||||
{
|
||||
[self warnWithFormat: @"Uri for API request has no action, make Version instead: %@", uriWithoutParams];
|
||||
return @"SOGoAPIVersion";
|
||||
}
|
||||
else
|
||||
{
|
||||
uriSplits = [uriWithoutParams componentsSeparatedByString: @"/"];
|
||||
action = [@"SOGoAPI" stringByAppendingString: [uriSplits objectAtIndex: 0]];
|
||||
if(debugOn)
|
||||
[self logWithFormat: @"API request, action made is %@", action];
|
||||
}
|
||||
|
||||
return action;
|
||||
}
|
||||
|
||||
- (NSDictionary *) _authBasicCheck: (NSString *) auth
|
||||
{
|
||||
NSDictionary *user;
|
||||
NSRange rng;
|
||||
NSString *decodeCred, *domain, *login, *pwd;
|
||||
SOGoUserManager *lm;
|
||||
SOGoPasswordPolicyError perr;
|
||||
int expire, grace;
|
||||
BOOL rc;
|
||||
|
||||
user = nil;
|
||||
|
||||
decodeCred = [[auth substringFromIndex:5] stringByTrimmingLeadWhiteSpaces];
|
||||
decodeCred = [decodeCred stringByDecodingBase64];
|
||||
|
||||
rng = [decodeCred rangeOfString:@":"];
|
||||
login = [decodeCred substringToIndex:rng.location];
|
||||
pwd = [decodeCred substringFromIndex:(rng.location + rng.length)];
|
||||
|
||||
domain = nil;
|
||||
perr = PolicyNoError;
|
||||
rc = ([[SOGoUserManager sharedUserManager]
|
||||
checkLogin: [login stringByReplacingString: @"%40"
|
||||
withString: @"@"]
|
||||
password: pwd
|
||||
domain: &domain
|
||||
perr: &perr
|
||||
expire: &expire
|
||||
grace: &grace
|
||||
additionalInfo: nil]
|
||||
&& perr == PolicyNoError);
|
||||
|
||||
if(rc)
|
||||
{
|
||||
//Fecth user info
|
||||
lm = [SOGoUserManager sharedUserManager];
|
||||
user = [lm contactInfosForUserWithUIDorEmail: login];
|
||||
}
|
||||
else
|
||||
user = nil;
|
||||
|
||||
return user;
|
||||
}
|
||||
|
||||
- (NSDictionary *) _authOpenId: (NSString *) auth withDomain: (NSString *) domain
|
||||
{
|
||||
NSDictionary *user;
|
||||
NSString *token, *login;
|
||||
SOGoOpenIdSession *openIdSession;
|
||||
SOGoUserManager *lm;
|
||||
|
||||
user = nil;
|
||||
token = [[auth substringFromIndex:6] stringByTrimmingLeadWhiteSpaces];
|
||||
|
||||
openIdSession = [SOGoOpenIdSession OpenIdSession: domain];
|
||||
if(![openIdSession sessionIsOk])
|
||||
{
|
||||
[self errorWithFormat: @"API - OpenId server not found or has unexpected behavior, contact your admin."];
|
||||
return nil;
|
||||
}
|
||||
|
||||
[openIdSession setAccessToken: token];
|
||||
login = [openIdSession login: @""];
|
||||
|
||||
if(login && ![login isEqualToString: @"anonymous"])
|
||||
{
|
||||
//Fecth user info
|
||||
lm = [SOGoUserManager sharedUserManager];
|
||||
user = [lm contactInfosForUserWithUIDorEmail: login];
|
||||
}
|
||||
else
|
||||
user = nil;
|
||||
|
||||
return user;
|
||||
}
|
||||
|
||||
|
||||
- (NSException *) dispatchRequest: (WORequest*) theRequest
|
||||
inResponse: (WOResponse*) theResponse
|
||||
context: (id) theContext
|
||||
{
|
||||
NSAutoreleasePool *pool;
|
||||
id activeUser;
|
||||
NSString *method, *action, *error;
|
||||
NSDictionary *form;
|
||||
NSArray *paramNeeded;
|
||||
NSMutableDictionary *paramInjected, *ret;
|
||||
NSBundle *bundle;
|
||||
id classAction;
|
||||
Class clazz;
|
||||
|
||||
|
||||
pool = [[NSAutoreleasePool alloc] init];
|
||||
ASSIGN(context, theContext);
|
||||
|
||||
//Get the api action, check it
|
||||
action = [self _getActionFromUri: [theRequest uri]];
|
||||
if(!action)
|
||||
{
|
||||
error = [NSString stringWithFormat: @"No actions found for request to API: %@", [theRequest uri]];
|
||||
[self errorWithFormat: error];
|
||||
[self _sendAPIErrorResponse: theResponse withMessage: error withStatus: 400];
|
||||
RELEASE(context);
|
||||
RELEASE(pool);
|
||||
return nil;
|
||||
}
|
||||
|
||||
//Get the class for this action, check it
|
||||
bundle = [NSBundle bundleForClass: NSClassFromString(@"SOGoAPIProduct")];
|
||||
clazz = [bundle classNamed: action];
|
||||
if(!clazz)
|
||||
{
|
||||
error = [NSString stringWithFormat: @"No backend API found for action: %@", action];
|
||||
[self errorWithFormat: error];
|
||||
[self _sendAPIErrorResponse: theResponse withMessage: error withStatus: 400];
|
||||
RELEASE(context);
|
||||
RELEASE(pool);
|
||||
return nil;
|
||||
}
|
||||
|
||||
//try to instantiate the class
|
||||
NS_DURING
|
||||
{
|
||||
classAction = [[clazz alloc] init];
|
||||
}
|
||||
NS_HANDLER
|
||||
{
|
||||
error = [NSString stringWithFormat: @"Can't alloc and init class: %@", classAction];
|
||||
[self errorWithFormat: error];
|
||||
[self _sendAPIErrorResponse: theResponse withMessage: error withStatus: 500];
|
||||
RELEASE(context);
|
||||
RELEASE(pool);
|
||||
return nil;
|
||||
}
|
||||
NS_ENDHANDLER;
|
||||
|
||||
//Check method
|
||||
method = [theRequest method];
|
||||
if(![[classAction methodAllowed] containsObject: method])
|
||||
{
|
||||
error = [NSString stringWithFormat: @"Method %@ not allowed for action %@", method, action];
|
||||
[self errorWithFormat: error];
|
||||
[self _sendAPIErrorResponse: theResponse withMessage: error withStatus: 400];
|
||||
RELEASE(context);
|
||||
RELEASE(pool);
|
||||
return nil;
|
||||
}
|
||||
|
||||
|
||||
paramInjected = [NSMutableDictionary dictionary];
|
||||
//Check parameters
|
||||
if((paramNeeded = [classAction paramNeeded]) && [paramNeeded count] >= 1)
|
||||
{
|
||||
NSDictionary* formAndQuery = [theRequest formValues];
|
||||
for(NSString *param in paramNeeded)
|
||||
{
|
||||
id value;
|
||||
if((value = [formAndQuery objectForKey: param]))
|
||||
{
|
||||
NSString* trueValue;
|
||||
if ([value isKindOfClass: [NSArray class]])
|
||||
trueValue = [value lastObject];
|
||||
else
|
||||
trueValue = value;
|
||||
[paramInjected setObject: trueValue forKey: param];
|
||||
}
|
||||
else
|
||||
{
|
||||
error = [NSString stringWithFormat: @"Missing param %@ for action %@", param, action];
|
||||
[self errorWithFormat: error];
|
||||
[self _sendAPIErrorResponse: theResponse withMessage: error withStatus: 400];
|
||||
RELEASE(context);
|
||||
RELEASE(pool);
|
||||
return nil;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if([classAction needAuth])
|
||||
{
|
||||
if(debugOn)
|
||||
[self logWithFormat: @"Check auth for action %@", action];
|
||||
//check auth
|
||||
NSString *auth = [theRequest headerForKey: @"authorization"];
|
||||
if(auth)
|
||||
{
|
||||
NSDictionary* user;
|
||||
if([[auth lowercaseString] hasPrefix: @"basic"])
|
||||
{
|
||||
//basic auth
|
||||
user = [self _authBasicCheck: auth];
|
||||
}
|
||||
else if([[auth lowercaseString] hasPrefix: @"bearer"])
|
||||
{
|
||||
//openid auth, we may need to know the user-domain to know which openid server to fetch
|
||||
NSString *domain = [theRequest headerForKey: @"user-domain"];
|
||||
user = [self _authOpenId: auth withDomain: domain];
|
||||
}
|
||||
else
|
||||
{
|
||||
error = [NSString stringWithFormat: @"Authorization method incorrect: %@ for action %@", auth, action];
|
||||
[self errorWithFormat: error];
|
||||
[self _sendAPIErrorResponse: theResponse withMessage: error withStatus: 401];
|
||||
RELEASE(context);
|
||||
RELEASE(pool);
|
||||
return nil;
|
||||
}
|
||||
|
||||
//add current user in paramInjected
|
||||
if(user){
|
||||
if(debugOn)
|
||||
[self logWithFormat: @"User authenticated %@", user];
|
||||
[paramInjected setObject: user forKey: @"user"];
|
||||
}
|
||||
else
|
||||
{
|
||||
error = [NSString stringWithFormat: @"User wrong login or not found for action %@", action];
|
||||
[self errorWithFormat: error];
|
||||
[self _sendAPIErrorResponse: theResponse withMessage: error withStatus: 401];
|
||||
RELEASE(context);
|
||||
RELEASE(pool);
|
||||
return nil;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
error = [NSString stringWithFormat: @"No authorization header found for action %@", action];
|
||||
[self errorWithFormat: error];
|
||||
[self _sendAPIErrorResponse: theResponse withMessage: error withStatus: 401];
|
||||
RELEASE(context);
|
||||
RELEASE(pool);
|
||||
return nil;
|
||||
}
|
||||
}
|
||||
|
||||
//Execute action
|
||||
NS_DURING
|
||||
{
|
||||
ret = [classAction action: context withParam: paramInjected];
|
||||
}
|
||||
NS_HANDLER
|
||||
{
|
||||
error = [NSString stringWithFormat: @"Internal error during: %@", action];
|
||||
[self errorWithFormat: error];
|
||||
[self _sendAPIErrorResponse: theResponse withMessage: error withStatus: 500];
|
||||
RELEASE(context);
|
||||
RELEASE(pool);
|
||||
return nil;
|
||||
}
|
||||
NS_ENDHANDLER;
|
||||
|
||||
|
||||
//Make the response
|
||||
[theResponse setContent: [ret jsonRepresentation]];
|
||||
|
||||
RELEASE(context);
|
||||
RELEASE(pool);
|
||||
|
||||
return nil;
|
||||
}
|
||||
|
||||
@end
|
||||
@@ -0,0 +1,11 @@
|
||||
/*
|
||||
Copyright (C) todo...
|
||||
*/
|
||||
|
||||
#import <Foundation/NSObject.h>
|
||||
|
||||
@interface SOGoAPIProduct : NSObject
|
||||
@end
|
||||
|
||||
@implementation SOGoAPIProduct
|
||||
@end /* SOGoAPIProduct */
|
||||
@@ -0,0 +1,33 @@
|
||||
/*
|
||||
Copyright (C) 2004-2005 SKYRIX Software AG
|
||||
|
||||
This file is part of SOPE.
|
||||
|
||||
SOPE is free software; you can redistribute it and/or modify it under
|
||||
the terms of the GNU Lesser General Public License as published by the
|
||||
Free Software Foundation; either version 2, or (at your option) any
|
||||
later version.
|
||||
|
||||
SOPE 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 Lesser General Public
|
||||
License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with SOPE; see the file COPYING. If not, write to the
|
||||
Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
|
||||
02111-1307, USA.
|
||||
*/
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
#import <Foundation/NSObject.h>
|
||||
#import <Foundation/NSDictionary.h>
|
||||
#import <Foundation/NSArray.h>
|
||||
#import <SOGoAPI.h>
|
||||
|
||||
@class WOContext;
|
||||
|
||||
@interface SOGoAPIUserFolder : SOGoAPI
|
||||
- (NSArray *) methodAllowed;
|
||||
- (NSDictionary *) action: (WOContext*) ctx withParam: (NSDictionary *) param;
|
||||
@end
|
||||
@@ -0,0 +1,74 @@
|
||||
/*
|
||||
Copyright (C) todo...
|
||||
*/
|
||||
|
||||
#import <SOGoAPIUserFolder.h>
|
||||
|
||||
#import <GDLContentStore/GCSFolderManager.h>
|
||||
|
||||
@implementation SOGoAPIUserFolder
|
||||
|
||||
- (id) init
|
||||
{
|
||||
[super init];
|
||||
|
||||
return self;
|
||||
}
|
||||
|
||||
- (void) dealloc
|
||||
{
|
||||
[super dealloc];
|
||||
}
|
||||
|
||||
|
||||
- (NSDictionary *) action: (WOContext*) ctx withParam: (NSDictionary *) param
|
||||
{
|
||||
NSDictionary* result;
|
||||
NSArray *folders;
|
||||
NSMutableArray *cardavLinks, *caldavLinks;
|
||||
NSString *serverUrl, *basePath, *c_uid, *url;
|
||||
GCSFolderManager *fm;
|
||||
int max, i;
|
||||
|
||||
//Should be a user
|
||||
c_uid = [[[param objectForKey: @"user"] objectForKey: @"emails"] objectAtIndex: 0];
|
||||
|
||||
//fetch folders
|
||||
fm = [GCSFolderManager defaultFolderManager];
|
||||
basePath = [NSString stringWithFormat: @"/Users/%@", c_uid];
|
||||
folders = [fm listSubFoldersAtPath: basePath recursive: YES];
|
||||
|
||||
//Generate dav link
|
||||
max = [folders count];
|
||||
serverUrl = [[ctx serverURL] absoluteString];
|
||||
|
||||
cardavLinks = [NSMutableArray array];
|
||||
caldavLinks = [NSMutableArray array];
|
||||
serverUrl = [[ctx serverURL] absoluteString];
|
||||
for (i = 0; i < max; i++)
|
||||
{
|
||||
url = [NSString stringWithFormat: @"%@/SOGo/dav/%@/%@", serverUrl, c_uid, [folders objectAtIndex: i]];
|
||||
if([url rangeOfString:@"/Calendar/"].location == NSNotFound)
|
||||
{
|
||||
//Contacts
|
||||
[cardavLinks addObject: url];
|
||||
}
|
||||
else
|
||||
{
|
||||
//Calendar
|
||||
[caldavLinks addObject: url];
|
||||
}
|
||||
}
|
||||
|
||||
result = [[NSDictionary alloc] initWithObjectsAndKeys:
|
||||
c_uid, @"username",
|
||||
cardavLinks, @"contact",
|
||||
caldavLinks, @"calendar",
|
||||
nil];
|
||||
|
||||
[result autorelease];
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
@end /* SOGoAPIVersion */
|
||||
@@ -0,0 +1,33 @@
|
||||
/*
|
||||
Copyright (C) 2004-2005 SKYRIX Software AG
|
||||
|
||||
This file is part of SOPE.
|
||||
|
||||
SOPE is free software; you can redistribute it and/or modify it under
|
||||
the terms of the GNU Lesser General Public License as published by the
|
||||
Free Software Foundation; either version 2, or (at your option) any
|
||||
later version.
|
||||
|
||||
SOPE 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 Lesser General Public
|
||||
License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with SOPE; see the file COPYING. If not, write to the
|
||||
Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
|
||||
02111-1307, USA.
|
||||
*/
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
#import <Foundation/NSObject.h>
|
||||
#import <Foundation/NSDictionary.h>
|
||||
#import <Foundation/NSArray.h>
|
||||
#import <SOGoAPI.h>
|
||||
|
||||
@class WOContext;
|
||||
|
||||
@interface SOGoAPIVersion : SOGoAPI
|
||||
- (NSArray *) methodAllowed;
|
||||
- (NSDictionary *) action: (WOContext*) ctx withParam: (NSDictionary *) param;
|
||||
@end
|
||||
@@ -0,0 +1,42 @@
|
||||
/*
|
||||
Copyright (C) todo...
|
||||
*/
|
||||
|
||||
#import <SOGoAPIVersion.h>
|
||||
|
||||
|
||||
@implementation SOGoAPIVersion
|
||||
|
||||
- (id) init
|
||||
{
|
||||
[super init];
|
||||
|
||||
return self;
|
||||
}
|
||||
|
||||
- (void) dealloc
|
||||
{
|
||||
[super dealloc];
|
||||
}
|
||||
|
||||
- (BOOL) needAuth
|
||||
{
|
||||
return NO;
|
||||
}
|
||||
|
||||
- (NSDictionary *) action: (WOContext*) ctx withParam: (NSDictionary *) param
|
||||
{
|
||||
NSDictionary* result;
|
||||
|
||||
result = [[NSDictionary alloc] initWithObjectsAndKeys:
|
||||
[NSNumber numberWithInt:SOGO_MAJOR_VERSION], @"major",
|
||||
[NSNumber numberWithInt:SOGO_MINOR_VERSION], @"minor",
|
||||
[NSNumber numberWithInt:SOGO_PATCH_VERSION], @"patch",
|
||||
nil];
|
||||
|
||||
[result autorelease];
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
@end /* SOGoAPIVersion */
|
||||
@@ -0,0 +1,34 @@
|
||||
include ../config.make
|
||||
include $(GNUSTEP_MAKEFILES)/common.make
|
||||
include ../Version
|
||||
|
||||
NEEDS_GUI=no
|
||||
BUNDLE_EXTENSION = .SOGo
|
||||
BUNDLE_INSTALL_DIR = $(SOGO_LIBDIR)
|
||||
WOBUNDLE_EXTENSION = $(BUNDLE_EXTENSION)
|
||||
WOBUNDLE_INSTALL_DIR = $(BUNDLE_INSTALL_DIR)
|
||||
|
||||
# SYSTEM_LIB_DIR += -L/usr/local/lib -L/usr/lib
|
||||
|
||||
ADDITIONAL_INCLUDE_DIRS += \
|
||||
-I.. \
|
||||
-I../.. \
|
||||
-I../../SOPE
|
||||
|
||||
ADDITIONAL_LIB_DIRS += \
|
||||
-L../SoObjects/SOGo/SOGo.framework/Versions/Current/sogo \
|
||||
-L../SoObjects/SOGo/$(GNUSTEP_OBJ_DIR)/ \
|
||||
-L../SOPE/NGCards/$(GNUSTEP_OBJ_DIR)/ \
|
||||
-L/usr/local/lib \
|
||||
-Wl,-rpath,$(SOGO_SYSLIBDIR)/sogo
|
||||
|
||||
BUNDLE_LIBS += \
|
||||
-lSOGo \
|
||||
-lGDLContentStore \
|
||||
-lGDLAccess \
|
||||
-lNGObjWeb \
|
||||
-lNGCards -lNGMime -lNGLdap \
|
||||
-lNGStreams -lNGExtensions -lEOControl \
|
||||
-lDOM -lSaxObjC -lSBJson
|
||||
|
||||
ADDITIONAL_BUNDLE_LIBS += $(BUNDLE_LIBS)
|
||||
@@ -0,0 +1,31 @@
|
||||
{
|
||||
requires = ( MAIN, Appointments, Contacts, Mailer );
|
||||
|
||||
publicResources = ();
|
||||
|
||||
factories = {};
|
||||
|
||||
classes = {
|
||||
SOGoAPI = {
|
||||
protectedBy = "<public>";
|
||||
defaultRoles = {
|
||||
"View" = ( "Authenticated", "PublicUser" );
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
categories = {
|
||||
SOGoAPI = {
|
||||
slots = {
|
||||
};
|
||||
methods = {
|
||||
Version = {
|
||||
protectedBy = "View";
|
||||
pageName = "SOGoAPI";
|
||||
actionName = "sogoVersion";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
}
|
||||
+149
@@ -2,6 +2,155 @@
|
||||
|
||||
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.12.1](https://github.com/Alinto/sogo/compare/SOGo-5.12.0...SOGo-5.12.1) (2025-04-30)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **calendar:** Make the Jitsi meeting room prefix configurable ([4a68909](https://github.com/Alinto/sogo/commit/4a689090607bc6c4e6385202e9fdaef7308a94fe))
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **calendar:** Fix typo Jisti × Jitsi ([ab9f0c1](https://github.com/Alinto/sogo/commit/ab9f0c1bf1f8930b9cbbf592efe69c68654f35c2))
|
||||
* **calendar:** properly show the URL property in iCalendar ([eb7f551](https://github.com/Alinto/sogo/commit/eb7f551e88f2c6693354b6c3b617861d4b63a1bb))
|
||||
* **calendar:** put valarm at the end of vevent block to satisfy outlook.office.com which is too lazy to follow the spec ([148fab9](https://github.com/Alinto/sogo/commit/148fab9409abf703f56ae8ed701547f23d685711))
|
||||
* **db:** log an error if the table sogo_folder_info is malformed ([3616e56](https://github.com/Alinto/sogo/commit/3616e562894be63fcdb7007b5f172d99f5ff59eb))
|
||||
* **folder:** fix folders sorting for special folders ([1f8dc12](https://github.com/Alinto/sogo/commit/1f8dc1292924672489a4a1c76f557a9f0bc65662))
|
||||
* **iOS:** iOS 18.4 encodes caldav url and put %40 instead of @ for username. Fix that. ([9e431d0](https://github.com/Alinto/sogo/commit/9e431d08a273f519ff833b15189d2d3ebef4fc79))
|
||||
* **ldap:** update baseDN with correct domain if needed ([ca425e6](https://github.com/Alinto/sogo/commit/ca425e6752fd28d68e35cc4c1b7dd6f7b3c43ab4))
|
||||
* **sieve:** Correctly update default sieve filter for new users ([7c59e6b](https://github.com/Alinto/sogo/commit/7c59e6b3bf4684c2884e5f0bd39009719e5ba1b9))
|
||||
* **smtp:** fix string type ([788ece4](https://github.com/Alinto/sogo/commit/788ece452b80a0270169178d5e596972797d0906))
|
||||
* **tnef:** add protection against malformed winmail.dat ([7c6b674](https://github.com/Alinto/sogo/commit/7c6b6743e017effcc0078c9ebc026d628f4b71af))
|
||||
* **typo:** Fix typo 'attachements' ([#367](https://bugs.sogo.nu/view.php?id=367)) ([4ec3d20](https://github.com/Alinto/sogo/commit/4ec3d2091a8f5c26b4c4463b4fa9c89ef26f63ba))
|
||||
* **ui:** Change angular material to fix issues with Safari iOS 18+ ([068f1f3](https://github.com/Alinto/sogo/commit/068f1f315498c9bc5a0513e62c7a3fd250d974ad))
|
||||
* **ui:** Change angular material to fix issues with Safari iOS 18+ ([07c7528](https://github.com/Alinto/sogo/commit/07c75280bb06816562b1fb5747acf8efa39cb4a0))
|
||||
|
||||
|
||||
### Localization
|
||||
|
||||
* **ar:** Update Arabic translations ([5c48745](https://github.com/Alinto/sogo/commit/5c48745c94380bfa02f36c751b0389e06d676493))
|
||||
* **bg_BG:** Update Bulgarian translations ([1d0b6a6](https://github.com/Alinto/sogo/commit/1d0b6a622c30b8f55ac17db0d131992a733d356b))
|
||||
* **bs_BA:** Update Bosnian translations ([ade923d](https://github.com/Alinto/sogo/commit/ade923d21d409a9bffca609826a630480ea561dc))
|
||||
* **ca:** Update Catalan translations ([8c4f56c](https://github.com/Alinto/sogo/commit/8c4f56c971002c4e0bb9764c0d7c24fc5cfd3a92))
|
||||
* **cy:** Update Welsh translations ([54debcf](https://github.com/Alinto/sogo/commit/54debcf47d5896b58917705ff85bada391a26919))
|
||||
* **es_AR:** Update SpanishArgentina translations ([4b397f6](https://github.com/Alinto/sogo/commit/4b397f68f51f00945cab57bdec77ab5d68e68753))
|
||||
* **eu:** Update Basque translations ([54f8af3](https://github.com/Alinto/sogo/commit/54f8af30cefe4024d6697a35de25fb1d7896785e))
|
||||
* **fi:** Update Finnish translations ([aae9e60](https://github.com/Alinto/sogo/commit/aae9e6065fda25803c37a43ca2e067df88aba166))
|
||||
* **he:** Update Hebrew translations ([f4adf62](https://github.com/Alinto/sogo/commit/f4adf6267d271d91a75d2176424e98862662e9f8))
|
||||
* **hr_HR:** Update Croatian translations ([961702d](https://github.com/Alinto/sogo/commit/961702de6706531817818063a4a96b40862aa05d))
|
||||
* **hu:** Update Hungarian translations ([c31b3f4](https://github.com/Alinto/sogo/commit/c31b3f4592c6564c4f372cf4e63c4be3564c75bf))
|
||||
* **id_ID:** Update Indonesian translations ([5f6168d](https://github.com/Alinto/sogo/commit/5f6168d5365450e40f6e289be694fab5585ba0cc))
|
||||
* **is:** Update Icelandic translations ([c792ddb](https://github.com/Alinto/sogo/commit/c792ddb601830896cd936e21bb69c17f8d11e705))
|
||||
* **it:** Update Italian translations ([d7fc5a5](https://github.com/Alinto/sogo/commit/d7fc5a52b8284594a6be4050b6c56cffc0fea472))
|
||||
* **ja:** Update Japanese translations ([264f94b](https://github.com/Alinto/sogo/commit/264f94b64d5ea1147d45b7040fc5c3c0bc1d368b))
|
||||
* **kk:** Update Kazakh translations ([1bf955d](https://github.com/Alinto/sogo/commit/1bf955d1930caf920c34be8ffb3e46b47eb0f232))
|
||||
* **lt:** Update Lithuanian translations ([bbc0491](https://github.com/Alinto/sogo/commit/bbc04913b9a3219cd31cfcfc4b0ec79fbee76713))
|
||||
* **lv:** Update Latvian translations ([1dcf475](https://github.com/Alinto/sogo/commit/1dcf475d3b0394474950eb73169fcfeab55305cf))
|
||||
* **mk_MK:** Update Macedonian translations ([1ba83ec](https://github.com/Alinto/sogo/commit/1ba83ec57d7e65f6f28542a89222ec58570d5cef))
|
||||
* **nl:** Update Dutch translations ([20e7c89](https://github.com/Alinto/sogo/commit/20e7c890dea0a52925b18be2a5ae09ccd4c23dd9))
|
||||
* **nn_NO:** Update NorwegianNynorsk translations ([828f85c](https://github.com/Alinto/sogo/commit/828f85c7204c86951db4654f2d254a1361ad0d98))
|
||||
* **ro_RO:** Update Romanian translations ([532b8dc](https://github.com/Alinto/sogo/commit/532b8dc2028b1a1db26566df7baa964daf9bd6b7))
|
||||
* **sk:** Update Slovak translations ([d3e5a00](https://github.com/Alinto/sogo/commit/d3e5a004dbdd80c6bba405a34dcbbb28819a0fa7))
|
||||
* **sl_SI:** Update Slovenian translations ([fdb88ab](https://github.com/Alinto/sogo/commit/fdb88abc1251a8763e4c8e5dacf38e3191180fba))
|
||||
* **sr_ME@latin:** Update Montenegrin translations ([aa6575c](https://github.com/Alinto/sogo/commit/aa6575c42b54b27ca9510ea0f02426a7657ed519))
|
||||
* **sr@latin:** Update SerbianLatin translations ([9f4440b](https://github.com/Alinto/sogo/commit/9f4440b07f142cc0c68561b4413e56fe5c5322ff))
|
||||
* **sr:** Update Serbian translations ([3e61a52](https://github.com/Alinto/sogo/commit/3e61a52673092c38ce2f7a32ebd855afab61782a))
|
||||
* **sv:** Update Swedish translations ([6d8d4f7](https://github.com/Alinto/sogo/commit/6d8d4f7c39fb1c1e9373a9268589b8e6546617ed))
|
||||
* **zh_CN:** Update ChineseChina translations ([bbd17f5](https://github.com/Alinto/sogo/commit/bbd17f55310e5b2e163eeaaf2cb259ae042f8557))
|
||||
* **zh_TW:** Update ChineseTaiwan translations ([3ac01f7](https://github.com/Alinto/sogo/commit/3ac01f70516a25f6db65ffa5c03d6d5a833479fe))
|
||||
|
||||
## [5.12.0](https://github.com/Alinto/sogo/compare/SOGo-5.11.2...SOGo-5.12.0) (2025-03-24)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **calendar:** Can defined the Jitsi server url for meeting created ([9f4f48a](https://github.com/Alinto/sogo/commit/9f4f48a44fe97685a5757ec6cec1de802454ccd7))
|
||||
* **calendar:** Can now create Jitsi link when making event ([42c227b](https://github.com/Alinto/sogo/commit/42c227beca64066018d48e29e3d2594f9b99dcc0))
|
||||
* **core:** Check password strength on login (SQL Source). Closes [#6025](https://bugs.sogo.nu/view.php?id=6025). ([178b1a3](https://github.com/Alinto/sogo/commit/178b1a3a0e2e549daea4c229cdf24980e76158d2))
|
||||
* **dev:** add devcontainer config to test and dev on sogo ([8904350](https://github.com/Alinto/sogo/commit/8904350b711cf4ac21da0e1e8af6f33bc8a1df1a))
|
||||
* **mail:** Deletion of mail older than x. Closes [#6023](https://bugs.sogo.nu/view.php?id=6023). ([6f86506](https://github.com/Alinto/sogo/commit/6f86506b28c79610b58e67c78c53548afecf979e) [ea427ea](https://github.com/Alinto/sogo/commit/ea427ea41af2275da249180eaf30377d76dd3727))
|
||||
* **openID:** add OpenId SSO config ([458d39d](https://github.com/Alinto/sogo/commit/458d39d48a23390cf81350f53804565b8dc2bdf2) [c323488](https://github.com/Alinto/sogo/commit/c3234882eb0dc2a8b7a7fd1eed8f109f6e0b8f24))
|
||||
|
||||
### Enhancement
|
||||
* **mail:** Add move to icon on the mail view. Closes [#6028](https://bugs.sogo.nu/view.php?id=6028). ([f65ab9b](https://github.com/Alinto/sogo/commit/f65ab9b43a829eebfa22d7332eb18100d55e61b4))
|
||||
* **mail:** Add sort by recipient instead of from in sent folder. Change subject_or_to in sent folder for search instead of subject_or_from. Closes [#6030](https://bugs.sogo.nu/view.php?id=6030). ([2258d5c](https://github.com/Alinto/sogo/commit/2258d5cd60e3cddd400da305c38f928e065f6a5c))
|
||||
* **mail:** Add 'Return-Receipt-To' header for mail receipt ([b3c77a0](https://github.com/Alinto/sogo/commit/b3c77a0e004409a5a55ffe02a171192a13d9e3dc))
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **addressBook:** fix [#2](https://bugs.sogo.nu/view.php?id=2)f9c2cf show email if no display name for contact in list ([7328623](https://github.com/Alinto/sogo/commit/7328623e1172823cd15ded8fa7c42da393b1fcb5)), closes [#2f9c2](https://bugs.sogo.nu/view.php?id=2f9c2)
|
||||
* **auth:** add missing method to auth class ([d1d9024](https://github.com/Alinto/sogo/commit/d1d9024eca8cc0de2674815788f87342463df5ee))
|
||||
* **calendar:** Ensure organizers are properly removed from attendee's calendars. Fix issue where organizers were also set as attendees. Removed organizer in attendees list. ([da32b3f](https://github.com/Alinto/sogo/commit/da32b3f86d9cb1e730f5fab27d6767498d46167d) [c90e2b0](https://github.com/Alinto/sogo/commit/c90e2b0501ed40693ce2fa43cafbbf93a0863468))
|
||||
* **calendar:** fix commit f1257088 ([0186398](https://github.com/Alinto/sogo/commit/01863987dd1ecb14b9f86b97cab02d9f1ea6db78))
|
||||
* **calendar:** Fix issue where EXDATE removes modified occurence. The behavior is now identical to G Agenda. This fix may reduce the 'missing exception error'. ([5bab727](https://github.com/Alinto/sogo/commit/5bab72726aa8b08baaa189310ede27cf9747be5e))
|
||||
* **calendar:** Fix SOGoDAVCalendarStartTimeLimit parameter. Events are retrieved when initial sync is done. ([c05b331](https://github.com/Alinto/sogo/commit/c05b331ac02520c294443bbb2ceda5e69b1667d0))
|
||||
* **calendar:** if rrule is infinite don't count rdates as last dates ([e44bc1f](https://github.com/Alinto/sogo/commit/e44bc1fc91588976c4399724c034d3bae386119f))
|
||||
* **calendar:** In some case, the startTime was not properly set ([169a0c6](https://github.com/Alinto/sogo/commit/169a0c61251a658e62f83a8f24a07e447d1dbcca))
|
||||
* **calendar:** prevent to return the same user twice in ldap groups ([f125708](https://github.com/Alinto/sogo/commit/f1257088f2b0513219309286190e5671e7dec624))
|
||||
* **calendar:** properly store the vevent is the correct order for reccurence and reccurence-id ([d15f0ee](https://github.com/Alinto/sogo/commit/d15f0ee80498231fcc3cd1d1a118f46f33ea4d36))
|
||||
* **contacts:** Fix empty chip in contact group when c_cn is not populated ([2f9c2cf](https://github.com/Alinto/sogo/commit/2f9c2cf4da35b67ec5d9f4b7e887614608c8018b))
|
||||
* **core:** Specify application name in WORequest to avoid computing app name in SOPE. Sometimes the app name is wrongly defined due to invalid URL calls. ([253d14c](https://github.com/Alinto/sogo/commit/253d14cfce7552615bbf1e0cf9b242bcd99552b8))
|
||||
* **htmlViewer:** if the the tag img is not a url but a base64 image, keep it in the preview ([f8ff98b](https://github.com/Alinto/sogo/commit/f8ff98b657b61408208f7a14632bb323dec32a49))
|
||||
* **mail:** Correct attachment handling when creating emails from templates ([617c1bb](https://github.com/Alinto/sogo/commit/617c1bbc64d49355bade711a7dc7523bf7450a14))
|
||||
* **mail:** Fix assertion when failed to decode base64 mime body mail part ([0a828a7](https://github.com/Alinto/sogo/commit/0a828a739e10299605eaff72ffaf90a1908b54e8))
|
||||
* **mail:** Fix ckeditor issue where the font-size disappear after mail sent. Use font-size instead of css class. ([70f72eb](https://github.com/Alinto/sogo/commit/70f72eb92f0f14501758a5660391aa43862e98e7))
|
||||
* **mail:** Fix ckeditor margin for to make difference between line breaks and paragraph. Fixes [#6056](https://bugs.sogo.nu/view.php?id=6056). ([a09f4d8](https://github.com/Alinto/sogo/commit/a09f4d8f498932edee92976ed24b271ed3cd5204))
|
||||
* **mail:** Fix error when searching string with quote ([b40d777](https://github.com/Alinto/sogo/commit/b40d777a86104d08dbd8168b8e12c198a3d4321a))
|
||||
* **mail:** Fix issue where unread counter is invalid when whanging folder. Fixes [#6064](https://bugs.sogo.nu/view.php?id=6064). ([0364f7f](https://github.com/Alinto/sogo/commit/0364f7f2a426041d010ad664172e6206c4bbfd6f))
|
||||
* **mail:** Fix mail sub folders sorting. Fixes [#6058](https://bugs.sogo.nu/view.php?id=6058). ([395a01e](https://github.com/Alinto/sogo/commit/395a01ed5204c6c138e7d855370dd8acf902e6b4))
|
||||
* **totp:** correctly send a string and leading zero ([5cba10c](https://github.com/Alinto/sogo/commit/5cba10ccff81ccee12e03472c50f43c713d5abc4))
|
||||
* **users:** don't look up for users when they change language on root page ([29e00f3](https://github.com/Alinto/sogo/commit/29e00f3e9eb92581e0fe5d4193a534f04a1d2b1a))
|
||||
* **users:** try to always use the user domain in the basDN with %d ([78655ae](https://github.com/Alinto/sogo/commit/78655ae1270534339d1ea9d1860afe7699bfd98e))
|
||||
* **users:** when using multi-domains configuration, only request the apopriate usersources. ([beb0d9c](https://github.com/Alinto/sogo/commit/beb0d9cb1bfbcac12650d3a77835d86c34245985))
|
||||
|
||||
|
||||
### Localization
|
||||
|
||||
* **ar:** Update Arabic translations ([6de11e5](https://github.com/Alinto/sogo/commit/6de11e58ee9607b1d4884bca0035d09e87f43b47))
|
||||
* **bg_BG:** Update Bulgarian translations ([60f2f1b](https://github.com/Alinto/sogo/commit/60f2f1b9fc2e0c4e32da86615f074336fce825e5))
|
||||
* **bs_BA:** Update Bosnian translations ([5c2020d](https://github.com/Alinto/sogo/commit/5c2020dc3e184d9c9f6a674c8b0f51323d01d509))
|
||||
* **ca:** Update Catalan translations ([83bdc14](https://github.com/Alinto/sogo/commit/83bdc145f9498201b6f3319af30adc1f5e86f4f9))
|
||||
* **cs:** Update Czech translations ([ac6abb6](https://github.com/Alinto/sogo/commit/ac6abb66ec79c2e5ee4d083d80effdebc081248d))
|
||||
* **cy:** Update Welsh translations ([7c36a65](https://github.com/Alinto/sogo/commit/7c36a65b7c1506d4dfe89869e9e810ea2928ebe4))
|
||||
* **da_DK:** Update Danish translations ([2912e07](https://github.com/Alinto/sogo/commit/2912e07e0b32ed5c62ed4aae3d07dcc9a364e00b))
|
||||
* **de:** Update German translations ([1f379d5](https://github.com/Alinto/sogo/commit/1f379d51fd8ca51d3fc3f9e2fe138e9cde9c8f92))
|
||||
* **es_AR:** Update SpanishArgentina translations ([f273d3e](https://github.com/Alinto/sogo/commit/f273d3e513e4134389a81658e44131e00a4c0e17))
|
||||
* **es_ES:** Update SpanishSpain translations ([da15327](https://github.com/Alinto/sogo/commit/da15327c92a7cfbbc97dd1b58a2e10180035d99e))
|
||||
* **eu:** Update Basque translations ([0dccf10](https://github.com/Alinto/sogo/commit/0dccf105051fcd9631629419888397453804a1a2))
|
||||
* **fi:** Update Finnish translations ([e067770](https://github.com/Alinto/sogo/commit/e0677705aa9c5376ad3f3e61761847a2e562e042))
|
||||
* **fr:** Update French translations ([f6d18c2](https://github.com/Alinto/sogo/commit/f6d18c208e52a8fef1d2f7563442069d54f68a8a))
|
||||
* **gl:** Update Galician translations ([a98d4b9](https://github.com/Alinto/sogo/commit/a98d4b99448e55952a8f87c9f2c976e846ed9790))
|
||||
* **he:** Update Hebrew translations ([ef6f53f](https://github.com/Alinto/sogo/commit/ef6f53f48cbc251b212d185ad63c2298b6a73698))
|
||||
* **hr_HR:** Update Croatian translations ([6bb9796](https://github.com/Alinto/sogo/commit/6bb97965500786fc89327fd5ec0127c493c4d2c0))
|
||||
* **hu:** Update Hungarian translations ([51cf90d](https://github.com/Alinto/sogo/commit/51cf90d62067ec1b62f77236974f90abd582eb5c))
|
||||
* **id_ID:** Update Indonesian translations ([7b0319d](https://github.com/Alinto/sogo/commit/7b0319d616c4ca3915f871b7ab39d38517f5445d))
|
||||
* **is:** Update Icelandic translations ([0f2faec](https://github.com/Alinto/sogo/commit/0f2faec7d4a00b1db4b1b4a4dbadc8f0050718d4))
|
||||
* **it:** Update Italian translations ([4d5cf31](https://github.com/Alinto/sogo/commit/4d5cf314b5f95608193b521f77a203757784e354))
|
||||
* **ja:** Update Japanese translations ([4c09ebf](https://github.com/Alinto/sogo/commit/4c09ebfb6ed5124f335c5801f6f83d0521db1643))
|
||||
* **kk:** Update Kazakh translations ([7617db7](https://github.com/Alinto/sogo/commit/7617db7383d5d5fc8f0a6cfe44ede6b7c6262c66))
|
||||
* **lt:** Update Lithuanian translations ([2bf0780](https://github.com/Alinto/sogo/commit/2bf0780942fc4a2d43d50ce03338cd31cd31769e))
|
||||
* **lv:** Update Latvian translations ([4367ca5](https://github.com/Alinto/sogo/commit/4367ca5247d85e1abf60f95df716a5ad7627763d))
|
||||
* **mk_MK:** Update Macedonian translations ([d43f337](https://github.com/Alinto/sogo/commit/d43f3378a5098c1c6bee02cbf208335ab03783ff))
|
||||
* **nb_NO:** Update NorwegianBokmal translations ([39fa4fc](https://github.com/Alinto/sogo/commit/39fa4fc38fa5515b3ae01d03d9714ef55978e4a2))
|
||||
* **nl:** Update Dutch translations ([f110498](https://github.com/Alinto/sogo/commit/f110498d3f981024b4bef2c142477a6ba94cdef0))
|
||||
* **nn_NO:** Update NorwegianNynorsk translations ([d23bb12](https://github.com/Alinto/sogo/commit/d23bb125a3d3eba5fe6ba96c289a032bd0955577))
|
||||
* **pl:** Update Polish translations ([65f7b25](https://github.com/Alinto/sogo/commit/65f7b2552a640a32c466174e407064f25f2e24fb))
|
||||
* **pt_BR:** Update BrazilianPortuguese translations ([0bc20b1](https://github.com/Alinto/sogo/commit/0bc20b1b791969eb146286bb6814bc1be7aa50e3))
|
||||
* **pt:** Update Portuguese translations ([8140643](https://github.com/Alinto/sogo/commit/81406434d66b04c0098259bda890585ecdbacb79))
|
||||
* **ro_RO:** Update Romanian translations ([4438a2e](https://github.com/Alinto/sogo/commit/4438a2e647edd63abe01ea842259b3fd0f8e0682))
|
||||
* **ru:** Update Russian translations ([80abd1d](https://github.com/Alinto/sogo/commit/80abd1d896480aeb7f43b2b4abf1da4b433d561a))
|
||||
* **sk:** Update Slovak translations ([5753a52](https://github.com/Alinto/sogo/commit/5753a52ab4726662dcff37be8002441d6031bfca))
|
||||
* **sl_SI:** Update Slovenian translations ([9a3a06c](https://github.com/Alinto/sogo/commit/9a3a06c957df7221b1860cd3909bf6caa8bc74c3))
|
||||
* **sr_ME@latin:** Update Montenegrin translations ([ae4d6a0](https://github.com/Alinto/sogo/commit/ae4d6a07f3079ca28e1e8ff5655e2c2156a90a09))
|
||||
* **sr@latin:** Update SerbianLatin translations ([b86f594](https://github.com/Alinto/sogo/commit/b86f59411a8a31933b72da39001f845dd00881d8))
|
||||
* **sr:** Update Serbian translations ([20d6b98](https://github.com/Alinto/sogo/commit/20d6b98f07e6ead91137ecad761ea86393e3f6b8))
|
||||
* **sv:** Update Swedish translations ([397d0ee](https://github.com/Alinto/sogo/commit/397d0ee5fc892bb616187e2b3aa91d5ea5a9f4b3))
|
||||
* **tr_TR:** Update TurkishTurkey translations ([a860101](https://github.com/Alinto/sogo/commit/a8601010030bc4dcad405435310cef546fa16297))
|
||||
* **uk:** Update Ukrainian translations ([52ae03d](https://github.com/Alinto/sogo/commit/52ae03d0649eec6915e995896f1f04e4b69214a9))
|
||||
* **zh_CN:** Update ChineseChina translations ([d72cc8f](https://github.com/Alinto/sogo/commit/d72cc8fdef7661ff084a1bef19115a47cf6298c2))
|
||||
* **zh_TW:** Update ChineseTaiwan translations ([7d8b8a4](https://github.com/Alinto/sogo/commit/7d8b8a4ba3470da14f18a4129fcdd23775cd1676))
|
||||
|
||||
### [5.11.2](https://github.com/Alinto/sogo/compare/SOGo-5.11.1...SOGo-5.11.2) (2024-10-15)
|
||||
|
||||
|
||||
|
||||
@@ -490,6 +490,12 @@ the jitsi server used for creating the meeting link.
|
||||
|
||||
Defaults to `https://meet.jit.si` when unset.
|
||||
|
||||
|D |SOGoCalendarJitsiRoomPrefix
|
||||
|Only used if SOGoCalendarEnableJitsiLink is set to YES. The string for
|
||||
the Jitsi room prefix used for creating the meeting link.
|
||||
|
||||
Defaults to `SOGo_meeting/` 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
|
||||
@@ -828,8 +834,6 @@ Obiously, if your users can connect without specifying a domain, let this parame
|
||||
|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`.
|
||||
@@ -1608,7 +1612,7 @@ 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.
|
||||
the others applicaitons as well. The openid server must have a end_session_endpoint.
|
||||
|
||||
Defaults to `NO` when unset.
|
||||
|=======================================================================
|
||||
@@ -2752,7 +2756,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 attachements for inline images if set to `YES`. Default value is `NO`.
|
||||
|Hide attachments for inline images if set to `YES`. Default value is `NO`.
|
||||
|
||||
|
||||
|U |SOGoMailCustomFullName
|
||||
|
||||
@@ -9,6 +9,7 @@ SUBPROJECTS = \
|
||||
SoObjects \
|
||||
Main \
|
||||
UI \
|
||||
API \
|
||||
Tools \
|
||||
Tests/Unit \
|
||||
|
||||
|
||||
+14
-3
@@ -383,7 +383,12 @@ static BOOL debugLeaks;
|
||||
if([login isEqualToString: @"changeLanguage"])
|
||||
user = nil;
|
||||
else
|
||||
{
|
||||
//Here the user is expected to be name or name@domain.com
|
||||
//However iOS 18.4 sanitize the caldav url and put %40 instead of @
|
||||
login = [login stringByReplacingOccurrencesOfString: @"%40" withString: @"@"];
|
||||
user = [SOGoUser userWithLogin: login roles: nil];
|
||||
}
|
||||
if (user)
|
||||
userFolder = [$(@"SOGoUserFolder") objectWithName: login
|
||||
inContainer: self];
|
||||
@@ -412,7 +417,7 @@ static BOOL debugLeaks;
|
||||
{
|
||||
id obj;
|
||||
WORequest *request;
|
||||
BOOL isDAVRequest;
|
||||
BOOL isDAVRequest, isAPIRequest;
|
||||
SOGoSystemDefaults *sd;
|
||||
|
||||
/* put locale info into the context in case it's not there */
|
||||
@@ -420,8 +425,14 @@ static BOOL debugLeaks;
|
||||
|
||||
sd = [SOGoSystemDefaults sharedSystemDefaults];
|
||||
request = [_ctx request];
|
||||
isAPIRequest = [[request requestHandlerKey] isEqualToString:@"SOGoAPI"];
|
||||
isDAVRequest = [[request requestHandlerKey] isEqualToString:@"dav"];
|
||||
if (isDAVRequest || [sd isWebAccessEnabled])
|
||||
if(isAPIRequest && ![_key isEqualToString:@"SOGo"] && ![_key isEqualToString:@"SOGoAPI"])
|
||||
{
|
||||
//The request will be handle by the API Dispatcher
|
||||
obj = nil;
|
||||
}
|
||||
else if (isDAVRequest || [sd isWebAccessEnabled])
|
||||
{
|
||||
if (isDAVRequest)
|
||||
{
|
||||
@@ -451,7 +462,7 @@ static BOOL debugLeaks;
|
||||
{
|
||||
obj = [self lookupUser: _key inContext: _ctx];
|
||||
if (!obj && ![_key isEqualToString: @"public"])
|
||||
obj = [self lookupUser: @"anonymous" inContext: _ctx];
|
||||
obj = [self lookupUser: @"anonymous" inContext: _ctx];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -218,7 +218,7 @@
|
||||
@" 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_access_token_expires_in INT4 NULL,"
|
||||
@" c_refresh_token_expires_in INT4 NULL)");
|
||||
|
||||
return [NSString stringWithFormat: sqlFolderFormat, tableName];
|
||||
@@ -379,7 +379,7 @@
|
||||
@" 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_access_token_expires_in INT4 NULL,"
|
||||
@" c_refresh_token_expires_in INT4 NULL)");
|
||||
|
||||
return [NSString stringWithFormat: sqlFolderFormat, tableName];
|
||||
@@ -540,7 +540,7 @@
|
||||
@" 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_access_token_expires_in INTEGER NULL,"
|
||||
@" c_refresh_token_expires_in INTEGER NULL)");
|
||||
|
||||
return [NSString stringWithFormat: sqlFolderFormat, tableName];
|
||||
|
||||
@@ -3,7 +3,7 @@ PRODID:-//Alinto//NONSGML IANA 2024b//EN
|
||||
VERSION:2.0
|
||||
BEGIN:VTIMEZONE
|
||||
TZID:Africa/Abidjan
|
||||
LAST-MODIFIED:20241008T100856Z
|
||||
LAST-MODIFIED:20250324T091428Z
|
||||
X-LIC-LOCATION:Africa/Abidjan
|
||||
BEGIN:STANDARD
|
||||
TZNAME:GMT
|
||||
|
||||
@@ -3,7 +3,7 @@ PRODID:-//Alinto//NONSGML IANA 2024b//EN
|
||||
VERSION:2.0
|
||||
BEGIN:VTIMEZONE
|
||||
TZID:Africa/Algiers
|
||||
LAST-MODIFIED:20241008T100856Z
|
||||
LAST-MODIFIED:20250324T091428Z
|
||||
X-LIC-LOCATION:Africa/Algiers
|
||||
BEGIN:STANDARD
|
||||
TZNAME:CET
|
||||
|
||||
@@ -3,7 +3,7 @@ PRODID:-//Alinto//NONSGML IANA 2024b//EN
|
||||
VERSION:2.0
|
||||
BEGIN:VTIMEZONE
|
||||
TZID:Africa/Bissau
|
||||
LAST-MODIFIED:20241008T100856Z
|
||||
LAST-MODIFIED:20250324T091428Z
|
||||
X-LIC-LOCATION:Africa/Bissau
|
||||
BEGIN:STANDARD
|
||||
TZNAME:GMT
|
||||
|
||||
@@ -3,7 +3,7 @@ PRODID:-//Alinto//NONSGML IANA 2024b//EN
|
||||
VERSION:2.0
|
||||
BEGIN:VTIMEZONE
|
||||
TZID:Africa/Cairo
|
||||
LAST-MODIFIED:20241008T100856Z
|
||||
LAST-MODIFIED:20250324T091428Z
|
||||
X-LIC-LOCATION:Africa/Cairo
|
||||
BEGIN:DAYLIGHT
|
||||
TZNAME:EEST
|
||||
|
||||
@@ -4,7 +4,7 @@ VERSION:2.0
|
||||
BEGIN:VTIMEZONE
|
||||
TZID:Africa/Casablanca
|
||||
TZUNTIL:20870511T020001Z
|
||||
LAST-MODIFIED:20241008T100856Z
|
||||
LAST-MODIFIED:20250324T091428Z
|
||||
X-LIC-LOCATION:Africa/Casablanca
|
||||
BEGIN:STANDARD
|
||||
TZNAME:%z
|
||||
|
||||
@@ -3,7 +3,7 @@ PRODID:-//Alinto//NONSGML IANA 2024b//EN
|
||||
VERSION:2.0
|
||||
BEGIN:VTIMEZONE
|
||||
TZID:Africa/Ceuta
|
||||
LAST-MODIFIED:20241008T100856Z
|
||||
LAST-MODIFIED:20250324T091428Z
|
||||
X-LIC-LOCATION:Africa/Ceuta
|
||||
BEGIN:DAYLIGHT
|
||||
TZNAME:CEST
|
||||
|
||||
@@ -4,7 +4,7 @@ VERSION:2.0
|
||||
BEGIN:VTIMEZONE
|
||||
TZID:Africa/El_Aaiun
|
||||
TZUNTIL:20870511T020001Z
|
||||
LAST-MODIFIED:20241008T100856Z
|
||||
LAST-MODIFIED:20250324T091428Z
|
||||
X-LIC-LOCATION:Africa/El_Aaiun
|
||||
BEGIN:STANDARD
|
||||
TZNAME:%z
|
||||
|
||||
@@ -3,7 +3,7 @@ PRODID:-//Alinto//NONSGML IANA 2024b//EN
|
||||
VERSION:2.0
|
||||
BEGIN:VTIMEZONE
|
||||
TZID:Africa/Johannesburg
|
||||
LAST-MODIFIED:20241008T100856Z
|
||||
LAST-MODIFIED:20250324T091428Z
|
||||
X-LIC-LOCATION:Africa/Johannesburg
|
||||
BEGIN:STANDARD
|
||||
TZNAME:SAST
|
||||
|
||||
@@ -3,7 +3,7 @@ PRODID:-//Alinto//NONSGML IANA 2024b//EN
|
||||
VERSION:2.0
|
||||
BEGIN:VTIMEZONE
|
||||
TZID:Africa/Juba
|
||||
LAST-MODIFIED:20241008T100856Z
|
||||
LAST-MODIFIED:20250324T091428Z
|
||||
X-LIC-LOCATION:Africa/Juba
|
||||
BEGIN:STANDARD
|
||||
TZNAME:CAT
|
||||
|
||||
@@ -3,7 +3,7 @@ PRODID:-//Alinto//NONSGML IANA 2024b//EN
|
||||
VERSION:2.0
|
||||
BEGIN:VTIMEZONE
|
||||
TZID:Africa/Khartoum
|
||||
LAST-MODIFIED:20241008T100856Z
|
||||
LAST-MODIFIED:20250324T091428Z
|
||||
X-LIC-LOCATION:Africa/Khartoum
|
||||
BEGIN:STANDARD
|
||||
TZNAME:CAT
|
||||
|
||||
@@ -3,7 +3,7 @@ PRODID:-//Alinto//NONSGML IANA 2024b//EN
|
||||
VERSION:2.0
|
||||
BEGIN:VTIMEZONE
|
||||
TZID:Africa/Lagos
|
||||
LAST-MODIFIED:20241008T100856Z
|
||||
LAST-MODIFIED:20250324T091428Z
|
||||
X-LIC-LOCATION:Africa/Lagos
|
||||
BEGIN:STANDARD
|
||||
TZNAME:WAT
|
||||
|
||||
@@ -3,7 +3,7 @@ PRODID:-//Alinto//NONSGML IANA 2024b//EN
|
||||
VERSION:2.0
|
||||
BEGIN:VTIMEZONE
|
||||
TZID:Africa/Maputo
|
||||
LAST-MODIFIED:20241008T100856Z
|
||||
LAST-MODIFIED:20250324T091428Z
|
||||
X-LIC-LOCATION:Africa/Maputo
|
||||
BEGIN:STANDARD
|
||||
TZNAME:CAT
|
||||
|
||||
@@ -3,7 +3,7 @@ PRODID:-//Alinto//NONSGML IANA 2024b//EN
|
||||
VERSION:2.0
|
||||
BEGIN:VTIMEZONE
|
||||
TZID:Africa/Monrovia
|
||||
LAST-MODIFIED:20241008T100856Z
|
||||
LAST-MODIFIED:20250324T091428Z
|
||||
X-LIC-LOCATION:Africa/Monrovia
|
||||
BEGIN:STANDARD
|
||||
TZNAME:GMT
|
||||
|
||||
@@ -3,7 +3,7 @@ PRODID:-//Alinto//NONSGML IANA 2024b//EN
|
||||
VERSION:2.0
|
||||
BEGIN:VTIMEZONE
|
||||
TZID:Africa/Nairobi
|
||||
LAST-MODIFIED:20241008T100856Z
|
||||
LAST-MODIFIED:20250324T091428Z
|
||||
X-LIC-LOCATION:Africa/Nairobi
|
||||
BEGIN:STANDARD
|
||||
TZNAME:EAT
|
||||
|
||||
@@ -3,7 +3,7 @@ PRODID:-//Alinto//NONSGML IANA 2024b//EN
|
||||
VERSION:2.0
|
||||
BEGIN:VTIMEZONE
|
||||
TZID:Africa/Ndjamena
|
||||
LAST-MODIFIED:20241008T100856Z
|
||||
LAST-MODIFIED:20250324T091428Z
|
||||
X-LIC-LOCATION:Africa/Ndjamena
|
||||
BEGIN:STANDARD
|
||||
TZNAME:WAT
|
||||
|
||||
@@ -3,7 +3,7 @@ PRODID:-//Alinto//NONSGML IANA 2024b//EN
|
||||
VERSION:2.0
|
||||
BEGIN:VTIMEZONE
|
||||
TZID:Africa/Sao_Tome
|
||||
LAST-MODIFIED:20241008T100856Z
|
||||
LAST-MODIFIED:20250324T091428Z
|
||||
X-LIC-LOCATION:Africa/Sao_Tome
|
||||
BEGIN:STANDARD
|
||||
TZNAME:GMT
|
||||
|
||||
@@ -3,7 +3,7 @@ PRODID:-//Alinto//NONSGML IANA 2024b//EN
|
||||
VERSION:2.0
|
||||
BEGIN:VTIMEZONE
|
||||
TZID:Africa/Tripoli
|
||||
LAST-MODIFIED:20241008T100856Z
|
||||
LAST-MODIFIED:20250324T091428Z
|
||||
X-LIC-LOCATION:Africa/Tripoli
|
||||
BEGIN:STANDARD
|
||||
TZNAME:EET
|
||||
|
||||
@@ -3,7 +3,7 @@ PRODID:-//Alinto//NONSGML IANA 2024b//EN
|
||||
VERSION:2.0
|
||||
BEGIN:VTIMEZONE
|
||||
TZID:Africa/Tunis
|
||||
LAST-MODIFIED:20241008T100856Z
|
||||
LAST-MODIFIED:20250324T091428Z
|
||||
X-LIC-LOCATION:Africa/Tunis
|
||||
BEGIN:STANDARD
|
||||
TZNAME:CET
|
||||
|
||||
@@ -3,7 +3,7 @@ PRODID:-//Alinto//NONSGML IANA 2024b//EN
|
||||
VERSION:2.0
|
||||
BEGIN:VTIMEZONE
|
||||
TZID:Africa/Windhoek
|
||||
LAST-MODIFIED:20241008T100856Z
|
||||
LAST-MODIFIED:20250324T091428Z
|
||||
X-LIC-LOCATION:Africa/Windhoek
|
||||
BEGIN:STANDARD
|
||||
TZNAME:CAT
|
||||
|
||||
@@ -3,7 +3,7 @@ PRODID:-//Alinto//NONSGML IANA 2024b//EN
|
||||
VERSION:2.0
|
||||
BEGIN:VTIMEZONE
|
||||
TZID:America/Adak
|
||||
LAST-MODIFIED:20241008T100856Z
|
||||
LAST-MODIFIED:20250324T091428Z
|
||||
X-LIC-LOCATION:America/Adak
|
||||
BEGIN:DAYLIGHT
|
||||
TZNAME:HDT
|
||||
|
||||
@@ -3,7 +3,7 @@ PRODID:-//Alinto//NONSGML IANA 2024b//EN
|
||||
VERSION:2.0
|
||||
BEGIN:VTIMEZONE
|
||||
TZID:America/Anchorage
|
||||
LAST-MODIFIED:20241008T100856Z
|
||||
LAST-MODIFIED:20250324T091428Z
|
||||
X-LIC-LOCATION:America/Anchorage
|
||||
BEGIN:DAYLIGHT
|
||||
TZNAME:AKDT
|
||||
|
||||
@@ -3,7 +3,7 @@ PRODID:-//Alinto//NONSGML IANA 2024b//EN
|
||||
VERSION:2.0
|
||||
BEGIN:VTIMEZONE
|
||||
TZID:America/Araguaina
|
||||
LAST-MODIFIED:20241008T100856Z
|
||||
LAST-MODIFIED:20250324T091428Z
|
||||
X-LIC-LOCATION:America/Araguaina
|
||||
BEGIN:STANDARD
|
||||
TZNAME:%z
|
||||
|
||||
@@ -3,7 +3,7 @@ PRODID:-//Alinto//NONSGML IANA 2024b//EN
|
||||
VERSION:2.0
|
||||
BEGIN:VTIMEZONE
|
||||
TZID:America/Argentina/Buenos_Aires
|
||||
LAST-MODIFIED:20241008T100856Z
|
||||
LAST-MODIFIED:20250324T091428Z
|
||||
X-LIC-LOCATION:America/Argentina/Buenos_Aires
|
||||
BEGIN:STANDARD
|
||||
TZNAME:%z
|
||||
|
||||
@@ -3,7 +3,7 @@ PRODID:-//Alinto//NONSGML IANA 2024b//EN
|
||||
VERSION:2.0
|
||||
BEGIN:VTIMEZONE
|
||||
TZID:America/Argentina/Catamarca
|
||||
LAST-MODIFIED:20241008T100856Z
|
||||
LAST-MODIFIED:20250324T091428Z
|
||||
X-LIC-LOCATION:America/Argentina/Catamarca
|
||||
BEGIN:STANDARD
|
||||
TZNAME:%z
|
||||
|
||||
@@ -3,7 +3,7 @@ PRODID:-//Alinto//NONSGML IANA 2024b//EN
|
||||
VERSION:2.0
|
||||
BEGIN:VTIMEZONE
|
||||
TZID:America/Argentina/Cordoba
|
||||
LAST-MODIFIED:20241008T100856Z
|
||||
LAST-MODIFIED:20250324T091428Z
|
||||
X-LIC-LOCATION:America/Argentina/Cordoba
|
||||
BEGIN:STANDARD
|
||||
TZNAME:%z
|
||||
|
||||
@@ -3,7 +3,7 @@ PRODID:-//Alinto//NONSGML IANA 2024b//EN
|
||||
VERSION:2.0
|
||||
BEGIN:VTIMEZONE
|
||||
TZID:America/Argentina/Jujuy
|
||||
LAST-MODIFIED:20241008T100856Z
|
||||
LAST-MODIFIED:20250324T091428Z
|
||||
X-LIC-LOCATION:America/Argentina/Jujuy
|
||||
BEGIN:STANDARD
|
||||
TZNAME:%z
|
||||
|
||||
@@ -3,7 +3,7 @@ PRODID:-//Alinto//NONSGML IANA 2024b//EN
|
||||
VERSION:2.0
|
||||
BEGIN:VTIMEZONE
|
||||
TZID:America/Argentina/La_Rioja
|
||||
LAST-MODIFIED:20241008T100856Z
|
||||
LAST-MODIFIED:20250324T091428Z
|
||||
X-LIC-LOCATION:America/Argentina/La_Rioja
|
||||
BEGIN:STANDARD
|
||||
TZNAME:%z
|
||||
|
||||
@@ -3,7 +3,7 @@ PRODID:-//Alinto//NONSGML IANA 2024b//EN
|
||||
VERSION:2.0
|
||||
BEGIN:VTIMEZONE
|
||||
TZID:America/Argentina/Mendoza
|
||||
LAST-MODIFIED:20241008T100856Z
|
||||
LAST-MODIFIED:20250324T091428Z
|
||||
X-LIC-LOCATION:America/Argentina/Mendoza
|
||||
BEGIN:STANDARD
|
||||
TZNAME:%z
|
||||
|
||||
@@ -3,7 +3,7 @@ PRODID:-//Alinto//NONSGML IANA 2024b//EN
|
||||
VERSION:2.0
|
||||
BEGIN:VTIMEZONE
|
||||
TZID:America/Argentina/Rio_Gallegos
|
||||
LAST-MODIFIED:20241008T100856Z
|
||||
LAST-MODIFIED:20250324T091428Z
|
||||
X-LIC-LOCATION:America/Argentina/Rio_Gallegos
|
||||
BEGIN:STANDARD
|
||||
TZNAME:%z
|
||||
|
||||
@@ -3,7 +3,7 @@ PRODID:-//Alinto//NONSGML IANA 2024b//EN
|
||||
VERSION:2.0
|
||||
BEGIN:VTIMEZONE
|
||||
TZID:America/Argentina/Salta
|
||||
LAST-MODIFIED:20241008T100856Z
|
||||
LAST-MODIFIED:20250324T091428Z
|
||||
X-LIC-LOCATION:America/Argentina/Salta
|
||||
BEGIN:STANDARD
|
||||
TZNAME:%z
|
||||
|
||||
@@ -3,7 +3,7 @@ PRODID:-//Alinto//NONSGML IANA 2024b//EN
|
||||
VERSION:2.0
|
||||
BEGIN:VTIMEZONE
|
||||
TZID:America/Argentina/San_Juan
|
||||
LAST-MODIFIED:20241008T100856Z
|
||||
LAST-MODIFIED:20250324T091428Z
|
||||
X-LIC-LOCATION:America/Argentina/San_Juan
|
||||
BEGIN:STANDARD
|
||||
TZNAME:%z
|
||||
|
||||
@@ -3,7 +3,7 @@ PRODID:-//Alinto//NONSGML IANA 2024b//EN
|
||||
VERSION:2.0
|
||||
BEGIN:VTIMEZONE
|
||||
TZID:America/Argentina/San_Luis
|
||||
LAST-MODIFIED:20241008T100856Z
|
||||
LAST-MODIFIED:20250324T091428Z
|
||||
X-LIC-LOCATION:America/Argentina/San_Luis
|
||||
BEGIN:STANDARD
|
||||
TZNAME:%z
|
||||
|
||||
@@ -3,7 +3,7 @@ PRODID:-//Alinto//NONSGML IANA 2024b//EN
|
||||
VERSION:2.0
|
||||
BEGIN:VTIMEZONE
|
||||
TZID:America/Argentina/Tucuman
|
||||
LAST-MODIFIED:20241008T100856Z
|
||||
LAST-MODIFIED:20250324T091428Z
|
||||
X-LIC-LOCATION:America/Argentina/Tucuman
|
||||
BEGIN:STANDARD
|
||||
TZNAME:%z
|
||||
|
||||
@@ -3,7 +3,7 @@ PRODID:-//Alinto//NONSGML IANA 2024b//EN
|
||||
VERSION:2.0
|
||||
BEGIN:VTIMEZONE
|
||||
TZID:America/Argentina/Ushuaia
|
||||
LAST-MODIFIED:20241008T100856Z
|
||||
LAST-MODIFIED:20250324T091428Z
|
||||
X-LIC-LOCATION:America/Argentina/Ushuaia
|
||||
BEGIN:STANDARD
|
||||
TZNAME:%z
|
||||
|
||||
@@ -3,21 +3,13 @@ PRODID:-//Alinto//NONSGML IANA 2024b//EN
|
||||
VERSION:2.0
|
||||
BEGIN:VTIMEZONE
|
||||
TZID:America/Asuncion
|
||||
LAST-MODIFIED:20241008T100856Z
|
||||
LAST-MODIFIED:20250324T091428Z
|
||||
X-LIC-LOCATION:America/Asuncion
|
||||
BEGIN:DAYLIGHT
|
||||
TZNAME:%z
|
||||
TZOFFSETFROM:-0400
|
||||
TZOFFSETTO:-0300
|
||||
DTSTART:19701004T000000
|
||||
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU
|
||||
END:DAYLIGHT
|
||||
BEGIN:STANDARD
|
||||
TZNAME:%z
|
||||
TZOFFSETFROM:-0300
|
||||
TZOFFSETTO:-0400
|
||||
DTSTART:19700322T000000
|
||||
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=4SU
|
||||
TZOFFSETTO:-0300
|
||||
DTSTART:19700101T000000
|
||||
END:STANDARD
|
||||
END:VTIMEZONE
|
||||
END:VCALENDAR
|
||||
@@ -3,7 +3,7 @@ PRODID:-//Alinto//NONSGML IANA 2024b//EN
|
||||
VERSION:2.0
|
||||
BEGIN:VTIMEZONE
|
||||
TZID:America/Bahia
|
||||
LAST-MODIFIED:20241008T100856Z
|
||||
LAST-MODIFIED:20250324T091428Z
|
||||
X-LIC-LOCATION:America/Bahia
|
||||
BEGIN:STANDARD
|
||||
TZNAME:%z
|
||||
|
||||
@@ -3,7 +3,7 @@ PRODID:-//Alinto//NONSGML IANA 2024b//EN
|
||||
VERSION:2.0
|
||||
BEGIN:VTIMEZONE
|
||||
TZID:America/Bahia_Banderas
|
||||
LAST-MODIFIED:20241008T100856Z
|
||||
LAST-MODIFIED:20250324T091428Z
|
||||
X-LIC-LOCATION:America/Bahia_Banderas
|
||||
BEGIN:STANDARD
|
||||
TZNAME:CST
|
||||
|
||||
@@ -3,7 +3,7 @@ PRODID:-//Alinto//NONSGML IANA 2024b//EN
|
||||
VERSION:2.0
|
||||
BEGIN:VTIMEZONE
|
||||
TZID:America/Barbados
|
||||
LAST-MODIFIED:20241008T100856Z
|
||||
LAST-MODIFIED:20250324T091428Z
|
||||
X-LIC-LOCATION:America/Barbados
|
||||
BEGIN:STANDARD
|
||||
TZNAME:AST
|
||||
|
||||
@@ -3,7 +3,7 @@ PRODID:-//Alinto//NONSGML IANA 2024b//EN
|
||||
VERSION:2.0
|
||||
BEGIN:VTIMEZONE
|
||||
TZID:America/Belem
|
||||
LAST-MODIFIED:20241008T100856Z
|
||||
LAST-MODIFIED:20250324T091428Z
|
||||
X-LIC-LOCATION:America/Belem
|
||||
BEGIN:STANDARD
|
||||
TZNAME:%z
|
||||
|
||||
@@ -3,7 +3,7 @@ PRODID:-//Alinto//NONSGML IANA 2024b//EN
|
||||
VERSION:2.0
|
||||
BEGIN:VTIMEZONE
|
||||
TZID:America/Belize
|
||||
LAST-MODIFIED:20241008T100856Z
|
||||
LAST-MODIFIED:20250324T091428Z
|
||||
X-LIC-LOCATION:America/Belize
|
||||
BEGIN:STANDARD
|
||||
TZNAME:CST
|
||||
|
||||
@@ -3,7 +3,7 @@ PRODID:-//Alinto//NONSGML IANA 2024b//EN
|
||||
VERSION:2.0
|
||||
BEGIN:VTIMEZONE
|
||||
TZID:America/Boa_Vista
|
||||
LAST-MODIFIED:20241008T100856Z
|
||||
LAST-MODIFIED:20250324T091428Z
|
||||
X-LIC-LOCATION:America/Boa_Vista
|
||||
BEGIN:STANDARD
|
||||
TZNAME:%z
|
||||
|
||||
@@ -3,7 +3,7 @@ PRODID:-//Alinto//NONSGML IANA 2024b//EN
|
||||
VERSION:2.0
|
||||
BEGIN:VTIMEZONE
|
||||
TZID:America/Bogota
|
||||
LAST-MODIFIED:20241008T100856Z
|
||||
LAST-MODIFIED:20250324T091428Z
|
||||
X-LIC-LOCATION:America/Bogota
|
||||
BEGIN:STANDARD
|
||||
TZNAME:%z
|
||||
|
||||
@@ -3,7 +3,7 @@ PRODID:-//Alinto//NONSGML IANA 2024b//EN
|
||||
VERSION:2.0
|
||||
BEGIN:VTIMEZONE
|
||||
TZID:America/Boise
|
||||
LAST-MODIFIED:20241008T100856Z
|
||||
LAST-MODIFIED:20250324T091428Z
|
||||
X-LIC-LOCATION:America/Boise
|
||||
BEGIN:DAYLIGHT
|
||||
TZNAME:MDT
|
||||
|
||||
@@ -3,7 +3,7 @@ PRODID:-//Alinto//NONSGML IANA 2024b//EN
|
||||
VERSION:2.0
|
||||
BEGIN:VTIMEZONE
|
||||
TZID:America/Cambridge_Bay
|
||||
LAST-MODIFIED:20241008T100856Z
|
||||
LAST-MODIFIED:20250324T091428Z
|
||||
X-LIC-LOCATION:America/Cambridge_Bay
|
||||
BEGIN:DAYLIGHT
|
||||
TZNAME:MDT
|
||||
|
||||
@@ -3,7 +3,7 @@ PRODID:-//Alinto//NONSGML IANA 2024b//EN
|
||||
VERSION:2.0
|
||||
BEGIN:VTIMEZONE
|
||||
TZID:America/Campo_Grande
|
||||
LAST-MODIFIED:20241008T100856Z
|
||||
LAST-MODIFIED:20250324T091428Z
|
||||
X-LIC-LOCATION:America/Campo_Grande
|
||||
BEGIN:STANDARD
|
||||
TZNAME:%z
|
||||
|
||||
@@ -3,7 +3,7 @@ PRODID:-//Alinto//NONSGML IANA 2024b//EN
|
||||
VERSION:2.0
|
||||
BEGIN:VTIMEZONE
|
||||
TZID:America/Cancun
|
||||
LAST-MODIFIED:20241008T100856Z
|
||||
LAST-MODIFIED:20250324T091428Z
|
||||
X-LIC-LOCATION:America/Cancun
|
||||
BEGIN:STANDARD
|
||||
TZNAME:EST
|
||||
|
||||
@@ -3,7 +3,7 @@ PRODID:-//Alinto//NONSGML IANA 2024b//EN
|
||||
VERSION:2.0
|
||||
BEGIN:VTIMEZONE
|
||||
TZID:America/Caracas
|
||||
LAST-MODIFIED:20241008T100856Z
|
||||
LAST-MODIFIED:20250324T091428Z
|
||||
X-LIC-LOCATION:America/Caracas
|
||||
BEGIN:STANDARD
|
||||
TZNAME:%z
|
||||
|
||||
@@ -3,7 +3,7 @@ PRODID:-//Alinto//NONSGML IANA 2024b//EN
|
||||
VERSION:2.0
|
||||
BEGIN:VTIMEZONE
|
||||
TZID:America/Cayenne
|
||||
LAST-MODIFIED:20241008T100856Z
|
||||
LAST-MODIFIED:20250324T091428Z
|
||||
X-LIC-LOCATION:America/Cayenne
|
||||
BEGIN:STANDARD
|
||||
TZNAME:%z
|
||||
|
||||
@@ -3,7 +3,7 @@ PRODID:-//Alinto//NONSGML IANA 2024b//EN
|
||||
VERSION:2.0
|
||||
BEGIN:VTIMEZONE
|
||||
TZID:America/Chicago
|
||||
LAST-MODIFIED:20241008T100856Z
|
||||
LAST-MODIFIED:20250324T091428Z
|
||||
X-LIC-LOCATION:America/Chicago
|
||||
BEGIN:DAYLIGHT
|
||||
TZNAME:CDT
|
||||
|
||||
@@ -3,7 +3,7 @@ PRODID:-//Alinto//NONSGML IANA 2024b//EN
|
||||
VERSION:2.0
|
||||
BEGIN:VTIMEZONE
|
||||
TZID:America/Chihuahua
|
||||
LAST-MODIFIED:20241008T100856Z
|
||||
LAST-MODIFIED:20250324T091428Z
|
||||
X-LIC-LOCATION:America/Chihuahua
|
||||
BEGIN:STANDARD
|
||||
TZNAME:CST
|
||||
|
||||
@@ -3,7 +3,7 @@ PRODID:-//Alinto//NONSGML IANA 2024b//EN
|
||||
VERSION:2.0
|
||||
BEGIN:VTIMEZONE
|
||||
TZID:America/Ciudad_Juarez
|
||||
LAST-MODIFIED:20241008T100856Z
|
||||
LAST-MODIFIED:20250324T091428Z
|
||||
X-LIC-LOCATION:America/Ciudad_Juarez
|
||||
BEGIN:DAYLIGHT
|
||||
TZNAME:MDT
|
||||
|
||||
@@ -3,7 +3,7 @@ PRODID:-//Alinto//NONSGML IANA 2024b//EN
|
||||
VERSION:2.0
|
||||
BEGIN:VTIMEZONE
|
||||
TZID:America/Costa_Rica
|
||||
LAST-MODIFIED:20241008T100856Z
|
||||
LAST-MODIFIED:20250324T091428Z
|
||||
X-LIC-LOCATION:America/Costa_Rica
|
||||
BEGIN:STANDARD
|
||||
TZNAME:CST
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
BEGIN:VCALENDAR
|
||||
PRODID:-//Alinto//NONSGML IANA 2024b//EN
|
||||
VERSION:2.0
|
||||
BEGIN:VTIMEZONE
|
||||
TZID:America/Coyhaique
|
||||
LAST-MODIFIED:20250324T091428Z
|
||||
X-LIC-LOCATION:America/Coyhaique
|
||||
BEGIN:STANDARD
|
||||
TZNAME:%z
|
||||
TZOFFSETFROM:-0300
|
||||
TZOFFSETTO:-0300
|
||||
DTSTART:19700101T000000
|
||||
END:STANDARD
|
||||
END:VTIMEZONE
|
||||
END:VCALENDAR
|
||||
@@ -3,7 +3,7 @@ PRODID:-//Alinto//NONSGML IANA 2024b//EN
|
||||
VERSION:2.0
|
||||
BEGIN:VTIMEZONE
|
||||
TZID:America/Cuiaba
|
||||
LAST-MODIFIED:20241008T100856Z
|
||||
LAST-MODIFIED:20250324T091428Z
|
||||
X-LIC-LOCATION:America/Cuiaba
|
||||
BEGIN:STANDARD
|
||||
TZNAME:%z
|
||||
|
||||
@@ -3,7 +3,7 @@ PRODID:-//Alinto//NONSGML IANA 2024b//EN
|
||||
VERSION:2.0
|
||||
BEGIN:VTIMEZONE
|
||||
TZID:America/Danmarkshavn
|
||||
LAST-MODIFIED:20241008T100856Z
|
||||
LAST-MODIFIED:20250324T091428Z
|
||||
X-LIC-LOCATION:America/Danmarkshavn
|
||||
BEGIN:STANDARD
|
||||
TZNAME:GMT
|
||||
|
||||
@@ -3,7 +3,7 @@ PRODID:-//Alinto//NONSGML IANA 2024b//EN
|
||||
VERSION:2.0
|
||||
BEGIN:VTIMEZONE
|
||||
TZID:America/Dawson
|
||||
LAST-MODIFIED:20241008T100856Z
|
||||
LAST-MODIFIED:20250324T091428Z
|
||||
X-LIC-LOCATION:America/Dawson
|
||||
BEGIN:STANDARD
|
||||
TZNAME:MST
|
||||
|
||||
@@ -3,7 +3,7 @@ PRODID:-//Alinto//NONSGML IANA 2024b//EN
|
||||
VERSION:2.0
|
||||
BEGIN:VTIMEZONE
|
||||
TZID:America/Dawson_Creek
|
||||
LAST-MODIFIED:20241008T100856Z
|
||||
LAST-MODIFIED:20250324T091428Z
|
||||
X-LIC-LOCATION:America/Dawson_Creek
|
||||
BEGIN:STANDARD
|
||||
TZNAME:MST
|
||||
|
||||
@@ -3,7 +3,7 @@ PRODID:-//Alinto//NONSGML IANA 2024b//EN
|
||||
VERSION:2.0
|
||||
BEGIN:VTIMEZONE
|
||||
TZID:America/Denver
|
||||
LAST-MODIFIED:20241008T100856Z
|
||||
LAST-MODIFIED:20250324T091428Z
|
||||
X-LIC-LOCATION:America/Denver
|
||||
BEGIN:DAYLIGHT
|
||||
TZNAME:MDT
|
||||
|
||||
@@ -3,7 +3,7 @@ PRODID:-//Alinto//NONSGML IANA 2024b//EN
|
||||
VERSION:2.0
|
||||
BEGIN:VTIMEZONE
|
||||
TZID:America/Detroit
|
||||
LAST-MODIFIED:20241008T100856Z
|
||||
LAST-MODIFIED:20250324T091428Z
|
||||
X-LIC-LOCATION:America/Detroit
|
||||
BEGIN:DAYLIGHT
|
||||
TZNAME:EDT
|
||||
|
||||
@@ -3,7 +3,7 @@ PRODID:-//Alinto//NONSGML IANA 2024b//EN
|
||||
VERSION:2.0
|
||||
BEGIN:VTIMEZONE
|
||||
TZID:America/Edmonton
|
||||
LAST-MODIFIED:20241008T100856Z
|
||||
LAST-MODIFIED:20250324T091428Z
|
||||
X-LIC-LOCATION:America/Edmonton
|
||||
BEGIN:DAYLIGHT
|
||||
TZNAME:MDT
|
||||
|
||||
@@ -3,7 +3,7 @@ PRODID:-//Alinto//NONSGML IANA 2024b//EN
|
||||
VERSION:2.0
|
||||
BEGIN:VTIMEZONE
|
||||
TZID:America/Eirunepe
|
||||
LAST-MODIFIED:20241008T100856Z
|
||||
LAST-MODIFIED:20250324T091428Z
|
||||
X-LIC-LOCATION:America/Eirunepe
|
||||
BEGIN:STANDARD
|
||||
TZNAME:%z
|
||||
|
||||
@@ -3,7 +3,7 @@ PRODID:-//Alinto//NONSGML IANA 2024b//EN
|
||||
VERSION:2.0
|
||||
BEGIN:VTIMEZONE
|
||||
TZID:America/El_Salvador
|
||||
LAST-MODIFIED:20241008T100856Z
|
||||
LAST-MODIFIED:20250324T091428Z
|
||||
X-LIC-LOCATION:America/El_Salvador
|
||||
BEGIN:STANDARD
|
||||
TZNAME:CST
|
||||
|
||||
@@ -3,7 +3,7 @@ PRODID:-//Alinto//NONSGML IANA 2024b//EN
|
||||
VERSION:2.0
|
||||
BEGIN:VTIMEZONE
|
||||
TZID:America/Fort_Nelson
|
||||
LAST-MODIFIED:20241008T100856Z
|
||||
LAST-MODIFIED:20250324T091428Z
|
||||
X-LIC-LOCATION:America/Fort_Nelson
|
||||
BEGIN:STANDARD
|
||||
TZNAME:MST
|
||||
|
||||
@@ -3,7 +3,7 @@ PRODID:-//Alinto//NONSGML IANA 2024b//EN
|
||||
VERSION:2.0
|
||||
BEGIN:VTIMEZONE
|
||||
TZID:America/Fortaleza
|
||||
LAST-MODIFIED:20241008T100856Z
|
||||
LAST-MODIFIED:20250324T091428Z
|
||||
X-LIC-LOCATION:America/Fortaleza
|
||||
BEGIN:STANDARD
|
||||
TZNAME:%z
|
||||
|
||||
@@ -3,7 +3,7 @@ PRODID:-//Alinto//NONSGML IANA 2024b//EN
|
||||
VERSION:2.0
|
||||
BEGIN:VTIMEZONE
|
||||
TZID:America/Glace_Bay
|
||||
LAST-MODIFIED:20241008T100856Z
|
||||
LAST-MODIFIED:20250324T091428Z
|
||||
X-LIC-LOCATION:America/Glace_Bay
|
||||
BEGIN:DAYLIGHT
|
||||
TZNAME:ADT
|
||||
|
||||
@@ -3,7 +3,7 @@ PRODID:-//Alinto//NONSGML IANA 2024b//EN
|
||||
VERSION:2.0
|
||||
BEGIN:VTIMEZONE
|
||||
TZID:America/Goose_Bay
|
||||
LAST-MODIFIED:20241008T100856Z
|
||||
LAST-MODIFIED:20250324T091428Z
|
||||
X-LIC-LOCATION:America/Goose_Bay
|
||||
BEGIN:STANDARD
|
||||
TZNAME:AST
|
||||
|
||||
@@ -3,7 +3,7 @@ PRODID:-//Alinto//NONSGML IANA 2024b//EN
|
||||
VERSION:2.0
|
||||
BEGIN:VTIMEZONE
|
||||
TZID:America/Grand_Turk
|
||||
LAST-MODIFIED:20241008T100856Z
|
||||
LAST-MODIFIED:20250324T091428Z
|
||||
X-LIC-LOCATION:America/Grand_Turk
|
||||
BEGIN:STANDARD
|
||||
TZNAME:EST
|
||||
|
||||
@@ -3,7 +3,7 @@ PRODID:-//Alinto//NONSGML IANA 2024b//EN
|
||||
VERSION:2.0
|
||||
BEGIN:VTIMEZONE
|
||||
TZID:America/Guatemala
|
||||
LAST-MODIFIED:20241008T100856Z
|
||||
LAST-MODIFIED:20250324T091428Z
|
||||
X-LIC-LOCATION:America/Guatemala
|
||||
BEGIN:STANDARD
|
||||
TZNAME:CST
|
||||
|
||||
@@ -3,7 +3,7 @@ PRODID:-//Alinto//NONSGML IANA 2024b//EN
|
||||
VERSION:2.0
|
||||
BEGIN:VTIMEZONE
|
||||
TZID:America/Guayaquil
|
||||
LAST-MODIFIED:20241008T100856Z
|
||||
LAST-MODIFIED:20250324T091428Z
|
||||
X-LIC-LOCATION:America/Guayaquil
|
||||
BEGIN:STANDARD
|
||||
TZNAME:%z
|
||||
|
||||
@@ -3,7 +3,7 @@ PRODID:-//Alinto//NONSGML IANA 2024b//EN
|
||||
VERSION:2.0
|
||||
BEGIN:VTIMEZONE
|
||||
TZID:America/Guyana
|
||||
LAST-MODIFIED:20241008T100856Z
|
||||
LAST-MODIFIED:20250324T091428Z
|
||||
X-LIC-LOCATION:America/Guyana
|
||||
BEGIN:STANDARD
|
||||
TZNAME:%z
|
||||
|
||||
@@ -3,7 +3,7 @@ PRODID:-//Alinto//NONSGML IANA 2024b//EN
|
||||
VERSION:2.0
|
||||
BEGIN:VTIMEZONE
|
||||
TZID:America/Halifax
|
||||
LAST-MODIFIED:20241008T100856Z
|
||||
LAST-MODIFIED:20250324T091428Z
|
||||
X-LIC-LOCATION:America/Halifax
|
||||
BEGIN:DAYLIGHT
|
||||
TZNAME:ADT
|
||||
|
||||
@@ -3,7 +3,7 @@ PRODID:-//Alinto//NONSGML IANA 2024b//EN
|
||||
VERSION:2.0
|
||||
BEGIN:VTIMEZONE
|
||||
TZID:America/Havana
|
||||
LAST-MODIFIED:20241008T100856Z
|
||||
LAST-MODIFIED:20250324T091428Z
|
||||
X-LIC-LOCATION:America/Havana
|
||||
BEGIN:STANDARD
|
||||
TZNAME:CST
|
||||
|
||||
@@ -3,7 +3,7 @@ PRODID:-//Alinto//NONSGML IANA 2024b//EN
|
||||
VERSION:2.0
|
||||
BEGIN:VTIMEZONE
|
||||
TZID:America/Hermosillo
|
||||
LAST-MODIFIED:20241008T100856Z
|
||||
LAST-MODIFIED:20250324T091428Z
|
||||
X-LIC-LOCATION:America/Hermosillo
|
||||
BEGIN:STANDARD
|
||||
TZNAME:MST
|
||||
|
||||
@@ -3,7 +3,7 @@ PRODID:-//Alinto//NONSGML IANA 2024b//EN
|
||||
VERSION:2.0
|
||||
BEGIN:VTIMEZONE
|
||||
TZID:America/Indiana/Indianapolis
|
||||
LAST-MODIFIED:20241008T100856Z
|
||||
LAST-MODIFIED:20250324T091428Z
|
||||
X-LIC-LOCATION:America/Indiana/Indianapolis
|
||||
BEGIN:DAYLIGHT
|
||||
TZNAME:EDT
|
||||
|
||||
@@ -3,7 +3,7 @@ PRODID:-//Alinto//NONSGML IANA 2024b//EN
|
||||
VERSION:2.0
|
||||
BEGIN:VTIMEZONE
|
||||
TZID:America/Indiana/Knox
|
||||
LAST-MODIFIED:20241008T100856Z
|
||||
LAST-MODIFIED:20250324T091428Z
|
||||
X-LIC-LOCATION:America/Indiana/Knox
|
||||
BEGIN:DAYLIGHT
|
||||
TZNAME:CDT
|
||||
|
||||
@@ -3,7 +3,7 @@ PRODID:-//Alinto//NONSGML IANA 2024b//EN
|
||||
VERSION:2.0
|
||||
BEGIN:VTIMEZONE
|
||||
TZID:America/Indiana/Marengo
|
||||
LAST-MODIFIED:20241008T100856Z
|
||||
LAST-MODIFIED:20250324T091428Z
|
||||
X-LIC-LOCATION:America/Indiana/Marengo
|
||||
BEGIN:DAYLIGHT
|
||||
TZNAME:EDT
|
||||
|
||||
@@ -3,7 +3,7 @@ PRODID:-//Alinto//NONSGML IANA 2024b//EN
|
||||
VERSION:2.0
|
||||
BEGIN:VTIMEZONE
|
||||
TZID:America/Indiana/Petersburg
|
||||
LAST-MODIFIED:20241008T100856Z
|
||||
LAST-MODIFIED:20250324T091428Z
|
||||
X-LIC-LOCATION:America/Indiana/Petersburg
|
||||
BEGIN:DAYLIGHT
|
||||
TZNAME:EDT
|
||||
|
||||
@@ -3,7 +3,7 @@ PRODID:-//Alinto//NONSGML IANA 2024b//EN
|
||||
VERSION:2.0
|
||||
BEGIN:VTIMEZONE
|
||||
TZID:America/Indiana/Tell_City
|
||||
LAST-MODIFIED:20241008T100856Z
|
||||
LAST-MODIFIED:20250324T091428Z
|
||||
X-LIC-LOCATION:America/Indiana/Tell_City
|
||||
BEGIN:DAYLIGHT
|
||||
TZNAME:CDT
|
||||
|
||||
Loaded 100 of 638 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user