Skip to content

Commit

Permalink
feat(core): Add SOGoDisableSharing option to disable sharing for mail…
Browse files Browse the repository at this point in the history
…, contacts and calendar
  • Loading branch information
WoodySlum committed Dec 12, 2022
1 parent 5d6b40c commit 435495f
Show file tree
Hide file tree
Showing 10 changed files with 119 additions and 22 deletions.
3 changes: 3 additions & 0 deletions Documentation/SOGoInstallationGuide.asciidoc
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
7 changes: 7 additions & 0 deletions SoObjects/SOGo/SOGoSystemDefaults.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
{
Expand Down Expand Up @@ -121,6 +126,8 @@
- (NSArray *) passwordRecoveryDomains;
- (NSString *) JWTSecret;

- (NSArray *) disableSharing;

@end

#endif /* SOGOSYSTEMDEFAULTS_H */
13 changes: 13 additions & 0 deletions SoObjects/SOGo/SOGoSystemDefaults.m
Original file line number Diff line number Diff line change
Expand Up @@ -791,5 +791,18 @@ - (NSString *) JWTSecret
return secret;
}

- (NSArray *) disableSharing
{
static NSArray *disableSharing = nil;

if (!disableSharing)
{
disableSharing = [self stringArrayForKey: @"SOGoDisableSharing"];
[disableSharing retain];
}

return disableSharing;
}


@end
26 changes: 25 additions & 1 deletion UI/Common/UIxUserRightsEditor.m
Original file line number Diff line number Diff line change
Expand Up @@ -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>

Expand Down Expand Up @@ -258,12 +259,35 @@ - (void) sendACLAdvisoryTemplateForObject: (id) theObject
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]))
{
Expand Down
14 changes: 14 additions & 0 deletions UI/Contacts/UIxContactFoldersView.m
Original file line number Diff line number Diff line change
Expand Up @@ -493,6 +493,20 @@ - (WOResponse *) saveDragHandleStateAction
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;
Expand Down
15 changes: 15 additions & 0 deletions UI/MailerUI/UIxMailMainFrame.m
Original file line number Diff line number Diff line change
Expand Up @@ -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>
Expand Down Expand Up @@ -582,6 +583,20 @@ - (SOGoMailLabel *) currentLabel
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
Expand Down
15 changes: 15 additions & 0 deletions UI/Scheduler/UIxCalMainView.m
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@
#import <SOGo/SOGoUser.h>
#import <SOGo/SOGoUserDefaults.h>
#import <SOGo/SOGoUserSettings.h>
#import <SOGo/SOGoSystemDefaults.h>

#import <Appointments/SOGoAppointmentFolders.h>

Expand Down Expand Up @@ -361,6 +362,20 @@ - (NSArray *) repeatFrequencies
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 */
Expand Down
14 changes: 8 additions & 6 deletions UI/Templates/ContactsUI/UIxContactFoldersView.wox
Original file line number Diff line number Diff line change
Expand Up @@ -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>
Expand Down
14 changes: 8 additions & 6 deletions UI/Templates/MailerUI/UIxMailMainFrame.wox
Original file line number Diff line number Diff line change
Expand Up @@ -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>
Expand Down
20 changes: 11 additions & 9 deletions UI/Templates/SchedulerUI/UIxCalMainView.wox
Original file line number Diff line number Diff line change
Expand Up @@ -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>
Expand Down

0 comments on commit 435495f

Please sign in to comment.