Skip to content

Commit 9693942

Browse files
boubakerexo-swf
authored andcommitted
feat: Allow to choose space sovereignty setting (#5338)
This change will introduce a new flag to allow to choose whether Space Data can be used in External integrations or not. With this flag, the Spaces admins can avoid leaking data to external systems.
1 parent 7ee1c28 commit 9693942

23 files changed

Lines changed: 201 additions & 13 deletions

File tree

component/api/src/main/java/org/exoplatform/social/core/space/SpaceLifecycle.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,9 @@ protected void dispatchEvent(SpaceLifeCycleListener listener, SpaceLifeCycleEven
141141
case REMOVE_PUBLISHER_USER:
142142
listener.removePublisherUser(event);
143143
break;
144+
case SPACE_SOVEREIGNTY:
145+
listener.spaceSovereigntyEdited(event);
146+
break;
144147
default:
145148
break;
146149
}
@@ -242,6 +245,10 @@ public void removePublisherUser(Space space, String userId) {
242245
broadcast(new SpaceLifeCycleEvent(space, userId, Type.REMOVE_PUBLISHER_USER));
243246
}
244247

248+
public void spaceSovereigntyEdited(Space space, String userId) {
249+
broadcast(new SpaceLifeCycleEvent(space, userId, Type.SPACE_SOVEREIGNTY));
250+
}
251+
245252
private boolean isSpaceProperEvent(SpaceLifeCycleEvent event) {
246253
Type currentEvent = getCurrentEvent();
247254
return currentEvent == null || currentEvent == event.getType();

component/api/src/main/java/org/exoplatform/social/core/space/model/Space.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,10 @@ public class Space implements CacheEntry {
9090
@Setter
9191
private long templateId;
9292

93+
@Getter
94+
@Setter
95+
private boolean sovereign;
96+
9397
/** The url. */
9498
private String url;
9599

component/api/src/main/java/org/exoplatform/social/core/space/spi/SpaceLifeCycleEvent.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ public enum Type {
3535
GRANTED_LEAD, REVOKED_LEAD, SPACE_RENAMED, SPACE_DESCRIPTION_EDITED, SPACE_AVATAR_EDITED, SPACE_HIDDEN,
3636
ADD_INVITED_USER, DENY_INVITED_USER, ADD_PENDING_USER, ADD_PUBLISHER_USER, REMOVE_PUBLISHER_USER, ADD_REDACTOR_USER,
3737
REMOVE_REDACTOR_USER, REMOVE_PENDING_USER, SPACE_REGISTRATION, SPACE_BANNER_EDITED, SPACE_PUBLIC_SITE_CREATED, SPACE_PUBLIC_SITE_UPDATED,
38-
CATEGORY_ADDED, CATEGORY_REMOVED
38+
CATEGORY_ADDED, CATEGORY_REMOVED, SPACE_SOVEREIGNTY
3939
}
4040

4141
/**

component/api/src/main/java/org/exoplatform/social/core/space/spi/SpaceLifeCycleListener.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -194,6 +194,15 @@ default void removePublisherUser(SpaceLifeCycleEvent event) {
194194
// No default implementation
195195
}
196196

197+
/**
198+
* Space sovereignty setting changed
199+
*
200+
* @param event the space lifecycle event
201+
*/
202+
default void spaceSovereigntyEdited(SpaceLifeCycleEvent event) {
203+
// No default implementation
204+
}
205+
197206
/**
198207
* Invokes this method when a user update the space registration
199208
* @param event

component/core/src/main/java/io/meeds/social/search/listener/SpaceIndexingListenerImpl.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,11 @@ public void spaceRenamed(SpaceLifeCycleEvent event) {
7676
reindex(event, "space renaming");
7777
}
7878

79+
@Override
80+
public void spaceSovereigntyEdited(SpaceLifeCycleEvent event) {
81+
reindex(event, "space sovereignty edited");
82+
}
83+
7984
@Override
8085
public void spaceAccessEdited(SpaceLifeCycleEvent event) {
8186
reindex(event, "space access edited");

component/core/src/main/java/io/meeds/social/space/service/SpaceServiceImpl.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -412,6 +412,7 @@ public Space createSpace(Space space, String username, List<Identity> identities
412412
spaceToCreate.setRegistration(space.getRegistration());
413413
spaceToCreate.setVisibility(space.getVisibility());
414414
spaceToCreate.setTemplateId(space.getTemplateId());
415+
spaceToCreate.setSovereign(space.isSovereign());
415416
spaceToCreate.setEditor(username);
416417
spaceToCreate.setMembers(new String[] { username });
417418
spaceToCreate.setManagers(new String[] { username });
@@ -1248,6 +1249,9 @@ private void triggerSpaceUpdate(Space newSpace, Space oldSpace) { // NOSONAR
12481249
if (!oldSpace.getVisibility().equals(newSpace.getVisibility())) {
12491250
spaceLifeCycle.spaceAccessEdited(newSpace, newSpace.getEditor());
12501251
}
1252+
if (oldSpace.isSovereign() != newSpace.isSovereign()) {
1253+
spaceLifeCycle.spaceSovereigntyEdited(newSpace, newSpace.getEditor());
1254+
}
12511255
List<Long> categoryIds = oldSpace.getCategoryIds() == null ? Collections.emptyList() : oldSpace.getCategoryIds();
12521256
List<Long> newCategoryIds = newSpace.getCategoryIds() == null ? Collections.emptyList() : newSpace.getCategoryIds();
12531257
if (!CollectionUtils.isEqualCollection(categoryIds, newCategoryIds)) {

component/core/src/main/java/org/exoplatform/social/core/jpa/search/SpaceIndexingServiceConnector.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,7 @@ public Document create(String id) {
9797
fields.put("visibility", space.getVisibility());
9898
fields.put("registration", space.getRegistration());
9999
fields.put("templateId", String.valueOf(space.getTemplateId()));
100+
fields.put("sovereign", String.valueOf(space.isSovereign()));
100101

101102
Date updatedDate = new Date(space.getLastUpdatedTime());
102103

@@ -178,6 +179,7 @@ public String getMapping() {
178179
.append(" \"templateId\" : {\"type\" : \"keyword\"},\n")
179180
.append(" \"categoryId\" : {\"type\" : \"keyword\"},\n")
180181
.append(" \"redactor\" : {\"type\" : \"keyword\"},\n")
182+
.append(" \"sovereign\" : {\"type\" : \"boolean\"},\n")
181183
.append(" \"lastUpdatedDate\" : {\"type\" : \"date\", \"format\": \"epoch_millis\"}\n")
182184
.append(" }\n")
183185
.append("}");

component/core/src/main/java/org/exoplatform/social/core/jpa/storage/EntityConverterUtils.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -310,6 +310,7 @@ public static SpaceEntity buildFrom(Space space, SpaceEntity spaceEntity) {
310310
spaceEntity.setLayoutPermissions(space.getLayoutPermissions());
311311
spaceEntity.setPublicSitePermissions(space.getPublicSitePermissions());
312312
spaceEntity.setCategoryIds(space.getCategoryIds());
313+
spaceEntity.setSovereign(space.isSovereign());
313314
if (space.getRegistration() != null) {
314315
spaceEntity.setRegistration(SpaceRegistration.valueOf(space.getRegistration().toUpperCase()));
315316
}

component/core/src/main/java/org/exoplatform/social/core/jpa/storage/SpaceStorage.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -608,6 +608,7 @@ private Space fillSpaceFromEntity(SpaceEntity entity) {
608608
space.setRedactors(redactors);
609609
space.setPublishers(publishers);
610610
space.setManagers(managers);
611+
space.setSovereign(entity.isSovereign());
611612
space.setLastUpdatedTime(entity.getUpdatedDate().getTime());
612613
return space;
613614
}
@@ -729,6 +730,7 @@ private Space fillSpaceSimpleFromEntity(SpaceEntity entity, Space space) {
729730
space.setLayoutPermissions(entity.getLayoutPermissions());
730731
space.setPublicSitePermissions(entity.getPublicSitePermissions());
731732
space.setCategoryIds(entity.getCategoryIds());
733+
space.setSovereign(entity.isSovereign());
732734

733735
Date lastUpdated = ObjectUtils.getFirstNonNull(entity::getAvatarLastUpdated, () -> new Date(System.currentTimeMillis()));
734736
space.setAvatarLastUpdated(lastUpdated.getTime());

component/core/src/main/java/org/exoplatform/social/core/jpa/storage/entity/SpaceEntity.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,11 @@ public class SpaceEntity implements Serializable {
136136
@Column(name = "TEMPLATE_ID")
137137
private Long templateId;
138138

139+
@Getter
140+
@Setter
141+
@Column(name = "SOVEREIGN")
142+
private boolean sovereign;
143+
139144
@Temporal(TemporalType.TIMESTAMP)
140145
@Column(name = "CREATED_DATE", nullable = false)
141146
private Date createdDate = new Date();
@@ -175,7 +180,7 @@ public class SpaceEntity implements Serializable {
175180
@ElementCollection
176181
@CollectionTable(name = "SOC_SPACE_CATEGORIES", joinColumns = @JoinColumn(name = "SPACE_ID"))
177182
@OrderBy("createdDate asc")
178-
private List<SpaceCategoryEntity> categories = new ArrayList<>(); // NOSONAR
183+
private List<SpaceCategoryEntity> categories = new ArrayList<>(); // NOSONAR
179184

180185
public Long getId() {
181186
return id;

0 commit comments

Comments
 (0)