Skip to content

Commit f1cc285

Browse files
committed
Fixes #563
1 parent b8f2faf commit f1cc285

2 files changed

Lines changed: 33 additions & 31 deletions

File tree

server/src/main/java/invite/cron/ResourceCleaner.java

Lines changed: 31 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package invite.cron;
22

33

4+
import invite.model.Role;
45
import invite.model.User;
56
import invite.model.UserRole;
67
import invite.provision.ProvisioningService;
@@ -20,7 +21,6 @@
2021
import java.time.Period;
2122
import java.util.List;
2223
import java.util.Map;
23-
import java.util.stream.Collectors;
2424

2525
@Component
2626
public class ResourceCleaner {
@@ -59,57 +59,57 @@ public Map<String, List<? extends Serializable>> doClean() {
5959
List<User> users = cleanNonActiveUsers();
6060
List<User> orphans = cleanOrphanedUser();
6161
List<UserRole> userRoles = cleanUserRoles();
62-
return Map.of("DeletedNonActiveUsers", users,
62+
return Map.of(
63+
"DeletedNonActiveUsers", users,
6364
"DeletedOrphanUsers", orphans,
64-
"DeletedExpiredUserRoles", userRoles);
65+
"DeletedExpiredUserRoles", userRoles
66+
);
6567
}
6668

6769
private List<User> cleanNonActiveUsers() {
6870
Instant past = Instant.now().minus(Period.ofDays(lastActivityDurationDays));
6971
List<User> users = userRepository.findByLastActivityBefore(past);
70-
71-
LOG.info(String.format("Deleting %s users with no activity in the last %s days: %s ",
72-
users.size(),
73-
lastActivityDurationDays,
74-
users.stream().map(User::getEduPersonPrincipalName).collect(Collectors.joining(", "))));
75-
76-
users.forEach(provisioningService::deleteUserRequest);
77-
userRepository.deleteAll(users);
78-
72+
this.doDeleteUsers(users, "Deleted user %s with no recent activity");
7973
return users;
8074
}
8175

8276
private List<User> cleanOrphanedUser() {
8377
List<User> orphans = userRepository.findNonSuperUserWithoutUserRoles();
78+
this.doDeleteUsers(orphans, "Deleted non-super user %s with no roles");
79+
return orphans;
80+
}
8481

85-
LOG.info(String.format("Deleting %s non-super users with no userRoles; %s",
86-
orphans.size(),
87-
orphans.stream().map(User::getEduPersonPrincipalName).collect(Collectors.joining(", "))));
88-
89-
orphans.forEach(provisioningService::deleteUserRequest);
90-
userRepository.deleteAll(orphans);
82+
private void doDeleteUsers(List<User> users, String logMessage) {
83+
users.forEach(user -> {
84+
try {
85+
provisioningService.deleteUserRequest(user);
86+
userRepository.delete(user);
9187

92-
return orphans;
88+
LOG.info(String.format(logMessage, user.getEmail()));
89+
} catch (RuntimeException e) {
90+
LOG.error(String.format("Error in provisioningService#deleteUserRequest for user %s", user.getEmail()), e);
91+
}
92+
});
9393
}
9494

9595
private List<UserRole> cleanUserRoles() {
9696
List<UserRole> userRoles = userRoleRepository.findByEndDateBeforeAndExpiryNotifications(Instant.now(), 1);
97-
98-
LOG.info(String.format("Deleting %s userRoles with an endDate in the past: %s",
99-
userRoles.size(),
100-
userRoles.stream()
101-
.map(userRole -> String.format("%s - %s", userRole.getUser().getEduPersonPrincipalName(), userRole.getRole().getName()))
102-
.collect(Collectors.toList())));
103-
104-
userRoles.forEach(userRole -> provisioningService.updateGroupRequest(userRole, OperationType.Remove));
105-
10697
userRoles.forEach(userRole -> {
10798
User user = userRole.getUser();
108-
user.removeUserRole(userRole);
109-
userRepository.save(user);
99+
Role role = userRole.getRole();
100+
try {
101+
provisioningService.updateGroupRequest(userRole, OperationType.Remove);
102+
user.removeUserRole(userRole);
103+
userRepository.save(user);
104+
LOG.info(String.format("Deleted userRoles for user %s and role %s with an endDate in the past",
105+
user.getEmail(),
106+
role.getName()));
107+
} catch (RuntimeException e) {
108+
LOG.error(String.format("Error in provisioningService#updateGroupRequest for user %s and userRole %s",
109+
user.getEmail(), role.getName()), e);
110+
}
110111
});
111112
return userRoles;
112-
113113
}
114114

115115
}

server/src/main/java/invite/model/Role.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import invite.provision.scim.GroupURN;
44
import com.fasterxml.jackson.annotation.JsonIgnore;
55
import jakarta.persistence.*;
6+
import jakarta.validation.constraints.NotBlank;
67
import jakarta.validation.constraints.NotNull;
78
import lombok.Getter;
89
import lombok.NoArgsConstructor;
@@ -25,6 +26,7 @@ public class Role implements Serializable, Provisionable {
2526

2627
@Column
2728
@NotNull
29+
@NotBlank
2830
private String name;
2931

3032
@Column(name = "short_name")

0 commit comments

Comments
 (0)