Skip to content

Commit 50b4e90

Browse files
committed
Updates on execution points for Feature Access Control
This close #RESTCOMM-1519
1 parent 2ba7779 commit 50b4e90

8 files changed

Lines changed: 43 additions & 24 deletions

File tree

restcomm/restcomm.extension.api/src/main/java/org/restcomm/connect/extension/api/ApiRequest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
*/
2727
public class ApiRequest {
2828
public static enum Type {
29-
INCOMINGPHONENUMBER, CREATE_CALL, CREATE_SMS, CREATE_USSD
29+
INCOMINGPHONENUMBER, CREATE_CALL, CREATE_SMS, CREATE_USSD, CREATE_SUBACCOUNT
3030
};
3131

3232
final String requestedAccountSid;

restcomm/restcomm.extension.controller/src/main/java/org/restcomm/connect/extension/controller/ExtensionController.java

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package org.restcomm.connect.extension.controller;
22

3+
import org.restcomm.connect.extension.api.ApiRequest;
34
import org.restcomm.connect.extension.api.ExtensionResponse;
45
import org.restcomm.connect.extension.api.ExtensionType;
56
import org.restcomm.connect.extension.api.IExtensionRequest;
@@ -121,7 +122,6 @@ public ExtensionResponse executePreInboundAction(final IExtensionRequest er, Lis
121122
ExtensionResponse response = new ExtensionResponse();
122123
// response.setAllowed(true);
123124
if (extensions != null && extensions.size() > 0) {
124-
125125
for (RestcommExtensionGeneric extension : extensions) {
126126
if(logger.isInfoEnabled()) {
127127
logger.info( extension.getName()+" is enabled="+extension.isEnabled());
@@ -143,4 +143,29 @@ public ExtensionResponse executePostInboundAction(final IExtensionRequest er, L
143143
//TODO: implement actual calls
144144
return response;
145145
}
146+
147+
public ExtensionResponse executePreApiAction(final ApiRequest apiRequest, List<RestcommExtensionGeneric> extensions) {
148+
ExtensionResponse response = new ExtensionResponse();
149+
150+
if (extensions != null && extensions.size() > 0) {
151+
for (RestcommExtensionGeneric extension : extensions) {
152+
if(logger.isInfoEnabled()) {
153+
logger.info( extension.getName()+" is enabled="+extension.isEnabled());
154+
}
155+
if (extension.isEnabled()) {
156+
response = extension.preApiAction(apiRequest);
157+
//fail fast
158+
if (!response.isAllowed())
159+
break;
160+
}
161+
}
162+
}
163+
return response;
164+
}
165+
166+
public ExtensionResponse executePostApiAction(final ApiRequest apiRequest, List<RestcommExtensionGeneric> extensions) {
167+
ExtensionResponse response = new ExtensionResponse();
168+
//TODO: implement actual calls
169+
return response;
170+
}
146171
}

restcomm/restcomm.http/src/main/java/org/restcomm/connect/http/AccountsEndpoint.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,7 @@
3838
import org.restcomm.connect.dao.entities.IncomingPhoneNumber;
3939
import org.restcomm.connect.dao.entities.Organization;
4040
import org.restcomm.connect.dao.entities.RestCommResponse;
41-
import org.restcomm.connect.extension.api.ExtensionResponse;
42-
import org.restcomm.connect.extension.api.IExtensionFeatureAccessRequest;
41+
import org.restcomm.connect.extension.api.ApiRequest;
4342
import org.restcomm.connect.extension.controller.ExtensionController;
4443
import org.restcomm.connect.http.client.rcmlserver.RcmlserverApi;
4544
import org.restcomm.connect.http.client.rcmlserver.RcmlserverNotifications;
@@ -55,7 +54,6 @@
5554
import org.restcomm.connect.identity.passwords.PasswordValidatorFactory;
5655
import org.restcomm.connect.provisioning.number.api.PhoneNumberProvisioningManager;
5756
import org.restcomm.connect.provisioning.number.api.PhoneNumberProvisioningManagerProvider;
58-
import org.restcomm.connect.telephony.api.FeatureAccessRequest;
5957

6058
import javax.annotation.PostConstruct;
6159
import javax.servlet.ServletContext;
@@ -382,10 +380,9 @@ protected Response putAccount(final MultivaluedMap<String, String> data, final M
382380
final Sid sid = userIdentityContext.getEffectiveAccount().getSid();
383381

384382
ExtensionController ec = ExtensionController.getInstance();
385-
IExtensionFeatureAccessRequest far = new FeatureAccessRequest(FeatureAccessRequest.Feature.SUBACCOUNTS, sid);
386-
ExtensionResponse er = ec.executePreInboundAction(far, extensions);
383+
ApiRequest apiRequest = new ApiRequest(sid.toString(), data, ApiRequest.Type.CREATE_SUBACCOUNT);
387384

388-
if (er.isAllowed()) {
385+
if (executePostApiAction(apiRequest)) {
389386
final Account parent = accountsDao.getAccount(sid);
390387
Account account = null;
391388
try {
@@ -430,6 +427,8 @@ protected Response putAccount(final MultivaluedMap<String, String> data, final M
430427
return status(CONFLICT).entity("The email address used for the new account is already in use.").build();
431428
}
432429

430+
executePostApiAction(apiRequest);
431+
433432
if (APPLICATION_JSON_TYPE == responseType) {
434433
return ok(gson.toJson(account), APPLICATION_JSON).build();
435434
} else if (APPLICATION_XML_TYPE == responseType) {
@@ -443,6 +442,7 @@ protected Response putAccount(final MultivaluedMap<String, String> data, final M
443442
final String errMsg = "Creation of sub-accounts is not Allowed";
444443
logger.debug(errMsg);
445444
}
445+
executePostApiAction(apiRequest);
446446
String errMsg = "Creation of sub-accounts is not Allowed";
447447
return status(Response.Status.FORBIDDEN).entity(errMsg).build();
448448
}

restcomm/restcomm.http/src/main/java/org/restcomm/connect/http/SecuredEndpoint.java

Lines changed: 6 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -25,15 +25,14 @@
2525
import org.apache.shiro.authz.Permission;
2626
import org.apache.shiro.authz.SimpleRole;
2727
import org.apache.shiro.authz.permission.WildcardPermissionResolver;
28-
import org.restcomm.connect.dao.exceptions.AccountHierarchyDepthCrossed;
28+
import org.restcomm.connect.commons.dao.Sid;
2929
import org.restcomm.connect.dao.AccountsDao;
3030
import org.restcomm.connect.dao.DaoManager;
3131
import org.restcomm.connect.dao.OrganizationsDao;
3232
import org.restcomm.connect.dao.entities.Account;
3333
import org.restcomm.connect.dao.entities.Organization;
34-
import org.restcomm.connect.commons.dao.Sid;
34+
import org.restcomm.connect.dao.exceptions.AccountHierarchyDepthCrossed;
3535
import org.restcomm.connect.extension.api.ApiRequest;
36-
import org.restcomm.connect.extension.api.ExtensionResponse;
3736
import org.restcomm.connect.extension.api.ExtensionType;
3837
import org.restcomm.connect.extension.api.RestcommExtensionGeneric;
3938
import org.restcomm.connect.extension.controller.ExtensionController;
@@ -439,20 +438,13 @@ protected String getAdministratorRole() {
439438
}
440439

441440
protected boolean executePreApiAction(final ApiRequest apiRequest) {
442-
if (extensions != null && extensions.size() > 0) {
443-
for (RestcommExtensionGeneric extension : extensions) {
444-
if (extension.isEnabled()) {
445-
ExtensionResponse response = extension.preApiAction(apiRequest);
446-
if (!response.isAllowed())
447-
return false;
448-
}
449-
}
450-
}
451-
return true;
441+
ExtensionController ec = ExtensionController.getInstance();
442+
return ec.executePreApiAction(apiRequest, extensions).isAllowed();
452443
}
453444

454445
protected boolean executePostApiAction(final ApiRequest apiRequest) {
455-
return false;
446+
ExtensionController ec = ExtensionController.getInstance();
447+
return ec.executePostApiAction(apiRequest, extensions).isAllowed();
456448
}
457449

458450
}

restcomm/restcomm.interpreter/src/main/java/org/restcomm/connect/interpreter/BaseVoiceInterpreter.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1587,6 +1587,7 @@ public void execute(final Object message) throws Exception {
15871587
String errMsg = "ASR feature is not allowed";
15881588
notification(WARNING_NOTIFICATION, 11001, errMsg);
15891589
call.tell(new Hangup(errMsg), source);
1590+
return;
15901591
}
15911592
ec.executePostOutboundAction(er, extensions);
15921593
}

restcomm/restcomm.sms/src/main/java/org/restcomm/connect/sms/SmsService.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -393,6 +393,7 @@ private boolean redirectToHostedSmsApp(final ActorRef self, final SipServletRequ
393393
final StartInterpreter start = new StartInterpreter(session);
394394
interpreter.tell(start, self);
395395
isFoundHostedApp = true;
396+
ec.executePostOutboundAction(far, extensions);
396397
} else {
397398
if (logger.isDebugEnabled()) {
398399
final String errMsg = "Inbound SMS is not Allowed";

restcomm/restcomm.telephony.api/src/main/java/org/restcomm/connect/telephony/api/FeatureAccessRequest.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,7 @@ public class FeatureAccessRequest implements IExtensionFeatureAccessRequest {
77

88
public enum Feature {
99
OUTBOUND_VOICE("outbound-voice"), INBOUND_VOICE("inbound-voice"), OUTBOUND_SMS("outbound-sms"),
10-
INBOUND_SMS("inbound-sms"), ASR("asr"), OUTBOUND_USSD("outbound-ussd"), INBOUND_USSD("inbound_ussd"),
11-
SUBACCOUNTS("subaccounts");
10+
INBOUND_SMS("inbound-sms"), ASR("asr"), OUTBOUND_USSD("outbound-ussd"), INBOUND_USSD("inbound_ussd");
1211

1312
private final String text;
1413

restcomm/restcomm.telephony/src/main/java/org/restcomm/connect/telephony/CallManager.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1323,6 +1323,7 @@ private boolean redirectToHostedVoiceApp (final ActorRef self, final SipServletR
13231323
call.tell(request, self);
13241324
interpreter.tell(new StartInterpreter(call), self);
13251325
isFoundHostedApp = true;
1326+
ec.executePostOutboundAction(far, extensions);
13261327
}
13271328
}
13281329
} else {

0 commit comments

Comments
 (0)