Revision 61643
Added by Konstantinos Triantafyllou about 3 years ago
modules/dnet-openaire-users/trunk/src/main/java/eu/dnetlib/openaire/usermanagement/dto/User.java | ||
---|---|---|
1 |
package eu.dnetlib.openaire.usermanagement.dto; |
|
2 |
|
|
3 |
import com.fasterxml.jackson.annotation.JsonIgnore; |
|
4 |
|
|
5 |
public class User { |
|
6 |
|
|
7 |
@JsonIgnore |
|
8 |
private String coPersonId; |
|
9 |
private String id; |
|
10 |
private String email; |
|
11 |
private String name; |
|
12 |
private String memberSince; |
|
13 |
|
|
14 |
public User() { |
|
15 |
} |
|
16 |
|
|
17 |
@JsonIgnore |
|
18 |
public String getCoPersonId() { |
|
19 |
return coPersonId; |
|
20 |
} |
|
21 |
|
|
22 |
public void setCoPersonId(String coPersonId) { |
|
23 |
this.coPersonId = coPersonId; |
|
24 |
} |
|
25 |
|
|
26 |
public String getId() { |
|
27 |
return id; |
|
28 |
} |
|
29 |
|
|
30 |
public void setId(String id) { |
|
31 |
this.id = id; |
|
32 |
} |
|
33 |
|
|
34 |
public String getEmail() { |
|
35 |
return email; |
|
36 |
} |
|
37 |
|
|
38 |
public void setEmail(String email) { |
|
39 |
this.email = email; |
|
40 |
} |
|
41 |
|
|
42 |
public String getName() { |
|
43 |
return name; |
|
44 |
} |
|
45 |
|
|
46 |
public void setName(String name) { |
|
47 |
this.name = name; |
|
48 |
} |
|
49 |
|
|
50 |
public String getMemberSince() { |
|
51 |
return memberSince; |
|
52 |
} |
|
53 |
|
|
54 |
public void setMemberSince(String memberSince) { |
|
55 |
this.memberSince = memberSince; |
|
56 |
} |
|
57 |
} |
modules/dnet-openaire-users/trunk/src/main/java/eu/dnetlib/openaire/usermanagement/utils/RegistryCalls.java | ||
---|---|---|
1 |
package eu.dnetlib.openaire.usermanagement.utils; |
|
2 |
|
|
3 |
import com.google.gson.JsonArray; |
|
4 |
import com.google.gson.JsonElement; |
|
5 |
import com.google.gson.JsonObject; |
|
6 |
import eu.dnetlib.openaire.usermanagement.dto.Role; |
|
7 |
import org.apache.log4j.Logger; |
|
8 |
import org.mitre.openid.connect.model.OIDCAuthenticationToken; |
|
9 |
import org.springframework.beans.factory.annotation.Autowired; |
|
10 |
import org.springframework.beans.factory.annotation.Value; |
|
11 |
import org.springframework.security.access.method.P; |
|
12 |
import org.springframework.security.core.context.SecurityContextHolder; |
|
13 |
import org.springframework.stereotype.Service; |
|
14 |
|
|
15 |
import java.util.ArrayList; |
|
16 |
import java.util.HashMap; |
|
17 |
import java.util.List; |
|
18 |
import java.util.Map; |
|
19 |
|
|
20 |
@Service |
|
21 |
public class RegistryCalls { |
|
22 |
|
|
23 |
private static final Logger logger = Logger.getLogger(RegistryCalls.class); |
|
24 |
|
|
25 |
@Value("${registry.coid}") |
|
26 |
private String coid; |
|
27 |
|
|
28 |
@Autowired |
|
29 |
public HttpUtils httpUtils; |
|
30 |
|
|
31 |
@Autowired |
|
32 |
public JsonUtils jsonUtils; |
|
33 |
|
|
34 |
|
|
35 |
public String mapType(String type, boolean communityMap) { |
|
36 |
if (type.equals("organization")) { |
|
37 |
type = "institution"; |
|
38 |
} else if (type.equals("ri") && communityMap) { |
|
39 |
type = "community"; |
|
40 |
} |
|
41 |
return type; |
|
42 |
} |
|
43 |
|
|
44 |
/** |
|
45 |
* 1. Get CoPersonId by Email |
|
46 |
*/ |
|
47 |
public Integer getCoPersonIdByEmail() { |
|
48 |
try { |
|
49 |
OIDCAuthenticationToken authentication = (OIDCAuthenticationToken) SecurityContextHolder.getContext().getAuthentication(); |
|
50 |
String email = authentication.getUserInfo().getEmail(); |
|
51 |
Map<String, String> params = new HashMap<>(); |
|
52 |
params.put("coid", coid); |
|
53 |
params.put("mail", email); |
|
54 |
JsonElement response = httpUtils.get("co_people.json", params); |
|
55 |
return (response != null) ? response.getAsJsonObject().get("CoPeople").getAsJsonArray().get(0).getAsJsonObject().get("Id").getAsInt() : null; |
|
56 |
} catch (Exception e) { |
|
57 |
logger.error("Get User info: An error occurred ", e); |
|
58 |
return null; |
|
59 |
} |
|
60 |
} |
|
61 |
|
|
62 |
public Integer getCoPersonIdByEmail(String email) { |
|
63 |
Map<String, String> params = new HashMap<>(); |
|
64 |
params.put("coid", coid); |
|
65 |
params.put("mail", email); |
|
66 |
JsonElement response = httpUtils.get("co_people.json", params); |
|
67 |
if (response != null) { |
|
68 |
JsonArray coPeople = response.getAsJsonObject().get("CoPeople").getAsJsonArray(); |
|
69 |
if (coPeople.size() > 0) { |
|
70 |
return coPeople.get(0).getAsJsonObject().get("Id").getAsInt(); |
|
71 |
} |
|
72 |
} |
|
73 |
return null; |
|
74 |
} |
|
75 |
|
|
76 |
public List<Integer> getCoPersonIdsByEmail(String email) { |
|
77 |
List<Integer> coPersonIds = new ArrayList<>(); |
|
78 |
Map<String, String> params = new HashMap<>(); |
|
79 |
params.put("coid", coid); |
|
80 |
params.put("mail", email); |
|
81 |
JsonElement response = httpUtils.get("co_people.json", params); |
|
82 |
if (response != null) { |
|
83 |
JsonArray coPeople = response.getAsJsonObject().get("CoPeople").getAsJsonArray(); |
|
84 |
for (int i = 0; i < coPeople.size(); i++) { |
|
85 |
coPersonIds.add(coPeople.get(i).getAsJsonObject().get("Id").getAsInt()); |
|
86 |
} |
|
87 |
} |
|
88 |
return coPersonIds; |
|
89 |
} |
|
90 |
|
|
91 |
/** |
|
92 |
* 2. Get CoPersonId by AAI identifier |
|
93 |
*/ |
|
94 |
public Integer getCoPersonIdByIdentifier() { |
|
95 |
try { |
|
96 |
OIDCAuthenticationToken authentication = (OIDCAuthenticationToken) SecurityContextHolder.getContext().getAuthentication(); |
|
97 |
String sub = authentication.getUserInfo().getSub(); |
|
98 |
Map<String, String> params = new HashMap<>(); |
|
99 |
params.put("coid", coid); |
|
100 |
params.put("search.identifier", sub); |
|
101 |
JsonElement response = httpUtils.get("co_people.json", params); |
|
102 |
return (response != null) ? response.getAsJsonObject().get("CoPeople").getAsJsonArray().get(0).getAsJsonObject().get("Id").getAsInt() : null; |
|
103 |
} catch (Exception e) { |
|
104 |
logger.error("Get User info: An error occurred ", e); |
|
105 |
return null; |
|
106 |
} |
|
107 |
} |
|
108 |
|
|
109 |
public Integer getCoPersonIdByIdentifier(String sub) { |
|
110 |
Map<String, String> params = new HashMap<>(); |
|
111 |
params.put("coid", coid); |
|
112 |
params.put("search.identifier", sub); |
|
113 |
JsonElement response = httpUtils.get("co_people.json", params); |
|
114 |
return (response != null) ? response.getAsJsonObject().get("CoPeople").getAsJsonArray().get(0).getAsJsonObject().get("Id").getAsInt() : null; |
|
115 |
} |
|
116 |
|
|
117 |
/** |
|
118 |
* 3.1 Get OpenAIRE cous with a specific name(or substring) |
|
119 |
*/ |
|
120 |
public JsonArray getCous(String name) { |
|
121 |
Map<String, String> params = new HashMap<>(); |
|
122 |
params.put("coid", coid); |
|
123 |
if (name != null) { |
|
124 |
params.put("name", name.toLowerCase()); |
|
125 |
} |
|
126 |
JsonElement response = httpUtils.get("cous.json", params); |
|
127 |
return (response != null) ? response.getAsJsonObject().get("Cous").getAsJsonArray() : new JsonArray(); |
|
128 |
} |
|
129 |
|
|
130 |
/** |
|
131 |
* 3.2 Get all OpenAIRE cous |
|
132 |
*/ |
|
133 |
public JsonArray getCous() { |
|
134 |
return getCous(null); |
|
135 |
} |
|
136 |
|
|
137 |
/** |
|
138 |
* 4.1 Get a couId by name |
|
139 |
* |
|
140 |
* @param name |
|
141 |
* @return |
|
142 |
*/ |
|
143 |
public Integer getCouId(String name) { |
|
144 |
JsonArray cous = getCous(name); |
|
145 |
for (JsonElement cou : cous) { |
|
146 |
if (cou.getAsJsonObject().get("Name").getAsString().toLowerCase().equals(name.toLowerCase())) { |
|
147 |
return cou.getAsJsonObject().get("Id").getAsInt(); |
|
148 |
} |
|
149 |
} |
|
150 |
return null; |
|
151 |
} |
|
152 |
|
|
153 |
/** |
|
154 |
* 4.2 Get a couId by type.id with/without mapping type |
|
155 |
* |
|
156 |
* @param type |
|
157 |
* @param id |
|
158 |
* @return |
|
159 |
*/ |
|
160 |
public Integer getCouId(String type, String id, boolean communityMap) { |
|
161 |
return getCouId(mapType(type, communityMap) + "." + id); |
|
162 |
} |
|
163 |
|
|
164 |
/** |
|
165 |
* 4.3 Get a couId by type.id with mapping type |
|
166 |
* |
|
167 |
* @param type |
|
168 |
* @param id |
|
169 |
* @return |
|
170 |
*/ |
|
171 |
public Integer getCouId(String type, String id) { |
|
172 |
return getCouId(type, id, true); |
|
173 |
} |
|
174 |
|
|
175 |
/** |
|
176 |
* 5. Get User non admin roles |
|
177 |
*/ |
|
178 |
public JsonArray getRoles(Integer coPersonId) { |
|
179 |
Map<String, String> params = new HashMap<>(); |
|
180 |
params.put("copersonid", coPersonId.toString()); |
|
181 |
JsonElement response = httpUtils.get("co_person_roles.json", params); |
|
182 |
return (response != null) ? response.getAsJsonObject().get("CoPersonRoles").getAsJsonArray() : new JsonArray(); |
|
183 |
} |
|
184 |
|
|
185 |
/** |
|
186 |
* 6. Get Role id of User base on couId. |
|
187 |
*/ |
|
188 |
public Integer getRoleId(Integer coPersonId, Integer couId) { |
|
189 |
JsonArray roles = getRoles(coPersonId); |
|
190 |
for (JsonElement role : roles) { |
|
191 |
JsonObject object = role.getAsJsonObject(); |
|
192 |
if (object.get("CouId").getAsInt() == couId && !object.get("Status").getAsString().equals("Deleted")) { |
|
193 |
return object.get("Id").getAsInt(); |
|
194 |
} |
|
195 |
} |
|
196 |
return null; |
|
197 |
} |
|
198 |
|
|
199 |
/** |
|
200 |
* 7. Get User Groups |
|
201 |
*/ |
|
202 |
public JsonArray getUserGroups(Integer coPersonId) { |
|
203 |
Map<String, String> params = new HashMap<>(); |
|
204 |
params.put("copersonid", coPersonId.toString()); |
|
205 |
JsonElement response = httpUtils.get("co_groups.json", params); |
|
206 |
return (response != null) ? response.getAsJsonObject().get("CoGroups").getAsJsonArray() : new JsonArray(); |
|
207 |
} |
|
208 |
|
|
209 |
/** |
|
210 |
* 8. Get User Admin Group of a Cou |
|
211 |
*/ |
|
212 |
public JsonObject getUserAdminGroup(Integer coPersonId, Integer couId) { |
|
213 |
Map<String, String> params = new HashMap<>(); |
|
214 |
params.put("copersonid", coPersonId.toString()); |
|
215 |
JsonElement response = httpUtils.get("co_groups.json", params); |
|
216 |
JsonArray roles = (response != null) ? response.getAsJsonObject().get("CoGroups").getAsJsonArray() : new JsonArray(); |
|
217 |
for (JsonElement role : roles) { |
|
218 |
JsonObject object = role.getAsJsonObject(); |
|
219 |
if (object.get("CouId") != null && object.get("CouId").getAsInt() == couId) { |
|
220 |
if (object.get("Name").getAsString().contains("admins")) { |
|
221 |
return object; |
|
222 |
} |
|
223 |
} |
|
224 |
} |
|
225 |
return null; |
|
226 |
} |
|
227 |
|
|
228 |
/** |
|
229 |
* 9. Get Groups of a Cou |
|
230 |
*/ |
|
231 |
public JsonArray getCouGroups(Integer couId) { |
|
232 |
Map<String, String> params = new HashMap<>(); |
|
233 |
params.put("coid", coid); |
|
234 |
params.put("couid", couId.toString()); |
|
235 |
JsonElement response = httpUtils.get("co_groups.json", params); |
|
236 |
return (response != null) ? response.getAsJsonObject().get("CoGroups").getAsJsonArray() : new JsonArray(); |
|
237 |
} |
|
238 |
|
|
239 |
/** |
|
240 |
* 10. Get Admin Group of a Cou |
|
241 |
*/ |
|
242 |
public JsonObject getCouAdminGroup(Integer couId) { |
|
243 |
JsonArray groups = getCouGroups(couId); |
|
244 |
for (JsonElement group : groups) { |
|
245 |
if (group.getAsJsonObject().get("Name").getAsString().contains("admins")) { |
|
246 |
return group.getAsJsonObject(); |
|
247 |
} |
|
248 |
} |
|
249 |
return null; |
|
250 |
} |
|
251 |
|
|
252 |
/** |
|
253 |
* 11. Get users of a group |
|
254 |
*/ |
|
255 |
public JsonArray getGroupMembers(Integer coGroupId) { |
|
256 |
Map<String, String> params = new HashMap<>(); |
|
257 |
params.put("cogroupid", coGroupId.toString()); |
|
258 |
JsonElement response = httpUtils.get("co_group_members.json", params); |
|
259 |
return (response != null) ? response.getAsJsonObject().get("CoGroupMembers").getAsJsonArray() : new JsonArray(); |
|
260 |
} |
|
261 |
|
|
262 |
|
|
263 |
/** |
|
264 |
* 12. Get Users' email of a Cou |
|
265 |
*/ |
|
266 |
public JsonArray getUserEmailByCouId(Integer couId, boolean admin) { |
|
267 |
Map<String, String> params = new HashMap<>(); |
|
268 |
params.put("couid", couId.toString()); |
|
269 |
if (admin) { |
|
270 |
params.put("admin", "true"); |
|
271 |
} |
|
272 |
JsonElement response = httpUtils.get("email_addresses.json", params); |
|
273 |
JsonArray infos = (response != null) ? response.getAsJsonObject().get("EmailAddresses").getAsJsonArray() : new JsonArray(); |
|
274 |
JsonArray emails = new JsonArray(); |
|
275 |
infos.forEach(info -> { |
|
276 |
JsonObject user = new JsonObject(); |
|
277 |
user.addProperty("coPersonId", info.getAsJsonObject().get("Person").getAsJsonObject().get("Id").getAsString()); |
|
278 |
user.addProperty("email", info.getAsJsonObject().get("Mail").getAsString()); |
|
279 |
user.addProperty("memberSince", info.getAsJsonObject().get("Created").getAsString()); |
|
280 |
emails.add(user); |
|
281 |
}); |
|
282 |
return emails; |
|
283 |
} |
|
284 |
|
|
285 |
/** |
|
286 |
* 13. Get Users' names of a Cou |
|
287 |
*/ |
|
288 |
public JsonArray getUserNamesByCouId(Integer couId, boolean admin) { |
|
289 |
Map<String, String> params = new HashMap<>(); |
|
290 |
params.put("couid", couId.toString()); |
|
291 |
if (admin) { |
|
292 |
params.put("admin", "true"); |
|
293 |
} |
|
294 |
JsonElement response = httpUtils.get("names.json", params); |
|
295 |
JsonArray infos = (response != null) ? response.getAsJsonObject().get("Names").getAsJsonArray() : new JsonArray(); |
|
296 |
JsonArray names = new JsonArray(); |
|
297 |
infos.forEach(info -> { |
|
298 |
JsonObject user = new JsonObject(); |
|
299 |
user.addProperty("coPersonId", info.getAsJsonObject().get("Person").getAsJsonObject().get("Id").getAsString()); |
|
300 |
user.addProperty("name", info.getAsJsonObject().get("Given").getAsString() + " " + info.getAsJsonObject().get("Family").getAsString()); |
|
301 |
user.addProperty("memberSince", info.getAsJsonObject().get("Created").getAsString()); |
|
302 |
names.add(user); |
|
303 |
}); |
|
304 |
return names; |
|
305 |
} |
|
306 |
|
|
307 |
/** |
|
308 |
* 14. Get Users' identifiers of a Cou |
|
309 |
*/ |
|
310 |
public JsonArray getUserIdByCouId(Integer couId, boolean admin) { |
|
311 |
Map<String, String> params = new HashMap<>(); |
|
312 |
params.put("couid", couId.toString()); |
|
313 |
if (admin) { |
|
314 |
params.put("admin", "true"); |
|
315 |
} |
|
316 |
JsonElement response = httpUtils.get("identifiers.json", params); |
|
317 |
JsonArray infos = (response != null) ? response.getAsJsonObject().get("Identifiers").getAsJsonArray() : new JsonArray(); |
|
318 |
JsonArray ids = new JsonArray(); |
|
319 |
infos.forEach(info -> { |
|
320 |
JsonObject user = new JsonObject(); |
|
321 |
user.addProperty("coPersonId", info.getAsJsonObject().get("Person").getAsJsonObject().get("Id").getAsString()); |
|
322 |
user.addProperty("id", info.getAsJsonObject().get("Identifier").getAsString()); |
|
323 |
user.addProperty("memberSince", info.getAsJsonObject().get("Created").getAsString()); |
|
324 |
ids.add(user); |
|
325 |
}); |
|
326 |
return ids; |
|
327 |
} |
|
328 |
|
|
329 |
/** |
|
330 |
* 15. Assign a member role to a User |
|
331 |
*/ |
|
332 |
public void assignMemberRole(Integer coPersonId, Integer couId, Integer id) { |
|
333 |
if (id != null) { |
|
334 |
httpUtils.put("co_person_roles/" + id.toString() + ".json", jsonUtils.coPersonRoles(coPersonId, couId, "Active")); |
|
335 |
} else { |
|
336 |
httpUtils.post("co_person_roles.json", jsonUtils.coPersonRoles(coPersonId, couId, "Active")); |
|
337 |
} |
|
338 |
} |
|
339 |
|
|
340 |
/** |
|
341 |
* 16. Remove a member role from a User |
|
342 |
*/ |
|
343 |
public void removeMemberRole(Integer coPersonId, Integer couId, Integer id) { |
|
344 |
if (id != null) { |
|
345 |
httpUtils.put("co_person_roles/" + id.toString() + ".json", jsonUtils.coPersonRoles(coPersonId, couId, "Deleted")); |
|
346 |
} |
|
347 |
} |
|
348 |
|
|
349 |
/** |
|
350 |
* 17. Create a new role |
|
351 |
*/ |
|
352 |
public Integer createRole(Role role) { |
|
353 |
JsonElement element = httpUtils.post("cous.json", jsonUtils.createNewCou(role)); |
|
354 |
return element.getAsJsonObject().get("Id").getAsInt(); |
|
355 |
} |
|
356 |
|
|
357 |
/** |
|
358 |
* 18. Get User's email |
|
359 |
*/ |
|
360 |
public String getUserEmail(Integer coPersonId) { |
|
361 |
Map<String, String> params = new HashMap<>(); |
|
362 |
params.put("copersonid", coPersonId.toString()); |
|
363 |
JsonElement response = httpUtils.get("email_addresses.json", params); |
|
364 |
JsonObject info = (response != null) ? response.getAsJsonObject().get("EmailAddresses").getAsJsonArray().get(0).getAsJsonObject() : null; |
|
365 |
return (info != null) ? info.getAsJsonObject().get("Mail").getAsString() : null; |
|
366 |
} |
|
367 |
|
|
368 |
/** |
|
369 |
* 19. Get User's names |
|
370 |
*/ |
|
371 |
public String getUserNames(Integer coPersonId) { |
|
372 |
Map<String, String> params = new HashMap<>(); |
|
373 |
params.put("copersonid", coPersonId.toString()); |
|
374 |
JsonElement response = httpUtils.get("names.json", params); |
|
375 |
JsonObject info = (response != null) ? response.getAsJsonObject().get("Names").getAsJsonArray().get(0).getAsJsonObject() : null; |
|
376 |
return (info != null) ? info.getAsJsonObject().get("Given").getAsString() + " " + info.getAsJsonObject().get("Family").getAsString() : null; |
|
377 |
} |
|
378 |
|
|
379 |
/** |
|
380 |
* 20. Get User's identifier |
|
381 |
*/ |
|
382 |
public String getUserId(Integer coPersonId) { |
|
383 |
Map<String, String> params = new HashMap<>(); |
|
384 |
params.put("copersonid", coPersonId.toString()); |
|
385 |
JsonElement response = httpUtils.get("identifiers.json", params); |
|
386 |
JsonObject info = (response != null) ? response.getAsJsonObject().get("Identifiers").getAsJsonArray().get(0).getAsJsonObject() : null; |
|
387 |
return (info != null) ? info.getAsJsonObject().get("Identifier").getAsString() : null; |
|
388 |
} |
|
389 |
|
|
390 |
/** |
|
391 |
* 21. Assign an admin role to a User |
|
392 |
*/ |
|
393 |
public void assignAdminRole(Integer coPersonId, Integer couId) { |
|
394 |
JsonObject group = getCouAdminGroup(couId); |
|
395 |
if (group != null) { |
|
396 |
httpUtils.post("co_group_members.json", jsonUtils.coGroupMembers(group.get("Id").getAsInt(), coPersonId, true)); |
|
397 |
} |
|
398 |
} |
|
399 |
|
|
400 |
/** |
|
401 |
* 22. Remove an admin role from a User |
|
402 |
*/ |
|
403 |
public void removeAdminRole(Integer coPersonId, Integer couId) { |
|
404 |
JsonObject adminGroup = this.getCouAdminGroup(couId); |
|
405 |
JsonArray admins = this.getGroupMembers(adminGroup.get("Id").getAsInt()); |
|
406 |
Integer id = null; |
|
407 |
for (JsonElement admin : admins) { |
|
408 |
if (admin.getAsJsonObject().get("Person").getAsJsonObject().get("Id").getAsInt() == coPersonId) { |
|
409 |
id = admin.getAsJsonObject().get("Id").getAsInt(); |
|
410 |
} |
|
411 |
} |
|
412 |
if (id != null) { |
|
413 |
httpUtils.delete("co_group_members/" + id.toString() + ".json"); |
|
414 |
} |
|
415 |
} |
|
416 |
} |
modules/dnet-openaire-users/trunk/src/main/java/eu/dnetlib/openaire/usermanagement/utils/HttpUtils.java | ||
---|---|---|
10 | 10 |
import org.springframework.stereotype.Component; |
11 | 11 |
import org.springframework.web.client.RestTemplate; |
12 | 12 |
|
13 |
import javax.servlet.http.Cookie; |
|
14 |
import javax.servlet.http.HttpServletRequest; |
|
13 | 15 |
import java.nio.charset.Charset; |
16 |
import java.util.Arrays; |
|
14 | 17 |
import java.util.Map; |
15 | 18 |
|
16 | 19 |
@Component |
... | ... | |
18 | 21 |
|
19 | 22 |
private static final Logger logger = Logger.getLogger(HttpUtils.class); |
20 | 23 |
|
21 |
@Value("${registry.issuer}") |
|
22 |
private String issuer; |
|
23 |
|
|
24 |
@Value("${registry.user}") |
|
25 |
private String user; |
|
26 |
|
|
27 |
@Value("${registry.password}") |
|
28 |
private String password; |
|
29 |
|
|
30 |
public JsonElement post(String path, JsonObject body) { |
|
24 |
public JsonElement post(String path, String session, JsonObject body, Map<String, String> params) { |
|
31 | 25 |
RestTemplate restTemplate = new RestTemplate(); |
32 |
HttpHeaders headers = createHeaders(user, password); |
|
26 |
String url = path + ((params != null) ? createParams(params) : ""); |
|
27 |
HttpHeaders headers = createHeaders(session); |
|
33 | 28 |
headers.setContentType(MediaType.APPLICATION_JSON); |
34 |
HttpEntity<String> request = new HttpEntity<>(body.toString(), headers);
|
|
35 |
ResponseEntity<String> responseEntity = restTemplate.exchange(issuer + path, HttpMethod.POST, request, String.class);
|
|
29 |
HttpEntity<String> request = new HttpEntity<>((body != null)?body.toString():"", headers);
|
|
30 |
ResponseEntity<String> responseEntity = restTemplate.exchange(url, HttpMethod.POST, request, String.class);
|
|
36 | 31 |
if (responseEntity.getBody() != null) { |
37 | 32 |
return new JsonParser().parse(responseEntity.getBody()); |
38 | 33 |
} else { |
... | ... | |
40 | 35 |
} |
41 | 36 |
} |
42 | 37 |
|
43 |
public JsonElement put(String path, JsonObject body) { |
|
38 |
public JsonElement put(String path, String session, JsonObject body) {
|
|
44 | 39 |
RestTemplate restTemplate = new RestTemplate(); |
45 |
HttpHeaders headers = createHeaders(user, password);
|
|
40 |
HttpHeaders headers = createHeaders(session);
|
|
46 | 41 |
headers.setContentType(MediaType.APPLICATION_JSON); |
47 | 42 |
HttpEntity<String> request = new HttpEntity<>(body.toString(), headers); |
48 |
ResponseEntity<String> responseEntity = restTemplate.exchange(issuer + path, HttpMethod.PUT, request, String.class);
|
|
43 |
ResponseEntity<String> responseEntity = restTemplate.exchange(path, HttpMethod.PUT, request, String.class); |
|
49 | 44 |
if (responseEntity.getBody() != null) { |
50 | 45 |
return new JsonParser().parse(responseEntity.getBody()); |
51 | 46 |
} else { |
... | ... | |
53 | 48 |
} |
54 | 49 |
} |
55 | 50 |
|
56 |
public JsonElement get(String path, Map<String, String> params) { |
|
51 |
public JsonElement get(String path, String session, Map<String, String> params) {
|
|
57 | 52 |
RestTemplate restTemplate = new RestTemplate(); |
58 |
String url = issuer + path + ((params != null) ? createParams(params) : null); |
|
53 |
String url = path + ((params != null) ? createParams(params) : ""); |
|
54 |
HttpHeaders headers = createHeaders(session); |
|
59 | 55 |
ResponseEntity<String> responseEntity = restTemplate.exchange |
60 |
(url, HttpMethod.GET, new HttpEntity<>(createHeaders(user, password)), String.class);
|
|
56 |
(url, HttpMethod.GET, new HttpEntity<>(headers), String.class);
|
|
61 | 57 |
if (responseEntity.getBody() != null) { |
62 | 58 |
return new JsonParser().parse(responseEntity.getBody()); |
63 | 59 |
} else { |
... | ... | |
65 | 61 |
} |
66 | 62 |
} |
67 | 63 |
|
68 |
public JsonElement delete(String path) { |
|
64 |
public JsonElement delete(String path, String session, Map<String, String> params) {
|
|
69 | 65 |
RestTemplate restTemplate = new RestTemplate(); |
70 |
String url = issuer + path; |
|
66 |
String url = path + ((params != null) ? createParams(params) : ""); |
|
67 |
HttpHeaders headers = createHeaders(session); |
|
71 | 68 |
ResponseEntity<String> responseEntity = restTemplate.exchange |
72 |
(url, HttpMethod.DELETE, new HttpEntity<>(createHeaders(user, password)), String.class);
|
|
69 |
(url, HttpMethod.DELETE, new HttpEntity<>(headers), String.class);
|
|
73 | 70 |
if (responseEntity.getBody() != null) { |
74 | 71 |
return new JsonParser().parse(responseEntity.getBody()); |
75 | 72 |
} else { |
... | ... | |
92 | 89 |
return ret.toString(); |
93 | 90 |
} |
94 | 91 |
|
95 |
private HttpHeaders createHeaders(String username, String password) {
|
|
96 |
return new HttpHeaders() {{
|
|
97 |
String auth = username + ":" + password;
|
|
98 |
byte[] encodedAuth = Base64.encodeBase64(
|
|
99 |
auth.getBytes(Charset.forName("US-ASCII")));
|
|
100 |
String authHeader = "Basic " + new String(encodedAuth);
|
|
101 |
set("Authorization", authHeader);
|
|
102 |
}};
|
|
92 |
private HttpHeaders createHeaders(String token) {
|
|
93 |
if(token != null) {
|
|
94 |
return new HttpHeaders() {{
|
|
95 |
set("Session", token);
|
|
96 |
}};
|
|
97 |
} else {
|
|
98 |
return new HttpHeaders();
|
|
99 |
} |
|
103 | 100 |
} |
101 |
|
|
102 |
public String getCookie(HttpServletRequest req, String cookieName) { |
|
103 |
return Arrays.stream(req.getCookies()) |
|
104 |
.filter(c -> c.getName().equals(cookieName)) |
|
105 |
.findFirst() |
|
106 |
.map(Cookie::getValue) |
|
107 |
.orElse(null); |
|
108 |
} |
|
104 | 109 |
} |
modules/dnet-openaire-users/trunk/src/main/java/eu/dnetlib/openaire/usermanagement/utils/JsonUtils.java | ||
---|---|---|
1 | 1 |
package eu.dnetlib.openaire.usermanagement.utils; |
2 | 2 |
|
3 |
import com.google.gson.Gson; |
|
4 |
import com.google.gson.JsonArray; |
|
5 | 3 |
import com.google.gson.JsonElement; |
6 | 4 |
import com.google.gson.JsonObject; |
7 | 5 |
import eu.dnetlib.openaire.user.pojos.RoleVerification; |
8 |
import eu.dnetlib.openaire.usermanagement.dto.Role; |
|
9 |
import eu.dnetlib.openaire.usermanagement.dto.User; |
|
10 |
import org.springframework.beans.factory.annotation.Value; |
|
11 | 6 |
import org.springframework.stereotype.Component; |
12 | 7 |
|
13 |
import java.util.Arrays; |
|
14 |
import java.util.Optional; |
|
15 |
|
|
16 | 8 |
@Component |
17 | 9 |
public class JsonUtils { |
18 | 10 |
|
19 |
@Value("${registry.version}") |
|
20 |
private String version; |
|
21 |
|
|
22 |
@Value("${registry.coid}") |
|
23 |
private String coid; |
|
24 |
|
|
25 |
public JsonObject coPersonRoles(Integer coPersonId, Integer couId, String status) { |
|
26 |
JsonObject role = new JsonObject(); |
|
27 |
JsonArray coPersonRoles = new JsonArray(); |
|
28 |
JsonObject coPersonRole = new JsonObject(); |
|
29 |
JsonObject person = new JsonObject(); |
|
30 |
person.addProperty("Type", "CO"); |
|
31 |
person.addProperty("Id", coPersonId.toString()); |
|
32 |
coPersonRole.addProperty("Version", version); |
|
33 |
coPersonRole.add("Person", person); |
|
34 |
coPersonRole.addProperty("CouId", couId.toString()); |
|
35 |
coPersonRole.addProperty("Affiliation", "member"); |
|
36 |
coPersonRole.addProperty("Title", ""); |
|
37 |
coPersonRole.addProperty("O", "Openaire"); |
|
38 |
coPersonRole.addProperty("Status", status); |
|
39 |
coPersonRole.addProperty("ValidFrom", ""); |
|
40 |
coPersonRole.addProperty("ValidThrough", ""); |
|
41 |
coPersonRoles.add(coPersonRole); |
|
42 |
role.addProperty("RequestType", "CoPersonRoles"); |
|
43 |
role.addProperty("Version", version); |
|
44 |
role.add("CoPersonRoles", coPersonRoles); |
|
45 |
return role; |
|
46 |
} |
|
47 |
|
|
48 |
public JsonObject coGroupMembers(Integer coGroupId, Integer coPersonId, boolean member) { |
|
49 |
JsonObject coGroup = new JsonObject(); |
|
50 |
JsonArray coGroupMembers = new JsonArray(); |
|
51 |
JsonObject coGroupMember = new JsonObject(); |
|
52 |
JsonObject person = new JsonObject(); |
|
53 |
person.addProperty("Type", "CO"); |
|
54 |
person.addProperty("Id", coPersonId.toString()); |
|
55 |
coGroupMember.addProperty("Version", version); |
|
56 |
coGroupMember.add("Person", person); |
|
57 |
coGroupMember.addProperty("CoGroupId", coGroupId.toString()); |
|
58 |
coGroupMember.addProperty("Member", member); |
|
59 |
coGroupMember.addProperty("Owner", false); |
|
60 |
coGroupMember.addProperty("ValidFrom", ""); |
|
61 |
coGroupMember.addProperty("ValidThrough", ""); |
|
62 |
coGroupMembers.add(coGroupMember); |
|
63 |
coGroup.addProperty("RequestType", "CoGroupMembers"); |
|
64 |
coGroup.addProperty("Version", version); |
|
65 |
coGroup.add("CoGroupMembers", coGroupMembers); |
|
66 |
return coGroup; |
|
67 |
} |
|
68 |
|
|
69 |
public JsonObject createNewCou(Role role) { |
|
70 |
JsonObject cou = new JsonObject(); |
|
71 |
JsonArray cous = new JsonArray(); |
|
72 |
JsonObject newCou = new JsonObject(); |
|
73 |
newCou.addProperty("Version", version); |
|
74 |
newCou.addProperty("CoId", coid); |
|
75 |
newCou.addProperty("Name", role.getName()); |
|
76 |
newCou.addProperty("Description", role.getDescription()); |
|
77 |
cous.add(newCou); |
|
78 |
cou.addProperty("RequestType", "Cous"); |
|
79 |
cou.addProperty("Version", version); |
|
80 |
cou.add("Cous", cous); |
|
81 |
return cou; |
|
82 |
} |
|
83 |
|
|
84 | 11 |
public JsonObject createVerification(RoleVerification roleVerification) { |
85 | 12 |
JsonObject verification = new JsonObject(); |
86 | 13 |
verification.addProperty("id", roleVerification.getId()); |
... | ... | |
92 | 19 |
return verification; |
93 | 20 |
} |
94 | 21 |
|
95 |
public static JsonArray mergeUserInfo(JsonArray users, JsonArray emails, JsonArray names, Gson gson) { |
|
96 |
User[] emailsMapped = gson.fromJson(emails, User[].class); |
|
97 |
User[] namesMapped = gson.fromJson(names, User[].class); |
|
98 |
for(JsonElement user: users) { |
|
99 |
Optional<User> emailUser = Arrays.stream(emailsMapped).filter(email -> user.getAsJsonObject().get("coPersonId").getAsString().equals(email.getCoPersonId())).findFirst(); |
|
100 |
Optional<User> nameUser = Arrays.stream(namesMapped).filter(name -> user.getAsJsonObject().get("coPersonId").getAsString().equals(name.getCoPersonId())).findFirst(); |
|
101 |
emailUser.ifPresent(value -> user.getAsJsonObject().addProperty("email", value.getEmail())); |
|
102 |
nameUser.ifPresent(value -> user.getAsJsonObject().addProperty("name", value.getName())); |
|
103 |
user.getAsJsonObject().remove("coPersonId"); |
|
104 |
} |
|
105 |
return users; |
|
106 |
} |
|
107 |
|
|
108 | 22 |
public JsonObject createResponse(JsonElement response) { |
109 | 23 |
JsonObject json = new JsonObject(); |
110 | 24 |
json.add("response", response); |
modules/dnet-openaire-users/trunk/src/main/java/eu/dnetlib/openaire/usermanagement/utils/RoleManagement.java | ||
---|---|---|
1 |
package eu.dnetlib.openaire.usermanagement.utils; |
|
2 |
|
|
3 |
import com.google.gson.JsonElement; |
|
4 |
import org.apache.log4j.Logger; |
|
5 |
import org.springframework.beans.factory.annotation.Autowired; |
|
6 |
import org.springframework.beans.factory.annotation.Value; |
|
7 |
import org.springframework.stereotype.Service; |
|
8 |
import org.springframework.web.client.HttpClientErrorException; |
|
9 |
|
|
10 |
import javax.servlet.http.HttpServletRequest; |
|
11 |
import java.util.HashMap; |
|
12 |
import java.util.Map; |
|
13 |
|
|
14 |
@Service |
|
15 |
public class RoleManagement { |
|
16 |
|
|
17 |
private static final Logger logger = Logger.getLogger(RoleManagement.class); |
|
18 |
|
|
19 |
@Value("${role-management.url}") |
|
20 |
private String url; |
|
21 |
public HttpUtils httpUtils; |
|
22 |
public AuthorizationService authorizationService; |
|
23 |
|
|
24 |
@Autowired |
|
25 |
public RoleManagement(HttpUtils httpUtils, AuthorizationService authorizationService) { |
|
26 |
this.httpUtils = httpUtils; |
|
27 |
this.authorizationService = authorizationService; |
|
28 |
} |
|
29 |
|
|
30 |
private String mapType(String type, boolean communityMap) { |
|
31 |
if (type.equals("organization")) { |
|
32 |
type = "institution"; |
|
33 |
} else if (type.equals("ri") && communityMap) { |
|
34 |
type = "community"; |
|
35 |
} |
|
36 |
return type; |
|
37 |
} |
|
38 |
|
|
39 |
public JsonElement assignMemberRole(String type, String id, HttpServletRequest request) throws HttpClientErrorException { |
|
40 |
return this.httpUtils.post(url + "/member/" + mapType(type, false) + "/" + id, getSessionCookie(request), null, null); |
|
41 |
} |
|
42 |
|
|
43 |
public JsonElement assignManagerRole(String type, String id, HttpServletRequest request) throws HttpClientErrorException { |
|
44 |
Map<String, String> params = new HashMap<>(); |
|
45 |
params.put("force", "true"); |
|
46 |
return this.httpUtils.post(url + "/admin/" + mapType(type, true) + "/" + id, getSessionCookie(request), null, params); |
|
47 |
} |
|
48 |
|
|
49 |
public JsonElement removeMemberRole(String type, String id, HttpServletRequest request) throws HttpClientErrorException { |
|
50 |
Map<String, String> params = new HashMap<>(); |
|
51 |
params.put("force", "true"); |
|
52 |
return this.httpUtils.delete(url + "/member/" + mapType(type, false) + "/" + id, getSessionCookie(request), params); |
|
53 |
} |
|
54 |
|
|
55 |
public JsonElement removeMemberRole(String type, String id, String email) throws HttpClientErrorException { |
|
56 |
Map<String, String> params = new HashMap<>(); |
|
57 |
params.put("email", email); |
|
58 |
return this.httpUtils.delete(url + "/member/" + mapType(type, false) + "/" + id, null, params); |
|
59 |
} |
|
60 |
|
|
61 |
public JsonElement removeManagerRole(String type, String id, HttpServletRequest request) throws HttpClientErrorException { |
|
62 |
return this.httpUtils.delete(url + "/admin/" + mapType(type, true) + "/" + id, getSessionCookie(request), null); |
|
63 |
} |
|
64 |
|
|
65 |
public JsonElement removeManagerRole(String type, String id, String email) throws HttpClientErrorException { |
|
66 |
Map<String, String> params = new HashMap<>(); |
|
67 |
params.put("email", email); |
|
68 |
return this.httpUtils.delete(url + "/admin/" + mapType(type, true) + "/" + id, null, params); |
|
69 |
} |
|
70 |
|
|
71 |
public JsonElement getAllMembers(String type, String id) throws HttpClientErrorException { |
|
72 |
return this.httpUtils.get(url + "/member/" + mapType(type, false) + "/" + id, null, null); |
|
73 |
} |
|
74 |
|
|
75 |
public int getAllMembersCount(String type, String id) throws HttpClientErrorException { |
|
76 |
return this.httpUtils.get(url + "/member/" + mapType(type, false) + "/" + id + "/count", null, null).getAsInt(); |
|
77 |
} |
|
78 |
|
|
79 |
public JsonElement getAllManagers(String type, String id) throws HttpClientErrorException { |
|
80 |
Map<String, String> params = new HashMap<>(); |
|
81 |
if(!authorizationService.isPortalAdmin() && !authorizationService.isCurator(type) && !authorizationService.isManager(type, id)) { |
|
82 |
params.put("name", "false"); |
|
83 |
params.put("email", "false"); |
|
84 |
} |
|
85 |
return this.httpUtils.get(url + "/admin/" + mapType(type, true) + "/" + id, null, params); |
|
86 |
} |
|
87 |
|
|
88 |
public JsonElement getAllCurators(String type) throws HttpClientErrorException { |
|
89 |
return this.httpUtils.get(url + "/curator/" + mapType(type, false), null, null); |
|
90 |
} |
|
91 |
|
|
92 |
public boolean isMember(String type, String id, String email) throws HttpClientErrorException { |
|
93 |
for (JsonElement element : this.httpUtils.get(url + "/member/" + mapType(type, false) + "/" + id, null, null).getAsJsonArray()) { |
|
94 |
if (element.getAsJsonObject().get("email").getAsString().equalsIgnoreCase(email)) { |
|
95 |
return true; |
|
96 |
} |
|
97 |
} |
|
98 |
return false; |
|
99 |
} |
|
100 |
|
|
101 |
public boolean isManager(String type, String id, String email) throws HttpClientErrorException { |
|
102 |
for (JsonElement element : this.httpUtils.get(url + "/admin/" + mapType(type, true) + "/" + id, null, null).getAsJsonArray()) { |
|
103 |
if (element.getAsJsonObject().get("email").getAsString().equalsIgnoreCase(email)) { |
|
104 |
return true; |
|
105 |
} |
|
106 |
} |
|
107 |
return false; |
|
108 |
} |
|
109 |
|
|
110 |
public JsonElement createMemberRole(String type, String id) { |
|
111 |
Map<String, String> params = new HashMap<>(); |
|
112 |
params.put("description", mapType(type, false) + " " + id); |
|
113 |
return this.httpUtils.post(url + "/member/" + mapType(type, false) + "/" + id + "/create", null, null, params); |
|
114 |
} |
|
115 |
|
|
116 |
public JsonElement createCuratorRole(String type) { |
|
117 |
Map<String, String> params = new HashMap<>(); |
|
118 |
params.put("description", mapType(type, false) + " Curator"); |
|
119 |
return this.httpUtils.post(url + "/curator/" + mapType(type, false) + "/create", null, null, params); |
|
120 |
} |
|
121 |
|
|
122 |
public JsonElement createRole(String name, String description) { |
|
123 |
Map<String, String> params = new HashMap<>(); |
|
124 |
params.put("name", name); |
|
125 |
params.put("description", description); |
|
126 |
return this.httpUtils.post(url + "/super/create", null, null, params); |
|
127 |
} |
|
128 |
|
|
129 |
private String getSessionCookie(HttpServletRequest request) { |
|
130 |
return httpUtils.getCookie(request, "openAIRESession"); |
|
131 |
} |
|
132 |
} |
modules/dnet-openaire-users/trunk/src/main/java/eu/dnetlib/openaire/usermanagement/api/RegistryService.java | ||
---|---|---|
1 | 1 |
package eu.dnetlib.openaire.usermanagement.api; |
2 | 2 |
|
3 |
import com.google.gson.*; |
|
4 |
import eu.dnetlib.openaire.user.login.utils.AuthoritiesUpdater; |
|
3 |
import com.google.gson.JsonArray; |
|
4 |
import com.google.gson.JsonElement; |
|
5 |
import com.google.gson.JsonObject; |
|
6 |
import com.google.gson.JsonParser; |
|
5 | 7 |
import eu.dnetlib.openaire.user.pojos.RoleVerification; |
6 | 8 |
import eu.dnetlib.openaire.user.utils.EmailSender; |
7 | 9 |
import eu.dnetlib.openaire.usermanagement.dto.Role; |
8 |
import eu.dnetlib.openaire.usermanagement.dto.User; |
|
9 | 10 |
import eu.dnetlib.openaire.usermanagement.utils.AuthorizationService; |
10 | 11 |
import eu.dnetlib.openaire.usermanagement.utils.JsonUtils; |
11 |
import eu.dnetlib.openaire.usermanagement.utils.RegistryCalls;
|
|
12 |
import eu.dnetlib.openaire.usermanagement.utils.RoleManagement;
|
|
12 | 13 |
import eu.dnetlib.openaire.usermanagement.utils.VerificationUtils; |
13 | 14 |
import org.apache.log4j.Logger; |
14 | 15 |
import org.springframework.beans.factory.annotation.Autowired; |
15 | 16 |
import org.springframework.http.HttpStatus; |
16 | 17 |
import org.springframework.security.access.prepost.PreAuthorize; |
17 |
import org.springframework.security.core.authority.SimpleGrantedAuthority; |
|
18 | 18 |
import org.springframework.stereotype.Component; |
19 |
import org.springframework.web.bind.annotation.RequestBody; |
|
19 |
import org.springframework.web.bind.annotation.*; |
|
20 |
import org.springframework.web.client.HttpClientErrorException; |
|
20 | 21 |
|
21 | 22 |
import javax.mail.MessagingException; |
23 |
import javax.servlet.http.HttpServletRequest; |
|
22 | 24 |
import javax.ws.rs.*; |
25 |
import javax.ws.rs.core.Context; |
|
23 | 26 |
import javax.ws.rs.core.MediaType; |
24 | 27 |
import javax.ws.rs.core.Response; |
25 |
import java.util.*; |
|
26 | 28 |
|
27 | 29 |
@Component(value = "RegistryService") |
30 |
@CrossOrigin("*") |
|
28 | 31 |
@Path("/registry") |
29 | 32 |
public class RegistryService { |
30 | 33 |
|
31 | 34 |
private static final Logger logger = Logger.getLogger(RegistryService.class); |
32 | 35 |
|
33 | 36 |
@Autowired |
34 |
private RegistryCalls calls;
|
|
37 |
private RoleManagement calls;
|
|
35 | 38 |
|
36 | 39 |
@Autowired |
37 | 40 |
private JsonUtils jsonUtils; |
38 | 41 |
|
39 | 42 |
@Autowired |
40 |
private EmailSender emailSender; |
|
41 |
|
|
42 |
@Autowired |
|
43 | 43 |
private VerificationUtils verificationUtils; |
44 | 44 |
|
45 | 45 |
@Autowired |
46 |
private AuthoritiesUpdater authoritiesUpdater;
|
|
46 |
private EmailSender emailSender;
|
|
47 | 47 |
|
48 | 48 |
@Autowired |
49 | 49 |
private AuthorizationService authorizationService; |
50 | 50 |
|
51 |
private final Gson gson = new Gson(); |
|
52 |
|
|
53 | 51 |
/** |
54 | 52 |
* Subscribe to a type(Community, etc.) with id(ee, egi, etc.) |
55 | 53 |
*/ |
... | ... | |
57 | 55 |
@POST |
58 | 56 |
@Produces(MediaType.APPLICATION_JSON) |
59 | 57 |
@PreAuthorize("isAuthenticated() and @AuthorizationService.isCommunity(#type)") |
60 |
public Response subscribe(@PathParam("type") String type, @PathParam("id") String id) { |
|
61 |
Integer coPersonId = calls.getCoPersonIdByIdentifier(); |
|
62 |
Integer couId = calls.getCouId(type, id); |
|
63 |
if (couId != null) { |
|
64 |
Integer role = calls.getRoleId(coPersonId, couId); |
|
65 |
calls.assignMemberRole(coPersonId, couId, role); |
|
66 |
authoritiesUpdater.update(authorizationService.getEmail(), old -> { |
|
67 |
HashSet<SimpleGrantedAuthority> authorities = new HashSet<>((Collection<? extends SimpleGrantedAuthority>) old); |
|
68 |
authorities.add(new SimpleGrantedAuthority(authorizationService.member(type, id))); |
|
69 |
return authorities; |
|
70 |
}); |
|
71 |
return Response.status(HttpStatus.OK.value()).entity(jsonUtils.createResponse("Role has been assigned").toString()).type(MediaType.APPLICATION_JSON).build(); |
|
72 |
} else { |
|
73 |
return Response.status(HttpStatus.NOT_FOUND.value()).entity(jsonUtils.createResponse("Role has not been found").toString()).type(MediaType.APPLICATION_JSON).build(); |
|
58 |
public Response subscribe(@PathParam("type") String type, @PathParam("id") String id, @Context final HttpServletRequest request) { |
|
59 |
try { |
|
60 |
JsonElement response = calls.assignMemberRole(type, id, request); |
|
61 |
return Response.status(HttpStatus.OK.value()).entity(response.toString()).type(MediaType.APPLICATION_JSON).build(); |
|
62 |
} catch (HttpClientErrorException e) { |
|
63 |
String message = new JsonParser().parse(e.getResponseBodyAsString()).getAsJsonObject().get("message").getAsString(); |
|
64 |
return Response.status(e.getStatusCode().value()).entity(jsonUtils.createResponse(message).toString()).type(MediaType.APPLICATION_JSON).build(); |
|
74 | 65 |
} |
75 | 66 |
} |
76 | 67 |
|
... | ... | |
82 | 73 |
@POST |
83 | 74 |
@Produces(MediaType.APPLICATION_JSON) |
84 | 75 |
@PreAuthorize("isAuthenticated() and @AuthorizationService.isCommunity(#type)") |
85 |
public Response unsubscribe(@PathParam("type") String type, @PathParam("id") String id) { |
|
86 |
Integer coPersonId = calls.getCoPersonIdByIdentifier(); |
|
87 |
Integer couId = calls.getCouId(type, id); |
|
88 |
if (couId != null) { |
|
89 |
Integer role = calls.getRoleId(coPersonId, couId); |
|
90 |
if (role != null) { |
|
91 |
calls.removeAdminRole(coPersonId, couId); |
|
92 |
calls.removeMemberRole(coPersonId, couId, role); |
|
93 |
authoritiesUpdater.update(authorizationService.getEmail(), old -> { |
|
94 |
HashSet<SimpleGrantedAuthority> authorities = new HashSet<>((Collection<? extends SimpleGrantedAuthority>) old); |
|
95 |
authorities.remove(new SimpleGrantedAuthority(authorizationService.manager(type, id))); |
|
96 |
authorities.remove(new SimpleGrantedAuthority(authorizationService.member(type, id))); |
|
97 |
return authorities; |
|
98 |
}); |
|
99 |
return Response.status(HttpStatus.OK.value()).entity(jsonUtils.createResponse("Role has been removed").toString()).type(MediaType.APPLICATION_JSON).build(); |
|
100 |
} else |
|
101 |
return Response.status(HttpStatus.NOT_FOUND.value()).entity(jsonUtils.createResponse("User does not have this role").toString()).type(MediaType.APPLICATION_JSON).build(); |
|
102 |
} else { |
|
103 |
return Response.status(HttpStatus.NOT_FOUND.value()).entity(jsonUtils.createResponse("Role has not been found").toString()).type(MediaType.APPLICATION_JSON).build(); |
|
76 |
public Response unsubscribe(@PathParam("type") String type, @PathParam("id") String id, @Context final HttpServletRequest request) { |
|
77 |
try { |
|
78 |
JsonElement response = calls.removeMemberRole(type, id, request); |
|
79 |
return Response.status(HttpStatus.OK.value()).entity(response.toString()).type(MediaType.APPLICATION_JSON).build(); |
|
80 |
} catch (HttpClientErrorException e) { |
|
81 |
String message = new JsonParser().parse(e.getResponseBodyAsString()).getAsJsonObject().get("message").getAsString(); |
|
82 |
return Response.status(e.getStatusCode().value()).entity(jsonUtils.createResponse(message).toString()).type(MediaType.APPLICATION_JSON).build(); |
|
104 | 83 |
} |
105 | 84 |
} |
106 | 85 |
|
107 | 86 |
/** |
87 |
* Create a new curator role with the given type(Community, etc.). |
|
88 |
**/ |
|
89 |
@Path("/create/{type}") |
|
90 |
@POST |
|
91 |
@Produces(MediaType.APPLICATION_JSON) |
|
92 |
@PreAuthorize("hasAnyAuthority(@AuthorizationService.PORTAL_ADMIN)") |
|
93 |
public Response createCuratorRole(@PathParam("type") String type) { |
|
94 |
try { |
|
95 |
JsonElement response = calls.createCuratorRole(type); |
|
96 |
return Response.status(HttpStatus.CREATED.value()).entity(response.toString()).type(MediaType.APPLICATION_JSON).build(); |
|
97 |
} catch (HttpClientErrorException e) { |
|
98 |
String message = new JsonParser().parse(e.getResponseBodyAsString()).getAsJsonObject().get("message").getAsString(); |
|
99 |
return Response.status(e.getStatusCode().value()).entity(jsonUtils.createResponse(message).toString()).type(MediaType.APPLICATION_JSON).build(); |
|
100 |
} |
|
101 |
} |
|
102 |
|
|
103 |
/** |
|
108 | 104 |
* Create a new role with the given type(Community, etc.) with id(ee, egi, etc.). |
109 | 105 |
**/ |
110 | 106 |
@Path("/create/{type}/{id}") |
... | ... | |
112 | 108 |
@Produces(MediaType.APPLICATION_JSON) |
113 | 109 |
@PreAuthorize("hasAnyAuthority(@AuthorizationService.PORTAL_ADMIN)") |
114 | 110 |
public Response createMemberRole(@PathParam("type") String type, @PathParam("id") String id) { |
115 |
if (calls.getCouId(type, id) != null) { |
|
116 |
if(calls.createRole(new Role(type + "." + id,calls.mapType(type, false) + " " + id)) != null) { |
|
117 |
return Response.status(HttpStatus.OK.value()).entity(jsonUtils.createResponse("Role has been created").toString()).type(MediaType.APPLICATION_JSON).build(); |
|
118 |
} else { |
|
119 |
return Response.status(HttpStatus.BAD_REQUEST.value()).entity(jsonUtils.createResponse("An error has occurred. Please try again later").toString()).type(MediaType.APPLICATION_JSON).build(); |
|
120 |
} |
|
121 |
} else { |
|
122 |
return Response.status(HttpStatus.CONFLICT.value()).entity(jsonUtils.createResponse("Role has already existed").toString()).type(MediaType.APPLICATION_JSON).build(); |
|
111 |
try { |
|
112 |
JsonElement response = calls.createMemberRole(type, id); |
|
113 |
return Response.status(HttpStatus.CREATED.value()).entity(response.toString()).type(MediaType.APPLICATION_JSON).build(); |
|
114 |
} catch (HttpClientErrorException e) { |
|
115 |
String message = new JsonParser().parse(e.getResponseBodyAsString()).getAsJsonObject().get("message").getAsString(); |
|
116 |
return Response.status(e.getStatusCode().value()).entity(jsonUtils.createResponse(message).toString()).type(MediaType.APPLICATION_JSON).build(); |
|
123 | 117 |
} |
124 | 118 |
} |
125 | 119 |
|
126 | 120 |
/** |
121 |
* @deprecated |
|
122 |
* |
|
127 | 123 |
* Create a new role with the given name and description. |
128 | 124 |
**/ |
129 | 125 |
@Path("/createRole") |
... | ... | |
132 | 128 |
@Consumes(MediaType.APPLICATION_JSON) |
133 | 129 |
@PreAuthorize("hasAnyAuthority(@AuthorizationService.PORTAL_ADMIN)") |
134 | 130 |
public Response createRole(@RequestBody Role role) { |
135 |
if (calls.getCouId(role.getName()) == null) { |
|
136 |
if(calls.createRole(role) != null) { |
|
137 |
return Response.status(HttpStatus.OK.value()).entity(jsonUtils.createResponse("Role has been created").toString()).type(MediaType.APPLICATION_JSON).build(); |
|
138 |
} else { |
|
139 |
return Response.status(HttpStatus.BAD_REQUEST.value()).entity(jsonUtils.createResponse("An error has occurred. Please try again later").toString()).type(MediaType.APPLICATION_JSON).build(); |
|
140 |
} |
|
141 |
} else { |
|
142 |
return Response.status(HttpStatus.CONFLICT.value()).entity(jsonUtils.createResponse("Role has already existed").toString()).type(MediaType.APPLICATION_JSON).build(); |
|
131 |
try { |
|
132 |
JsonElement response = calls.createRole(role.getName(), role.getDescription()); |
|
133 |
return Response.status(HttpStatus.CREATED.value()).entity(response.toString()).type(MediaType.APPLICATION_JSON).build(); |
|
134 |
} catch (HttpClientErrorException e) { |
|
135 |
String message = new JsonParser().parse(e.getResponseBodyAsString()).getAsJsonObject().get("message").getAsString(); |
|
136 |
return Response.status(e.getStatusCode().value()).entity(jsonUtils.createResponse(message).toString()).type(MediaType.APPLICATION_JSON).build(); |
|
143 | 137 |
} |
144 | 138 |
} |
145 | 139 |
|
... | ... | |
153 | 147 |
@PreAuthorize("hasAnyAuthority(@AuthorizationService.PORTAL_ADMIN, " + |
154 | 148 |
"@AuthorizationService.curator(#type), @AuthorizationService.manager(#type, #id))") |
155 | 149 |
public Response inviteManager(@PathParam("type") String type, @PathParam("id") String id, @RequestBody String body) { |
156 |
Integer couId = calls.getCouId(type, id); |
|
157 |
if (couId != null) { |
|
150 |
try { |
|
158 | 151 |
JsonObject details = new JsonParser().parse(body).getAsJsonObject(); |
159 | 152 |
JsonObject email = details.get("email").getAsJsonObject(); |
160 | 153 |
String recipient = email.get("recipient").getAsString(); |
161 |
Integer coPersonId = calls.getCoPersonIdByEmail(recipient); |
|
162 |
if (coPersonId == null || calls.getUserAdminGroup(coPersonId, couId) == null) { |
|
154 |
if (!calls.isManager(type, id, recipient)) { |
|
163 | 155 |
JsonObject invitation = verificationUtils.createManagerInvitation(recipient, type, id); |
164 |
return sendEmail(details, email, coPersonId, invitation);
|
|
156 |
return sendEmail(details, email, invitation); |
|
165 | 157 |
} else { |
166 | 158 |
return Response.status(HttpStatus.CONFLICT.value()).entity(jsonUtils.createResponse("User has been already manager of this " + type).toString()).type(MediaType.APPLICATION_JSON).build(); |
167 | 159 |
} |
168 |
} else { |
|
169 |
return Response.status(HttpStatus.NOT_FOUND.value()).entity(jsonUtils.createResponse("Role has not been found").toString()).type(MediaType.APPLICATION_JSON).build(); |
|
160 |
} catch (HttpClientErrorException e) { |
|
161 |
String message = new JsonParser().parse(e.getResponseBodyAsString()).getAsJsonObject().get("message").getAsString(); |
|
162 |
return Response.status(e.getStatusCode().value()).entity(jsonUtils.createResponse(message).toString()).type(MediaType.APPLICATION_JSON).build(); |
|
170 | 163 |
} |
171 | 164 |
} |
172 | 165 |
|
... | ... | |
180 | 173 |
@PreAuthorize("hasAnyAuthority(@AuthorizationService.PORTAL_ADMIN, " + |
181 | 174 |
"@AuthorizationService.curator(#type), @AuthorizationService.manager(#type, #id))") |
182 | 175 |
public Response inviteMember(@PathParam("type") String type, @PathParam("id") String id, @RequestBody String body) { |
183 |
Integer couId = calls.getCouId(type, id, false); |
|
184 |
if (couId != null) { |
|
176 |
try { |
|
185 | 177 |
JsonObject details = new JsonParser().parse(body).getAsJsonObject(); |
186 | 178 |
JsonObject email = details.get("email").getAsJsonObject(); |
187 | 179 |
String recipient = email.get("recipient").getAsString(); |
188 |
Integer coPersonId = calls.getCoPersonIdByEmail(recipient); |
|
189 |
if (coPersonId == null || calls.getRoleId(coPersonId, couId) == null) { |
|
180 |
if (!calls.isMember(type, id, recipient)) { |
|
190 | 181 |
JsonObject invitation = verificationUtils.createMemberInvitation(recipient, type, id); |
191 |
return sendEmail(details, email, coPersonId, invitation);
|
|
182 |
return sendEmail(details, email, invitation); |
|
192 | 183 |
} else { |
193 | 184 |
return Response.status(HttpStatus.CONFLICT.value()).entity(jsonUtils.createResponse("User has been already member of this " + type).toString()).type(MediaType.APPLICATION_JSON).build(); |
194 | 185 |
} |
195 |
} else { |
|
196 |
return Response.status(HttpStatus.NOT_FOUND.value()).entity(jsonUtils.createResponse("Role has not been found").toString()).type(MediaType.APPLICATION_JSON).build(); |
|
186 |
} catch (HttpClientErrorException e) { |
|
187 |
String message = new JsonParser().parse(e.getResponseBodyAsString()).getAsJsonObject().get("message").getAsString(); |
|
188 |
return Response.status(e.getStatusCode().value()).entity(jsonUtils.createResponse(message).toString()).type(MediaType.APPLICATION_JSON).build(); |
|
197 | 189 |
} |
198 | 190 |
} |
199 | 191 |
|
200 |
private Response sendEmail(JsonObject details, JsonObject email, Integer coPersonId, JsonObject invitation) { |
|
201 |
String name = (coPersonId != null) ? calls.getUserNames(coPersonId) : "User"; |
|
192 |
private Response sendEmail(JsonObject details, JsonObject email, JsonObject invitation) { |
|
202 | 193 |
String link = details.get("link").getAsString() + invitation.get("link").getAsString(); |
203 | 194 |
String subject = email.get("subject").getAsString(); |
204 | 195 |
String message = email.get("body").getAsString(). |
205 |
replace("((__user__))", name).
|
|
196 |
replace("((__user__))", "User").
|
|
206 | 197 |
replace("((__link__))", link). |
207 | 198 |
replace("((__code__))", invitation.get("code").getAsString()); |
208 | 199 |
try { |
209 | 200 |
emailSender.sendEmail(email.get("recipient").getAsString(), subject, message); |
210 | 201 |
return Response.status(HttpStatus.OK.value()).entity(jsonUtils.createResponse(invitation).toString()).type(MediaType.APPLICATION_JSON).build(); |
211 | 202 |
} catch (MessagingException e) { |
212 |
logger.error(e.getMessage()); |
|
213 | 203 |
verificationUtils.deleteVerification(invitation.get("link").getAsString()); |
214 | 204 |
return Response.status(HttpStatus.BAD_REQUEST.value()).entity(jsonUtils.createResponse("Email sent failed").toString()).type(MediaType.APPLICATION_JSON).build(); |
215 | 205 |
} |
... | ... | |
224 | 214 |
@PreAuthorize("hasAnyAuthority(@AuthorizationService.PORTAL_ADMIN, " + |
225 | 215 |
"@AuthorizationService.curator(#type), @AuthorizationService.manager(#type, #id))") |
226 | 216 |
public Response cancelManagerInvitations(@PathParam("type") String type, @PathParam("id") String id, @PathParam("email") String email) { |
227 |
Integer couId = calls.getCouId(type, id); |
|
228 |
if (couId != null) { |
|
229 |
verificationUtils.deleteManagerVerifications(email, type, id); |
|
230 |
return Response.status(HttpStatus.OK.value()).entity(jsonUtils.createResponse("Invitations have been deleted").toString()).type(MediaType.APPLICATION_JSON).build(); |
|
231 |
} else { |
|
232 |
return Response.status(HttpStatus.NOT_FOUND.value()).entity(jsonUtils.createResponse("Role has not been found").toString()).type(MediaType.APPLICATION_JSON).build(); |
|
233 |
} |
|
217 |
verificationUtils.deleteManagerVerifications(email, type, id); |
|
218 |
return Response.status(HttpStatus.OK.value()).entity(jsonUtils.createResponse("Invitations have been deleted").toString()).type(MediaType.APPLICATION_JSON).build(); |
|
234 | 219 |
} |
235 | 220 |
|
236 | 221 |
/** |
... | ... | |
242 | 227 |
@PreAuthorize("hasAnyAuthority(@AuthorizationService.PORTAL_ADMIN, " + |
243 | 228 |
"@AuthorizationService.curator(#type), @AuthorizationService.manager(#type, #id))") |
244 | 229 |
public Response cancelMemberInvitations(@PathParam("type") String type, @PathParam("id") String id, @PathParam("email") String email) { |
245 |
Integer couId = calls.getCouId(type, id, false); |
|
246 |
if (couId != null) { |
|
247 |
verificationUtils.deleteMemberVerifications(email, type, id); |
|
248 |
return Response.status(HttpStatus.OK.value()).entity(jsonUtils.createResponse("Invitations have been deleted").toString()).type(MediaType.APPLICATION_JSON).build(); |
|
249 |
} else { |
|
250 |
return Response.status(HttpStatus.NOT_FOUND.value()).entity(jsonUtils.createResponse("Role has not been found").toString()).type(MediaType.APPLICATION_JSON).build(); |
|
251 |
} |
|
230 |
verificationUtils.deleteMemberVerifications(email, type, id); |
|
231 |
return Response.status(HttpStatus.OK.value()).entity(jsonUtils.createResponse("Invitations have been deleted").toString()).type(MediaType.APPLICATION_JSON).build(); |
|
252 | 232 |
} |
253 | 233 |
|
254 | 234 |
/** |
... | ... | |
280 | 260 |
/** |
281 | 261 |
* Get the verification with a specific id only if it refers to the logged in user |
282 | 262 |
*/ |
283 |
@Path("verification/{id}") |
|
263 |
@Path("/verification/{id}")
|
|
284 | 264 |
@GET |
285 | 265 |
@Produces(MediaType.APPLICATION_JSON) |
286 | 266 |
@PreAuthorize("isAuthenticated()") |
... | ... | |
300 | 280 |
/** |
301 | 281 |
* Delete the verification with a specific id. |
302 | 282 |
*/ |
303 |
@Path("verification/{id}") |
|
283 |
@Path("/verification/{id}")
|
|
304 | 284 |
@DELETE |
305 | 285 |
@Produces(MediaType.APPLICATION_JSON) |
306 | 286 |
@PreAuthorize("isAuthenticated() && @VerificationUtils.ownedVerification(#id)") |
... | ... | |
317 | 297 |
* Verify the verification with the specific id, if the code is correct and it refers to the logged in user. |
318 | 298 |
* Manager role is assigned to this user, along with the member role. |
319 | 299 |
*/ |
320 |
@Path("verification/manager/{id}") |
|
300 |
@Path("/verification/manager/{id}")
|
|
321 | 301 |
@POST |
322 | 302 |
@Produces(MediaType.APPLICATION_JSON) |
323 | 303 |
@PreAuthorize("isAuthenticated()") |
324 |
public Response verifyManager(@PathParam("id") String id, @RequestBody String code) { |
|
304 |
public Response verifyManager(@PathParam("id") String id, @RequestBody String code, @Context final HttpServletRequest request) {
|
|
325 | 305 |
RoleVerification verification = verificationUtils.getVerification(id); |
326 | 306 |
if (verification != null && verification.getVerificationType().equals("manager")) { |
327 |
Integer coPersonId = calls.getCoPersonIdByIdentifier(); |
|
328 |
if (coPersonId != null) { |
|
329 |
if (verification.getEmail().equalsIgnoreCase(authorizationService.getEmail())) { |
|
330 |
if (verification.getVerificationCode().equals(code)) { |
|
331 |
Integer couId = calls.getCouId(verification.getType(), verification.getEntity()); |
|
332 |
if (couId != null) { |
|
333 |
Integer role = calls.getRoleId(coPersonId, couId); |
|
334 |
calls.assignMemberRole(coPersonId, couId, role); |
|
335 |
if (verification.getType().equals("community") || verification.getType().equals("ri")) { |
|
336 |
Integer riCouId = calls.getCouId("ri", verification.getEntity(), false); |
|
337 |
if (riCouId != null) { |
|
338 |
calls.assignMemberRole(coPersonId, riCouId, calls.getRoleId(coPersonId, riCouId)); |
|
339 |
verificationUtils.deleteMemberVerifications(verification.getEmail(), "community", verification.getEntity()); |
|
340 |
verificationUtils.deleteMemberVerifications(verification.getEmail(), "ri", verification.getEntity()); |
|
341 |
} else { |
|
342 |
verificationUtils.deleteMemberVerifications(verification.getEmail(), "community", verification.getEntity()); |
|
343 |
} |
|
344 |
} else { |
|
345 |
verificationUtils.deleteMemberVerifications(verification.getEmail(), verification.getType(), verification.getEntity()); |
|
346 |
} |
|
347 |
if (calls.getUserAdminGroup(coPersonId, couId) == null) { |
|
348 |
if (verification.getType().equals("community") || verification.getType().equals("ri")) { |
|
349 |
verificationUtils.deleteManagerVerifications(verification.getEmail(), "community", verification.getEntity()); |
|
350 |
verificationUtils.deleteManagerVerifications(verification.getEmail(), "ri", verification.getEntity()); |
|
351 |
} else { |
|
352 |
verificationUtils.deleteManagerVerifications(verification.getEmail(), verification.getType(), verification.getEntity()); |
|
353 |
} |
|
354 |
calls.assignAdminRole(coPersonId, couId); |
|
355 |
authoritiesUpdater.update(verification.getEmail(), old -> { |
|
356 |
HashSet<SimpleGrantedAuthority> authorities = new HashSet<>((Collection<? extends SimpleGrantedAuthority>) old); |
|
357 |
authorities.add(new SimpleGrantedAuthority(authorizationService.member(verification.getType(), verification.getEntity()))); |
|
358 |
authorities.add(new SimpleGrantedAuthority(authorizationService.manager(verification.getType(), verification.getEntity()))); |
|
359 |
return authorities; |
|
360 |
}); |
|
361 |
return Response.status(HttpStatus.OK.value()).entity(jsonUtils.createResponse("Admin role has been assigned").toString()).type(MediaType.APPLICATION_JSON).build(); |
|
362 |
} else { |
|
363 |
return Response.status(HttpStatus.CONFLICT.value()).entity(jsonUtils.createResponse("User is already admin of this cou").toString()).type(MediaType.APPLICATION_JSON).build(); |
|
364 |
} |
|
307 |
if (verification.getEmail().equalsIgnoreCase(authorizationService.getEmail())) { |
|
308 |
if (verification.getVerificationCode().equals(code)) { |
|
309 |
try { |
|
310 |
calls.assignManagerRole(verification.getType(), verification.getEntity(), request); |
|
311 |
if (verification.getType().equals("community") || verification.getType().equals("ri")) { |
|
312 |
calls.assignMemberRole("ri", verification.getEntity(), request); |
|
313 |
verificationUtils.deleteMemberVerifications(verification.getEmail(), "community", verification.getEntity()); |
|
314 |
verificationUtils.deleteMemberVerifications(verification.getEmail(), "ri", verification.getEntity()); |
|
315 |
verificationUtils.deleteManagerVerifications(verification.getEmail(), "community", verification.getEntity()); |
|
316 |
verificationUtils.deleteManagerVerifications(verification.getEmail(), "ri", verification.getEntity()); |
|
365 | 317 |
} else { |
366 |
return Response.status(HttpStatus.NOT_FOUND.value()).entity(jsonUtils.createResponse("Role has not been found").toString()).type(MediaType.APPLICATION_JSON).build(); |
|
318 |
verificationUtils.deleteMemberVerifications(verification.getEmail(), verification.getType(), verification.getEntity()); |
|
319 |
verificationUtils.deleteManagerVerifications(verification.getEmail(), verification.getType(), verification.getEntity()); |
|
367 | 320 |
} |
368 |
} else { |
|
369 |
return Response.status(HttpStatus.BAD_REQUEST.value()).entity(jsonUtils.createResponse("Verification code is wrong").toString()).type(MediaType.APPLICATION_JSON).build(); |
|
321 |
return Response.status(HttpStatus.OK.value()).entity(jsonUtils.createResponse("Admin role has been assigned").toString()).type(MediaType.APPLICATION_JSON).build(); |
|
322 |
} catch (HttpClientErrorException e) { |
|
323 |
String message = new JsonParser().parse(e.getResponseBodyAsString()).getAsJsonObject().get("message").getAsString(); |
|
324 |
return Response.status(e.getStatusCode().value()).entity(jsonUtils.createResponse(message).toString()).type(MediaType.APPLICATION_JSON).build(); |
|
370 | 325 |
} |
371 | 326 |
} else { |
372 |
return Response.status(HttpStatus.FORBIDDEN.value()).entity(jsonUtils.createResponse("Forbidden verification").toString()).type(MediaType.APPLICATION_JSON).build();
|
|
327 |
return Response.status(HttpStatus.BAD_REQUEST.value()).entity(jsonUtils.createResponse("Verification code is wrong").toString()).type(MediaType.APPLICATION_JSON).build();
|
|
373 | 328 |
} |
374 | 329 |
} else { |
375 |
return Response.status(HttpStatus.NOT_FOUND.value()).entity(jsonUtils.createResponse("User has not been found").toString()).type(MediaType.APPLICATION_JSON).build();
|
|
330 |
return Response.status(HttpStatus.FORBIDDEN.value()).entity(jsonUtils.createResponse("Forbidden verification").toString()).type(MediaType.APPLICATION_JSON).build();
|
|
376 | 331 |
} |
377 | 332 |
} else { |
378 | 333 |
return Response.status(HttpStatus.NOT_FOUND.value()).entity(jsonUtils.createResponse("Verification has not been found").toString()).type(MediaType.APPLICATION_JSON).build(); |
... | ... | |
383 | 338 |
* Verify the verification with the specific id, if the code is correct and it refers to the logged in user. |
384 | 339 |
* Member role is assigned to this user, along with the member role. |
385 | 340 |
*/ |
386 |
@Path("verification/member/{id}") |
|
341 |
@Path("/verification/member/{id}")
|
|
387 | 342 |
@POST |
388 | 343 |
@Produces(MediaType.APPLICATION_JSON) |
389 | 344 |
@PreAuthorize("isAuthenticated()") |
390 |
public Response verifyMember(@PathParam("id") String id, @RequestBody String code) { |
|
345 |
public Response verifyMember(@PathParam("id") String id, @RequestBody String code, @Context final HttpServletRequest request) {
|
|
391 | 346 |
RoleVerification verification = verificationUtils.getVerification(id); |
392 | 347 |
if (verification != null && verification.getVerificationType().equals("member")) { |
393 |
Integer coPersonId = calls.getCoPersonIdByIdentifier(); |
|
394 |
if (coPersonId != null) { |
|
395 |
if (verification.getEmail().equalsIgnoreCase(authorizationService.getEmail())) { |
|
396 |
if (verification.getVerificationCode().equals(code)) { |
|
397 |
Integer couId = calls.getCouId(verification.getType(), verification.getEntity(), false); |
|
398 |
if (couId != null) { |
|
399 |
Integer role = calls.getRoleId(coPersonId, couId); |
|
400 |
calls.assignMemberRole(coPersonId, couId, role); |
|
401 |
authoritiesUpdater.update(verification.getEmail(), old -> { |
|
402 |
HashSet<SimpleGrantedAuthority> authorities = new HashSet<>((Collection<? extends SimpleGrantedAuthority>) old); |
|
403 |
authorities.add(new SimpleGrantedAuthority(authorizationService.member(verification.getType(), verification.getEntity()))); |
|
404 |
return authorities; |
|
405 |
}); |
|
406 |
verificationUtils.deleteMemberVerifications(verification.getEmail(), verification.getType(), verification.getEntity()); |
|
407 |
return Response.status(HttpStatus.OK.value()).entity(jsonUtils.createResponse("Member role has been assigned").toString()).type(MediaType.APPLICATION_JSON).build(); |
|
408 |
} else { |
|
409 |
return Response.status(HttpStatus.NOT_FOUND.value()).entity(jsonUtils.createResponse("Role has not been found").toString()).type(MediaType.APPLICATION_JSON).build(); |
|
410 |
} |
|
411 |
} else { |
|
412 |
return Response.status(HttpStatus.FORBIDDEN.value()).entity(jsonUtils.createResponse("Verification code is wrong").toString()).type(MediaType.APPLICATION_JSON).build(); |
|
348 |
if (verification.getEmail().equalsIgnoreCase(authorizationService.getEmail())) { |
|
349 |
if (verification.getVerificationCode().equals(code)) { |
|
350 |
try { |
|
351 |
calls.assignMemberRole(verification.getType(), verification.getEntity(), request); |
|
352 |
verificationUtils.deleteMemberVerifications(verification.getEmail(), verification.getType(), verification.getEntity()); |
|
353 |
return Response.status(HttpStatus.OK.value()).entity(jsonUtils.createResponse("Member role has been assigned").toString()).type(MediaType.APPLICATION_JSON).build(); |
|
354 |
} catch (HttpClientErrorException e) { |
|
355 |
String message = new JsonParser().parse(e.getResponseBodyAsString()).getAsJsonObject().get("message").getAsString(); |
|
356 |
return Response.status(e.getStatusCode().value()).entity(jsonUtils.createResponse(message).toString()).type(MediaType.APPLICATION_JSON).build(); |
|
413 | 357 |
} |
414 | 358 |
} else { |
415 |
return Response.status(HttpStatus.FORBIDDEN.value()).entity(jsonUtils.createResponse("Forbidden verification").toString()).type(MediaType.APPLICATION_JSON).build();
|
|
359 |
return Response.status(HttpStatus.BAD_REQUEST.value()).entity(jsonUtils.createResponse("Verification code is wrong").toString()).type(MediaType.APPLICATION_JSON).build();
|
|
416 | 360 |
} |
417 | 361 |
} else { |
418 |
return Response.status(HttpStatus.NOT_FOUND.value()).entity(jsonUtils.createResponse("User has not been found").toString()).type(MediaType.APPLICATION_JSON).build();
|
|
362 |
return Response.status(HttpStatus.FORBIDDEN.value()).entity(jsonUtils.createResponse("Forbidden verification").toString()).type(MediaType.APPLICATION_JSON).build();
|
|
419 | 363 |
} |
420 | 364 |
} else { |
421 | 365 |
return Response.status(HttpStatus.NOT_FOUND.value()).entity(jsonUtils.createResponse("Verification has not been found").toString()).type(MediaType.APPLICATION_JSON).build(); |
... | ... | |
432 | 376 |
@PreAuthorize("hasAnyAuthority(@AuthorizationService.PORTAL_ADMIN, @AuthorizationService.curator(#type), @AuthorizationService.manager(#type, #id))") |
433 | 377 |
public Response removeManagerRole(@PathParam("type") String type, @PathParam("id") String |
434 | 378 |
id, @PathParam("email") String email) { |
435 |
List<Integer> coPersonIds = calls.getCoPersonIdsByEmail(email); |
|
436 |
if (coPersonIds.size() > 0) { |
|
437 |
Integer couId = calls.getCouId(type, id); |
|
438 |
if (couId != null) { |
|
439 |
coPersonIds.forEach(coPersonId -> { |
|
440 |
calls.removeAdminRole(coPersonId, couId); |
|
441 |
}); |
|
442 |
authoritiesUpdater.update(email, old -> { |
|
443 |
HashSet<SimpleGrantedAuthority> authorities = new HashSet<>((Collection<? extends SimpleGrantedAuthority>) old); |
|
444 |
authorities.remove(new SimpleGrantedAuthority(authorizationService.manager(type, id))); |
|
445 |
return authorities; |
|
446 |
}); |
|
447 |
return Response.status(HttpStatus.OK.value()).entity(jsonUtils.createResponse("Role has been removed").toString()).type(MediaType.APPLICATION_JSON).build(); |
|
448 |
} else { |
|
449 |
return Response.status(HttpStatus.NOT_FOUND.value()).entity(jsonUtils.createResponse("Role has not been found").toString()).type(MediaType.APPLICATION_JSON).build(); |
|
450 |
} |
|
451 |
} else { |
|
452 |
return Response.status(HttpStatus.NOT_FOUND.value()).entity(jsonUtils.createResponse("User has not been found").toString()).type(MediaType.APPLICATION_JSON).build(); |
|
379 |
try { |
|
380 |
JsonElement response = calls.removeManagerRole(type, id, email); |
|
381 |
return Response.status(HttpStatus.OK.value()).entity(response.toString()).type(MediaType.APPLICATION_JSON).build(); |
|
382 |
} catch (HttpClientErrorException e) { |
|
383 |
String message = new JsonParser().parse(e.getResponseBodyAsString()).getAsJsonObject().get("message").getAsString(); |
|
384 |
return Response.status(e.getStatusCode().value()).entity(jsonUtils.createResponse(message).toString()).type(MediaType.APPLICATION_JSON).build(); |
|
453 | 385 |
} |
454 | 386 |
} |
455 | 387 |
|
... | ... | |
463 | 395 |
@PreAuthorize("hasAnyAuthority(@AuthorizationService.PORTAL_ADMIN, @AuthorizationService.curator(#type), @AuthorizationService.manager(#type, #id))") |
464 | 396 |
public Response removeMemberRole(@PathParam("type") String type, @PathParam("id") String |
465 | 397 |
id, @PathParam("email") String email) { |
466 |
List<Integer> coPersonIds = calls.getCoPersonIdsByEmail(email); |
|
467 |
if (coPersonIds.size() > 0) { |
|
468 |
Integer couId = calls.getCouId(type, id, false); |
|
469 |
if (couId != null) { |
|
470 |
coPersonIds.forEach(coPersonId -> { |
|
471 |
Integer role = calls.getRoleId(coPersonId, couId); |
|
472 |
calls.removeAdminRole(coPersonId, couId); |
|
473 |
calls.removeMemberRole(coPersonId, couId, role); |
|
474 |
}); |
|
475 |
authoritiesUpdater.update(email, old -> { |
|
476 |
HashSet<SimpleGrantedAuthority> authorities = new HashSet<>((Collection<? extends SimpleGrantedAuthority>) old); |
|
477 |
authorities.remove(new SimpleGrantedAuthority(authorizationService.manager(type, id))); |
|
478 |
authorities.remove(new SimpleGrantedAuthority(authorizationService.member(type, id))); |
|
479 |
return authorities; |
|
480 |
}); |
|
481 |
return Response.status(HttpStatus.OK.value()).entity(jsonUtils.createResponse("Role has been removed").toString()).type(MediaType.APPLICATION_JSON).build(); |
|
482 |
} else { |
|
483 |
return Response.status(HttpStatus.NOT_FOUND.value()).entity(jsonUtils.createResponse("Role has not been found").toString()).type(MediaType.APPLICATION_JSON).build(); |
|
484 |
} |
|
485 |
} else { |
|
486 |
return Response.status(HttpStatus.NOT_FOUND.value()).entity(jsonUtils.createResponse("User has not been found").toString()).type(MediaType.APPLICATION_JSON).build(); |
|
398 |
try { |
|
399 |
JsonElement response = calls.removeMemberRole(type, id, email); |
|
400 |
return Response.status(HttpStatus.OK.value()).entity(response.toString()).type(MediaType.APPLICATION_JSON).build(); |
|
401 |
} catch (HttpClientErrorException e) { |
|
402 |
String message = new JsonParser().parse(e.getResponseBodyAsString()).getAsJsonObject().get("message").getAsString(); |
|
403 |
return Response.status(e.getStatusCode().value()).entity(jsonUtils.createResponse(message).toString()).type(MediaType.APPLICATION_JSON).build(); |
|
487 | 404 |
} |
488 | 405 |
} |
489 | 406 |
|
... | ... | |
494 | 411 |
@GET |
495 | 412 |
@Produces(MediaType.APPLICATION_JSON) |
496 | 413 |
public Response getMembersCount(@PathParam("type") String type, @PathParam("id") String id) { |
497 |
Integer couId = calls.getCouId(type, id, false); |
|
498 |
int count = 0; |
|
499 |
if (couId != null) { |
|
500 |
count = calls.getUserIdByCouId(couId, false).size(); |
|
414 |
try { |
|
415 |
int response = calls.getAllMembersCount(type, id); |
|
416 |
return Response.status(HttpStatus.OK.value()).entity(jsonUtils.createResponse(response).toString()).type(MediaType.APPLICATION_JSON).build(); |
|
417 |
} catch (HttpClientErrorException e) { |
|
418 |
String message = new JsonParser().parse(e.getResponseBodyAsString()).getAsJsonObject().get("message").getAsString(); |
|
419 |
return Response.status(e.getStatusCode().value()).entity(jsonUtils.createResponse(message).toString()).type(MediaType.APPLICATION_JSON).build(); |
|
501 | 420 |
} |
502 |
return Response.status(HttpStatus.OK.value()).entity(jsonUtils.createResponse(count).toString()).type(MediaType.APPLICATION_JSON).build(); |
|
503 | 421 |
} |
504 | 422 |
|
505 | 423 |
/** |
506 |
* Get the names of the members of a type(Community, etc.) with id(ee, egi, etc.)
|
|
424 |
* Get infos of the members of a type(Community, etc.) with id(ee, egi, etc.)
|
|
507 | 425 |
*/ |
508 | 426 |
@Path("/{type}/{id}/members{var:.*}") |
509 | 427 |
@GET |
... | ... | |
511 | 429 |
@PreAuthorize("hasAnyAuthority(@AuthorizationService.PORTAL_ADMIN," + |
512 | 430 |
"@AuthorizationService.curator(#type), @AuthorizationService.manager(#type, #id))") |
513 | 431 |
public Response getMembers(@PathParam("type") String type, @PathParam("id") String id) { |
514 |
Integer couId = calls.getCouId(type, id, false); |
|
515 |
if (couId != null) { |
|
516 |
JsonArray members = calls.getUserIdByCouId(couId, false); |
|
517 |
JsonArray emails = calls.getUserEmailByCouId(couId, false); |
|
518 |
JsonArray names = calls.getUserNamesByCouId(couId, false); |
|
519 |
JsonArray managers = calls.getUserIdByCouId(couId, true); |
|
520 |
members.getAsJsonArray().forEach(element -> { |
|
521 |
element.getAsJsonObject().addProperty("isManager", managers.contains(element)); |
|
522 |
}); |
|
523 |
JsonUtils.mergeUserInfo(members, emails, names, gson); |
|
524 |
return Response.status(HttpStatus.OK.value()).entity(jsonUtils.createResponse(members).toString()).type(MediaType.APPLICATION_JSON).build(); |
|
525 |
} else { |
|
526 |
return Response.status(HttpStatus.NOT_FOUND.value()).entity(jsonUtils.createResponse("Role has not been found").toString()).type(MediaType.APPLICATION_JSON).build(); |
|
432 |
try { |
|
433 |
JsonElement response = calls.getAllMembers(type, id); |
|
434 |
return Response.status(HttpStatus.OK.value()).entity(jsonUtils.createResponse(response).toString()).type(MediaType.APPLICATION_JSON).build(); |
|
435 |
} catch (HttpClientErrorException e) { |
|
436 |
String message = new JsonParser().parse(e.getResponseBodyAsString()).getAsJsonObject().get("message").getAsString(); |
|
437 |
return Response.status(e.getStatusCode().value()).entity(jsonUtils.createResponse(message).toString()).type(MediaType.APPLICATION_JSON).build(); |
|
527 | 438 |
} |
528 | 439 |
} |
529 | 440 |
|
... | ... | |
534 | 445 |
@GET |
535 | 446 |
@Produces(MediaType.APPLICATION_JSON) |
536 | 447 |
public Response getManagers(@PathParam("type") String type, @PathParam("id") String id) { |
537 |
Integer couId = calls.getCouId(type, id); |
|
538 |
if (couId != null) { |
|
539 |
JsonArray managers = calls.getUserIdByCouId(couId, true); |
|
540 |
if(authorizationService.isManager(type, id) || authorizationService.isPortalAdmin() || authorizationService.isCurator(type)) { |
|
541 |
JsonArray emails = calls.getUserEmailByCouId(couId, true); |
|
542 |
JsonArray names = calls.getUserNamesByCouId(couId, true); |
|
543 |
JsonUtils.mergeUserInfo(managers, emails, names, gson); |
|
544 |
} else { |
|
545 |
managers.forEach(user -> { |
|
546 |
user.getAsJsonObject().remove("coPersonId"); |
|
547 |
}); |
|
548 |
} |
|
549 |
return Response.status(HttpStatus.OK.value()).entity(jsonUtils.createResponse(managers).toString()).type(MediaType.APPLICATION_JSON).build(); |
|
550 |
} else { |
|
551 |
return Response.status(HttpStatus.NOT_FOUND.value()).entity(jsonUtils.createResponse("Role has not been found").toString()).type(MediaType.APPLICATION_JSON).build(); |
|
448 |
try { |
|
449 |
JsonElement response = calls.getAllManagers(type, id); |
|
450 |
return Response.status(HttpStatus.OK.value()).entity(jsonUtils.createResponse(response).toString()).type(MediaType.APPLICATION_JSON).build(); |
|
451 |
} catch (HttpClientErrorException e) { |
|
452 |
String message = new JsonParser().parse(e.getResponseBodyAsString()).getAsJsonObject().get("message").getAsString(); |
|
453 |
return Response.status(e.getStatusCode().value()).entity(jsonUtils.createResponse(message).toString()).type(MediaType.APPLICATION_JSON).build(); |
|
552 | 454 |
} |
553 | 455 |
} |
554 |
} |
|
456 |
|
|
457 |
/** |
|
458 |
* Get infos of the curators of a type(Community, etc.) |
|
459 |
*/ |
|
460 |
@Path("/{type}/curators{var:.*}") |
|
461 |
@GET |
|
462 |
@Produces(MediaType.APPLICATION_JSON) |
|
463 |
@PreAuthorize("hasAnyAuthority(@AuthorizationService.PORTAL_ADMIN, @AuthorizationService.curator(#type))") |
|
464 |
public Response getCurators(@PathParam("type") String type) { |
|
465 |
try { |
|
466 |
JsonElement response = calls.getAllCurators(type); |
|
467 |
return Response.status(HttpStatus.OK.value()).entity(jsonUtils.createResponse(response.toString())).type(MediaType.APPLICATION_JSON).build(); |
|
468 |
} catch (HttpClientErrorException e) { |
|
469 |
String message = new JsonParser().parse(e.getResponseBodyAsString()).getAsJsonObject().get("message").getAsString(); |
|
470 |
return Response.status(e.getStatusCode().value()).entity(jsonUtils.createResponse(message).toString()).type(MediaType.APPLICATION_JSON).build(); |
|
471 |
} |
|
472 |
} |
|
473 |
} |
modules/dnet-openaire-users/trunk/src/main/resources/eu/dnet/openaire/usermanagement/springContext-dnetOpenaireUsersService.properties | ||
---|---|---|
1 | 1 |
google.recaptcha.secret = 6LfYrU8UAAAAADwrbImPvDo_XcxEZvrkkgMy9yU0 |
2 | 2 |
google.recaptcha.key = 6LfYrU8UAAAAAFsl3m2YhP1uavdmAdFEXBkoY_vd |
3 | 3 |
|
4 |
registry.issuer = https://openaire-dev.aai-dev.grnet.gr/registry |
|
5 |
registry.user = user |
|
6 |
registry.password = pass |
|
7 |
registry.version = 1.0 |
|
8 |
registry.coid = 2 |
|
4 |
role-management.url = http://mpagasas.di.uoa.gr:8080/dnet-role-management |
Also available in: Unified diff
Merge from role management integration branch.