@Action( value = "/admin/exitTerms", results = {@Result(name = "success", location = "/admin/menu.action", type = "redirect")}) public String exitTerms() { Long userId = AuthUtil.getUserId(servletRequest.getSession()); // check user map if (userSchSessionMap != null && !userSchSessionMap.isEmpty()) { // get user servletRequest.getSession()s for (Long userKey : userSchSessionMap.keySet()) { UserSchSessions userSchSessions = userSchSessionMap.get(userKey); // get current time and subtract number of hours set to determine expire time Calendar expireTime = Calendar.getInstance(); expireTime.add( Calendar.HOUR, (-1 * Integer.parseInt( AppConfigLkup.getProperty( "timeoutSshAfter")))); // subtract hours to get expire time // if current user or session has timed out remove ssh session if (userId.equals(userKey) || userSchSessions.getStartTime().before(expireTime.getTime())) { Map<Long, SchSession> schSessionMap = userSchSessionMap.get(userKey).getSchSessionMap(); for (Long sessionKey : schSessionMap.keySet()) { SchSession schSession = schSessionMap.get(sessionKey); // disconnect ssh session schSession.getChannel().disconnect(); schSession.getSession().disconnect(); schSession.setChannel(null); schSession.setSession(null); schSession.setInputToChannel(null); schSession.setCommander(null); schSession.setOutFromChannel(null); schSession = null; // remove from map schSessionMap.remove(sessionKey); } // clear and remove session map for user schSessionMap.clear(); userSchSessionMap.remove(userKey); SessionOutputUtil.removeUserSession(userKey); } } } return SUCCESS; }
/** Action to import private key for EC2 instances */ public class EC2KeyAction extends ActionSupport implements ServletResponseAware { EC2Key ec2Key; SortedSet sortedSet = new SortedSet(); HttpServletResponse servletResponse; static Map<String, String> ec2RegionMap = AppConfigLkup.getMapProperties("ec2Regions"); @Action( value = "/manage/viewEC2Keys", results = {@Result(name = "success", location = "/manage/view_ec2_keys.jsp")}) public String viewEC2Keys() { AWSCred awsCred = AWSCredDB.getAWSCred(); // check to see if aws creds have been set if (awsCred != null) { sortedSet = EC2KeyDB.getEC2KeySet(sortedSet); } else { addActionMessage( "EC2 Keys not available. Set AWS credentials <a href=\"setAWSCred.action\">here</a>"); } return SUCCESS; } /** returns keypairs as a json string */ @Action(value = "/manage/getKeyPairJSON") public String getKeyPairJSON() { AWSCred awsCred = AWSCredDB.getAWSCred(); // set AWS credentials for service BasicAWSCredentials awsCredentials = new BasicAWSCredentials(awsCred.getAccessKey(), awsCred.getSecretKey()); AmazonEC2 service = new AmazonEC2Client(awsCredentials); service.setEndpoint(ec2Key.getEc2Region()); DescribeKeyPairsRequest describeKeyPairsRequest = new DescribeKeyPairsRequest(); DescribeKeyPairsResult describeKeyPairsResult = service.describeKeyPairs(describeKeyPairsRequest); List<KeyPairInfo> keyPairInfoList = describeKeyPairsResult.getKeyPairs(); String json = new Gson().toJson(keyPairInfoList); try { servletResponse.getOutputStream().write(json.getBytes()); } catch (Exception ex) { ex.printStackTrace(); } return null; } @Action( value = "/manage/submitEC2Key", results = { @Result(name = "input", location = "/manage/view_ec2_keys.jsp"), @Result(name = "success", location = "/manage/viewEC2Keys.action", type = "redirect") }) public String submitEC2Key() { String retVal = SUCCESS; try { // get AWS credentials from DB AWSCred awsCred = AWSCredDB.getAWSCred(); // set AWS credentials for service BasicAWSCredentials awsCredentials = new BasicAWSCredentials(awsCred.getAccessKey(), awsCred.getSecretKey()); // create service AmazonEC2 service = new AmazonEC2Client(awsCredentials); service.setEndpoint(ec2Key.getEc2Region()); // create key pair request CreateKeyPairRequest createKeyPairRequest = new CreateKeyPairRequest(); createKeyPairRequest.withKeyName(ec2Key.getKeyNm()); // call service CreateKeyPairResult createKeyPairResult = service.createKeyPair(createKeyPairRequest); // get key pair result KeyPair keyPair = createKeyPairResult.getKeyPair(); // set private key String privateKey = keyPair.getKeyMaterial(); ec2Key.setPrivateKey(privateKey); // add to db Long keyId = EC2KeyDB.saveEC2Key(ec2Key); // store private key SSHUtil.storePrivateKey(keyId.toString(), ec2Key.getPrivateKey().trim()); } catch (AmazonServiceException ex) { addActionError(ex.getMessage()); retVal = INPUT; } return retVal; } @Action( value = "/manage/importEC2Key", results = { @Result(name = "input", location = "/manage/view_ec2_keys.jsp"), @Result(name = "success", location = "/manage/viewEC2Keys.action", type = "redirect") }) public String importEC2Key() { String retVal = SUCCESS; try { // get AWS credentials from DB AWSCred awsCred = AWSCredDB.getAWSCred(); // set AWS credentials for service BasicAWSCredentials awsCredentials = new BasicAWSCredentials(awsCred.getAccessKey(), awsCred.getSecretKey()); // create service AmazonEC2 service = new AmazonEC2Client(awsCredentials); service.setEndpoint(ec2Key.getEc2Region()); // describe key pair request DescribeKeyPairsRequest describeKeyPairsRequest = new DescribeKeyPairsRequest(); describeKeyPairsRequest.setKeyNames(Arrays.asList(ec2Key.getKeyNm())); // call service DescribeKeyPairsResult describeKeyPairsResult = service.describeKeyPairs(describeKeyPairsRequest); if (describeKeyPairsResult != null && describeKeyPairsResult.getKeyPairs().size() > 0) { // add to db Long keyId = EC2KeyDB.saveEC2Key(ec2Key); SSHUtil.storePrivateKey(keyId.toString(), ec2Key.getPrivateKey().trim()); } else { addActionError("Imported key does not exist on AWS"); retVal = INPUT; } } catch (AmazonServiceException ex) { addActionError(ex.getMessage()); retVal = INPUT; } return retVal; } @Action( value = "/manage/deleteEC2Key", results = { @Result(name = "success", location = "/manage/viewEC2Keys.action", type = "redirect") }) public String deleteEC2Key() { EC2KeyDB.deleteEC2Key(ec2Key.getId()); SSHUtil.deletePrivateKey(ec2Key.getId().toString()); return SUCCESS; } /** Validates fields for importing an ec2 key */ public void validateImportEC2Key() { if (ec2Key.getEc2Region() == null || ec2Key.getEc2Region().trim().equals("")) { addFieldError("ec2Key.ec2Region", "Required"); } if (ec2Key.getKeyNm() == null || ec2Key.getKeyNm().trim().equals("")) { addFieldError("ec2Key.keyNm", "Required"); } if (ec2Key.getPrivateKey() == null || ec2Key.getPrivateKey().trim().equals("")) { addFieldError("ec2Key.privateKey", "Required"); } if (hasErrors()) { sortedSet = EC2KeyDB.getEC2KeySet(sortedSet); } } /** Validates fields for credential submit */ public void validateSubmitEC2Key() { if (ec2Key.getEc2Region() == null || ec2Key.getEc2Region().trim().equals("")) { addFieldError("ec2Key.ec2Region", "Required"); } if (ec2Key.getKeyNm() == null || ec2Key.getKeyNm().trim().equals("")) { addFieldError("ec2Key.keyNm", "Required"); } if (hasErrors()) { sortedSet = EC2KeyDB.getEC2KeySet(sortedSet); } } public SortedSet getSortedSet() { return sortedSet; } public void setSortedSet(SortedSet sortedSet) { this.sortedSet = sortedSet; } public Map getEc2RegionMap() { return ec2RegionMap; } public void setEc2RegionMap(Map<String, String> ec2RegionMap) { this.ec2RegionMap = ec2RegionMap; } public EC2Key getEc2Key() { return ec2Key; } public void setEc2Key(EC2Key ec2Key) { this.ec2Key = ec2Key; } public HttpServletResponse getServletResponse() { return servletResponse; } public void setServletResponse(HttpServletResponse servletResponse) { this.servletResponse = servletResponse; } }