From 1a0d1f15efa2b4cbdc6dd30b5a85b111d0599b63 Mon Sep 17 00:00:00 2001
From: Roberto Sánchez <roberto.sanchez@curisit.net>
Date: Wed, 22 Jan 2014 20:59:13 +0000
Subject: [PATCH] #396 feature - Added session timeout and responsive layour untill 1600px

---
 securis/src/main/resources/static/js/licenses.js                             |    1 
 securis/src/main/java/net/curisit/securis/services/OrganizationResource.java |    8 ++--
 securis/src/main/resources/static/js/main.js                                 |   16 +++++++
 securis/src/main/java/net/curisit/securis/db/Pack.java                       |    4 +
 securis/src/main/java/net/curisit/securis/services/PackResource.java         |   59 ++++++++++++++++++++++++++---
 securis/src/main/resources/static/css/securis.css                            |   13 ++++++
 6 files changed, 88 insertions(+), 13 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 254d6b0..608b7ed 100644
--- a/securis/src/main/java/net/curisit/securis/db/Pack.java
+++ b/securis/src/main/java/net/curisit/securis/db/Pack.java
@@ -19,6 +19,7 @@
 
 import org.codehaus.jackson.annotate.JsonAutoDetect;
 import org.codehaus.jackson.annotate.JsonIgnore;
+import org.codehaus.jackson.annotate.JsonIgnoreProperties;
 import org.codehaus.jackson.annotate.JsonProperty;
 import org.codehaus.jackson.map.annotate.JsonSerialize;
 
@@ -30,6 +31,7 @@
 @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL)
 @Entity
 @Table(name = "pack")
+@JsonIgnoreProperties(ignoreUnknown = true)
 @NamedQueries(
 	{ @NamedQuery(name = "list-packs", query = "SELECT pa FROM Pack pa"),//
 			@NamedQuery(name = "list-packs-by-orgs", query = "SELECT pa FROM Pack pa where pa.organization.id in :list_ids") })
@@ -222,7 +224,7 @@
 
 	@JsonProperty("created_by_name")
 	public String getCreatedByname() {
-		return createdBy == null ? null : String.format("%s %s", createdBy.getFirstName(), createdBy.getFirstName());
+		return createdBy == null ? null : String.format("%s %s (%s)", createdBy.getFirstName(), createdBy.getLastName(), createdBy.getUsername());
 	}
 
 	@JsonProperty("licensetype_code")
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 915895a..7553977 100644
--- a/securis/src/main/java/net/curisit/securis/services/OrganizationResource.java
+++ b/securis/src/main/java/net/curisit/securis/services/OrganizationResource.java
@@ -113,12 +113,12 @@
 		// }
 
 		EntityManager em = emProvider.get();
-		Organization lt = em.find(Organization.class, Integer.parseInt(orgid));
-		if (lt == null) {
+		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).build();
+			return Response.status(Status.NOT_FOUND).header(DefaultExceptionHandler.ERROR_MESSAGE_HEADER, "Organization not found, id: " + orgid).build();
 		}
-		return Response.ok(lt).build();
+		return Response.ok(org).build();
 	}
 
 	private boolean isCyclicalRelationship(int currentId, Organization parent) {
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 c6927a2..76adfa1 100644
--- a/securis/src/main/java/net/curisit/securis/services/PackResource.java
+++ b/securis/src/main/java/net/curisit/securis/services/PackResource.java
@@ -9,11 +9,9 @@
 import javax.inject.Provider;
 import javax.persistence.EntityManager;
 import javax.persistence.TypedQuery;
-import javax.servlet.http.HttpServletRequest;
 import javax.ws.rs.Consumes;
 import javax.ws.rs.DELETE;
 import javax.ws.rs.GET;
-import javax.ws.rs.HeaderParam;
 import javax.ws.rs.POST;
 import javax.ws.rs.PUT;
 import javax.ws.rs.Path;
@@ -26,7 +24,10 @@
 
 import net.curisit.integrity.commons.Utils;
 import net.curisit.securis.DefaultExceptionHandler;
+import net.curisit.securis.db.LicenseType;
+import net.curisit.securis.db.Organization;
 import net.curisit.securis.db.Pack;
+import net.curisit.securis.db.User;
 import net.curisit.securis.security.BasicSecurityContext;
 import net.curisit.securis.security.Securable;
 import net.curisit.securis.utils.TokenHelper;
@@ -78,7 +79,6 @@
 			q = em.createNamedQuery("list-packs-by-orgs", Pack.class);
 			if (bsc.getOrganizationsIds() == null)
 				Response.ok().build();
-			// log.info("Getting only {} orgs for user: {}", securityContext.getOrganizationsIds(), securityContext.getUserPrincipal());
 			q.setParameter("list_ids", bsc.getOrganizationsIds());
 		}
 
@@ -130,10 +130,32 @@
 	@Produces(
 		{ MediaType.APPLICATION_JSON })
 	@Transactional
-	public Response create(Pack pack, @HeaderParam(TokenHelper.TOKEN_HEADER_PÀRAM) String token) {
+	public Response create(Pack pack, @Context BasicSecurityContext bsc) {
 		log.info("Creating new pack");
 		EntityManager em = emProvider.get();
 
+		Organization org = null;
+		if (pack.getOrgId() != null) {
+			org = em.find(Organization.class, pack.getOrgId());
+			if (org == null) {
+				log.error("Organization pack with id {} not found in DB", pack.getOrgId());
+				return Response.status(Status.NOT_FOUND).header(DefaultExceptionHandler.ERROR_MESSAGE_HEADER, "Pack organization not found with ID: " + pack.getOrgId()).build();
+			}
+		}
+		LicenseType lt = null;
+		if (pack.getLicTypeId() != null) {
+			lt = em.find(LicenseType.class, pack.getLicTypeId());
+			if (lt == null) {
+				log.error("Pack license type with id {} not found in DB", pack.getLicTypeId());
+				return Response.status(Status.NOT_FOUND).header(DefaultExceptionHandler.ERROR_MESSAGE_HEADER, "Pack license type not found with ID: " + pack.getLicTypeId()).build();
+			}
+		}
+
+		User user = em.find(User.class, bsc.getUserPrincipal().getName());
+
+		pack.setCreatedBy(user);
+		pack.setLicenseType(lt);
+		pack.setOrganization(org);
 		pack.setCreationTimestamp(new Date());
 		em.persist(pack);
 
@@ -149,11 +171,34 @@
 	@Consumes(MediaType.APPLICATION_JSON)
 	@Produces(
 		{ MediaType.APPLICATION_JSON })
-	public Response modify(Pack pack, @PathParam("packId") String packId, @HeaderParam(TokenHelper.TOKEN_HEADER_PÀRAM) String token) {
+	public Response modify(Pack pack, @PathParam("packId") String packId) {
 		log.info("Modifying pack with id: {}", packId);
 		EntityManager em = emProvider.get();
+		Pack currentPack = em.find(Pack.class, Integer.parseInt(packId));
 
-		em.persist(pack);
+		Organization org = null;
+		if (pack.getOrgId() != null) {
+			org = em.find(Organization.class, pack.getOrgId());
+			if (org == null) {
+				log.error("Organization pack with id {} not found in DB", pack.getOrgId());
+				return Response.status(Status.NOT_FOUND).header(DefaultExceptionHandler.ERROR_MESSAGE_HEADER, "Pack organization not found with ID: " + pack.getOrgId()).build();
+			}
+		}
+		LicenseType lt = null;
+		if (pack.getLicTypeId() != null) {
+			lt = em.find(LicenseType.class, pack.getLicTypeId());
+			if (lt == null) {
+				log.error("Pack license type with id {} not found in DB", pack.getLicTypeId());
+				return Response.status(Status.NOT_FOUND).header(DefaultExceptionHandler.ERROR_MESSAGE_HEADER, "Pack license type not found with ID: " + pack.getLicTypeId()).build();
+			}
+		}
+		currentPack.setLicenseType(lt);
+		currentPack.setOrganization(org);
+		currentPack.setCode(pack.getCode());
+		currentPack.setComments(pack.getComments());
+		currentPack.setNumLicenses(pack.getNumLicenses());
+
+		em.persist(currentPack);
 
 		return Response.ok(pack).build();
 	}
@@ -165,7 +210,7 @@
 	@Transactional
 	@Produces(
 		{ MediaType.APPLICATION_JSON })
-	public Response delete(@PathParam("packId") String packId, @Context HttpServletRequest request) {
+	public Response delete(@PathParam("packId") String packId) {
 		log.info("Deleting pack with id: {}", packId);
 		EntityManager em = emProvider.get();
 		Pack org = em.find(Pack.class, Integer.parseInt(packId));
diff --git a/securis/src/main/resources/static/css/securis.css b/securis/src/main/resources/static/css/securis.css
index a31ff18..046cea7 100644
--- a/securis/src/main/resources/static/css/securis.css
+++ b/securis/src/main/resources/static/css/securis.css
@@ -2,6 +2,19 @@
 	padding-top: 50px;
 	padding-bottom: 20px;
 }
+
+@media (min-width: 1400px) {
+	.container {
+		width: 1350px !important;
+	}
+}
+
+@media (min-width: 1600px) {
+	.container {
+		width: 1550px !important;
+	}
+}
+
 a {
 	cursor: default !important;
 }
diff --git a/securis/src/main/resources/static/js/licenses.js b/securis/src/main/resources/static/js/licenses.js
index 73648ee..50afef0 100644
--- a/securis/src/main/resources/static/js/licenses.js
+++ b/securis/src/main/resources/static/js/licenses.js
@@ -102,6 +102,7 @@
 				
 				$scope.save = function() {
 					var _success = function() {
+					    if (!$scope.isNew) $scope.showForm = false;
 						$scope.packs = packResource.query();
 					}
 					packResource.save($scope.pack, _success)
diff --git a/securis/src/main/resources/static/js/main.js b/securis/src/main/resources/static/js/main.js
index 9a13354..957e197 100644
--- a/securis/src/main/resources/static/js/main.js
+++ b/securis/src/main/resources/static/js/main.js
@@ -28,7 +28,21 @@
 			return rejection.status === 401 /* Unauthorized */;
 		} 
 		  return {
-
+		      'request': function(config) {
+		          var la = $store.get('last_access');
+		          var now = new Date().getTime();
+		          if (la !== null) {
+		              if (now > (la + 1800000)) { // Session timeout is 1/2 hour
+                          $store.clear();
+                          $location.path('/login');
+                          BootstrapDialog.alert('Session has expired');
+		              } else {
+		                  console.log('Last access recent');
+		              }
+		          }
+		          $store.set('last_access', now);
+		          return config || $q.when(config);
+		      },
 		   'responseError': function(rejection) {
 		      // do something on error
 		      if (isUnauthorizedAccess(rejection)) {

--
Gitblit v1.3.2