-
Notifications
You must be signed in to change notification settings - Fork 6
Expand file tree
/
Copy pathRole.java
More file actions
185 lines (151 loc) · 5.88 KB
/
Role.java
File metadata and controls
185 lines (151 loc) · 5.88 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
package invite.model;
import com.fasterxml.jackson.annotation.JsonIgnore;
import invite.provision.scim.GroupURN;
import jakarta.persistence.*;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import org.hibernate.annotations.Formula;
import java.io.Serializable;
import java.time.Instant;
import java.time.temporal.ChronoUnit;
import java.util.*;
import java.util.stream.Collectors;
@Entity(name = "roles")
@NoArgsConstructor
@Getter
@Setter
public class Role implements Serializable, Provisionable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column
@NotNull
@NotBlank
private String name;
@Column(name = "short_name")
private String shortName;
@Column(name = "description")
private String description;
@Column(name = "urn")
private String urn;
@Column(name = "default_expiry_days")
private Integer defaultExpiryDays;
@Column(name = "default_expiry_date")
private Instant defaultExpiryDate;
@Column(name = "enforce_email_equality")
private boolean enforceEmailEquality;
@Column(name = "edu_id_only")
private boolean eduIDOnly;
@Column(name = "block_expiry_date")
private boolean blockExpiryDate;
@Column(name = "override_settings_allowed")
private boolean overrideSettingsAllowed;
@Column(name = "teams_origin")
private boolean teamsOrigin;
@Column(name = "identifier")
private String identifier;
@Column(name = "organization_guid")
private String organizationGUID;
@Column(name = "remote_api_user")
private String remoteApiUser;
@Column(name = "inviter_display_name")
private String inviterDisplayName;
@Formula(value = "(SELECT COUNT(*) FROM user_roles ur WHERE ur.role_id=id)")
private Long userRoleCount;
@OneToMany(mappedBy = "role",
fetch = FetchType.EAGER,
orphanRemoval = true,
cascade = CascadeType.ALL)
private Set<ApplicationUsage> applicationUsages = new HashSet<>();
@Embedded
private Auditable auditable = new Auditable();
@Transient
private List<Map<String, Object>> applicationMaps;
public Role(Long id,
String name,
String description,
Long userRoleCount,
Integer defaultExpiryDays,
boolean enforceEmailEquality,
boolean eduIDOnly,
boolean overrideSettingsAllowed
) {
//Only used after native query and returned for Role overview in the GUI
this.id = id;
this.name = name;
this.description = description;
this.userRoleCount = userRoleCount;
this.defaultExpiryDays = defaultExpiryDays;
this.enforceEmailEquality = enforceEmailEquality;
this.eduIDOnly = eduIDOnly;
this.overrideSettingsAllowed = overrideSettingsAllowed;
}
public Role(String name,
String description,
Set<ApplicationUsage> applicationUsages,
Integer defaultExpiryDays,
boolean enforceEmailEquality,
boolean eduIDOnly) {
this(name, GroupURN.sanitizeRoleShortName(name), description, applicationUsages,
defaultExpiryDays, enforceEmailEquality, eduIDOnly, Collections.emptyList());
}
public Role(@NotNull String name,
@NotNull String shortName,
String description,
Set<ApplicationUsage> applicationUsages,
Integer defaultExpiryDays,
boolean enforceEmailEquality,
boolean eduIDOnly,
List<Map<String, Object>> applicationMaps) {
this.name = name;
this.shortName = shortName;
this.description = description;
this.defaultExpiryDays = defaultExpiryDays;
this.enforceEmailEquality = enforceEmailEquality;
this.eduIDOnly = eduIDOnly;
this.applicationUsages = applicationUsages;
this.applicationUsages.forEach(applicationUsage -> applicationUsage.setRole(this));
this.applicationMaps = applicationMaps;
this.identifier = UUID.randomUUID().toString();
}
public Role(RoleRequest roleRequest) {
this.name = roleRequest.getName();
this.description = roleRequest.getDescription();
this.defaultExpiryDays = roleRequest.getDefaultExpiryDays();
this.defaultExpiryDate = roleRequest.getDefaultExpiryDate();
this.enforceEmailEquality = roleRequest.isEnforceEmailEquality();
this.eduIDOnly = roleRequest.isEduIDOnly();
this.blockExpiryDate = roleRequest.isBlockExpiryDate();
this.overrideSettingsAllowed = roleRequest.isOverrideSettingsAllowed();
this.organizationGUID = roleRequest.getOrganizationGUID();
this.inviterDisplayName = roleRequest.getInviterDisplayName();
this.applicationUsages = roleRequest.getApplicationUsages();
}
@Transient
@JsonIgnore
public List<String> applicationIdentifiers() {
return applicationUsages.stream()
.map(applicationUsage -> applicationUsage.getApplication().getManageId()).toList();
}
@Transient
@JsonIgnore
public Set<Application> applicationsUsed() {
return applicationUsages.stream()
.map(ApplicationUsage::getApplication).collect(Collectors.toSet());
}
@Transient
@JsonIgnore
public Instant deriveExpirationDate() {
if (this.defaultExpiryDate != null) {
return this.defaultExpiryDate;
}
return Instant.now().plus(this.defaultExpiryDays, ChronoUnit.DAYS);
}
public void setApplicationUsages(Set<ApplicationUsage> applicationUsages) {
this.applicationUsages = applicationUsages;
this.applicationUsages.forEach(applicationUsage -> applicationUsage.setRole(this));
}
}