Skip to content

Commit d0f4ae2

Browse files
committed
WIP for #564
1 parent 61bb04e commit d0f4ae2

4 files changed

Lines changed: 27 additions & 19 deletions

File tree

client/src/pages/InvitationForm.jsx

Lines changed: 11 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ import ErrorIndicator from "../components/ErrorIndicator";
2929
import SelectField from "../components/SelectField";
3030
import {DateField} from "../components/DateField";
3131
import EmailField from "../components/EmailField";
32-
import {displayExpiryDate, futureDate} from "../utils/Date";
32+
import {deriveExpirationDate, displayExpiryDate, futureDate} from "../utils/Date";
3333
import SwitchField from "../components/SwitchField";
3434
import {InvitationRoleCard} from "../components/InvitationRoleCard";
3535
import DOMPurify from "dompurify";
@@ -144,27 +144,26 @@ export const InvitationForm = () => {
144144
const initialRole = markedRoles.find(role => role.value === location.state);
145145
if (initialRole) {
146146
// See markAndFilterRoles - we are mixing up userRoles and roles
147-
const defaultExpiryDays = initialRole.isUserRole ? initialRole.role.defaultExpiryDays : initialRole.defaultExpiryDays;
148147
setSelectedRoles([initialRole])
149148
setInvitation({
150149
...invitation,
151150
intendedAuthority: isGuest ? AUTHORITIES.GUEST : AUTHORITIES.INVITER,
152151
enforceEmailEquality: initialRole.enforceEmailEquality,
153152
eduIDOnly: initialRole.eduIDOnly,
154-
roleExpiryDate: futureDate(defaultExpiryDays)
153+
roleExpiryDate: deriveExpirationDate(initialRole.isUserRole ? initialRole.role : initialRole)
155154
})
156155
setOriginalRoleId(initialRole.isUserRole ? initialRole.role.id : initialRole.id);
157156
} else {
158-
let defaultExpiryDays = 366;
157+
let roleExpiryDate = futureDate(366);
159158
if (markedRoles.length === 1) {
160159
const role = markedRoles[0]
161-
defaultExpiryDays = role.isUserRole ? role.role.defaultExpiryDays : role.defaultExpiryDays;
160+
roleExpiryDate = deriveExpirationDate(role.isUserRole ? role.role : role);
162161
setSelectedRoles(markedRoles);
163162
}
164163
setInvitation({
165164
...invitation,
166165
intendedAuthority: isGuest ? AUTHORITIES.GUEST : AUTHORITIES.INVITER,
167-
roleExpiryDate: futureDate(defaultExpiryDays)
166+
roleExpiryDate: roleExpiryDate
168167
})
169168
}
170169
}
@@ -215,14 +214,11 @@ export const InvitationForm = () => {
215214
}
216215

217216
const defaultRoleExpiryDate = newRoles => {
218-
const allDefaultExpiryDays = (newRoles || [])
219-
.filter(role => role.defaultExpiryDays)
220-
.map(role => role.defaultExpiryDays)
221-
.sort();
222-
if (invitation.intendedAuthority === AUTHORITIES.GUEST) {
223-
return futureDate(isEmpty(allDefaultExpiryDays) ? 365 : allDefaultExpiryDays[0]);
224-
}
225-
return invitation.roleExpiryDate;
217+
const allDefaultExpiryDates = (newRoles || [])
218+
.map(role => deriveExpirationDate(role));
219+
220+
return isEmpty(allDefaultExpiryDates) ? futureDate(365, new Date()) :
221+
new Date(Math.max(...allDefaultExpiryDates.map(d => d.getTime())));
226222
}
227223

228224
const validateOrganizationGUID = e => {
@@ -431,7 +427,7 @@ export const InvitationForm = () => {
431427
<InviterContainer isInviter={isInviter}>
432428
{renderFormElements(authorityOptions)}
433429
</InviterContainer>
434-
430+
<h1>roleExpiryDate: {invitation.roleExpiryDate.toString()}</h1>
435431
<InviterContainer isInviter={isInviter}>
436432
{!displayAdvancedSettings &&
437433
<a className={`advanced-settings ${isInviter ? "inviter" : ""}`} href="/#"

client/src/utils/Date.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,14 @@ export const futureDate = (daysAhead, fromDate = new Date()) => {
99
return new Date(time);
1010
}
1111

12+
export const deriveExpirationDate = role => {
13+
if (!isEmpty(role.defaultExpiryDate)) {
14+
//When the role is serialized from the Server, then the defaultExpiryDate in epoch / 1000, else a genuine Date
15+
return role.defaultExpiryDate.getTime ? role.defaultExpiryDate : new Date(role.defaultExpiryDate * 1000);
16+
}
17+
return futureDate(role.defaultExpiryDays);
18+
}
19+
1220
const formatOptions = {month: "short", day: "numeric", year: "numeric"};
1321

1422
export const shortDateFromEpoch = (epoch, needsMultiplier = true) => {

server/src/main/java/invite/api/RoleController.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -130,11 +130,13 @@ public ResponseEntity<List<Role>> rolesPerApplicationId(@PathVariable("manageId"
130130
LOG.debug(String.format("/rolesPerApplicationId for user %s", user.getEduPersonPrincipalName()));
131131

132132
UserPermissions.assertAuthority(user, Authority.INSTITUTION_ADMIN);
133-
134-
if (!user.isSuperUser()) {
133+
List<Role> roles;
134+
if (user.isSuperUser()) {
135+
roles = roleRepository.findByApplicationUsagesApplicationManageId(manageId);
136+
} else {
135137
Set<String> applicationManageIdentifiers = user.getApplications().stream().map(m -> (String) m.get("id")).collect(Collectors.toSet());
136138
Set<String> roleManageIdentifiers = user.getUserRoles().stream()
137-
//If the user has an userRole as Inviter, then we must exclude those
139+
//If the user has a userRole as Inviter, then we must exclude those
138140
.filter(userRole -> userRole.getAuthority().hasEqualOrHigherRights(Authority.MANAGER))
139141
.map(userRole -> userRole.getRole().applicationsUsed())
140142
.flatMap(Collection::stream)
@@ -144,8 +146,8 @@ public ResponseEntity<List<Role>> rolesPerApplicationId(@PathVariable("manageId"
144146
if (!applicationManageIdentifiers.contains(manageId)) {
145147
throw new UserRestrictionException();
146148
}
149+
roles = roleRepository.findByOrganizationGUIDAndApplicationUsagesApplicationManageId(user.getOrganizationGUID(), manageId);
147150
}
148-
List<Role> roles = roleRepository.findByApplicationUsagesApplicationManageId(manageId);
149151
return ResponseEntity.ok(manage.addManageMetaData(roles));
150152
}
151153

server/src/main/java/invite/repository/RoleRepository.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,8 @@ SELECT COUNT(r.id) FROM roles r WHERE r.organization_guid = ?1
6868

6969
List<Role> findByApplicationUsagesApplicationManageId(String manageId);
7070

71+
List<Role> findByOrganizationGUIDAndApplicationUsagesApplicationManageId(String organizationGUID, String manageId);
72+
7173
List<Role> findByOrganizationGUID(String organizationGUID);
7274

7375
Optional<Role> findByName(String name);

0 commit comments

Comments
 (0)