Skip to content

Commit

Permalink
list filters
Browse files Browse the repository at this point in the history
  • Loading branch information
Maria Farooq committed Sep 28, 2017
1 parent 0412504 commit a8f7323
Show file tree
Hide file tree
Showing 9 changed files with 97 additions and 28 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,10 @@
SELECT * FROM restcomm_accounts WHERE parent_sid=#{parent_sid};
</select>

<select id="getAccountsByOrganization" parameterType="string" resultType="hashmap">
SELECT * FROM restcomm_accounts WHERE organization_sid=#{organization_sid};
</select>

<delete id="removeAccount" parameterType="string">
DELETE FROM restcomm_accounts WHERE sid=#{sid};
</delete>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,10 @@
SELECT * FROM "restcomm_accounts" WHERE "parent_sid"=#{parent_sid};
</select>

<select id="getAccountsByOrganization" parameterType="string" resultType="hashmap">
SELECT * FROM "restcomm_accounts" WHERE "organization_sid"=#{organization_sid};
</select>

<delete id="removeAccount" parameterType="string">
DELETE FROM "restcomm_accounts" WHERE "sid"=#{sid};
</delete>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,9 @@

import java.util.List;

import org.restcomm.connect.dao.exceptions.AccountHierarchyDepthCrossed;
import org.restcomm.connect.commons.dao.Sid;
import org.restcomm.connect.dao.entities.Account;
import org.restcomm.connect.dao.exceptions.AccountHierarchyDepthCrossed;

/**
* @author quintana.thomas@gmail.com (Thomas Quintana)
Expand Down Expand Up @@ -106,4 +106,10 @@ public interface AccountsDao {
* @throws AccountHierarchyDepthCrossed
*/
List<String> getAccountLineage(Account account) throws AccountHierarchyDepthCrossed;

/**
* @param sid of organization
* @return
*/
List<Account> getAccountsByOrganization(Sid organizationSid);
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,21 +19,6 @@
*/
package org.restcomm.connect.dao.mybatis;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.joda.time.DateTime;
import org.restcomm.connect.dao.exceptions.AccountHierarchyDepthCrossed;
import org.restcomm.connect.commons.annotations.concurrency.ThreadSafe;
import org.restcomm.connect.dao.AccountsDao;
import org.restcomm.connect.dao.entities.Account;
import org.restcomm.connect.commons.dao.Sid;

import java.net.URI;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import static org.restcomm.connect.dao.DaoUtils.readAccountStatus;
import static org.restcomm.connect.dao.DaoUtils.readAccountType;
import static org.restcomm.connect.dao.DaoUtils.readDateTime;
Expand All @@ -46,6 +31,21 @@
import static org.restcomm.connect.dao.DaoUtils.writeSid;
import static org.restcomm.connect.dao.DaoUtils.writeUri;

import java.net.URI;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.joda.time.DateTime;
import org.restcomm.connect.commons.annotations.concurrency.ThreadSafe;
import org.restcomm.connect.commons.dao.Sid;
import org.restcomm.connect.dao.AccountsDao;
import org.restcomm.connect.dao.entities.Account;
import org.restcomm.connect.dao.exceptions.AccountHierarchyDepthCrossed;

/**
* @author quintana.thomas@gmail.com (Thomas Quintana)
* @author maria-farooq@live.com (Maria Farooq)
Expand Down Expand Up @@ -237,6 +237,23 @@ private void updateAccount(final String selector, final Account account) {
}
}

@Override
public List<Account> getAccountsByOrganization(final Sid organizationSid) {
final SqlSession session = sessions.openSession();
try {
final List<Map<String, Object>> results = session.selectList(namespace + "getAccountsByOrganization", organizationSid.toString());
final List<Account> accounts = new ArrayList<Account>();
if (results != null && !results.isEmpty()) {
for (final Map<String, Object> result : results) {
accounts.add(toAccount(result));
}
}
return accounts;
} finally {
session.close();
}
}

private Account toAccount(final Map<String, Object> map) {
final Sid sid = readSid(map.get("sid"));
final DateTime dateCreated = readDateTime(map.get("date_created"));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.MultivaluedMap;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.UriInfo;

import org.apache.commons.configuration.Configuration;
import org.apache.shiro.crypto.hash.Md5Hash;
Expand All @@ -53,6 +54,7 @@
import org.restcomm.connect.dao.entities.AccountList;
import org.restcomm.connect.dao.entities.Client;
import org.restcomm.connect.dao.entities.IncomingPhoneNumber;
import org.restcomm.connect.dao.entities.Organization;
import org.restcomm.connect.dao.entities.RestCommResponse;
import org.restcomm.connect.http.client.rcmlserver.RcmlserverApi;
import org.restcomm.connect.http.client.rcmlserver.RcmlserverNotifications;
Expand Down Expand Up @@ -318,7 +320,7 @@ private void removeIncomingPhoneNumbers(Sid accountSid, IncomingPhoneNumbersDao



protected Response getAccounts(final MultivaluedMap<String, String> data, final MediaType responseType) {
protected Response getAccounts(final UriInfo info, final MediaType responseType) {
checkAuthenticatedAccount();
//First check if the account has the required permissions in general, this way we can fail fast and avoid expensive DAO operations
checkPermission("RestComm:Read:Accounts");
Expand All @@ -327,8 +329,28 @@ protected Response getAccounts(final MultivaluedMap<String, String> data, final
return status(NOT_FOUND).build();
} else {
final List<Account> accounts = new ArrayList<Account>();
// accounts.add(account);
accounts.addAll(accountsDao.getChildAccounts(account.getSid()));

if (info == null) {
accounts.addAll(accountsDao.getChildAccounts(account.getSid()));
} else {
String organizationSid = info.getQueryParameters().getFirst("OrganizationSid");
String domainName = info.getQueryParameters().getFirst("DomainName");

if(organizationSid != null && !(organizationSid.trim().isEmpty())){
allowOnlySuperAdmin();
accounts.addAll(accountsDao.getAccountsByOrganization(new Sid(organizationSid)));
} else if(domainName != null && !(domainName.trim().isEmpty())){
allowOnlySuperAdmin();
Organization organization = organizationsDao.getOrganizationByDomainName(domainName);
if(organization == null){
return status(NOT_FOUND).build();
}
accounts.addAll(accountsDao.getAccountsByOrganization(organization.getSid()));
} else {
accounts.addAll(accountsDao.getChildAccounts(account.getSid()));
}
}

if (APPLICATION_XML_TYPE == responseType) {
final RestCommResponse response = new RestCommResponse(new AccountList(accounts));
return ok(xstream.toXML(response), APPLICATION_XML).build();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,8 @@
*/
package org.restcomm.connect.http;

import org.restcomm.connect.commons.annotations.concurrency.ThreadSafe;
import static javax.ws.rs.core.MediaType.APPLICATION_FORM_URLENCODED;
import static javax.ws.rs.core.MediaType.APPLICATION_JSON_TYPE;

import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
Expand All @@ -28,11 +29,12 @@
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MultivaluedMap;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.UriInfo;

import static javax.ws.rs.core.MediaType.APPLICATION_FORM_URLENCODED;
import static javax.ws.rs.core.MediaType.APPLICATION_JSON_TYPE;
import org.restcomm.connect.commons.annotations.concurrency.ThreadSafe;

/**
* @author quintana.thomas@gmail.com (Thomas Quintana)
Expand All @@ -58,8 +60,8 @@ public Response optionsAccount(@PathParam("accountSid") final String accountSid)
}

@GET
public Response getAccounts(final MultivaluedMap<String, String> data) {
return getAccounts(data, APPLICATION_JSON_TYPE);
public Response getAccounts(@Context UriInfo info) {
return getAccounts(info, APPLICATION_JSON_TYPE);
}

/* disabled as #1270
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,10 @@
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MultivaluedMap;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.UriInfo;

import static javax.ws.rs.core.MediaType.APPLICATION_FORM_URLENCODED;
import static javax.ws.rs.core.MediaType.APPLICATION_XML_TYPE;
Expand Down Expand Up @@ -58,8 +60,8 @@ public Response getAccountAsXml(@PathParam("accountSid") final String accountSid
}

@GET
public Response getAccounts(final MultivaluedMap<String, String> data) {
return getAccounts(data, APPLICATION_XML_TYPE);
public Response getAccounts(@Context UriInfo info) {
return getAccounts(info, APPLICATION_XML_TYPE);
}

@Consumes(APPLICATION_FORM_URLENCODED)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -100,4 +100,9 @@ public List<String> getAccountLineage(Sid accountSid) throws AccountHierarchyDep
public List<String> getAccountLineage(Account account) throws AccountHierarchyDepthCrossed {
throw new NotImplementedException();
}

@Override
public List<Account> getAccountsByOrganization(Sid sid) {
throw new NotImplementedException();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -606,8 +606,15 @@ public void testCreateAccountInSpecificOrganization() {
@Test
public void testGetAccountsOfASpecificOrganization() {
//without any parameters
ClientResponse response = RestcommAccountsTool.getInstance().getAccountsWithFilterResponse(deploymentUrl.toString(), adminUsername, adminAuthToken, null, null, null);
logger.info("getAccountsWithFilterResponse: "+response);
ClientResponse response = RestcommAccountsTool.getInstance().getAccountsResponse(deploymentUrl.toString(), adminUsername, adminAuthToken);
if(logger.isDebugEnabled())
logger.debug("getAccounts without filter Response: "+response);
assertEquals(200, response.getStatus());

//without any parameters
response = RestcommAccountsTool.getInstance().getAccountsWithFilterResponse(deploymentUrl.toString(), adminUsername, adminAuthToken, null, null, null);
if(logger.isDebugEnabled())
logger.debug("getAccounts With null Filter Response: "+response);
assertEquals(200, response.getStatus());
}

Expand Down

0 comments on commit a8f7323

Please sign in to comment.