Skip to content

Commit 9bbb11a

Browse files
committed
WIP for connection requests
1 parent 11a0edb commit 9bbb11a

8 files changed

Lines changed: 57 additions & 29 deletions

File tree

client/src/pages/ApplicationDetail.jsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -132,9 +132,9 @@ const ApplicationDetail = ({anonymous}) => {
132132
} else {
133133
setConfirmation({});
134134
connectServiceProviderToIdentityProvider(serviceProvider.id,serviceProvider.type, user.identityProvider.id)
135-
.then(() => {
135+
.then(res => {
136136
//Where to go to next?
137-
alert("done")
137+
alert("done:"+JSON.stringify(res));
138138
})
139139
}
140140
}

server/src/main/java/access/api/ConnectionController.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,7 @@ public ResponseEntity<Map<String, Object>> requestProductionStatus(User user,
169169
user.getName(), connection.getName());
170170
String jiraKey = jiraClient.create(new JiraIssue(
171171
entityId,
172+
null,// There is no identity provider for requesting production status
172173
String.format("%s A change request in manage has been created to merge this user request. See:%s%s",
173174
summary,
174175
lineSeparator,
@@ -245,6 +246,7 @@ private Connection productionReadyChangeRequests(Connection connection, User use
245246
entityId);
246247
String jiraKey = jiraClient.create(new JiraIssue(
247248
entityId,
249+
null,// There is no identity provider for change requests
248250
String.format("%s A change request in manage has been created to merge this user request. See:%s%s",
249251
summary,
250252
System.lineSeparator(),

server/src/main/java/access/api/IdentityProviderController.java

Lines changed: 23 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,7 @@
55
import access.jira.JiraClient;
66
import access.jira.JiraIssue;
77
import access.mail.MailBox;
8-
import access.manage.DashBoardConnectionOption;
9-
import access.manage.Manage;
8+
import access.manage.*;
109
import access.model.*;
1110
import access.repository.OrganizationRepository;
1211
import access.repository.UserRepository;
@@ -120,34 +119,37 @@ public ResponseEntity<Map<String, Object>> connect(User user, @RequestBody @Vali
120119

121120
String changeRequestURL = manage.changeRequestURLConnectionRequest(EntityType.saml20_idp, idpManageIdentifier);
122121

123-
String entityId = (String) ((Map) identityProvider.get("data")).get("entityid");
122+
String identityProviderEntityID = getEntityID(identityProvider);
123+
String serviceProviderEntityID = getEntityID(serviceProvider);
124124
String lineSeparator = System.lineSeparator();
125125
String summary = String.format("Connection request requested by %s for %s.",
126-
user.getName(), serviceProvider);
126+
user.getName(), getProviderName(identityProvider));
127127
String jiraKey = jiraClient.create(new JiraIssue(
128-
entityId,
129-
String.format("%s A change request in manage has been created to merge this user request. See:%s%s",
128+
serviceProviderEntityID,
129+
identityProviderEntityID,
130+
String.format("%s%sA change request in manage has been created to merge this user request. See:%s%s",
130131
summary,
131132
lineSeparator,
133+
lineSeparator,
132134
changeRequestURL),
133135
summary,
134-
EntityType.saml20_idp,
136+
EntityType.valueOf((String) serviceProvider.get("type")),
135137
user.getEmail()
136138
));
137-
//// ChangeRequest changeRequest = new ChangeRequest(
138-
//// idpManageIdentifier,
139-
//// EntityType.saml20_idp,
140-
//// //TODO - See idp-dashboard ServicesController#connect
141-
//// Map.of("state", "prodaccepted"),
142-
//// Map.of("user", user.getEmail(),
143-
//// "notes", String.format("Production status requested by %s for %s. See Jira %s",
144-
//// user.getName(), connection.getName(), jiraKey)),
145-
//// false,
146-
//// PathUpdateType.ADDITION,
147-
//// RequestType.LinkRequest);
148-
//// Map<String, Object> changeRequestResponse = manage.createChangeRequest(connection.getEnvironment(), changeRequest);
149-
////
150-
// LOG.debug("Change request response from manage: " + changeRequestResponse);
139+
ChangeRequest changeRequest = new ChangeRequest(
140+
idpManageIdentifier,
141+
EntityType.saml20_idp,
142+
Map.of("allowedEntities", Map.of("name", serviceProviderEntityID)),
143+
Map.of("user", user.getEmail(),
144+
"notes", String.format("Connection request requested by %s from %s for %s. See Jira %s",
145+
user.getName(),
146+
identityProviderEntityID,
147+
serviceProviderEntityID,
148+
jiraKey)),
149+
true,
150+
PathUpdateType.ADDITION,
151+
RequestType.LinkRequest);
152+
manage.createChangeRequest(Environment.PROD, changeRequest);
151153

152154
return ResponseEntity.status(HttpStatus.CREATED).body(
153155
Map.of("status", HttpStatus.CREATED.value(), "jiraKey", jiraKey));

server/src/main/java/access/api/OrganizationController.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -230,6 +230,7 @@ public ResponseEntity<Organization> create(User user, @RequestBody @Validated Or
230230
orgName);
231231
String jiraKey = jiraClient.create(new JiraIssue(
232232
orgName,
233+
null,// There is no identity provider for approving organizations
233234
String.format("%s The new organisation is pending approval. Visit to evaluate:%s%s",
234235
summary,
235236
System.lineSeparator(),

server/src/main/java/access/jira/JiraClient.java

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import org.springframework.http.client.ClientHttpRequestInterceptor;
1717
import org.springframework.http.client.SimpleClientHttpRequestFactory;
1818
import org.springframework.stereotype.Service;
19+
import org.springframework.util.StringUtils;
1920
import org.springframework.web.client.HttpClientErrorException;
2021
import org.springframework.web.client.RestTemplate;
2122

@@ -68,13 +69,16 @@ public String create(JiraIssue issue) {
6869
}
6970
Map<String, Object> fields = new HashMap<>();
7071
fields.put("project", Map.of("key", config.getProjectKey()));
71-
fields.put("customfield_" + spCustomField(), issue.getEntityID());
72+
fields.put("customfield_" + spCustomField(), issue.getServiceProviderEntityID());
73+
fields.put("customfield_" + idpCustomField(), issue.getIdentityProviderEntityID());
7274
fields.put("customfield_" + typeMetaDataCustomField(), Map.of("value", issue.getEntityType().name()));
7375
fields.put("customfield_" + emailToCustomField(), issue.getEmailTo());
7476
fields.put("issuetype", ImmutableMap.of("id", issueType));
7577
fields.put("summary", issue.getSummary());
7678
fields.put("description", issue.getDescription());
7779
fields.put("duedate", dueDate());
80+
//We don't send keys with null or empty values
81+
fields.entrySet().removeIf(entry -> entry.getValue() instanceof String && !StringUtils.hasText((String) entry.getValue()));
7882

7983
Map<String, Map<String, Object>> jiraIssue = Map.of("fields", fields);
8084

@@ -110,6 +114,10 @@ private String spCustomField() {
110114
return this.customField("spEntityId");
111115
}
112116

117+
private String idpCustomField() {
118+
return this.customField("idpEntityId");
119+
}
120+
113121
private String typeMetaDataCustomField() {
114122
return this.customField("typeMetaData");
115123
}
@@ -124,8 +132,7 @@ private String customField(String name) {
124132

125133
private String dueDate() {
126134
LocalDate localDate = new Date().toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
127-
return localDate.plusDays(3).format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
135+
return localDate.plusWeeks(3).format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
128136
}
129137

130-
131138
}

server/src/main/java/access/jira/JiraIssue.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,17 @@
44
import lombok.AllArgsConstructor;
55
import lombok.Getter;
66

7+
import java.time.LocalDate;
8+
import java.time.ZoneId;
9+
import java.time.format.DateTimeFormatter;
10+
import java.util.Date;
11+
712
@Getter
813
@AllArgsConstructor
914
public class JiraIssue {
1015

11-
private String entityID;
16+
private String serviceProviderEntityID;
17+
private String identityProviderEntityID;
1218
private String description;
1319
private String summary;
1420
private EntityType entityType;

server/src/main/java/access/manage/ManageData.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,11 @@ public static String getProviderName(Map<String, Object> provider) {
2525
return (String) metaDataFields.get("name:en");
2626
}
2727

28+
public static String getEntityID(Map<String, Object> provider) {
29+
Map<String, Object> data = getData(provider);
30+
return (String) data.get("entityid");
31+
}
32+
2833
public static List<String> contactPersons(Map<String, Object> provider) {
2934
Pattern pattern = Pattern.compile("contacts:[0-9]:contactType");
3035
List contactTypes = List.of("technical", "support", "administrative");

server/src/test/java/access/jira/JiraClientTest.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,13 @@ void create() {
3636
.withHeader("Content-Type", "application/json")
3737
.withBody(objectMapper.writeValueAsString(response))));
3838

39-
String jiraKey = jiraClient.create(new JiraIssue("entityID", "description", "summary",
40-
EntityType.saml20_sp, "mail@to.org"));
39+
String jiraKey = jiraClient.create(new JiraIssue(
40+
"serviceProviderEntityID",
41+
"identityProviderEntityID",
42+
"description",
43+
"summary",
44+
EntityType.saml20_sp,
45+
"mail@to.org"));
4146
assertEquals("CTX-1000", jiraKey);
4247
}
4348
}

0 commit comments

Comments
 (0)