From 84588a793c9484f9182d253ed83ad11687a1d4f8 Mon Sep 17 00:00:00 2001
From: rsanchez <rsanchez@curisit.net>
Date: Thu, 13 Apr 2017 17:18:56 +0000
Subject: [PATCH] #3529 feature - Added new role for readonly

---
 securis/src/main/webapp/src/app/forms/user.form.component.ts                 |   15 +
 securis/src/main/webapp/jspm.config.js                                       |   20 -
 securis/src/main/java/net/curisit/securis/services/ApiResource.java          |   11 
 securis/src/main/java/net/curisit/securis/db/User.java                       |    3 
 securis/src/main/webapp/jspm.browser.js                                      |    9 
 securis/src/main/webapp/src/main.ts                                          |    2 
 securis/src/main/java/net/curisit/securis/db/Pack.java                       |    2 
 securis/src/main/webapp/package.json                                         |    2 
 securis/src/main/java/net/curisit/securis/services/ApplicationResource.java  |    7 
 securis/src/main/java/net/curisit/securis/services/PackResource.java         |   26 +-
 securis/src/main/java/net/curisit/securis/services/LicenseTypeResource.java  |    7 
 /dev/null                                                                    |    9 
 securis/src/main/webapp/src/app/forms/user.form.html                         |    3 
 securis/src/main/webapp/index.html                                           |    9 
 securis/src/main/java/net/curisit/securis/services/UserResource.java         |    7 
 securis/src/main/java/net/curisit/securis/services/LicenseResource.java      |   17 
 securis/src/main/webapp/bs-config.js                                         |   33 +++
 securis/src/main/java/net/curisit/securis/services/OrganizationResource.java |  381 ++++++++++++++++++-------------------
 18 files changed, 293 insertions(+), 270 deletions(-)

diff --git a/securis/src/main/java/net/curisit/securis/db/Pack.java b/securis/src/main/java/net/curisit/securis/db/Pack.java
index 3ff3493..b4ee893 100644
--- a/securis/src/main/java/net/curisit/securis/db/Pack.java
+++ b/securis/src/main/java/net/curisit/securis/db/Pack.java
@@ -44,7 +44,7 @@
 		@NamedQuery(name = "pack-by-code", query = "SELECT pa FROM Pack pa where pa.code = :code"), //
 		@NamedQuery(name = "list-packs-by-lic-type", query = "SELECT pa FROM Pack pa where pa.licenseType.id = :lt_id"), //
 		@NamedQuery(name = "list-packs-by-orgs-apps", query = "SELECT pa FROM Pack pa where pa.organization.id in :list_ids_org and pa.licenseType.application.id in :list_ids_app "), //
-		@NamedQuery(name = "list-packs-by-orgs", query = "SELECT pa FROM Pack pa where pa.organization.id in :list_ids") })
+		@NamedQuery(name = "list-packs-by-apps", query = "SELECT pa FROM Pack pa where pa.licenseType.application.id in :list_ids_app ") })
 public class Pack implements Serializable {
 
 	private static final long serialVersionUID = 1L;
diff --git a/securis/src/main/java/net/curisit/securis/db/User.java b/securis/src/main/java/net/curisit/securis/db/User.java
index d5b0f45..731280f 100644
--- a/securis/src/main/java/net/curisit/securis/db/User.java
+++ b/securis/src/main/java/net/curisit/securis/db/User.java
@@ -294,7 +294,8 @@
 		public static final int ADVANCE = 0x01;
 		public static final int ADMIN = 0x02;
 		public static final int BASIC = 0x04;
-		public static final int[] ALL = new int[] { ADVANCE, ADMIN, BASIC };
+		public static final int API_CLIENT = 0x80;
+		public static final int[] ALL = new int[] { ADVANCE, ADMIN, BASIC }; // ALL except the special API client
 	}
 
 }
diff --git a/securis/src/main/java/net/curisit/securis/services/ApiResource.java b/securis/src/main/java/net/curisit/securis/services/ApiResource.java
index de78528..5211a5e 100644
--- a/securis/src/main/java/net/curisit/securis/services/ApiResource.java
+++ b/securis/src/main/java/net/curisit/securis/services/ApiResource.java
@@ -35,6 +35,7 @@
 import net.curisit.securis.db.LicenseStatus;
 import net.curisit.securis.db.Pack;
 import net.curisit.securis.db.User;
+import net.curisit.securis.db.User.Rol;
 import net.curisit.securis.ioc.EnsureTransaction;
 import net.curisit.securis.security.BasicSecurityContext;
 import net.curisit.securis.security.Securable;
@@ -111,7 +112,7 @@
 	@POST
 	@Path("/request")
 	@Consumes(MediaType.APPLICATION_JSON)
-	@Securable
+	@Securable(roles = Rol.API_CLIENT)
 	@Produces({ MediaType.APPLICATION_JSON })
 	@EnsureTransaction
 	public Response createFromRequest(RequestBean request, @HeaderParam(LicenseManager.HEADER_LICENSE_NAME_OR_REFERENCE) String nameOrReference,
@@ -135,7 +136,7 @@
 	@POST
 	@Path("/request")
 	@Consumes(MediaType.MULTIPART_FORM_DATA)
-	@Securable
+	@Securable(roles = Rol.API_CLIENT)
 	@Produces({ MediaType.APPLICATION_JSON })
 	@EnsureTransaction
 	@SuppressWarnings("unchecked")
@@ -168,7 +169,7 @@
 	@POST
 	@Path("/renew")
 	@Consumes(MediaType.APPLICATION_JSON)
-	@Securable
+	@Securable(roles = Rol.API_CLIENT)
 	@Produces({ MediaType.APPLICATION_JSON })
 	@EnsureTransaction
 	public Response renewFromPreviousLicense(LicenseBean previousLic, @Context BasicSecurityContext bsc) throws IOException, SeCurisServiceException, SeCurisException {
@@ -208,7 +209,7 @@
 	@POST
 	@Path("/validate")
 	@Consumes(MediaType.APPLICATION_JSON)
-	@Securable
+	@Securable(roles = Rol.API_CLIENT)
 	@Produces({ MediaType.APPLICATION_JSON })
 	@EnsureTransaction
 	public Response validate(LicenseBean currentLic, @Context BasicSecurityContext bsc) throws IOException, SeCurisServiceException, SeCurisException {
@@ -242,7 +243,7 @@
 	@POST
 	@Path("/renew")
 	@Consumes(MediaType.MULTIPART_FORM_DATA)
-	@Securable
+	@Securable(roles = Rol.API_CLIENT)
 	@Produces({ MediaType.APPLICATION_JSON })
 	@EnsureTransaction
 	@SuppressWarnings("unchecked")
diff --git a/securis/src/main/java/net/curisit/securis/services/ApplicationResource.java b/securis/src/main/java/net/curisit/securis/services/ApplicationResource.java
index e3fcced..e62cdb4 100644
--- a/securis/src/main/java/net/curisit/securis/services/ApplicationResource.java
+++ b/securis/src/main/java/net/curisit/securis/services/ApplicationResource.java
@@ -32,6 +32,7 @@
 import net.curisit.securis.DefaultExceptionHandler;
 import net.curisit.securis.db.Application;
 import net.curisit.securis.db.ApplicationMetadata;
+import net.curisit.securis.db.User.Rol;
 import net.curisit.securis.ioc.EnsureTransaction;
 import net.curisit.securis.security.BasicSecurityContext;
 import net.curisit.securis.security.Securable;
@@ -120,7 +121,7 @@
 	@Consumes(MediaType.APPLICATION_JSON)
 	@Produces({ MediaType.APPLICATION_JSON })
 	@EnsureTransaction
-	@Securable
+	@Securable(roles = Rol.ADMIN)
 	@RolesAllowed(BasicSecurityContext.ROL_ADMIN)
 	public Response create(Application app, @HeaderParam(TokenHelper.TOKEN_HEADER_PÀRAM) String token) {
 		LOG.info("Creating new application");
@@ -146,7 +147,7 @@
 	@EnsureTransaction
 	@Consumes(MediaType.APPLICATION_JSON)
 	@Produces({ MediaType.APPLICATION_JSON })
-	@Securable
+	@Securable(roles = Rol.ADMIN)
 	@RolesAllowed(BasicSecurityContext.ROL_ADMIN)
 	public Response modify(Application app, @PathParam("appid") String appid, @HeaderParam(TokenHelper.TOKEN_HEADER_PÀRAM) String token) {
 		LOG.info("Modifying application with id: {}", appid);
@@ -209,7 +210,7 @@
 	@Path("/{appid}")
 	@EnsureTransaction
 	@Produces({ MediaType.APPLICATION_JSON })
-	@Securable
+	@Securable(roles = Rol.ADMIN)
 	@RolesAllowed(BasicSecurityContext.ROL_ADMIN)
 	public Response delete(@PathParam("appid") String appid, @Context HttpServletRequest request) {
 		LOG.info("Deleting app with id: {}", appid);
diff --git a/securis/src/main/java/net/curisit/securis/services/LicenseResource.java b/securis/src/main/java/net/curisit/securis/services/LicenseResource.java
index b333818..a296158 100644
--- a/securis/src/main/java/net/curisit/securis/services/LicenseResource.java
+++ b/securis/src/main/java/net/curisit/securis/services/LicenseResource.java
@@ -49,6 +49,7 @@
 import net.curisit.securis.db.Pack;
 import net.curisit.securis.db.PackStatus;
 import net.curisit.securis.db.User;
+import net.curisit.securis.db.User.Rol;
 import net.curisit.securis.ioc.EnsureTransaction;
 import net.curisit.securis.security.BasicSecurityContext;
 import net.curisit.securis.security.Securable;
@@ -175,7 +176,7 @@
 	@PUT
 	@POST
 	@Path("/{licId}/activate")
-	@Securable
+	@Securable(roles = Rol.ADMIN | Rol.ADVANCE)
 	@EnsureTransaction
 	@Consumes(MediaType.APPLICATION_JSON)
 	@Produces({ MediaType.APPLICATION_JSON })
@@ -220,7 +221,7 @@
 	@PUT
 	@POST
 	@Path("/{licId}/send")
-	@Securable
+	@Securable(roles = Rol.ADMIN | Rol.ADVANCE)
 	@EnsureTransaction
 	@Consumes(MediaType.APPLICATION_JSON)
 	@Produces({ MediaType.APPLICATION_JSON })
@@ -274,7 +275,7 @@
 	@PUT
 	@POST
 	@Path("/{licId}/cancel")
-	@Securable
+	@Securable(roles = Rol.ADMIN | Rol.ADVANCE)
 	@EnsureTransaction
 	@Consumes(MediaType.APPLICATION_JSON)
 	@Produces({ MediaType.APPLICATION_JSON })
@@ -317,7 +318,7 @@
 	@POST
 	@Path("/")
 	@Consumes(MediaType.APPLICATION_JSON)
-	@Securable
+	@Securable(roles = Rol.ADMIN | Rol.ADVANCE)
 	@Produces({ MediaType.APPLICATION_JSON })
 	@EnsureTransaction
 	public Response create(License lic, @Context BasicSecurityContext bsc) throws SeCurisServiceException {
@@ -456,7 +457,7 @@
 	@PUT
 	@POST
 	@Path("/{licId}")
-	@Securable
+	@Securable(roles = Rol.ADMIN | Rol.ADVANCE)
 	@EnsureTransaction
 	@Consumes(MediaType.APPLICATION_JSON)
 	@Produces({ MediaType.APPLICATION_JSON })
@@ -506,7 +507,7 @@
 	@DELETE
 	@Path("/{licId}")
 	@EnsureTransaction
-	@Securable
+	@Securable(roles = Rol.ADMIN | Rol.ADVANCE)
 	@Produces({ MediaType.APPLICATION_JSON })
 	public Response delete(@PathParam("licId") Integer licId, @Context BasicSecurityContext bsc) throws SeCurisServiceException {
 		LOG.info("Deleting license with id: {}", licId);
@@ -536,7 +537,7 @@
 	@POST
 	@Path("/{licId}/block")
 	@EnsureTransaction
-	@Securable
+	@Securable(roles = Rol.ADMIN | Rol.ADVANCE)
 	@Produces({ MediaType.APPLICATION_JSON })
 	public Response block(@PathParam("licId") Integer licId, @Context BasicSecurityContext bsc) throws SeCurisServiceException {
 		LOG.info("Blocking license with id: {}", licId);
@@ -567,7 +568,7 @@
 	@POST
 	@Path("/{licId}/unblock")
 	@EnsureTransaction
-	@Securable
+	@Securable(roles = Rol.ADMIN | Rol.ADVANCE)
 	@Produces({ MediaType.APPLICATION_JSON })
 	public Response unblock(@PathParam("licId") Integer licId, @Context BasicSecurityContext bsc) throws SeCurisServiceException {
 		LOG.info("Unblocking license with id: {}", licId);
diff --git a/securis/src/main/java/net/curisit/securis/services/LicenseTypeResource.java b/securis/src/main/java/net/curisit/securis/services/LicenseTypeResource.java
index ea63e1b..3422cbb 100644
--- a/securis/src/main/java/net/curisit/securis/services/LicenseTypeResource.java
+++ b/securis/src/main/java/net/curisit/securis/services/LicenseTypeResource.java
@@ -34,6 +34,7 @@
 import net.curisit.securis.db.Application;
 import net.curisit.securis.db.LicenseType;
 import net.curisit.securis.db.LicenseTypeMetadata;
+import net.curisit.securis.db.User.Rol;
 import net.curisit.securis.ioc.EnsureTransaction;
 import net.curisit.securis.security.BasicSecurityContext;
 import net.curisit.securis.security.Securable;
@@ -115,7 +116,7 @@
 	@Consumes(MediaType.APPLICATION_JSON)
 	@Produces({ MediaType.APPLICATION_JSON })
 	@EnsureTransaction
-	@Securable
+	@Securable(roles = Rol.ADMIN)
 	@RolesAllowed(BasicSecurityContext.ROL_ADMIN)
 	public Response create(LicenseType lt, @HeaderParam(TokenHelper.TOKEN_HEADER_PÀRAM) String token) {
 		LOG.info("Creating new license type");
@@ -163,7 +164,7 @@
 	@EnsureTransaction
 	@Consumes(MediaType.APPLICATION_JSON)
 	@Produces({ MediaType.APPLICATION_JSON })
-	@Securable
+	@Securable(roles = Rol.ADMIN)
 	@RolesAllowed(BasicSecurityContext.ROL_ADMIN)
 	public Response modify(LicenseType lt, @PathParam("ltid") String ltid, @HeaderParam(TokenHelper.TOKEN_HEADER_PÀRAM) String token) {
 		LOG.info("Modifying license type with id: {}", ltid);
@@ -236,7 +237,7 @@
 	@Path("/{ltid}")
 	@EnsureTransaction
 	@Produces({ MediaType.APPLICATION_JSON })
-	@Securable
+	@Securable(roles = Rol.ADMIN)
 	@RolesAllowed(BasicSecurityContext.ROL_ADMIN)
 	public Response delete(@PathParam("ltid") String ltid, @Context HttpServletRequest request) {
 		LOG.info("Deleting app with id: {}", ltid);
diff --git a/securis/src/main/java/net/curisit/securis/services/OrganizationResource.java b/securis/src/main/java/net/curisit/securis/services/OrganizationResource.java
index 366bdcd..2a53496 100644
--- a/securis/src/main/java/net/curisit/securis/services/OrganizationResource.java
+++ b/securis/src/main/java/net/curisit/securis/services/OrganizationResource.java
@@ -24,18 +24,19 @@
 import javax.ws.rs.core.Response;
 import javax.ws.rs.core.Response.Status;
 
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
 import net.curisit.integrity.commons.Utils;
 import net.curisit.securis.DefaultExceptionHandler;
 import net.curisit.securis.SeCurisException;
 import net.curisit.securis.db.Organization;
 import net.curisit.securis.db.User;
+import net.curisit.securis.db.User.Rol;
 import net.curisit.securis.ioc.EnsureTransaction;
 import net.curisit.securis.security.BasicSecurityContext;
 import net.curisit.securis.security.Securable;
 import net.curisit.securis.utils.TokenHelper;
-
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
 
 /**
  * Organization resource, this service will provide methods to create, modify
@@ -47,225 +48,207 @@
 @RequestScoped
 public class OrganizationResource {
 
-    private static final Logger LOG = LogManager.getLogger(OrganizationResource.class);
+	private static final Logger LOG = LogManager.getLogger(OrganizationResource.class);
 
-    @Context
-    EntityManager em;
+	@Context
+	EntityManager em;
 
-    @Context
-    BasicSecurityContext bsc;
+	@Context
+	BasicSecurityContext bsc;
 
-    public OrganizationResource() {
-    }
+	public OrganizationResource() {
+	}
 
-    /**
-     * 
-     * @return the server version in format majorVersion.minorVersion
-     */
-    @GET
-    @Path("/")
-    @Produces({
-        MediaType.APPLICATION_JSON
-    })
-    @Securable
-    public Response index() {
-        LOG.info("Getting organizations list ");
+	/**
+	 * 
+	 * @return the server version in format majorVersion.minorVersion
+	 */
+	@GET
+	@Path("/")
+	@Produces({ MediaType.APPLICATION_JSON })
+	@Securable
+	public Response index() {
+		LOG.info("Getting organizations list ");
 
-        // EntityManager em = emProvider.get();
-        em.clear();
-        TypedQuery<Organization> q;
-        if (bsc.isUserInRole(BasicSecurityContext.ROL_ADMIN)) {
-            LOG.info("GEtting all orgs for user: " + bsc.getUserPrincipal());
-            q = em.createNamedQuery("list-organizations", Organization.class);
-        } else {
-            q = em.createNamedQuery("list-organizations", Organization.class);
-        }
+		// EntityManager em = emProvider.get();
+		em.clear();
+		TypedQuery<Organization> q;
+		if (bsc.isUserInRole(BasicSecurityContext.ROL_ADMIN)) {
+			LOG.info("GEtting all orgs for user: " + bsc.getUserPrincipal());
+			q = em.createNamedQuery("list-organizations", Organization.class);
+		} else {
+			q = em.createNamedQuery("list-organizations", Organization.class);
+		}
 
-        List<Organization> list = q.getResultList();
+		List<Organization> list = q.getResultList();
 
-        return Response.ok(list).build();
-    }
+		return Response.ok(list).build();
+	}
 
-    /**
-     * 
-     * @return the server version in format majorVersion.minorVersion
-     */
-    @GET
-    @Path("/{orgid}")
-    @Produces({
-        MediaType.APPLICATION_JSON
-    })
-    @Securable
-    public Response get(@PathParam("orgid") String orgid, @HeaderParam(TokenHelper.TOKEN_HEADER_PÀRAM) String token) {
-        LOG.info("Getting organization data for id: {}: ", orgid);
-        if (orgid == null || "".equals(orgid)) {
-            LOG.error("Organization ID is mandatory");
-            return Response.status(Status.NOT_FOUND).build();
-        }
+	/**
+	 * 
+	 * @return the server version in format majorVersion.minorVersion
+	 */
+	@GET
+	@Path("/{orgid}")
+	@Produces({ MediaType.APPLICATION_JSON })
+	@Securable
+	public Response get(@PathParam("orgid") String orgid, @HeaderParam(TokenHelper.TOKEN_HEADER_PÀRAM) String token) {
+		LOG.info("Getting organization data for id: {}: ", orgid);
+		if (orgid == null || "".equals(orgid)) {
+			LOG.error("Organization ID is mandatory");
+			return Response.status(Status.NOT_FOUND).build();
+		}
 
-        // EntityManager em = emProvider.get();
-        em.clear();
-        Organization org = em.find(Organization.class, Integer.parseInt(orgid));
-        if (org == null) {
-            LOG.error("Organization with id {} not found in DB", orgid);
-            return Response.status(Status.NOT_FOUND).header(DefaultExceptionHandler.ERROR_MESSAGE_HEADER, "Organization not found, id: " + orgid)
-                    .build();
-        }
-        return Response.ok(org).build();
-    }
+		// EntityManager em = emProvider.get();
+		em.clear();
+		Organization org = em.find(Organization.class, Integer.parseInt(orgid));
+		if (org == null) {
+			LOG.error("Organization with id {} not found in DB", orgid);
+			return Response.status(Status.NOT_FOUND).header(DefaultExceptionHandler.ERROR_MESSAGE_HEADER, "Organization not found, id: " + orgid).build();
+		}
+		return Response.ok(org).build();
+	}
 
-    private boolean isCyclicalRelationship(int currentId, Organization parent) {
-        while (parent != null) {
-            if (parent.getId() == currentId) {
-                return true;
-            }
-            parent = parent.getParentOrganization();
-        }
-        return false;
-    }
+	private boolean isCyclicalRelationship(int currentId, Organization parent) {
+		while (parent != null) {
+			if (parent.getId() == currentId) {
+				return true;
+			}
+			parent = parent.getParentOrganization();
+		}
+		return false;
+	}
 
-    @POST
-    @Path("/")
-    @Consumes(MediaType.APPLICATION_JSON)
-    @Produces({
-        MediaType.APPLICATION_JSON
-    })
-    @EnsureTransaction
-    @Securable
-    @RolesAllowed(BasicSecurityContext.ROL_ADMIN)
-    public Response create(Organization org) {
-        LOG.info("Creating new organization");
-        // EntityManager em = emProvider.get();
+	@POST
+	@Path("/")
+	@Consumes(MediaType.APPLICATION_JSON)
+	@Produces({ MediaType.APPLICATION_JSON })
+	@EnsureTransaction
+	@Securable(roles = Rol.ADMIN)
+	@RolesAllowed(BasicSecurityContext.ROL_ADMIN)
+	public Response create(Organization org) {
+		LOG.info("Creating new organization");
+		// EntityManager em = emProvider.get();
 
-        try {
-            this.setParentOrg(org, org.getParentOrgId(), em);
-        } catch (SeCurisException e) {
-            return Response.status(Status.NOT_FOUND).header(DefaultExceptionHandler.ERROR_MESSAGE_HEADER, e.getMessage()).build();
-        }
+		try {
+			this.setParentOrg(org, org.getParentOrgId(), em);
+		} catch (SeCurisException e) {
+			return Response.status(Status.NOT_FOUND).header(DefaultExceptionHandler.ERROR_MESSAGE_HEADER, e.getMessage()).build();
+		}
 
-        Set<User> users = null;
-        Set<String> usersIds = org.getUsersIds();
-        if (usersIds != null && !usersIds.isEmpty()) {
-            users = new HashSet<>();
-            for (String username : usersIds) {
-                User user = em.find(User.class, username);
-                if (user == null) {
-                    LOG.error("Organization user with id {} not found in DB", username);
-                    return Response.status(Status.NOT_FOUND)
-                            .header(DefaultExceptionHandler.ERROR_MESSAGE_HEADER, "Organization's user not found with ID: " + username).build();
-                }
-                users.add(user);
-            }
-        }
+		Set<User> users = null;
+		Set<String> usersIds = org.getUsersIds();
+		if (usersIds != null && !usersIds.isEmpty()) {
+			users = new HashSet<>();
+			for (String username : usersIds) {
+				User user = em.find(User.class, username);
+				if (user == null) {
+					LOG.error("Organization user with id {} not found in DB", username);
+					return Response.status(Status.NOT_FOUND).header(DefaultExceptionHandler.ERROR_MESSAGE_HEADER, "Organization's user not found with ID: " + username).build();
+				}
+				users.add(user);
+			}
+		}
 
-        org.setUsers(users);
-        org.setCreationTimestamp(new Date());
-        em.persist(org);
-        return Response.ok(org).build();
-    }
+		org.setUsers(users);
+		org.setCreationTimestamp(new Date());
+		em.persist(org);
+		return Response.ok(org).build();
+	}
 
-    private void setParentOrg(Organization org, Integer parentOrgId, EntityManager em) throws SeCurisException {
-        Organization parentOrg = null;
-        if (parentOrgId != null) {
-            parentOrg = em.find(Organization.class, parentOrgId);
-            if (parentOrg == null) {
-                LOG.error("Organization parent with id {} not found in DB", org.getParentOrgId());
-                throw new SecurityException("Organization's parent not found with ID: " + org.getParentOrgId());
-            }
-        }
+	private void setParentOrg(Organization org, Integer parentOrgId, EntityManager em) throws SeCurisException {
+		Organization parentOrg = null;
+		if (parentOrgId != null) {
+			parentOrg = em.find(Organization.class, parentOrgId);
+			if (parentOrg == null) {
+				LOG.error("Organization parent with id {} not found in DB", org.getParentOrgId());
+				throw new SecurityException("Organization's parent not found with ID: " + org.getParentOrgId());
+			}
+		}
 
-        org.setParentOrganization(parentOrg);
-    }
+		org.setParentOrganization(parentOrg);
+	}
 
-    private void setOrgUsers(Organization org, Set<String> usersIds, EntityManager em) throws SeCurisException {
-        Set<User> users = null;
-        if (usersIds != null && !usersIds.isEmpty()) {
-            users = new HashSet<>();
-            for (String username : usersIds) {
-                User user = em.find(User.class, username);
-                if (user == null) {
-                    LOG.error("Organization user with id '{}' not found in DB", username);
-                    throw new SecurityException("Organization's user not found with ID: " + username);
-                }
-                users.add(user);
-            }
-        }
+	private void setOrgUsers(Organization org, Set<String> usersIds, EntityManager em) throws SeCurisException {
+		Set<User> users = null;
+		if (usersIds != null && !usersIds.isEmpty()) {
+			users = new HashSet<>();
+			for (String username : usersIds) {
+				User user = em.find(User.class, username);
+				if (user == null) {
+					LOG.error("Organization user with id '{}' not found in DB", username);
+					throw new SecurityException("Organization's user not found with ID: " + username);
+				}
+				users.add(user);
+			}
+		}
 
-        org.setUsers(users);
-    }
+		org.setUsers(users);
+	}
 
-    @PUT
-    @POST
-    @Path("/{orgid}")
-    @Consumes(MediaType.APPLICATION_JSON)
-    @Produces({
-        MediaType.APPLICATION_JSON
-    })
-    @EnsureTransaction
-    @Securable
-    @RolesAllowed(BasicSecurityContext.ROL_ADMIN)
-    public Response modify(Organization org, @PathParam("orgid") String orgid, @HeaderParam(TokenHelper.TOKEN_HEADER_PÀRAM) String token) {
-        LOG.info("Modifying organization with id: {}", orgid);
-        // EntityManager em = emProvider.get();
-        Organization currentOrg = em.find(Organization.class, Integer.parseInt(orgid));
-        if (currentOrg == null) {
-            LOG.error("Organization with id {} not found in DB", orgid);
-            return Response.status(Status.NOT_FOUND).header(DefaultExceptionHandler.ERROR_MESSAGE_HEADER, "Organization not found with ID: " + orgid)
-                    .build();
-        }
-        try {
-            this.setParentOrg(currentOrg, org.getParentOrgId(), em);
-        } catch (SeCurisException e) {
-            return Response.status(Status.NOT_FOUND).header(DefaultExceptionHandler.ERROR_MESSAGE_HEADER, e.getMessage()).build();
-        }
-        if (org.getParentOrganization() != null && (isCyclicalRelationship(currentOrg.getId(), org.getParentOrganization()))) {
-            LOG.error("Organization parent generate a cyclical relationship, parent id {}, current id: {}", org.getParentOrgId(), currentOrg.getId());
-            return Response
-                    .status(Status.FORBIDDEN)
-                    .header(DefaultExceptionHandler.ERROR_MESSAGE_HEADER,
-                            "Cyclical relationships are not allowed, please change the parent organization, current Parent: "
-                                    + org.getParentOrganization().getName()).build();
-        }
+	@PUT
+	@POST
+	@Path("/{orgid}")
+	@Consumes(MediaType.APPLICATION_JSON)
+	@Produces({ MediaType.APPLICATION_JSON })
+	@EnsureTransaction
+	@Securable(roles = Rol.ADMIN)
+	@RolesAllowed(BasicSecurityContext.ROL_ADMIN)
+	public Response modify(Organization org, @PathParam("orgid") String orgid, @HeaderParam(TokenHelper.TOKEN_HEADER_PÀRAM) String token) {
+		LOG.info("Modifying organization with id: {}", orgid);
+		// EntityManager em = emProvider.get();
+		Organization currentOrg = em.find(Organization.class, Integer.parseInt(orgid));
+		if (currentOrg == null) {
+			LOG.error("Organization with id {} not found in DB", orgid);
+			return Response.status(Status.NOT_FOUND).header(DefaultExceptionHandler.ERROR_MESSAGE_HEADER, "Organization not found with ID: " + orgid).build();
+		}
+		try {
+			this.setParentOrg(currentOrg, org.getParentOrgId(), em);
+		} catch (SeCurisException e) {
+			return Response.status(Status.NOT_FOUND).header(DefaultExceptionHandler.ERROR_MESSAGE_HEADER, e.getMessage()).build();
+		}
+		if (org.getParentOrganization() != null && (isCyclicalRelationship(currentOrg.getId(), org.getParentOrganization()))) {
+			LOG.error("Organization parent generate a cyclical relationship, parent id {}, current id: {}", org.getParentOrgId(), currentOrg.getId());
+			return Response.status(Status.FORBIDDEN).header(DefaultExceptionHandler.ERROR_MESSAGE_HEADER,
+					"Cyclical relationships are not allowed, please change the parent organization, current Parent: " + org.getParentOrganization().getName()).build();
+		}
 
-        try {
-            setOrgUsers(currentOrg, org.getUsersIds(), em);
-        } catch (SeCurisException e) {
-            return Response.status(Status.NOT_FOUND).header(DefaultExceptionHandler.ERROR_MESSAGE_HEADER, e.getMessage()).build();
-        }
+		try {
+			setOrgUsers(currentOrg, org.getUsersIds(), em);
+		} catch (SeCurisException e) {
+			return Response.status(Status.NOT_FOUND).header(DefaultExceptionHandler.ERROR_MESSAGE_HEADER, e.getMessage()).build();
+		}
 
-        currentOrg.setCode(org.getCode());
-        currentOrg.setName(org.getName());
-        currentOrg.setDescription(org.getDescription());
-        em.persist(currentOrg);
+		currentOrg.setCode(org.getCode());
+		currentOrg.setName(org.getName());
+		currentOrg.setDescription(org.getDescription());
+		em.persist(currentOrg);
 
-        return Response.ok(currentOrg).build();
-    }
+		return Response.ok(currentOrg).build();
+	}
 
-    @DELETE
-    @Path("/{orgid}")
-    @EnsureTransaction
-    @Produces({
-        MediaType.APPLICATION_JSON
-    })
-    @Securable
-    @RolesAllowed(BasicSecurityContext.ROL_ADMIN)
-    public Response delete(@PathParam("orgid") String orgid, @Context HttpServletRequest request) {
-        LOG.info("Deleting organization with id: {}", orgid);
-        // EntityManager em = emProvider.get();
-        Organization org = em.find(Organization.class, Integer.parseInt(orgid));
-        if (org == null) {
-            LOG.error("Organization with id {} can not be deleted, It was not found in DB", orgid);
-            return Response.status(Status.NOT_FOUND).header(DefaultExceptionHandler.ERROR_MESSAGE_HEADER, "Organization was not found, ID: " + orgid)
-                    .build();
-        }
-        if (org.getChildOrganizations() != null && !org.getChildOrganizations().isEmpty()) {
-            LOG.error("Organization has children and can not be deleted, ID: " + orgid);
-            return Response.status(Status.FORBIDDEN)
-                    .header(DefaultExceptionHandler.ERROR_MESSAGE_HEADER, "Organization has children and can not be deleted, ID: " + orgid).build();
-        }
+	@DELETE
+	@Path("/{orgid}")
+	@EnsureTransaction
+	@Produces({ MediaType.APPLICATION_JSON })
+	@Securable(roles = Rol.ADMIN)
+	@RolesAllowed(BasicSecurityContext.ROL_ADMIN)
+	public Response delete(@PathParam("orgid") String orgid, @Context HttpServletRequest request) {
+		LOG.info("Deleting organization with id: {}", orgid);
+		// EntityManager em = emProvider.get();
+		Organization org = em.find(Organization.class, Integer.parseInt(orgid));
+		if (org == null) {
+			LOG.error("Organization with id {} can not be deleted, It was not found in DB", orgid);
+			return Response.status(Status.NOT_FOUND).header(DefaultExceptionHandler.ERROR_MESSAGE_HEADER, "Organization was not found, ID: " + orgid).build();
+		}
+		if (org.getChildOrganizations() != null && !org.getChildOrganizations().isEmpty()) {
+			LOG.error("Organization has children and can not be deleted, ID: " + orgid);
+			return Response.status(Status.FORBIDDEN).header(DefaultExceptionHandler.ERROR_MESSAGE_HEADER, "Organization has children and can not be deleted, ID: " + orgid).build();
+		}
 
-        em.remove(org);
-        return Response.ok(Utils.createMap("success", true, "id", orgid)).build();
-    }
+		em.remove(org);
+		return Response.ok(Utils.createMap("success", true, "id", orgid)).build();
+	}
 
 }
diff --git a/securis/src/main/java/net/curisit/securis/services/PackResource.java b/securis/src/main/java/net/curisit/securis/services/PackResource.java
index 07bfdfa..6c4db5a 100644
--- a/securis/src/main/java/net/curisit/securis/services/PackResource.java
+++ b/securis/src/main/java/net/curisit/securis/services/PackResource.java
@@ -38,6 +38,7 @@
 import net.curisit.securis.db.PackMetadata;
 import net.curisit.securis.db.PackStatus;
 import net.curisit.securis.db.User;
+import net.curisit.securis.db.User.Rol;
 import net.curisit.securis.ioc.EnsureTransaction;
 import net.curisit.securis.security.BasicSecurityContext;
 import net.curisit.securis.security.Securable;
@@ -90,12 +91,15 @@
 			LOG.info("Getting all packs for user: " + bsc.getUserPrincipal());
 			q = em.createNamedQuery("list-packs", Pack.class);
 		} else {
-			if (bsc.getOrganizationsIds() == null || bsc.getOrganizationsIds().isEmpty() || // 
-					bsc.getApplicationsIds() == null || bsc.getApplicationsIds().isEmpty()) {
+			if (bsc.getApplicationsIds() == null || bsc.getApplicationsIds().isEmpty()) {
 				return Response.ok().build();
 			}
-			q = em.createNamedQuery("list-packs-by-orgs-apps", Pack.class);
-			q.setParameter("list_ids_org", bsc.getOrganizationsIds());
+			if (bsc.getOrganizationsIds() == null || bsc.getOrganizationsIds().isEmpty()) {
+				q = em.createNamedQuery("list-packs-by-apps", Pack.class);
+			} else {
+				q = em.createNamedQuery("list-packs-by-orgs-apps", Pack.class);
+				q.setParameter("list_ids_org", bsc.getOrganizationsIds());
+			}
 			q.setParameter("list_ids_app", bsc.getApplicationsIds());
 			LOG.info("Getting packs from orgs: {} and apps: {}", bsc.getOrganizationsIds(), bsc.getApplicationsIds());
 		}
@@ -140,7 +144,7 @@
 
 	@POST
 	@Path("/")
-	@Securable
+	@Securable(roles = Rol.ADMIN | Rol.ADVANCE)
 	@RolesAllowed(BasicSecurityContext.ROL_ADMIN)
 	@Consumes(MediaType.APPLICATION_JSON)
 	@Produces({ MediaType.APPLICATION_JSON })
@@ -207,7 +211,7 @@
 	 */
 	@GET
 	@Path("/{packId}/next_license_code")
-	@Securable
+	@Securable(roles = Rol.ADMIN | Rol.ADVANCE)
 	@Produces({ MediaType.TEXT_PLAIN })
 	public Response getCodeSuffix(@PathParam("packId") Integer packId, @Context BasicSecurityContext bsc) throws SeCurisServiceException {
 		// EntityManager em = emProvider.get();
@@ -249,7 +253,7 @@
 	@POST
 	@Path("/{packId}")
 	@EnsureTransaction
-	@Securable
+	@Securable(roles = Rol.ADMIN | Rol.ADVANCE)
 	@RolesAllowed(BasicSecurityContext.ROL_ADMIN)
 	@Consumes(MediaType.APPLICATION_JSON)
 	@Produces({ MediaType.APPLICATION_JSON })
@@ -314,7 +318,7 @@
 	@POST
 	@Path("/{packId}/activate")
 	@EnsureTransaction
-	@Securable
+	@Securable(roles = Rol.ADMIN | Rol.ADVANCE)
 	@RolesAllowed(BasicSecurityContext.ROL_ADMIN)
 	@Consumes(MediaType.APPLICATION_JSON)
 	@Produces({ MediaType.APPLICATION_JSON })
@@ -338,7 +342,7 @@
 	@POST
 	@Path("/{packId}/putonhold")
 	@EnsureTransaction
-	@Securable
+	@Securable(roles = Rol.ADMIN | Rol.ADVANCE)
 	@RolesAllowed(BasicSecurityContext.ROL_ADMIN)
 	@Consumes(MediaType.APPLICATION_JSON)
 	@Produces({ MediaType.APPLICATION_JSON })
@@ -362,7 +366,7 @@
 	@POST
 	@Path("/{packId}/cancel")
 	@EnsureTransaction
-	@Securable
+	@Securable(roles = Rol.ADMIN | Rol.ADVANCE)
 	@RolesAllowed(BasicSecurityContext.ROL_ADMIN)
 	@Consumes(MediaType.APPLICATION_JSON)
 	@Produces({ MediaType.APPLICATION_JSON })
@@ -403,7 +407,7 @@
 
 	@DELETE
 	@Path("/{packId}")
-	@Securable
+	@Securable(roles = Rol.ADMIN | Rol.ADVANCE)
 	@RolesAllowed(BasicSecurityContext.ROL_ADMIN)
 	@EnsureTransaction
 	@Produces({ MediaType.APPLICATION_JSON })
diff --git a/securis/src/main/java/net/curisit/securis/services/UserResource.java b/securis/src/main/java/net/curisit/securis/services/UserResource.java
index a4789d4..fbffffa 100644
--- a/securis/src/main/java/net/curisit/securis/services/UserResource.java
+++ b/securis/src/main/java/net/curisit/securis/services/UserResource.java
@@ -37,6 +37,7 @@
 import net.curisit.securis.db.Application;
 import net.curisit.securis.db.Organization;
 import net.curisit.securis.db.User;
+import net.curisit.securis.db.User.Rol;
 import net.curisit.securis.ioc.EnsureTransaction;
 import net.curisit.securis.security.BasicSecurityContext;
 import net.curisit.securis.security.Securable;
@@ -120,7 +121,7 @@
 	@Consumes(MediaType.APPLICATION_JSON)
 	@Produces({ MediaType.APPLICATION_JSON })
 	@EnsureTransaction
-	@Securable
+	@Securable(roles = Rol.ADMIN)
 	@RolesAllowed(BasicSecurityContext.ROL_ADMIN)
 	public Response create(User user, @HeaderParam(TokenHelper.TOKEN_HEADER_PÀRAM) String token) {
 		LOG.info("Creating new user");
@@ -196,7 +197,7 @@
 	@EnsureTransaction
 	@Consumes(MediaType.APPLICATION_JSON)
 	@Produces({ MediaType.APPLICATION_JSON })
-	@Securable
+	@Securable(roles = Rol.ADMIN)
 	@RolesAllowed(BasicSecurityContext.ROL_ADMIN)
 	public Response modify(User user, @PathParam("uid") String uid, @HeaderParam(TokenHelper.TOKEN_HEADER_PÀRAM) String token) {
 		LOG.info("Modifying user with id: {}", uid);
@@ -241,7 +242,7 @@
 	@Path("/{uid}")
 	@EnsureTransaction
 	@Produces({ MediaType.APPLICATION_JSON })
-	@Securable
+	@Securable(roles = Rol.ADMIN)
 	@RolesAllowed(BasicSecurityContext.ROL_ADMIN)
 	public Response delete(@PathParam("uid") String uid, @Context HttpServletRequest request) {
 		LOG.info("Deleting app with id: {}", uid);
diff --git a/securis/src/main/webapp/bs-config.js b/securis/src/main/webapp/bs-config.js
new file mode 100644
index 0000000..8e40a96
--- /dev/null
+++ b/securis/src/main/webapp/bs-config.js
@@ -0,0 +1,33 @@
+
+var gz_urls = /\.gz$/
+
+middleware = function(req, res, next) {
+    if ('GET' != req.method && 'HEAD' != req.method) {
+      return next();
+    }
+    if (gz_urls.test(req.url)) {
+      console.log('GZIP detected for url: ' + req.url);
+      res.setHeader('Content-Encoding', 'gzip');
+    }
+    return next();
+}
+
+
+console.log(middleware);
+
+module.exports = function(bs) {
+  return {
+    "server": {
+      "baseDir": "",
+      "routes": {
+        "/node_modules": "node_modules",
+        "/assets": "assets"
+      }
+    },
+      middleware: [
+          middleware
+      ]
+
+    
+  }
+}
\ No newline at end of file
diff --git a/securis/src/main/webapp/bs-config.json b/securis/src/main/webapp/bs-config.json
deleted file mode 100644
index f04b023..0000000
--- a/securis/src/main/webapp/bs-config.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
-  "server": {
-    "baseDir": "",
-    "routes": {
-      "/node_modules": "node_modules",
-      "/assets": "assets"
-    }
-  }
-}
diff --git a/securis/src/main/webapp/index.html b/securis/src/main/webapp/index.html
index de1fb05..df3d13c 100644
--- a/securis/src/main/webapp/index.html
+++ b/securis/src/main/webapp/index.html
@@ -19,13 +19,12 @@
  -->   
 
     <script src="jspm_packages/system.js"></script>
-    
 
+    <!-- <script src="main-bundle.js.gz"></script>  -->
     <script src="jspm.browser.js"></script>
-    <script src="jspm.config.js"></script> 
-  <!--  <script src="systemjs.config.js"></script>  -->
+    <script src="jspm.config.js"></script>
     <script>
-      System.import('main').catch(function(err){ console.error(err); });
+      System.import('src/main.js').catch(function(err){ console.error(err); });
     </script>
     
     <!-- Load the Covalent platform stylesheet -->
@@ -43,7 +42,7 @@
     <app-home>
       <div style="padding: 20%;text-align:center;">
         <img src="assets/securis_logo.svg" width="100">
-        <div style="font-size: 0.8em;color: darkgrey;">SeCuris Loading2...</div>
+        <div style="font-size: 0.8em;color: darkgrey;">SeCuris Loading...</div>
       </div>
     </app-home>
   </body>
diff --git a/securis/src/main/webapp/jspm.browser.js b/securis/src/main/webapp/jspm.browser.js
index a2e5e09..3b9e882 100644
--- a/securis/src/main/webapp/jspm.browser.js
+++ b/securis/src/main/webapp/jspm.browser.js
@@ -1,7 +1,6 @@
 SystemJS.config({
-  paths: {
-    "github:": "./jspm_packages/github/",
-    "npm:": "./jspm_packages/npm/",
-    "securis/": "./src/"
-  }
+    "paths": {
+      "github:": "jspm_packages/github/",
+      "npm:": "jspm_packages/npm/"
+    }
 });
diff --git a/securis/src/main/webapp/jspm.config.js b/securis/src/main/webapp/jspm.config.js
index 059029b..ae27d42 100644
--- a/securis/src/main/webapp/jspm.config.js
+++ b/securis/src/main/webapp/jspm.config.js
@@ -2,8 +2,7 @@
   nodeConfig: {
     "paths": {
       "github:": "jspm_packages/github/",
-      "npm:": "jspm_packages/npm/",
-      "app/": "src/app/"
+      "npm:": "jspm_packages/npm/"
     }
   },
   devConfig: {
@@ -27,23 +26,19 @@
       }
     }
   },
+  transpiler: false,
   packages: {
-    'environments': {
-      defaultExtension: 'js'
+    "environments": {
+      "defaultExtension": "js"
     },
-    'app': {
-      defaultExtension: 'js'
-    },
-    'main': {
-      main: 'main.js',
-      defaultExtension: 'js'
+    "src": {
+      "defaultExtension": "js"
     }
   },
   map: {
     "@angular/animations/browser": "npm:@angular/animations@4.0.2/bundles/animations-browser.umd.min.js",
     "@angular/platform-browser/animations": "npm:@angular/platform-browser@4.0.2/bundles/platform-browser-animations.umd.min.js",
-    'main': 'src',
-    'app': 'src/app'
+    "app": "src/app"
   }
 });
 
@@ -334,4 +329,5 @@
       }
     }
   }
+  
 });
diff --git a/securis/src/main/webapp/package.json b/securis/src/main/webapp/package.json
index fe09b41..56f93a3 100644
--- a/securis/src/main/webapp/package.json
+++ b/securis/src/main/webapp/package.json
@@ -6,7 +6,7 @@
     "build": "tsc -p src/",
     "build:watch": "tsc -p src/ -w",
     "build:e2e": "tsc -p e2e/",
-    "serve": "lite-server -c=bs-config.json",
+    "serve": "lite-server -c=bs-config.js",
     "serve:e2e": "lite-server -c=bs-config.e2e.json",
     "prestart": "npm run build",
     "start": "concurrently \"npm run build:watch\" \"npm run serve\"",
diff --git a/securis/src/main/webapp/src/app/forms/user.form.component.ts b/securis/src/main/webapp/src/app/forms/user.form.component.ts
index bdf543b..d807008 100644
--- a/securis/src/main/webapp/src/app/forms/user.form.component.ts
+++ b/securis/src/main/webapp/src/app/forms/user.form.component.ts
@@ -23,6 +23,12 @@
     organizations_ids: [ 1, 2, 5, 6, 7, 8 ]
 }
 
+const ROL = {
+  ADVANCE: 1,
+  ADMIN: 2,
+  BASIC: 4
+}
+
 @Component({
   selector: 'user-form',
   templateUrl: 'src/app/forms/user.form.html'
@@ -32,7 +38,9 @@
   allApplications: IComboOption[];
   orgNames: string[] = [];
   appNames: string[] = [];
-  allRoles: any[] = [{"id":4, "code": "basic","label":"Basic"}, {"id":1, "code": "advance", "label":"Advance"}, {"id":2, "code": "admin","label":"Admin"}];
+  allRoles: any[] = [{"id":ROL.BASIC, "code": "basic","label":"Basic"}, 
+                     {"id":ROL.ADVANCE, "code": "advance", "label":"Advance"}, 
+                     {"id":ROL.ADMIN, "code": "admin","label":"Admin"}];
   user_orgs: string[] = [];
   user_apps: string[] = [];
   user_roles: any = {};
@@ -59,8 +67,9 @@
       var selectedApp = this.allApplications.find(app => app.label === appName);
       this.data.applications_ids.push(selectedApp.id);
     });
-    this.user_roles.advance && this.data.roles.push(1);
-    this.user_roles.admin && this.data.roles.push(2);
+    this.user_roles.basic && this.data.roles.push(ROL.BASIC);
+    this.user_roles.advance && this.data.roles.push(ROL.ADVANCE);
+    this.user_roles.admin && this.data.roles.push(ROL.ADMIN);
     super.save('username');
   }
 
diff --git a/securis/src/main/webapp/src/app/forms/user.form.html b/securis/src/main/webapp/src/app/forms/user.form.html
index 11ecf99..bdb1800 100644
--- a/securis/src/main/webapp/src/app/forms/user.form.html
+++ b/securis/src/main/webapp/src/app/forms/user.form.html
@@ -72,6 +72,9 @@
 									[items]="orgNames" [(ngModel)]="user_orgs" name="user_orgs" requireMatch>
 							</td-chips>
 							<div layout="column" layout-fill flex="25">
+								<md-checkbox [(ngModel)]="user_roles.basic" name="basic_role" [mdTooltip]="$L.get('Role {}', 'basic')">
+									<span i18n>Basic</span>
+								</md-checkbox>
 								<md-checkbox [(ngModel)]="user_roles.advance" name="advance_role" [mdTooltip]="$L.get('Role {}', 'advance')">
 									<span i18n>Advance</span>
 								</md-checkbox>
diff --git a/securis/src/main/webapp/src/main.ts b/securis/src/main/webapp/src/main.ts
index f810f9d..d635a66 100644
--- a/securis/src/main/webapp/src/main.ts
+++ b/securis/src/main/webapp/src/main.ts
@@ -9,5 +9,5 @@
 if (environment.production) {
   enableProdMode();
 }
-
+// console.log('This is a test.')
 platformBrowserDynamic().bootstrapModule(AppModule);

--
Gitblit v1.3.2