mirror of
https://github.com/inverse-inc/sogo.git
synced 2026-04-03 20:38:50 +00:00
feat(core): Add SOGoDisableSharing option to disable sharing for mail, contacts and calendar
This commit is contained in:
@@ -684,6 +684,9 @@ Possible values are:
|
||||
|
||||
Defaults to `NO` when unset.
|
||||
|
||||
|S |SOGoDisableSharing
|
||||
|List of modules where sharing should be disabled, for example `(Mail, Calendar)`. Modules can be `Mail`, `Contacts` and `Calendar`. Default value empty list (sharing enabled for everybody).
|
||||
|
||||
|S |SOGoPasswordChangeEnabled
|
||||
|Parameter used to allow or not users to change their passwords from
|
||||
SOGo.
|
||||
|
||||
@@ -22,6 +22,11 @@
|
||||
#define SOGOSYSTEMDEFAULTS_H
|
||||
|
||||
#import <SOGo/SOGoDomainDefaults.h>
|
||||
#import <SOGo/NSString+Utilities.h>
|
||||
|
||||
static const NSString *kDisableSharingMail = @"Mail";
|
||||
static const NSString *kDisableSharingContacts = @"Contacts";
|
||||
static const NSString *kDisableSharingCalendar = @"Calendar";
|
||||
|
||||
@interface SOGoSystemDefaults : SOGoDomainDefaults
|
||||
{
|
||||
@@ -121,6 +126,8 @@
|
||||
- (NSArray *) passwordRecoveryDomains;
|
||||
- (NSString *) JWTSecret;
|
||||
|
||||
- (NSArray *) disableSharing;
|
||||
|
||||
@end
|
||||
|
||||
#endif /* SOGOSYSTEMDEFAULTS_H */
|
||||
|
||||
@@ -791,5 +791,18 @@ _injectConfigurationFromFile (NSMutableDictionary *defaultsDict,
|
||||
return secret;
|
||||
}
|
||||
|
||||
- (NSArray *) disableSharing
|
||||
{
|
||||
static NSArray *disableSharing = nil;
|
||||
|
||||
if (!disableSharing)
|
||||
{
|
||||
disableSharing = [self stringArrayForKey: @"SOGoDisableSharing"];
|
||||
[disableSharing retain];
|
||||
}
|
||||
|
||||
return disableSharing;
|
||||
}
|
||||
|
||||
|
||||
@end
|
||||
|
||||
@@ -29,6 +29,7 @@
|
||||
#import <SOGo/SOGoDomainDefaults.h>
|
||||
#import <SOGo/SOGoUser.h>
|
||||
#import <SOGo/SOGoUserManager.h>
|
||||
#import <SOGo/SOGoSystemDefaults.h>
|
||||
|
||||
#import <UI/SOGoUI/SOGoACLAdvisory.h>
|
||||
|
||||
@@ -258,12 +259,35 @@
|
||||
NSDictionary *currentUser, *jsonResponse;;
|
||||
NSEnumerator *usersList;
|
||||
NSString *currentUid;
|
||||
NSArray *o;
|
||||
NSArray *o, *reqPathArray;
|
||||
SOGoSystemDefaults *sd;
|
||||
|
||||
request = [[self context] request];
|
||||
response = [self responseWithStatus: 200];
|
||||
users = [[request contentAsString] objectFromJSONString];
|
||||
usersList = [users objectEnumerator];
|
||||
reqPathArray = [request requestHandlerPathArray];
|
||||
sd = [SOGoSystemDefaults sharedSystemDefaults];
|
||||
|
||||
// Disable sharing
|
||||
if (NSNotFound != [reqPathArray indexOfObject: kDisableSharingMail]
|
||||
&& nil != [sd disableSharing]
|
||||
&& NSNotFound != [[sd disableSharing] indexOfObject: kDisableSharingMail]) {
|
||||
response = [self responseWithStatus: 403];
|
||||
return response;
|
||||
}
|
||||
if (NSNotFound != [reqPathArray indexOfObject: kDisableSharingContacts]
|
||||
&& nil != [sd disableSharing]
|
||||
&& NSNotFound != [[sd disableSharing] indexOfObject: kDisableSharingContacts]) {
|
||||
response = [self responseWithStatus: 403];
|
||||
return response;
|
||||
}
|
||||
if (NSNotFound != [reqPathArray indexOfObject: kDisableSharingCalendar]
|
||||
&& nil != [sd disableSharing]
|
||||
&& NSNotFound != [[sd disableSharing] indexOfObject: kDisableSharingCalendar]) {
|
||||
response = [self responseWithStatus: 403];
|
||||
return response;
|
||||
}
|
||||
|
||||
while ((currentUser = [usersList nextObject]))
|
||||
{
|
||||
|
||||
@@ -493,6 +493,20 @@ Class SOGoContactSourceFolderK, SOGoGCSFolderK;
|
||||
return [self responseWithStatus: 204];
|
||||
}
|
||||
|
||||
- (BOOL) isContactSharingEnabled {
|
||||
BOOL result;
|
||||
SOGoSystemDefaults *sd;
|
||||
|
||||
result = YES;
|
||||
sd = [SOGoSystemDefaults sharedSystemDefaults];
|
||||
if (nil != [sd disableSharing]
|
||||
&& NSNotFound != [[sd disableSharing] indexOfObject: kDisableSharingContacts]) {
|
||||
result = NO;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
- (id) defaultAction
|
||||
{
|
||||
// NSString *check;
|
||||
|
||||
@@ -42,6 +42,7 @@
|
||||
#import <SOGo/NSString+Utilities.h>
|
||||
#import <SOGo/NSDictionary+Utilities.h>
|
||||
#import <SOGo/SOGoDomainDefaults.h>
|
||||
#import <SOGo/SOGoSystemDefaults.h>
|
||||
#import <SOGo/SOGoUser.h>
|
||||
#import <SOGo/SOGoUserFolder.h>
|
||||
#import <SOGo/SOGoUserSettings.h>
|
||||
@@ -582,6 +583,20 @@
|
||||
return _currentLabel;
|
||||
}
|
||||
|
||||
- (BOOL) isMailSharingEnabled {
|
||||
BOOL result;
|
||||
SOGoSystemDefaults *sd;
|
||||
|
||||
result = YES;
|
||||
sd = [SOGoSystemDefaults sharedSystemDefaults];
|
||||
if (nil != [sd disableSharing]
|
||||
&& NSNotFound != [[sd disableSharing] indexOfObject: kDisableSharingMail]) {
|
||||
result = NO;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
@end /* UIxMailMainFrame */
|
||||
|
||||
@interface UIxMailFolderTemplate : UIxComponent
|
||||
|
||||
@@ -32,6 +32,7 @@
|
||||
#import <SOGo/SOGoUser.h>
|
||||
#import <SOGo/SOGoUserDefaults.h>
|
||||
#import <SOGo/SOGoUserSettings.h>
|
||||
#import <SOGo/SOGoSystemDefaults.h>
|
||||
|
||||
#import <Appointments/SOGoAppointmentFolders.h>
|
||||
|
||||
@@ -361,6 +362,20 @@
|
||||
return repeatFrequencies;
|
||||
}
|
||||
|
||||
- (BOOL) isCalendarSharingEnabled {
|
||||
BOOL result;
|
||||
SOGoSystemDefaults *sd;
|
||||
|
||||
result = YES;
|
||||
sd = [SOGoSystemDefaults sharedSystemDefaults];
|
||||
if (nil != [sd disableSharing]
|
||||
&& NSNotFound != [[sd disableSharing] indexOfObject: kDisableSharingCalendar]) {
|
||||
result = NO;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
/* Component Viewer, parent class of Appointment Viewer and Task Viewer */
|
||||
|
||||
@@ -109,12 +109,14 @@
|
||||
<var:string label:value="Export"/>
|
||||
</md-button>
|
||||
</md-menu-item>
|
||||
<md-menu-divider><!-- divider --></md-menu-divider>
|
||||
<md-menu-item>
|
||||
<md-button type="button" ng-click="app.share(folder)">
|
||||
<var:string label:value="Sharing..."/>
|
||||
</md-button>
|
||||
</md-menu-item>
|
||||
<var:if condition="isContactSharingEnabled">
|
||||
<md-menu-divider><!-- divider --></md-menu-divider>
|
||||
<md-menu-item>
|
||||
<md-button type="button" ng-click="app.share(folder)">
|
||||
<var:string label:value="Sharing..."/>
|
||||
</md-button>
|
||||
</md-menu-item>
|
||||
</var:if>
|
||||
</md-menu-content>
|
||||
</md-menu>
|
||||
</md-list-item>
|
||||
|
||||
@@ -279,12 +279,14 @@
|
||||
<var:string label:value="Set as Templates"/>
|
||||
</md-button>
|
||||
</md-menu-item>
|
||||
<md-divider ng-show="::($menuCtrl.folder.type != 'additional')"><!-- divider --></md-divider>
|
||||
<md-menu-item ng-show="::($menuCtrl.folder.type != 'additional')">
|
||||
<md-button type="button" ng-click="$menuCtrl.share()">
|
||||
<var:string label:value="Sharing..."/>
|
||||
</md-button>
|
||||
</md-menu-item>
|
||||
<var:if condition="isMailSharingEnabled">
|
||||
<md-divider ng-show="::($menuCtrl.folder.type != 'additional')"><!-- divider --></md-divider>
|
||||
<md-menu-item ng-show="::($menuCtrl.folder.type != 'additional')">
|
||||
<md-button type="button" ng-click="$menuCtrl.share()">
|
||||
<var:string label:value="Sharing..."/>
|
||||
</md-button>
|
||||
</md-menu-item>
|
||||
</var:if>
|
||||
</md-menu-content>
|
||||
</div>
|
||||
</script>
|
||||
|
||||
@@ -583,15 +583,17 @@
|
||||
<var:string label:value="Export"/>
|
||||
</md-button>
|
||||
</md-menu-item>
|
||||
<md-divider
|
||||
ng-hide="::($menuCtrl.calendar.isSubscription || $menuCtrl.calendar.isWebCalendar)">
|
||||
<!-- divider -->
|
||||
</md-divider>
|
||||
<md-menu-item ng-hide="::($menuCtrl.calendar.isSubscription || $menuCtrl.calendar.isWebCalendar)">
|
||||
<md-button ng-click="$menuCtrl.share()">
|
||||
<var:string label:value="Sharing..."/>
|
||||
</md-button>
|
||||
</md-menu-item>
|
||||
<var:if condition="isCalendarSharingEnabled">
|
||||
<md-divider
|
||||
ng-hide="::($menuCtrl.calendar.isSubscription || $menuCtrl.calendar.isWebCalendar)">
|
||||
<!-- divider -->
|
||||
</md-divider>
|
||||
<md-menu-item ng-hide="::($menuCtrl.calendar.isSubscription || $menuCtrl.calendar.isWebCalendar)">
|
||||
<md-button ng-click="$menuCtrl.share()">
|
||||
<var:string label:value="Sharing..."/>
|
||||
</md-button>
|
||||
</md-menu-item>
|
||||
</var:if>
|
||||
</md-menu-content>
|
||||
</div>
|
||||
</script>
|
||||
|
||||
Reference in New Issue
Block a user