Skip to content

Commit 92628cf

Browse files
saif-ericssonvasile-baluta
authored andcommitted
Handling authorization in Subscription REST API
Subscription operations are allowed only on user's own subscription.
1 parent 5fa35c6 commit 92628cf

20 files changed

+352
-128
lines changed

pom.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -225,7 +225,7 @@
225225

226226
<!-- PhoenixNAP RAML Code Generator plugin used to generate sources
227227
from raml -->
228-
<plugin>
228+
<plugin>
229229
<groupId>com.phoenixnap.oss</groupId>
230230
<artifactId>springmvc-raml-plugin</artifactId>
231231
<version>${plugin-version}</version>
@@ -302,4 +302,4 @@
302302

303303
</plugins>
304304
</build>
305-
</project>
305+
</project>

src/main/java/com/ericsson/ei/controller/QueryAggregatedObjectController.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11

22
package com.ericsson.ei.controller;
33

4-
import com.ericsson.ei.controller.model.QueryResponse;
54
import org.springframework.http.ResponseEntity;
65
import org.springframework.web.bind.annotation.RequestMapping;
76
import org.springframework.web.bind.annotation.RequestMethod;

src/main/java/com/ericsson/ei/controller/QueryMissedNotificationController.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11

22
package com.ericsson.ei.controller;
33

4-
import com.ericsson.ei.controller.model.QueryResponse;
54
import org.springframework.http.ResponseEntity;
65
import org.springframework.web.bind.annotation.RequestMapping;
76
import org.springframework.web.bind.annotation.RequestMethod;

src/main/java/com/ericsson/ei/controller/RuleCheckController.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
package com.ericsson.ei.controller;
33

44
import javax.validation.Valid;
5-
import com.ericsson.ei.controller.model.RuleCheckBody;
65
import org.springframework.http.ResponseEntity;
76
import org.springframework.web.bind.annotation.RequestBody;
87
import org.springframework.web.bind.annotation.RequestMapping;

src/main/java/com/ericsson/ei/controller/SubscriptionController.java

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ public interface SubscriptionController {
2626
*
2727
*/
2828
@RequestMapping(value = "", method = RequestMethod.GET)
29-
public ResponseEntity<List<com.ericsson.ei.controller.model.Subscription>> getSubscriptions();
29+
public ResponseEntity<List<String>> getSubscriptions();
3030

3131
/**
3232
* Takes the subscription rules, the name for subscription and the user name of the person registering this subscription and saves the subscription in subscription database. The name needs to be unique.
@@ -36,34 +36,34 @@ public interface SubscriptionController {
3636
public ResponseEntity<?> createSubscription(
3737
@Valid
3838
@RequestBody
39-
List<com.ericsson.ei.controller.model.Subscription> subscription);
39+
List<String> string);
4040

4141
/**
4242
* Modify an existing Subscription.
4343
*
4444
*/
4545
@RequestMapping(value = "", method = RequestMethod.PUT)
46-
public ResponseEntity<com.ericsson.ei.controller.model.SubscriptionResponse> updateSubscriptions(
46+
public ResponseEntity<SubscriptionResponse> updateSubscriptions(
4747
@Valid
4848
@RequestBody
49-
List<com.ericsson.ei.controller.model.Subscription> subscription);
49+
List<String> string);
5050

5151
/**
5252
* Returns the subscription rules for given subscription name.
5353
*
5454
*/
5555
@RequestMapping(value = "/{subscriptionName}", method = RequestMethod.GET)
56-
public ResponseEntity<List<com.ericsson.ei.controller.model.Subscription>> getSubscriptionById(
56+
public ResponseEntity<List<String>> getSubscriptionById(
5757
@PathVariable(required = false)
58-
String subscriptionName);
58+
java.lang.String subscriptionName);
5959

6060
/**
6161
* Removes the subscription from the database.
6262
*
6363
*/
6464
@RequestMapping(value = "/{subscriptionName}", method = RequestMethod.DELETE)
65-
public ResponseEntity<com.ericsson.ei.controller.model.SubscriptionResponse> deleteSubscriptionById(
65+
public ResponseEntity<SubscriptionResponse> deleteSubscriptionById(
6666
@PathVariable(required = false)
67-
String subscriptionName);
67+
java.lang.String subscriptionName);
6868

6969
}

src/main/java/com/ericsson/ei/controller/SubscriptionControllerImpl.java

Lines changed: 35 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,11 @@
2323
import org.slf4j.Logger;
2424
import org.slf4j.LoggerFactory;
2525
import org.springframework.beans.factory.annotation.Autowired;
26+
import org.springframework.beans.factory.annotation.Value;
2627
import org.springframework.http.HttpStatus;
2728
import org.springframework.http.ResponseEntity;
29+
import org.springframework.security.core.Authentication;
30+
import org.springframework.security.core.context.SecurityContextHolder;
2831
import org.springframework.stereotype.Component;
2932
import org.springframework.web.bind.annotation.CrossOrigin;
3033
import org.springframework.web.bind.annotation.PathVariable;
@@ -45,6 +48,9 @@
4548
@Api(value = "subscription", description = "The Subscription API for the store and retrieve the subscriptions from the database")
4649
public class SubscriptionControllerImpl implements SubscriptionController {
4750

51+
@Value("${ldap.enabled}")
52+
private boolean authenticate;
53+
4854
@Autowired
4955
private ISubscriptionService subscriptionService;
5056

@@ -58,7 +64,15 @@ public class SubscriptionControllerImpl implements SubscriptionController {
5864
public ResponseEntity<SubscriptionResponse> createSubscription(@RequestBody List<Subscription> subscriptions) {
5965
ResponseEntity<SubscriptionResponse> subResponse = null;
6066
SubscriptionResponse subscriptionResponse = new SubscriptionResponse();
67+
68+
String user = "";
6169
for (Subscription subscription : subscriptions) {
70+
71+
// Adding user name in subscription json
72+
if (authenticate) {
73+
user = currentUser();
74+
}
75+
subscription.setUserName(user);
6276
subResponse = null;
6377
try {
6478
subscription.setCreated(Instant.now().toEpochMilli());
@@ -73,7 +87,7 @@ public ResponseEntity<SubscriptionResponse> createSubscription(@RequestBody List
7387
HttpStatus.PRECONDITION_FAILED);
7488
}
7589

76-
if (!subscriptionService.doSubscriptionExist(subscription.getSubscriptionName())) {
90+
if (!subscriptionService.doSubscriptionExist(subscription.getSubscriptionName(), user)) {
7791
subscriptionService.addSubscription(subscription);
7892
LOG.info("Subscription :" + subscription.getSubscriptionName() + " Inserted Successfully");
7993
subscriptionResponse.setMsg("Inserted Successfully");
@@ -94,30 +108,34 @@ public ResponseEntity<SubscriptionResponse> createSubscription(@RequestBody List
94108
@CrossOrigin
95109
@ApiOperation(value = "Returns the subscription rules for given subscription name")
96110
public ResponseEntity<List<Subscription>> getSubscriptionById(@PathVariable String subscriptionName) {
111+
String user = "";
112+
if (authenticate) {
113+
user = currentUser();
114+
}
97115
List<Subscription> subscriptionList = new ArrayList<Subscription>();
98116
try {
99117
LOG.info("Subscription :" + subscriptionName + " fetch started");
100-
subscriptionList.add(subscriptionService.getSubscription(subscriptionName));
118+
subscriptionList.add(subscriptionService.getSubscription(subscriptionName, user));
101119
LOG.info("Subscription :" + subscriptionName + " fetched");
102120
return new ResponseEntity<List<Subscription>>(subscriptionList, HttpStatus.OK);
103121
} catch (SubscriptionNotFoundException e) {
104122
LOG.error("Subscription :" + subscriptionName + " not found in records");
105123
return new ResponseEntity<List<Subscription>>(subscriptionList, HttpStatus.OK);
106-
107124
}
108-
109125
}
110126

111127
@Override
112-
113128
// @CrossOrigin
114129
@ApiOperation(value = "Update the existing subscription by the subscription name")
115130
public ResponseEntity<SubscriptionResponse> updateSubscriptions(@RequestBody List<Subscription> subscriptions) {
131+
String user = "";
132+
if (authenticate) {
133+
user = currentUser();
134+
}
116135
Subscription subscription = subscriptions.get(0);
117136
String subscriptionName = subscription.getSubscriptionName();
118137
LOG.info("Subscription :" + subscriptionName + " update started");
119138
SubscriptionResponse subscriptionResponse = new SubscriptionResponse();
120-
121139
try {
122140
subscription.setCreated(Instant.now().toEpochMilli());
123141
subscriptionValidator.validateSubscription(subscription);
@@ -130,8 +148,8 @@ public ResponseEntity<SubscriptionResponse> updateSubscriptions(@RequestBody Lis
130148
return new ResponseEntity<SubscriptionResponse>(subscriptionResponse, HttpStatus.PRECONDITION_FAILED);
131149
}
132150

133-
if (subscriptionService.doSubscriptionExist(subscriptionName)) {
134-
subscriptionService.modifySubscription(subscription, subscriptionName);
151+
if (subscriptionService.doSubscriptionExist(subscriptionName, user)) {
152+
subscriptionService.modifySubscription(subscription, subscriptionName, user);
135153
LOG.info("Subscription :" + subscriptionName + " update completed");
136154
subscriptionResponse.setMsg("Updated Successfully");
137155
subscriptionResponse.setStatusCode(HttpStatus.OK.value());
@@ -143,16 +161,19 @@ public ResponseEntity<SubscriptionResponse> updateSubscriptions(@RequestBody Lis
143161
subscriptionResponse.setStatusCode(HttpStatus.BAD_REQUEST.value());
144162
return new ResponseEntity<SubscriptionResponse>(subscriptionResponse, HttpStatus.BAD_REQUEST);
145163
}
146-
147164
}
148165

149166
@Override
150167
@CrossOrigin
151168
@ApiOperation(value = "Removes the subscription from the database")
152169
public ResponseEntity<SubscriptionResponse> deleteSubscriptionById(@PathVariable String subscriptionName) {
170+
String user = "";
171+
if (authenticate) {
172+
user = currentUser();
173+
}
153174
SubscriptionResponse subscriptionResponse = new SubscriptionResponse();
154175
LOG.info("Subscription :" + subscriptionName + " delete started");
155-
if (subscriptionService.deleteSubscription(subscriptionName)) {
176+
if (subscriptionService.deleteSubscription(subscriptionName, user)) {
156177
LOG.info("Subscription :" + subscriptionName + " deleted Successfully");
157178
subscriptionResponse.setMsg("Deleted Successfully");
158179
subscriptionResponse.setStatusCode(HttpStatus.OK.value());
@@ -163,7 +184,6 @@ public ResponseEntity<SubscriptionResponse> deleteSubscriptionById(@PathVariable
163184
subscriptionResponse.setStatusCode(HttpStatus.BAD_REQUEST.value());
164185
return new ResponseEntity<SubscriptionResponse>(subscriptionResponse, HttpStatus.BAD_REQUEST);
165186
}
166-
167187
}
168188

169189
@Override
@@ -180,4 +200,8 @@ public ResponseEntity<List<Subscription>> getSubscriptions() {
180200
return new ResponseEntity<List<Subscription>>(subscriptionList, HttpStatus.OK);
181201
}
182202
}
203+
204+
public String currentUser() {
205+
return SecurityContextHolder.getContext().getAuthentication().getName();
206+
}
183207
}

src/main/java/com/ericsson/ei/controller/model/Subscription.java

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,8 @@
2525
"notificationMessageKeyValues",
2626
"repeat",
2727
"requirements",
28-
"subscriptionName"
28+
"subscriptionName",
29+
"userName"
2930
})
3031
public class Subscription {
3132

@@ -47,6 +48,8 @@ public class Subscription {
4748
private List<Requirement> requirements = new ArrayList<Requirement>();
4849
@JsonProperty("subscriptionName")
4950
private String subscriptionName;
51+
@JsonProperty("userName")
52+
private String userName;
5053
@JsonIgnore
5154
private Map<String, Object> additionalProperties = new HashMap<String, Object>();
5255

@@ -140,6 +143,16 @@ public void setSubscriptionName(String subscriptionName) {
140143
this.subscriptionName = subscriptionName;
141144
}
142145

146+
@JsonProperty("userName")
147+
public String getUserName() {
148+
return userName;
149+
}
150+
151+
@JsonProperty("userName")
152+
public void setUserName(String userName) {
153+
this.userName = userName;
154+
}
155+
143156
@Override
144157
public String toString() {
145158
return ToStringBuilder.reflectionToString(this);
@@ -157,7 +170,7 @@ public void setAdditionalProperty(String name, Object value) {
157170

158171
@Override
159172
public int hashCode() {
160-
return new HashCodeBuilder().append(aggregationtype).append(created).append(notificationMeta).append(notificationType).append(restPostBodyMediaType).append(notificationMessageKeyValues).append(repeat).append(requirements).append(subscriptionName).append(additionalProperties).toHashCode();
173+
return new HashCodeBuilder().append(aggregationtype).append(created).append(notificationMeta).append(notificationType).append(restPostBodyMediaType).append(notificationMessageKeyValues).append(repeat).append(requirements).append(subscriptionName).append(userName).append(additionalProperties).toHashCode();
161174
}
162175

163176
@Override
@@ -169,7 +182,7 @@ public boolean equals(Object other) {
169182
return false;
170183
}
171184
Subscription rhs = ((Subscription) other);
172-
return new EqualsBuilder().append(aggregationtype, rhs.aggregationtype).append(created, rhs.created).append(notificationMeta, rhs.notificationMeta).append(notificationType, rhs.notificationType).append(restPostBodyMediaType, rhs.restPostBodyMediaType).append(notificationMessageKeyValues, rhs.notificationMessageKeyValues).append(repeat, rhs.repeat).append(requirements, rhs.requirements).append(subscriptionName, rhs.subscriptionName).append(additionalProperties, rhs.additionalProperties).isEquals();
185+
return new EqualsBuilder().append(aggregationtype, rhs.aggregationtype).append(created, rhs.created).append(notificationMeta, rhs.notificationMeta).append(notificationType, rhs.notificationType).append(restPostBodyMediaType, rhs.restPostBodyMediaType).append(notificationMessageKeyValues, rhs.notificationMessageKeyValues).append(repeat, rhs.repeat).append(requirements, rhs.requirements).append(subscriptionName, rhs.subscriptionName).append(userName, rhs.userName).append(additionalProperties, rhs.additionalProperties).isEquals();
173186
}
174187

175188
}

src/main/java/com/ericsson/ei/services/ISubscriptionService.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -44,30 +44,30 @@ public interface ISubscriptionService {
4444
* @return
4545
* @throws SubscriptionNotFoundException
4646
*/
47-
Subscription getSubscription(String name) throws SubscriptionNotFoundException;
47+
Subscription getSubscription(String name, String user) throws SubscriptionNotFoundException;
4848

4949
/**
5050
*
5151
* @param subscription
5252
* @param subscriptionName
5353
* @return
5454
*/
55-
boolean modifySubscription(Subscription subscription, String subscriptionName);
55+
boolean modifySubscription(Subscription subscription, String subscriptionName, String user);
5656

5757
/**
5858
*
5959
* @param name
6060
* @return
6161
* @throws SubscriptionNotFoundException
6262
*/
63-
boolean deleteSubscription(String name);
63+
boolean deleteSubscription(String name, String user);
6464

6565
/**
6666
* doSubscriptionExist method checks the is there any Subscription By Subscription Name
6767
* @param name
6868
* @return true when Subscription available with same name. Otherwise returns false.
6969
*/
70-
boolean doSubscriptionExist(String name);
70+
boolean doSubscriptionExist(String name, String user);
7171

7272

7373
}

0 commit comments

Comments
 (0)