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