Skip to content
This repository was archived by the owner on Oct 6, 2023. It is now read-only.

Commit 2a3248d

Browse files
author
sowerstl
committed
Add HQ Users; (DOECODE-750)
1 parent 905d610 commit 2a3248d

File tree

5 files changed

+93
-16
lines changed

5 files changed

+93
-16
lines changed

src/main/java/gov/osti/entity/Site.java

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,19 @@
2020
@NamedQuery(name = "Site.findBySiteCode", query = "SELECT s FROM Site s WHERE s.siteCode = :site")
2121
,
2222
@NamedQuery(name = "Site.findAll", query = "SELECT s FROM Site s ORDER BY s")
23+
,
24+
@NamedQuery(name = "Site.findStandard", query = "SELECT s FROM Site s WHERE s.standardUsage = true ORDER BY s")
25+
,
26+
@NamedQuery(name = "Site.findHQ", query = "SELECT s FROM Site s WHERE s.hqUsage = true ORDER BY s")
2327
})
2428
public class Site implements Serializable {
2529

2630
private String siteCode;
2731
private List<String> emailDomains;
2832
private List<String> pocEmails;
2933
private String lab;
34+
private boolean standardUsage = false;
35+
private boolean hqUsage = false;
3036

3137
public Site() {
3238
}
@@ -79,4 +85,22 @@ public String getLab() {
7985
public void setLab(String lab) {
8086
this.lab = lab;
8187
}
88+
89+
@Column(name = "standard_usage", nullable = false)
90+
public boolean isStandardUsage() {
91+
return standardUsage;
92+
}
93+
94+
public void setStandardUsage(boolean usage) {
95+
this.standardUsage = usage;
96+
}
97+
98+
@Column(name = "hq_usage", nullable = false)
99+
public boolean isHqUsage() {
100+
return hqUsage;
101+
}
102+
103+
public void setHqUsage(boolean usage) {
104+
this.hqUsage = usage;
105+
}
82106
}

src/main/java/gov/osti/entity/UserRole.java

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ public class UserRole implements Serializable {
2424
* Enumeration of valid Admin Roles for a Role.
2525
*/
2626
public static enum RoleType {
27-
ADMIN, STANDARD;
27+
ADMIN, STANDARD, HQ;
2828
}
2929

3030
private String value;
@@ -92,11 +92,12 @@ public static List<UserRole> GetRoles(RoleType roleType) {
9292
roles.add(new UserRole("ApprovalAdmin", "Approval Admin", "Permission to approve any project for biblio indexing."));
9393
roles.add(new UserRole("ContentAdmin", "Content Admin", "Permission to access content controls, such as Refresh, Reindex, etc."));
9494
}
95-
else if (RoleType.STANDARD.equals(roleType)) {
95+
else if (RoleType.STANDARD.equals(roleType) || RoleType.HQ.equals(roleType)) {
96+
String namedQuery = "Site.find" + (RoleType.HQ.equals(roleType) ? "HQ" : "Standard");
9697
EntityManager em = DoeServletContextListener.createEntityManager();
9798
try {
9899
// get ALL SITES
99-
TypedQuery<Site> query = em.createNamedQuery("Site.findAll", Site.class);
100+
TypedQuery<Site> query = em.createNamedQuery(namedQuery, Site.class);
100101
List<Site> siteList = query.getResultList();
101102

102103
for (Site site:siteList) {
@@ -121,11 +122,12 @@ public static List<String> GetRoleList(RoleType roleType) {
121122
roles.add("ApprovalAdmin");
122123
roles.add("ContentAdmin");
123124
}
124-
else if (RoleType.STANDARD.equals(roleType)) {
125+
else if (RoleType.STANDARD.equals(roleType) || RoleType.HQ.equals(roleType)) {
126+
String namedQuery = "Site.find" + (RoleType.HQ.equals(roleType) ? "HQ" : "Standard");
125127
EntityManager em = DoeServletContextListener.createEntityManager();
126128
try {
127129
// get ALL SITES
128-
TypedQuery<Site> query = em.createNamedQuery("Site.findAll", Site.class);
130+
TypedQuery<Site> query = em.createNamedQuery(namedQuery, Site.class);
129131
List<Site> siteList = query.getResultList();
130132

131133
for (Site site:siteList) {

src/main/java/gov/osti/services/SiteServices.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ Content-Length: 27
6161
Date: Mon, 14 Aug 2017 14:55:04 GMT
6262
```
6363
```json
64-
[{"site_code": "ABCD","email_domains": ["@abcd.gov"],"poc_emails": ["[email protected]","[email protected]"],"lab": "Alpha Bravo Charlie Delta"},{"site_code": "EFGH","email_domains": ["@efgh.gov"],"poc_emails": [],"lab": "Echo Foxtrot Golf Hotel"}]
64+
[{"site_code": "ABCD","email_domains": ["@abcd.gov"],"poc_emails": ["[email protected]","[email protected]"],"lab": "Alpha Bravo Charlie Delta","isStandardUsage":true,"isHqUsage":false},{"site_code": "EFGH","email_domains": ["@efgh.gov"],"poc_emails": [],"lab": "Echo Foxtrot Golf Hotel","isStandardUsage":true,"isHqUsage":false}]
6565
```
6666

6767
### info/{site}

src/main/java/gov/osti/services/UserServices.java

Lines changed: 59 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -468,14 +468,42 @@ public Response register(String object) {
468468

469469
String encryptedPassword = PASSWORD_SERVICE.encryptPassword(request.getPassword());
470470

471-
// assign as SITE if possible based on the EMAIL, or default to CONTRACTOR
471+
// assign a SITE if possible based on the EMAIL, or default to CONTRACTOR
472472
String domain = request.getEmail().substring(request.getEmail().indexOf("@"));
473473
TypedQuery<Site> query = em.createNamedQuery("Site.findByDomain", Site.class)
474474
.setParameter("domain", domain);
475475

476476
// look up the Site and set CODE, or CONTR if not found
477477
List<Site> sites = query.getResultList();
478478
String siteCode = ((sites.isEmpty()) ? "CONTR" : sites.get(0).getSiteCode());
479+
480+
if ("HQ".equals(siteCode)) {
481+
String hqSiteId = request.getSiteId();
482+
// ensure HQ registration provide a Site ID
483+
if (StringUtils.isBlank(hqSiteId))
484+
return ErrorResponse
485+
.badRequest("Missing required Site ID for HQ registration.")
486+
.build();
487+
488+
// privided HQ Site Code must be valid.
489+
query = em.createNamedQuery("Site.findBySiteCode", Site.class)
490+
.setParameter("site", hqSiteId.trim());
491+
sites = query.getResultList();
492+
493+
if (sites.isEmpty())
494+
return ErrorResponse
495+
.badRequest("HQ Site ID must be valid.")
496+
.build();
497+
498+
Site hqSite = sites.get(0);
499+
500+
if (!hqSite.isHqUsage())
501+
return ErrorResponse
502+
.badRequest("HQ Site ID must be designated as HQ type.")
503+
.build();
504+
505+
siteCode = hqSite.getSiteCode();
506+
}
479507

480508
// if CONTR, we need to REQUIRE and VALIDATE the CONTRACT NUMBER
481509
if (StringUtils.equals(siteCode, "CONTR")) {
@@ -1289,6 +1317,7 @@ private static class RegistrationRequest implements Serializable {
12891317
private String password;
12901318
private String confirmPassword;
12911319
private String contractNumber;
1320+
private String siteId;
12921321

12931322
public RegistrationRequest() {
12941323

@@ -1378,6 +1407,20 @@ public String getContractNumber() {
13781407
public void setContractNumber(String contractNumber) {
13791408
this.contractNumber = contractNumber;
13801409
}
1410+
1411+
/**
1412+
* @return the HQ Site ID
1413+
*/
1414+
public String getSiteId() {
1415+
return siteId;
1416+
}
1417+
1418+
/**
1419+
* @param siteId the HQ Site ID to set
1420+
*/
1421+
public void setSiteId(String siteId) {
1422+
this.siteId = siteId;
1423+
}
13811424

13821425
}
13831426

@@ -1511,19 +1554,27 @@ public Response confirmUser(@QueryParam("confirmation") String jwt) {
15111554
* @return a Response containing the JSON if found
15121555
*/
15131556
@GET
1514-
@RequiresAuthentication
1515-
@RequiresRoles("UserAdmin")
15161557
@Produces (MediaType.APPLICATION_JSON)
15171558
@Path ("/roles")
1518-
public Response getRoles() {
1559+
public Response getRoles() {
1560+
EntityManager em = DoeServletContextListener.createEntityManager();
1561+
Subject subject = SecurityUtils.getSubject();
1562+
User user = (User) subject.getPrincipal();
1563+
1564+
ObjectNode obj = mapper.createObjectNode();
1565+
1566+
// if UserAdmin, include admin roles.
1567+
if (user != null && user.hasRole("UserAdmin"))
1568+
obj.set("admin", mapper.valueToTree(UserRole.GetRoles(RoleType.ADMIN)));
1569+
1570+
obj.set("standard", mapper.valueToTree(UserRole.GetRoles(RoleType.STANDARD)));
1571+
obj.set("hq", mapper.valueToTree(UserRole.GetRoles(RoleType.HQ)));
1572+
15191573
try {
15201574
// return the results back
15211575
return Response
15221576
.ok()
1523-
.entity(((ObjectNode)mapper
1524-
.createObjectNode()
1525-
.set("admin", mapper.valueToTree(UserRole.GetRoles(RoleType.ADMIN))))
1526-
.set("standard", mapper.valueToTree(UserRole.GetRoles(RoleType.STANDARD))).toString())
1577+
.entity(obj.toString())
15271578
.build();
15281579
} catch ( Exception e ) {
15291580
log.error("Site Lookup Error", e);

src/main/java/gov/osti/services/UserServices.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -351,7 +351,7 @@ there is no upper limit.
351351

352352
`GET /doecodeapi/services/user/roles`
353353

354-
Returns JSON object containing "admin" and "standard".
354+
Returns JSON object containing "admin", "standard", and "hq" roles.
355355
Requires administrative access to veiw "admin" roles.
356356
Each role contains a value, label, and description.
357357

@@ -368,7 +368,7 @@ HTTP/1.1 200 OK
368368
Content-Type: application/json
369369
```
370370
```json
371-
{"standard":[{"value":"OSTI","label":"OSTI","description":"Office of Scientific and Technical Information"}]}
371+
{"standard":[{"value":"OSTI","label":"OSTI","description":"Office of Scientific and Technical Information"}],"hq":[{"value":"DOESC","label":"DOESC","description":"USDOE Office of Science (SC)"}]}
372372
```
373373

374374
### update (admin)

0 commit comments

Comments
 (0)