|
1 | 1 | package invite.cron; |
2 | 2 |
|
3 | 3 |
|
| 4 | +import invite.model.Role; |
4 | 5 | import invite.model.User; |
5 | 6 | import invite.model.UserRole; |
6 | 7 | import invite.provision.ProvisioningService; |
|
20 | 21 | import java.time.Period; |
21 | 22 | import java.util.List; |
22 | 23 | import java.util.Map; |
23 | | -import java.util.stream.Collectors; |
24 | 24 |
|
25 | 25 | @Component |
26 | 26 | public class ResourceCleaner { |
@@ -59,57 +59,57 @@ public Map<String, List<? extends Serializable>> doClean() { |
59 | 59 | List<User> users = cleanNonActiveUsers(); |
60 | 60 | List<User> orphans = cleanOrphanedUser(); |
61 | 61 | List<UserRole> userRoles = cleanUserRoles(); |
62 | | - return Map.of("DeletedNonActiveUsers", users, |
| 62 | + return Map.of( |
| 63 | + "DeletedNonActiveUsers", users, |
63 | 64 | "DeletedOrphanUsers", orphans, |
64 | | - "DeletedExpiredUserRoles", userRoles); |
| 65 | + "DeletedExpiredUserRoles", userRoles |
| 66 | + ); |
65 | 67 | } |
66 | 68 |
|
67 | 69 | private List<User> cleanNonActiveUsers() { |
68 | 70 | Instant past = Instant.now().minus(Period.ofDays(lastActivityDurationDays)); |
69 | 71 | 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"); |
79 | 73 | return users; |
80 | 74 | } |
81 | 75 |
|
82 | 76 | private List<User> cleanOrphanedUser() { |
83 | 77 | List<User> orphans = userRepository.findNonSuperUserWithoutUserRoles(); |
| 78 | + this.doDeleteUsers(orphans, "Deleted non-super user %s with no roles"); |
| 79 | + return orphans; |
| 80 | + } |
84 | 81 |
|
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); |
91 | 87 |
|
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 | + }); |
93 | 93 | } |
94 | 94 |
|
95 | 95 | private List<UserRole> cleanUserRoles() { |
96 | 96 | 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 | | - |
106 | 97 | userRoles.forEach(userRole -> { |
107 | 98 | 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 | + } |
110 | 111 | }); |
111 | 112 | return userRoles; |
112 | | - |
113 | 113 | } |
114 | 114 |
|
115 | 115 | } |
0 commit comments