Skip to content

Commit b4ebcd6

Browse files
sklein94cesmarvin
authored andcommitted
Merge branch 'release/v1.8.0-1'
2 parents 0d24111 + 7eb01a9 commit b4ebcd6

File tree

21 files changed

+425
-260
lines changed

21 files changed

+425
-260
lines changed

CHANGELOG.md

+5
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
66

77
## [Unreleased]
88

9+
## [v1.8.0-1] - 2022-09-28
10+
### Changed
11+
- Prevent system groups (admin/cesManager) from being deleted (#65)
12+
- This is implemented in both backend and frontend.
13+
914
## [v1.7.0-1] - 2022-08-23
1015
### Changed
1116
- The password rules are now set via global etcd keys. For more information see [docs](docs/operations/password-policy_en.md#Configuration-of-password-rules-in-etcd) (#63)

Dockerfile

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ RUN set -x \
88
FROM registry.cloudogu.com/official/java:8u302-3
99

1010
LABEL NAME="official/usermgt" \
11-
VERSION="1.7.0-1" \
11+
VERSION="1.8.0-1" \
1212
maintainer="[email protected]"
1313

1414
# mark as webapp for nginx

Makefile

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Set these to the desired values
22
ARTIFACT_ID=usermgt
3-
VERSION=1.7.0-1
3+
VERSION=1.8.0-1
44
# overwrite ADDITIONAL_LDFLAGS to disable static compilation
55
# this should fix https://github.com/golang/go/issues/13470
66
ADDITIONAL_LDFLAGS=""

app/pom.xml

+4-4
Original file line numberDiff line numberDiff line change
@@ -524,9 +524,9 @@
524524
<repositories>
525525

526526
<repository>
527-
<id>maven.scm-manager.org</id>
527+
<id>packages.scm-manager.org</id>
528528
<name>scm-manager release repository</name>
529-
<url>http://maven.scm-manager.org/nexus/content/groups/public</url>
529+
<url>https://packages.scm-manager.org/repository/public</url>
530530
</repository>
531531

532532
<repository>
@@ -546,9 +546,9 @@
546546
<pluginRepositories>
547547

548548
<pluginRepository>
549-
<id>maven.scm-manager.org</id>
549+
<id>packages.scm-manager.org</id>
550550
<name>scm-manager release repository</name>
551-
<url>http://maven.scm-manager.org/nexus/content/groups/public</url>
551+
<url>http://packages.scm-manager.org/nexus/content/groups/public</url>
552552
<snapshots>
553553
<enabled>true</enabled>
554554
</snapshots>

app/src/main/java/de/triology/universeadm/AbstractManagerResource.java

+9-2
Original file line numberDiff line numberDiff line change
@@ -151,12 +151,19 @@ public Response remove(@PathParam("id") String id) {
151151

152152
if (object == null) {
153153
builder = Response.status(Response.Status.NOT_FOUND);
154-
} else {
154+
return builder.build();
155+
}
156+
try{
155157
manager.remove(object);
156158
builder = Response.noContent();
159+
} catch (CannotRemoveException e) {
160+
builder = Response.status(Response.Status.CONFLICT);
157161
}
158162

159-
return builder.build();
163+
return builder.build();
164+
165+
166+
160167
}
161168

162169
//~--- get methods ----------------------------------------------------------
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
package de.triology.universeadm;
2+
3+
public class CannotRemoveException extends RuntimeException {
4+
}

app/src/main/java/de/triology/universeadm/group/GroupManager.java

+5-4
Original file line numberDiff line numberDiff line change
@@ -29,11 +29,12 @@
2929

3030
import de.triology.universeadm.Manager;
3131

32+
import java.util.ArrayList;
33+
import java.util.List;
34+
3235
/**
3336
*
3437
* @author Sebastian Sdorra <[email protected]>
3538
*/
36-
public interface GroupManager extends Manager<Group>
37-
{
38-
39-
}
39+
public interface GroupManager extends Manager<Group> {
40+
}

app/src/main/java/de/triology/universeadm/group/GroupResource.java

+26-5
Original file line numberDiff line numberDiff line change
@@ -31,11 +31,15 @@
3131
import de.triology.universeadm.AbstractManagerResource;
3232
import de.triology.universeadm.user.User;
3333
import de.triology.universeadm.user.UserManager;
34-
import javax.ws.rs.DELETE;
35-
import javax.ws.rs.POST;
36-
import javax.ws.rs.Path;
37-
import javax.ws.rs.PathParam;
34+
import org.json.simple.JSONArray;
35+
import org.slf4j.Logger;
36+
import org.slf4j.LoggerFactory;
37+
38+
import javax.ws.rs.*;
39+
import javax.ws.rs.core.MediaType;
3840
import javax.ws.rs.core.Response;
41+
import java.util.ArrayList;
42+
import java.util.List;
3943

4044
/**
4145
*
@@ -45,6 +49,8 @@
4549
public class GroupResource extends AbstractManagerResource<Group>
4650
{
4751

52+
private static final Logger logger = LoggerFactory.getLogger(GroupResource.class);
53+
4854
private final GroupManager groupManager;
4955
private final UserManager userManager;
5056

@@ -121,5 +127,20 @@ else if ( ! group.getMembers().contains(member) )
121127

122128
return builder.build();
123129
}
124-
130+
131+
@GET
132+
@Path("undeletable")
133+
@Produces(MediaType.APPLICATION_JSON)
134+
public Response getUndeletable(){
135+
Response.ResponseBuilder builder;
136+
try {
137+
List<String> groups = UndeletableGroupManager.getNonDeleteClassList();
138+
builder = Response.ok(groups, MediaType.APPLICATION_JSON);
139+
} catch (Exception e) {
140+
logger.error("call /api/groups/undeletable without prior authentication");
141+
builder = Response.status(Response.Status.BAD_REQUEST);
142+
}
143+
return builder.build();
144+
}
145+
125146
}

app/src/main/java/de/triology/universeadm/group/LDAPGroupManager.java

+7-2
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
import com.google.inject.Inject;
3232
import com.google.inject.Singleton;
3333
import de.triology.universeadm.AbstractLDAPManager;
34+
import de.triology.universeadm.CannotRemoveException;
3435
import de.triology.universeadm.EventType;
3536
import de.triology.universeadm.LDAPConfiguration;
3637
import de.triology.universeadm.LDAPConnectionStrategy;
@@ -39,6 +40,8 @@
3940
import de.triology.universeadm.mapping.MapperFactory;
4041
import de.triology.universeadm.mapping.MappingHandler;
4142
import de.triology.universeadm.validation.Validator;
43+
44+
import java.util.ArrayList;
4245
import java.util.List;
4346
import org.apache.shiro.SecurityUtils;
4447
import org.slf4j.Logger;
@@ -99,6 +102,9 @@ public void remove(Group group)
99102
{
100103
logger.debug("remove group {}", group.getName());
101104
SecurityUtils.getSubject().checkRole(Roles.ADMINISTRATOR);
105+
if(UndeletableGroupManager.isGroupUndeletable(group.getName())){
106+
throw new CannotRemoveException();
107+
}
102108
mapping.remove(group);
103109
eventBus.post(new GroupEvent(group, EventType.REMOVE));
104110
}
@@ -116,7 +122,6 @@ public List<Group> getAll()
116122
{
117123
logger.debug("get all groups");
118124
SecurityUtils.getSubject().checkRole(Roles.ADMINISTRATOR);
119-
120125
return mapping.getAll();
121126
}
122127

@@ -128,5 +133,5 @@ public List<Group> search(String query)
128133

129134
return mapping.search(query);
130135
}
131-
136+
132137
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package de.triology.universeadm.group;
2+
3+
import org.slf4j.Logger;
4+
import org.slf4j.LoggerFactory;
5+
6+
import java.lang.invoke.MethodHandles;
7+
import java.util.ArrayList;
8+
import java.util.List;
9+
10+
public class UndeletableGroupManager {
11+
12+
private static final Logger logger = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
13+
14+
public static List<String> getNonDeleteClassList(){
15+
List<String> groups = new ArrayList<>();
16+
String adminGroup = System.getenv("ADMIN_GROUP");
17+
String cesManagerGroup = System.getenv("CES_MANAGER_GROUP");
18+
// fallback to defaults if not set
19+
if(adminGroup == null || "".equals(adminGroup)){
20+
logger.warn("Env variable ADMIN_GROUP not set. Falling back to default \"admin\"");
21+
adminGroup = "admin";
22+
}
23+
if (cesManagerGroup == null || "".equals(cesManagerGroup)) {
24+
logger.warn("Env variable CES_MANAGER_GROUP not set. Falling back to default \"cesManager\"");
25+
cesManagerGroup = "cesManager";
26+
}
27+
groups.add(adminGroup);
28+
groups.add(cesManagerGroup);
29+
return groups;
30+
}
31+
32+
public static boolean isGroupUndeletable(String group){
33+
return getNonDeleteClassList().contains(group);
34+
}
35+
36+
}

0 commit comments

Comments
 (0)