diff --git a/.gitignore b/.gitignore
index e56cc8a..ee5042b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -12,3 +12,6 @@
**/*.iml
**/git.properties
.metadata/
+id_rsa*
+named*
+short*
diff --git a/Jenkinsfile b/Jenkinsfile
index 3b19af3..01de0b3 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -1,186 +1,81 @@
-#!groovy
-
-// Required Jenkins plugins:
-// https://wiki.jenkins-ci.org/display/JENKINS/Timestamper
-// https://wiki.jenkins-ci.org/display/JENKINS/Static+Code+Analysis+Plug-ins
-// https://wiki.jenkins-ci.org/display/JENKINS/Checkstyle+Plugin ?
-// https://wiki.jenkins-ci.org/display/JENKINS/FindBugs+Plugin
-// https://wiki.jenkins-ci.org/display/JENKINS/PMD+Plugin ?
-// https://wiki.jenkins-ci.org/display/JENKINS/DRY+Plugin ?
-// https://wiki.jenkins-ci.org/display/JENKINS/Task+Scanner+Plugin
-// https://wiki.jenkins-ci.org/display/JENKINS/Javadoc+Plugin
-// https://wiki.jenkins-ci.org/display/JENKINS/JaCoCo+Plugin ?
-
-
-init()
-
-def branch_name
-def branch_name_base
-def build_number
-def build_url
-def git_commit
-def job_name
-def tag
-def version
-def build_type
-def display_name
-
-def init() {
-
- // Keep the 5 most recent builds
- properties([[$class: 'BuildDiscarderProperty', strategy: [$class: 'LogRotator', numToKeepStr: '5']]])
-
- build_number = env.BUILD_NUMBER
- build_url = env.BUILD_URL
- job_name = "${env.JOB_NAME}"
- branch_name = env.BRANCH_NAME
- branch_name_docker = branch_name.replaceAll(/\//,'.')
- persist = "/var/lib/jenkins/PERSIST/${branch_name_docker}"
-
- // execute the branch type specific pipeline code
- try {
-
- if (branch_name.indexOf('release/')==0) build_type='release'
- if (branch_name.indexOf('feature/')==0) build_type='feature'
- if (branch_name.indexOf('develop')==0) build_type='develop'
- if (branch_name.indexOf('hotfix')==0) build_type='hotfix'
- if (branch_name.indexOf('bugfix')==0) build_type='bugfix'
- if (branch_name.indexOf('master')==0) build_type='master'
-
- // common pipeline elements
- node('master') {
- Initialize()
- SetVersion(build_type)
- print_vars() // after SetVersion - all variables now defined
- set_result('INPROGRESS')
- Build() // builds database via flyway migration
- }
-
- if (branch_name.indexOf('develop')==0) {
- node('master') {
- Deploy();
- }
- } else if (branch_name.indexOf('release/')==0) {
- node('master') {
- Deploy();
- }
- }
-
- node('master') {
- set_result('SUCCESS')
- }
-
- } catch (err) {
- node() {
- set_result('FAILURE')
- }
- throw err
- }
-}
-
-def Build() {
- stage ('build') {
- mvn "install -DskipTests=true -Dbuild.revision=${git_commit}"
- step([$class: 'ArtifactArchiver', artifacts: '**/target/*.jar', fingerprint: true])
- }
-}
-
-def Initialize() {
- stage ('initialize') {
-
- // get new code
- checkout scm
-
- git_commit = getSha1()
- }
-}
-
-def Deploy() {
- stage ('deploy') {
- mvn "deploy -DskipTests=true -Dbuild.number=${build_number} -Dbuild.revision=${git_commit}"
- }
-}
-
-def getSha1() {
- sha1 = sh(script: 'git rev-parse HEAD', returnStdout: true).trim()
- echo "sha1 is ${sha1}"
- return sha1
-}
-
-def mvn(args) {
- withMaven(
- maven: 'maven-3.6.1',
- globalMavenSettingsConfig: 'locusworks-settings'
- ) {
-
- sh "mvn ${args}"
-
- }
-}
-
-def mvn_initial(args) {
- mvn(args)
-}
-
-def set_result(status) {
- if ( status == 'SUCCESS' ) {
- currentBuild.result = status
- notify_bitbucket('SUCCESSFUL')
- } else if ( status == 'FAILURE' ) {
- currentBuild.result = status
- notify_bitbucket('FAILED')
- } else if ( status == 'INPROGRESS' ) {
- notify_bitbucket('INPROGRESS')
- } else {
- error ("unknown status")
- }
-
- // save in persistence file for access the status page
- // make sure the directory exists first
- sh "mkdir -p $persist && echo $status > $persist/build.result"
-}
-
-def notify_bitbucket(state) {
-}
-
-def print_vars() {
- echo "build_number = ${build_number}"
- echo "build_url = ${build_url}"
- echo "job_name = ${job_name}"
- echo "branch_name = ${branch_name}"
- echo "branch_name_base = ${branch_name_base}"
- echo "build_type = ${build_type}"
- echo "display_name = ${currentBuild.displayName}"
- echo "version = ${version}"
- echo "git_commit = ${git_commit}"
-
-}
-
-def SetVersion( v ) {
- stage ('set version') {
- echo "set version ${v}"
- branch_name_base = (branch_name =~ /([^\/]+$)/)[0][0]
- if ( v == 'release' ) {
- // for release branches, where the branch is named "release/1.2.3",
- // derive the version and display name derive from the numeric suffix and append the build number
- // 3.2.1.100
- version = branch_name_base + "." + build_number + "-RELEASE";
- //version = branch_name.substring('release/'.length()) + "." + build_number
- currentBuild.displayName = version
- } else if (v == 'develop') {
- version = branch_name_base + "." + build_number + "-SNAPSHOT";
- currentBuild.displayName = version
- } else {
- // for all other branches the version number is 0 with an appended build number
- // and for the display name use the jenkins default #n and add the branch name
- // #101 - feature/user/foo
- //version = '0.' + build_number
- version = branch_name_base + "." + build_number
- currentBuild.displayName = "#" + build_number + " - " + branch_name_base
- }
- display_name = currentBuild.displayName
- mvn_initial "versions:set -DnewVersion=${version}"
- }
-}
-
-return this
\ No newline at end of file
+pipeline {
+ agent any
+
+ options {
+ buildDiscarder(logRotator(numToKeepStr: '5'))
+ disableConcurrentBuilds()
+ skipDefaultCheckout(true)
+ timestamps()
+ }
+
+ stages {
+ stage('Checkout') {
+ steps { checkout scm }
+ }
+
+ stage('Set version') {
+ steps {
+ script {
+ String branch = env.BRANCH_NAME
+ if (!branch) { error('BRANCH_NAME is unavailable; this pipeline must run as a multibranch job') }
+ env.DEPLOY_BUILD = 'false'
+ def releaseMatch = branch =~ /^release\/(\d+\.\d+)$/
+ if (releaseMatch.matches()) {
+ env.BUILD_VERSION = "${releaseMatch[0][1]}.${env.BUILD_NUMBER}-RELEASE"
+ env.DEPLOY_BUILD = 'true'
+ } else if (branch == 'develop') {
+ env.BUILD_VERSION = "develop.${env.BUILD_NUMBER}-SNAPSHOT"
+ env.DEPLOY_BUILD = 'true'
+ } else {
+ String safeBranch = branch.replaceAll(/[^A-Za-z0-9._-]/, '-')
+ env.BUILD_VERSION = "0.0.${env.BUILD_NUMBER}-${safeBranch}-SNAPSHOT"
+ }
+ currentBuild.displayName = env.BUILD_VERSION
+ }
+ withMaven(maven: 'maven-3.9.16', globalMavenSettingsConfig: 'locusworks-settings') {
+ sh 'mvn -B org.codehaus.mojo:versions-maven-plugin:2.21.0:set -DgenerateBackupPoms=false -DnewVersion="$BUILD_VERSION"'
+ }
+ }
+ }
+
+ stage('Prepare OWASP cache') {
+ steps {
+ lock(resource: 'owasp-nvd-cache') {
+ withMaven(maven: 'maven-3.9.16', globalMavenSettingsConfig: 'locusworks-settings') {
+ sh 'mkdir -p "$HOME/.cache/dependency-check"'
+ sh 'mvn -B org.owasp:dependency-check-maven:13.0.0:update-only -DdataDirectory="$HOME/.cache/dependency-check"'
+ }
+ }
+ }
+ }
+
+ stage('Build and test') {
+ steps {
+ withMaven(maven: 'maven-3.9.16', globalMavenSettingsConfig: 'locusworks-settings') {
+ sh 'mvn -B clean verify -DdataDirectory="$HOME/.cache/dependency-check" -DautoUpdate=false -Dbuild.revision="$GIT_COMMIT"'
+ }
+ }
+ post {
+ always { junit allowEmptyResults: true, testResults: '**/target/surefire-reports/*.xml' }
+ success {
+ archiveArtifacts artifacts: '**/target/*.jar', fingerprint: true
+ }
+ }
+ }
+
+ stage('Deploy') {
+ when { expression { env.DEPLOY_BUILD == 'true' } }
+ steps {
+ withMaven(maven: 'maven-3.9.16', globalMavenSettingsConfig: 'locusworks-settings') {
+ sh 'mvn -B deploy -DskipTests -Ddependency-check.skip=true -Dbuild.number="$BUILD_NUMBER" -Dbuild.revision="$GIT_COMMIT"'
+ }
+ }
+ }
+ }
+
+ post {
+ success { echo "Published build ${env.BUILD_VERSION} successfully" }
+ failure { echo "Build ${env.BUILD_VERSION ?: env.BUILD_NUMBER} failed" }
+ cleanup { deleteDir() }
+ }
+}
diff --git a/README.md b/README.md
index 1fe46b5..abc1916 100644
--- a/README.md
+++ b/README.md
@@ -1,17 +1,27 @@
-Locusworks Commons
-=
-
-- Library with common generic functions
-
-Install
-==
-
-Maven
-===
-```xml
-
- net.locusworks
- locusworks-commons
- ${latest_version}
-
-```
\ No newline at end of file
+# Locusworks Commons (Deprecated)
+
+> **Deprecated:** Do not add `net.locusworks:locusworks-commons` to new projects.
+
+This artifact contains no implementation code. It exists temporarily as a compatibility dependency that brings in all of the replacement libraries below.
+
+| Replacement artifact | Purpose |
+| --- | --- |
+| `locusworks-commons-core` | General utilities, collections, tuples, validation, hashing, I/O, properties, interfaces, and annotations |
+| `locusworks-commons-configuration` | Property-file loading, reconciliation, persistence, and optional value encryption |
+| `locusworks-commons-json` | JSON serialization and object mapping |
+| `locusworks-commons-http` | HTTP client and SSL helpers |
+| `locusworks-commons-migration` | Flyway migration abstractions |
+
+## Migration
+
+Remove `locusworks-commons` and declare only the libraries the application actually uses:
+
+```xml
+
+ net.locusworks
+ locusworks-commons-core
+ ${locusworks.commons.version}
+
+```
+
+The Java package names remain unchanged, so source-code changes are generally unnecessary.
diff --git a/bitbucket-pipelines.yml b/bitbucket-pipelines.yml
deleted file mode 100644
index 8a373e0..0000000
--- a/bitbucket-pipelines.yml
+++ /dev/null
@@ -1,14 +0,0 @@
-# This is a sample build configuration for Java (Maven).
-# Check our guides at https://confluence.atlassian.com/x/zd-5Mw for more examples.
-# Only use spaces to indent your .yml configuration.
-# -----
-# You can specify a custom docker image from Docker Hub as your build environment.
-image: maven:3.3.9
-
-pipelines:
- default:
- - step:
- caches:
- - maven
- script: # Modify the commands below to build your repository.
- - mvn -B verify # -B batch mode makes Maven less verbose
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index 5f563f8..afdecab 100644
--- a/pom.xml
+++ b/pom.xml
@@ -1,58 +1,92 @@
-
+
+4.0.0net.locusworkslocusworks-commons0.0.1-SNAPSHOT
- locusworks_commons
- Common library for locusworks projects
-
-
- Locusworks
- http://www.locusworks.net
-
-
-
- locus2k@bitbucket.org:locus2k/commons.git
-
-
+ jar
+ Locusworks Commons
+ Convenience dependency that provides all standalone Locusworks commons libraries
- 2.14.1
- 1.7.32
- 2.12.5
- 1.8
- 1.8
+ 21
+ 21
+ UTF-8
+ UTF-8
+ 5.23.0https://nexus.locusworks.net
-
+
+
+ net.locusworks
+ locusworks-commons-core
+ 1.0.1-RELEASE
+
+
+ net.locusworks
+ locusworks-commons-configuration
+ 1.0.1-RELEASE
+
+
+ net.locusworks
+ locusworks-commons-json
+ 1.0.1-RELEASE
+
+
+ net.locusworks
+ locusworks-commons-http
+ 1.0.1-RELEASE
+
+
+ net.locusworks
+ locusworks-commons-migration
+ 1.0.1-RELEASE
+
+
+ net.locusworks
+ crypto
+ 2.0.1-RELEASE
+
+
+ org.mockito
+ mockito-core
+ ${mockito.version}
+ test
+
+ org.apache.maven.pluginsmaven-surefire-plugin
- 3.0.0-M5
+ 3.5.6
- always
+ @{argLine} -javaagent:${settings.localRepository}/org/mockito/mockito-core/${mockito.version}/mockito-core-${mockito.version}.jarorg.apache.maven.pluginsmaven-compiler-plugin
- 3.8.1
+ 3.15.0${maven.compiler.source}${maven.compiler.target}true
-
- -Xlint:all
-
+
+ -Xlint:all
+ org.owaspdependency-check-maven
- 6.3.1
+ 13.0.0
+
+ true
+ true
+ true
+ true
+ e2eb1036-9b5b-4df9-95e7-0888be947011
+
@@ -63,81 +97,6 @@
-
-
-
- junit
- junit
- 4.13.2
- test
-
-
- org.flywaydb
- flyway-core
- 7.15.0
-
-
- org.apache.logging.log4j
- log4j-api
- ${log4j.version}
-
-
- org.apache.logging.log4j
- log4j-core
- ${log4j.version}
-
-
- org.apache.logging.log4j
- log4j-slf4j-impl
- ${log4j.version}
-
-
- org.slf4j
- slf4j-api
- ${slf4j.version}
-
-
- org.slf4j
- jcl-over-slf4j
- ${slf4j.version}
-
-
-
- org.apache.httpcomponents
- httpclient
- 4.5.13
-
-
- org.apache.httpcomponents
- httpmime
- 4.5.13
-
-
-
-
- com.fasterxml.jackson.core
- jackson-core
- ${jackson.version}
-
-
- com.fasterxml.jackson.core
- jackson-annotations
- ${jackson.version}
-
-
- com.fasterxml.jackson.core
- jackson-databind
- ${jackson.version}
-
-
-
- com.google.code.gson
- gson
- 2.8.8
-
-
-
-
nexus-snapshot
@@ -148,7 +107,6 @@
${nexus.repo}/repository/locusworks-release/
-
locusworks-public
@@ -162,7 +120,6 @@
-
locusworks-public
@@ -175,5 +132,4 @@
-
-
\ No newline at end of file
+
diff --git a/src/main/java/net/locusworks/common/.gitkeep b/src/main/java/net/locusworks/common/.gitkeep
new file mode 100644
index 0000000..e69de29
diff --git a/src/main/java/net/locusworks/common/Charsets.java b/src/main/java/net/locusworks/common/Charsets.java
deleted file mode 100644
index 85f05ee..0000000
--- a/src/main/java/net/locusworks/common/Charsets.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Copyright (C) 2007 The Guava Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
- * in compliance with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied. See the License for the specific language governing permissions and limitations under
- * the License.
- */
-
-package net.locusworks.common;
-
-import java.nio.charset.Charset;
-
-/**
- * Contains constant definitions for the six standard {@link Charset} instances, which are
- * guaranteed to be supported by all Java platform implementations.
- *
- *
Assuming you're free to choose, note that {@link #UTF_8} is widely preferred.
- *
- *
See the Guava User Guide article on {@code Charsets}.
- *
- * Please do not add new Charset references to this class, unless those character encodings are
- * part of the set required to be supported by all Java platform implementations! Any Charsets
- * initialized here may cause unexpected delays when this class is loaded. See the Charset
- * Javadocs for the list of built-in character encodings.
- *
- */
-public final class Charsets {
- private Charsets() {}
-
- /**
- * US-ASCII: seven-bit ASCII, the Basic Latin block of the Unicode character set (ISO646-US).
- */
- public static final Charset US_ASCII = java.nio.charset.StandardCharsets.US_ASCII;
-
- /**
- * ISO-8859-1: ISO Latin Alphabet Number 1 (ISO-LATIN-1).
- */
- public static final Charset ISO_8859_1 = java.nio.charset.StandardCharsets.ISO_8859_1;
-
- /**
- * UTF-8: eight-bit UCS Transformation Format.
- */
- public static final Charset UTF_8 = java.nio.charset.StandardCharsets.UTF_8;
-
- /**
- * UTF-16BE: sixteen-bit UCS Transformation Format, big-endian byte order.
- */
- public static final Charset UTF_16BE = java.nio.charset.StandardCharsets.UTF_16BE;
-
- /**
- * UTF-16LE: sixteen-bit UCS Transformation Format, little-endian byte order.
- */
- public static final Charset UTF_16LE = java.nio.charset.StandardCharsets.UTF_16LE;
-
- /**
- * UTF-16: sixteen-bit UCS Transformation Format, byte order identified by an optional byte-order
- * mark.
- */
- public static final Charset UTF_16 = java.nio.charset.StandardCharsets.UTF_16;
-
-}
\ No newline at end of file
diff --git a/src/main/java/net/locusworks/common/annotations/MapValue.java b/src/main/java/net/locusworks/common/annotations/MapValue.java
deleted file mode 100644
index b1845e7..0000000
--- a/src/main/java/net/locusworks/common/annotations/MapValue.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package net.locusworks.common.annotations;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-/**
- * Annotation that will map a POJO to a map object.
- * This is at the field level and will map the
- * filed name as the key and the field value as the value
- * in the map
- * @author Isaac Parenteau
- *
- */
-@Target({ElementType.FIELD, ElementType.TYPE})
-@Retention(RetentionPolicy.RUNTIME)
-public @interface MapValue {
-
- String value() default "";
-
- boolean ignore() default false;
-
-}
diff --git a/src/main/java/net/locusworks/common/configuration/ConfigurationCallback.java b/src/main/java/net/locusworks/common/configuration/ConfigurationCallback.java
deleted file mode 100644
index cc4a75c..0000000
--- a/src/main/java/net/locusworks/common/configuration/ConfigurationCallback.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package net.locusworks.common.configuration;
-
-@FunctionalInterface
-public interface ConfigurationCallback {
- void results(String msg);
-}
diff --git a/src/main/java/net/locusworks/common/configuration/ConfigurationManager.java b/src/main/java/net/locusworks/common/configuration/ConfigurationManager.java
deleted file mode 100644
index 24c5d7e..0000000
--- a/src/main/java/net/locusworks/common/configuration/ConfigurationManager.java
+++ /dev/null
@@ -1,150 +0,0 @@
-package net.locusworks.common.configuration;
-
-import java.io.IOException;
-import java.lang.reflect.Field;
-import java.nio.file.Path;
-import java.nio.file.Paths;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Properties;
-import java.util.Set;
-
-import net.locusworks.common.Charsets;
-import net.locusworks.common.crypto.AES;
-import net.locusworks.common.exceptions.ApplicationException;
-import net.locusworks.common.interfaces.PersistableRequest;
-
-import net.locusworks.common.utils.Utils;
-
-public class ConfigurationManager {
-
- private Properties configuration;
- private Properties defaults = null;
- private Path conf = null;
-
- protected AES aes;
-
- private ConfigurationCallback callback;
-
- protected void init(String baseDir, String propertiesFile, ConfigurationCallback callback) throws IOException {
- init(baseDir, propertiesFile, this.getClass().getName().getBytes(Charsets.UTF_8), callback);
- }
-
- protected void init(String baseDir, String propertiesFile, byte[] aesKey, ConfigurationCallback callback) throws IOException {
- aes = aesKey.length > 0 ? AES.createInstance(aesKey) : AES.createInstance();
- this.callback = callback;
- try {
- defaults = PropertiesManager.loadConfiguration(this.getClass(), propertiesFile);
- } catch (IOException ex) {
- throw ex;
- }
- // create patchrepoConf File object
- conf = Paths.get(baseDir).resolve(propertiesFile);
-
- loadConfiguration();
- }
-
- private void loadConfiguration() {
- // load the active config file
- // ignore read error, we can continue with an empty configuration map
- // and all default items will be added below and the file created
-
- callbackMessage("Loading config file: " + conf);
- try {
- configuration = PropertiesManager.loadConfiguration(conf);
- } catch (Exception e) {
- callbackMessage("Config file: " + conf + " will be created from template");
- configuration = new Properties();
- }
-
- Map results = PropertiesManager.addConfiguration(configuration, defaults);
- boolean changed = !results.isEmpty();
- if (!results.isEmpty()) {
- StringBuilder sb = new StringBuilder("Added new configuration items:\n");
- for (Entry entry : results.entrySet()) {
- sb.append(String.format("%s=%s\n", entry.getKey(), entry.getValue()));
- }
- callbackMessage(sb.toString());
- }
-
- results = PropertiesManager.removeConfiguration(configuration, defaults);
- changed |= !results.isEmpty();
- if (!results.isEmpty()) {
- StringBuilder sb = new StringBuilder("Added new configuration items:\n");
- for (Entry entry : results.entrySet()) {
- sb.append(String.format("%s=%s\n", entry.getKey(), entry.getValue()));
- }
- callbackMessage(sb.toString());
- }
-
- if (changed) {
- PropertiesManager.saveConfiguration(configuration, conf, "Patch Repository properties file");
- }
- }
-
- /**
- * Save the configuration values to file
- * @param confs Configuration property values to save
- * @throws Exception general exception
- */
- public void saveToConf(Properties confs) throws Exception {
- PropertiesManager.saveConfiguration(confs, conf, conf.getFileName().toString());
- callbackMessage("Saved config file: " + conf + ", " + confs.size() + " entries");
- loadConfiguration();
- }
-
- public String getPropertyValue(String key) {
- return getPropertyValue(key, null);
- }
- public String getPropertyValue(String key, String defaultValue) {
- return configuration.containsKey(key) ? configuration.getProperty(key) : defaultValue;
- }
-
- public Properties getConfiguration() {
- return configuration;
- }
-
- public void saveConfiguration(PersistableRequest request, Set fieldsToSave, Set excryptedFields) throws Exception {
- if (fieldsToSave == null || fieldsToSave.isEmpty()) {
- throw ApplicationException.generic("No fields to save were defined");
- }
- if (excryptedFields == null) {
- excryptedFields = new HashSet<>();
- }
- try {
- Properties props = new Properties();
-
- //copy what is current in the configuration settings into the new properties file
- configuration.entrySet().forEach(item -> props.setProperty(String.valueOf(item.getKey()), String.valueOf(item.getValue())));
- boolean changed = false;
- for (Field f : request.getClass().getDeclaredFields()) {
- f.setAccessible(true);
- String fieldName = f.getName();
- String fieldValue = String.valueOf(f.get(request));
-
- //Ensures we are only saving values that are already configured
- if (!fieldsToSave.contains(fieldName)) continue;
-
- //Check to see if the old value changed
- String oldValue = props.getProperty(fieldName);
- if (Utils.isNotValid(oldValue, fieldValue) || oldValue.equals(fieldValue)) { continue; }
-
- changed = true;
-
- fieldValue = excryptedFields.contains(fieldName) ? aes.encrypt(fieldValue) : fieldValue;
-
- props.setProperty(fieldName, fieldValue);
- }
- if (changed) {
- saveToConf(props);
- }
- } catch (Exception ex) {
- throw ApplicationException.actionNotPermitted(ex.getMessage());
- }
- }
-
- private void callbackMessage(String msg) {
- if (callback != null) callback.results(msg);
- }
-}
diff --git a/src/main/java/net/locusworks/common/configuration/PropertiesManager.java b/src/main/java/net/locusworks/common/configuration/PropertiesManager.java
deleted file mode 100644
index c99a16d..0000000
--- a/src/main/java/net/locusworks/common/configuration/PropertiesManager.java
+++ /dev/null
@@ -1,153 +0,0 @@
-package net.locusworks.common.configuration;
-
-import static net.locusworks.common.Charsets.UTF_8;
-
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.OutputStream;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.util.Map;
-import java.util.Properties;
-import java.util.stream.Collectors;
-
-import net.locusworks.common.immutables.Pair;
-/**
- * Properties manager class to help load and read properties
- * @author Isaac Parenteau
- * @version 1.0.0
- * @date 02/15/2018
- */
-public class PropertiesManager {
- /**
- * Load a configuration from resource
- * @param clazz class loader
- * @param src source of the file
- * @return properties
- * @throws IOException Exception thrown the file can't be read
- */
- public static Properties loadConfiguration(Class> clazz, String src) throws IOException {
- InputStream is = clazz.getResourceAsStream(src);
- if (is == null) {
- is = clazz.getClassLoader().getResourceAsStream(src);
- }
- if (is == null) {
- return null;
- }
- BufferedReader br = new BufferedReader(new InputStreamReader(is, UTF_8));
- return loadConfiguration(br);
- }
-
- /**
- * Load configuration from a file. This method has been deprecated and may be removed in
- * future released. Please use java.nio.Path
- * @param file File to load
- * @return properties
- * @throws IOException Exception thrown the file can't be read
- */
- @Deprecated
- public static Properties loadConfiguration(File file) throws IOException {
- return loadConfiguration(file.toPath());
- }
-
- /**
- * Load configuration from a file.
- * @param path the path to the file
- * @return properties
- * @throws IOException Exception thrown the file can't be read
- */
- public static Properties loadConfiguration(Path path) throws IOException {
- if (Files.notExists(path)) {
- return new Properties();
- }
-
- try(BufferedReader br = Files.newBufferedReader(path)) {
- return loadConfiguration(br);
- }
- }
-
- /**
- * Load configuration from a buffered reader
- * @param reader Buffered reader to read the properties values from
- * @return properties
- * @throws IOException Exception thrown the file can't be read
- */
- public static Properties loadConfiguration(BufferedReader reader) throws IOException {
- Properties config = new Properties();
- config.load(reader);
- return config;
- }
-
- /**
- * Add configurations from one properties file to another
- * @param to Properties file to copy values to
- * @param from Properties file to copy values from
- * @return a map containing the results of the values added
- */
- public static Map addConfiguration(Properties to, Properties from) {
- Map results = from.entrySet()
- .stream()
- .filter(entry -> !to.containsKey(entry.getKey()))
- .map(entry -> {
- String key = entry.getKey().toString();
- String value = entry.getValue().toString();
- to.put(key, value);
- return new Pair(key, value);
- })
- .collect(Collectors.toMap(key -> key.getValue1(), value -> value.getValue2()));
-
- return results;
- }
-
- /**
- * Removes configuration values that are not present in the comparedTo
- * @param from Properties file to remove values from
- * @param comparedTo Properties file to compare to
- * @return a map containing the results of the values removed
- */
- public static Map removeConfiguration(Properties from, Properties comparedTo) {
- Map results = from.keySet()
- .stream()
- .filter(key -> !comparedTo.containsKey(key)) //only get the items that are not in the comparedTo properties
- .map(key -> new Pair(String.valueOf(key), String.valueOf(from.get(key))))
- .collect(Collectors.toList()) //Create a list of paired items (key value) of the items that were filtered
- .stream()
- .map(pair -> { //remove those pairs from the from properties
- from.remove(pair.getValue1());
- return pair;
- })
- .collect(Collectors.toMap(key -> key.getValue1(), value -> value.getValue2())); //create a map of what was removed
-
- return results;
- }
-
- /**
- *
Save the properties file to disk.
- *
This method has been depecreated and could be removed in future release. Please use java.nio.Path
- * @param props Properties file to save
- * @param fileToSave File to save to
- * @param comment Any comments to add
- */
- @Deprecated
- public static void saveConfiguration(Properties props, File fileToSave, String comment) {
- saveConfiguration(props, fileToSave.toPath(), comment);
-
- }
-
- /**
- *
Save the properties file to disk.
- * @param props Properties file to save
- * @param fileToSave File to save to
- * @param comment Any comments to add
- */
- public static void saveConfiguration(Properties props, Path fileToSave, String comment) {
- try(OutputStream fos = Files.newOutputStream(fileToSave)) {
- props.store(fos, comment == null ? "" : comment);
- } catch (IOException ex) {
- throw new RuntimeException(ex.getMessage(), ex);
- }
- }
-}
diff --git a/src/main/java/net/locusworks/common/crypto/AES.java b/src/main/java/net/locusworks/common/crypto/AES.java
deleted file mode 100644
index 9c67983..0000000
--- a/src/main/java/net/locusworks/common/crypto/AES.java
+++ /dev/null
@@ -1,162 +0,0 @@
-package net.locusworks.common.crypto;
-
-import javax.crypto.BadPaddingException;
-import javax.crypto.Cipher;
-import javax.crypto.IllegalBlockSizeException;
-import javax.crypto.KeyGenerator;
-import javax.crypto.spec.IvParameterSpec;
-import javax.crypto.spec.SecretKeySpec;
-
-import java.security.InvalidAlgorithmParameterException;
-import java.security.InvalidKeyException;
-import java.security.NoSuchAlgorithmException;
-import java.security.SecureRandom;
-import java.util.Base64;
-
-import net.locusworks.common.utils.RandomString;
-import net.locusworks.common.utils.Utils;
-import static net.locusworks.common.Charsets.UTF_8;
-
-
-/**
- * AES encryption/decryption class
- * This class will encrypt/decrypt data. The encryption key is never known.
- * Instead it is is generated by the provided seed. As long as the seed stays the same
- * the key will remain the same and the encryption/decryption will work. This
- * provides and added security.
- * @author Isaac Parenteau
- * @version 1.0.0
- * @date 02/15/2018
- *
- */
-public class AES {
-
- private static final String ENCRYPTION_TYPE = "AES";
- private static final String ENCRYPTION_ALGORITH = "AES/CBC/PKCS5Padding";
- private static final String PROVIDER = "SunJCE";
- private static final String ALGORITHM = "SHA1PRNG";
-
- private Cipher cipher;
-
- private SecretKeySpec secretKeySpec;
-
- private IvParameterSpec ivParamSpec;
-
- private String seed;
-
- private void initSecureKey(String seed) {
- try {
- SecureRandom sr = getSecureRandom(seed);
- KeyGenerator generator = KeyGenerator.getInstance(ENCRYPTION_TYPE);
- generator.init(128, sr);
- init(generator.generateKey().getEncoded(), sr);
- } catch (Exception ex) {
- System.err.println(ex);
- throw new IllegalArgumentException("Unable to initalize encryption:", ex);
- }
- }
-
- /**
- * Initializes the secure random object to be the same across all platforms
- * with regard to provider and algorithm used
- * @param seed Seed to initialize SecureRandom with
- * @return SecureRandom object
- * @throws NoSuchAlgorithmException thrown when algorithm can't be used
- * @throws NoSuchProviderException thrown when the provider cant be found
- */
- private static SecureRandom getSecureRandom(String seed) throws NoSuchAlgorithmException {
- SecureRandom sr = SecureRandom.getInstance(ALGORITHM);
- sr.setSeed(seed.getBytes(UTF_8));
- return sr;
- }
-
- /**
- * Initialize the aes engine
- * @param key secret key to use
- * @param sr
- */
- private void init(final byte[] key, SecureRandom sr) {
- try {
- this.cipher = Cipher.getInstance(ENCRYPTION_ALGORITH, PROVIDER);
- this.secretKeySpec = new SecretKeySpec(key, ENCRYPTION_TYPE);
- this.ivParamSpec = new IvParameterSpec(RandomString.getBytes(16, sr));
- } catch (Exception ex) {
- System.err.println(ex);
- throw new IllegalArgumentException("Unable to initalize encryption:", ex);
- }
- }
-
- /***
- * Encrypt a text string
- * @param plainText String to encrypt
- * @return encrypted string
- */
- public String encrypt(String plainText) {
- if (Utils.isEmptyString(plainText)) {
- plainText = "";
- }
- try {
- cipher.init(Cipher.ENCRYPT_MODE, this.secretKeySpec, this.ivParamSpec);
- byte[] cypherText = cipher.doFinal(plainText.getBytes(UTF_8));
- return new String(Base64.getEncoder().encode(cypherText), UTF_8);
- } catch (Exception ex) {
- throw new IllegalArgumentException(ex.getMessage(), ex);
- }
- }
-
- /***
- * Decrypt an encrypted string
- * @param cipherString encrypted string to decrypt
- * @return unecrypted string
- */
- public String decrypt(String cipherString) {
- if (Utils.isEmptyString(cipherString)) {
- return "";
- }
- byte[] cipherText = Base64.getDecoder().decode(cipherString.getBytes(UTF_8));
- try {
- cipher.init(Cipher.DECRYPT_MODE, this.secretKeySpec, this.ivParamSpec);
- return new String(cipher.doFinal(cipherText), UTF_8);
- } catch (IllegalBlockSizeException | BadPaddingException | InvalidKeyException | InvalidAlgorithmParameterException e) {
- throw new IllegalArgumentException(e.getMessage(), e);
- }
- }
-
- public AES setSeed(String seed) {
- if (this.seed == null || !this.seed.equals(seed)) {
- initSecureKey(seed);
- }
- this.seed = seed;
- return this;
- }
-
- public final String getSeed() {
- return this.seed;
- }
-
- public static AES createInstance() {
- return createInstance(RandomString.getString(16));
- }
-
- public static AES createInstance(byte[] byteSeed) {
- String seed = new String(byteSeed, UTF_8);
- return createInstance(seed);
- }
-
- public static AES createInstance(String seed) {
- AES aes = new AES();
- aes.setSeed(seed);
- return aes;
- }
-
- public static void main(String[] args) throws NoSuchAlgorithmException {
- if (args == null || !(args.length > 0)) {
- throw new IllegalArgumentException("No args provided. Need password as argument");
- }
- if (args.length % 2 == 0) {
- System.out.println(AES.createInstance(String.valueOf(args[1])).decrypt(String.valueOf(args[0])));
- } else {
- System.out.println(AES.createInstance().encrypt(String.valueOf(args[0])));
- }
- }
-}
diff --git a/src/main/java/net/locusworks/common/crypto/AESKey.java b/src/main/java/net/locusworks/common/crypto/AESKey.java
deleted file mode 100644
index b64d6b8..0000000
--- a/src/main/java/net/locusworks/common/crypto/AESKey.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package net.locusworks.common.crypto;
-
-import java.security.PrivateKey;
-
-import net.locusworks.common.Charsets;
-
-public class AESKey implements PrivateKey {
-
- private static final long serialVersionUID = -8452357427706386362L;
- private String seed;
-
- public AESKey(String seed) {
- this.seed = seed;
- }
-
- @Override
- public String getAlgorithm() {
- return "aes";
- }
-
- @Override
- public String getFormat() {
- return "aes-seed";
- }
-
- @Override
- public byte[] getEncoded() {
- return this.seed.getBytes(Charsets.UTF_8);
- }
-}
diff --git a/src/main/java/net/locusworks/common/crypto/AESKeySpec.java b/src/main/java/net/locusworks/common/crypto/AESKeySpec.java
deleted file mode 100644
index a29c54f..0000000
--- a/src/main/java/net/locusworks/common/crypto/AESKeySpec.java
+++ /dev/null
@@ -1,45 +0,0 @@
-package net.locusworks.common.crypto;
-
-import java.io.ByteArrayInputStream;
-import java.io.InputStream;
-import java.security.spec.EncodedKeySpec;
-import java.security.spec.InvalidKeySpecException;
-import java.util.Arrays;
-import java.util.Base64;
-
-import net.locusworks.common.Charsets;
-import net.locusworks.common.io.IOUtils;
-
-import static net.locusworks.common.utils.Checks.checkArguments;
-import static net.locusworks.common.utils.Utils.get;
-import static net.locusworks.common.utils.Utils.size;
-
-public class AESKeySpec extends EncodedKeySpec {
-
- private static final String AES_MARKER = "aes-seed";
-
- public AESKeySpec(byte[] encodedKey) {
- super(encodedKey);
- }
-
- public AESKey generateKey() throws InvalidKeySpecException {
- try {
- byte[] data = this.getEncoded();
- InputStream stream = new ByteArrayInputStream(data);
- Iterable parts = Arrays.asList(IOUtils.toString(stream, Charsets.UTF_8).split(" "));
-
- checkArguments(size(parts) == 2 && AES_MARKER.equals(get(parts, 0)), "Bad format, should be: aes-seed AAB3...");
- stream = new ByteArrayInputStream(Base64.getDecoder().decode(String.valueOf(get(parts, 1))));
- String marker = IOUtils.toString(stream, Charsets.UTF_8);
- return new AESKey(marker);
- } catch (Exception ex) {
- throw new InvalidKeySpecException(ex);
- }
- }
-
- @Override
- public String getFormat() {
- return "aes";
- }
-
-}
diff --git a/src/main/java/net/locusworks/common/crypto/EncryptionKeyFactory.java b/src/main/java/net/locusworks/common/crypto/EncryptionKeyFactory.java
deleted file mode 100644
index e21d4f7..0000000
--- a/src/main/java/net/locusworks/common/crypto/EncryptionKeyFactory.java
+++ /dev/null
@@ -1,38 +0,0 @@
-package net.locusworks.common.crypto;
-
-import java.security.KeyFactory;
-import java.security.KeyFactorySpi;
-import java.security.NoSuchAlgorithmException;
-import java.security.PrivateKey;
-import java.security.Provider;
-import java.security.PublicKey;
-import java.security.spec.InvalidKeySpecException;
-import java.security.spec.KeySpec;
-
-import sun.security.jca.GetInstance;
-import sun.security.jca.GetInstance.Instance;
-
-public class EncryptionKeyFactory extends KeyFactory {
-
- protected EncryptionKeyFactory(KeyFactorySpi keyFacSpi, Provider provider, String algorithm) {
- super(keyFacSpi, provider, algorithm);
- }
-
- public PrivateKey generatePrivateKey(KeySpec keySpec) throws InvalidKeySpecException {
- if (keySpec instanceof AESKeySpec) {
- return ((AESKeySpec)keySpec).generateKey();
- }
- return super.generatePrivate(keySpec);
- }
-
- public PublicKey generatePublicKey(KeySpec keySpec) throws InvalidKeySpecException {
- keySpec = keySpec instanceof SSHEncodedKeySpec ? ((SSHEncodedKeySpec)keySpec).convertToRSAPubKeySpec() : keySpec;
- return super.generatePublic(keySpec);
- }
-
- public static EncryptionKeyFactory getInstance(String algorithm) throws NoSuchAlgorithmException {
- Instance instance = GetInstance.getInstance("KeyFactory", KeyFactorySpi.class, algorithm);
- return new EncryptionKeyFactory((KeyFactorySpi)instance.impl, instance.provider, algorithm);
- }
-
-}
diff --git a/src/main/java/net/locusworks/common/crypto/HashSalt.java b/src/main/java/net/locusworks/common/crypto/HashSalt.java
deleted file mode 100644
index 1c84004..0000000
--- a/src/main/java/net/locusworks/common/crypto/HashSalt.java
+++ /dev/null
@@ -1,189 +0,0 @@
-package net.locusworks.common.crypto;
-
-import java.math.BigInteger;
-import java.security.NoSuchAlgorithmException;
-import java.security.SecureRandom;
-import java.security.spec.InvalidKeySpecException;
-import javax.crypto.SecretKeyFactory;
-import javax.crypto.spec.PBEKeySpec;
-
-/**
- * The type Hash salt.
- * @author Isaac Parenteau
- * @version 1.0.0
- * @date 02/15/2018
- */
-public class HashSalt {
- /**
- * The constant PBKDF2_ALGORITHM.
- */
- private static final String PBKDF2_ALGORITHM = "PBKDF2WithHmacSHA256";
-
- /**
- * The constant SALT_BYTE_SIZE.
- */
- private static final int SALT_BYTE_SIZE = 24;
-
- /**
- * The constant HASH_BYTE_SIZE.
- */
- private static final int HASH_BYTE_SIZE = 24;
-
- /**
- * The constant PBKDF2_ITERATIONS.
- */
- private static final int PBKDF2_ITERATIONS = 1000;
-
- /**
- * The constant ITERATION_INDEX.
- */
- private static final int ITERATION_INDEX = 0;
- /**
- * The constant SALT_INDEX.
- */
- private static final int SALT_INDEX = 1;
- /**
- * The constant PBKDF2_INDEX.
- */
- private static final int PBKDF2_INDEX = 2;
-
- /**
- * Returns a salted PBKDF2 hash of the password.
- *
- * @param password the password to hash
- *
- * @return a salted PBKDF2 hash of the password
- * @throws NoSuchAlgorithmException the no such algorithm exception
- * @throws InvalidKeySpecException the invalid key spec exception
- */
- public static String createHash(String password) throws NoSuchAlgorithmException, InvalidKeySpecException {
- return createHash(password.toCharArray());
- }
-
- /**
- * Returns a salted PBKDF2 hash of the password.
- *
- * @param password the password to hash
- *
- * @return a salted PBKDF2 hash of the password
- * @throws NoSuchAlgorithmException the no such algorithm exception
- * @throws InvalidKeySpecException the invalid key spec exception
- */
- public static String createHash(char[] password) throws NoSuchAlgorithmException, InvalidKeySpecException {
- // Generate a random salt
- SecureRandom random = new SecureRandom();
- byte[] salt = new byte[SALT_BYTE_SIZE];
- random.nextBytes(salt);
-
- // Hash the password
- byte[] hash = pbkdf2(password, salt, PBKDF2_ITERATIONS, HASH_BYTE_SIZE);
- // format iterations:salt:hash
- return PBKDF2_ITERATIONS + ":" + toHex(salt) + ":" + toHex(hash);
- }
-
- /**
- * Validates a password using a hash.
- *
- * @param password the password to check
- * @param correctHash the hash of the valid password
- *
- * @return true if the password is correct, false if not
- * @throws NoSuchAlgorithmException the no such algorithm exception
- * @throws InvalidKeySpecException the invalid key spec exception
- */
- public static boolean validatePassword(String password, String correctHash) throws NoSuchAlgorithmException, InvalidKeySpecException {
- return validatePassword(password.toCharArray(), correctHash);
- }
-
- /**
- * Validates a password using a hash.
- *
- * @param password the password to check
- * @param correctHash the hash of the valid password
- *
- * @return true if the password is correct, false if not
- * @throws NoSuchAlgorithmException the no such algorithm exception
- * @throws InvalidKeySpecException the invalid key spec exception
- */
- public static boolean validatePassword(char[] password, String correctHash) throws NoSuchAlgorithmException, InvalidKeySpecException {
- // Decode the hash into its parameters
- String[] params = correctHash.split(":");
- int iterations = Integer.parseInt(params[ITERATION_INDEX]);
- byte[] salt = fromHex(params[SALT_INDEX]);
- byte[] hash = fromHex(params[PBKDF2_INDEX]);
- // Compute the hash of the provided password, using the same salt,
- // iteration count, and hash length
- byte[] testHash = pbkdf2(password, salt, iterations, hash.length);
- // Compare the hashes in constant time. The password is correct if
- // both hashes match.
- return slowEquals(hash, testHash);
- }
-
- /**
- * Compares two byte arrays in length-constant time. This comparison method
- * is used so that password hashes cannot be extracted from an on-line
- * system using a timing attack and then attacked off-line.
- *
- * @param a the first byte array
- * @param b the second byte array
- * @return true if both byte arrays are the same, false if not
- */
- private static boolean slowEquals(byte[] a, byte[] b) {
- int diff = a.length ^ b.length;
- for(int i = 0; i < a.length && i < b.length; i++)
- diff |= a[i] ^ b[i];
- return diff == 0;
- }
-
- /**
- * Computes the PBKDF2 hash of a password.
- *
- * @param password the password to hash.
- * @param salt the salt
- * @param iterations the iteration count (slowness factor)
- * @param bytes the length of the hash to compute in bytes
- * @return the PBDKF2 hash of the password
- */
- private static byte[] pbkdf2(char[] password, byte[] salt, int iterations, int bytes) throws NoSuchAlgorithmException, InvalidKeySpecException {
- PBEKeySpec spec = new PBEKeySpec(password, salt, iterations, bytes * 8);
- SecretKeyFactory skf = SecretKeyFactory.getInstance(PBKDF2_ALGORITHM);
- return skf.generateSecret(spec).getEncoded();
- }
-
- /**
- * Converts a string of hexadecimal characters into a byte array.
- *
- * @param hex the hex string
- * @return the hex string decoded into a byte array
- */
- private static byte[] fromHex(String hex) {
- byte[] binary = new byte[hex.length() / 2];
- for(int i = 0; i < binary.length; i++) {
- binary[i] = (byte)Integer.parseInt(hex.substring(2*i, 2*i+2), 16);
- }
- return binary;
- }
-
- /**
- * Converts a byte array into a hexadecimal string.
- *
- * @param array the byte array to convert
- * @return a length*2 character string encoding the byte array
- */
- private static String toHex(byte[] array) {
- BigInteger bi = new BigInteger(1, array);
- String hex = bi.toString(16);
- int paddingLength = (array.length * 2) - hex.length();
- if(paddingLength > 0)
- return String.format("%0" + paddingLength + "d", 0) + hex;
- else
- return hex;
- }
-
- public static void main (String[] args) throws Exception {
- if (args == null || !(args.length > 0)) {
- throw new IllegalArgumentException("No args provided. Need password as argument");
- }
- System.out.println(HashSalt.createHash(String.valueOf(args[0])));
- }
-}
\ No newline at end of file
diff --git a/src/main/java/net/locusworks/common/crypto/KeyFile.java b/src/main/java/net/locusworks/common/crypto/KeyFile.java
deleted file mode 100644
index 9b71ce3..0000000
--- a/src/main/java/net/locusworks/common/crypto/KeyFile.java
+++ /dev/null
@@ -1,213 +0,0 @@
-package net.locusworks.common.crypto;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.OutputStreamWriter;
-import java.io.Writer;
-import java.security.Key;
-import java.security.PrivateKey;
-import java.security.interfaces.RSAPublicKey;
-import java.security.spec.InvalidKeySpecException;
-import java.security.spec.KeySpec;
-import java.security.spec.PKCS8EncodedKeySpec;
-import java.security.spec.X509EncodedKeySpec;
-import java.util.Arrays;
-import java.util.Base64;
-import java.util.List;
-
-import net.locusworks.common.Charsets;
-import net.locusworks.common.io.IOUtils;
-import net.locusworks.common.utils.DataOutputStreamHelper;
-import net.locusworks.common.utils.Utils;
-
-import static net.locusworks.common.utils.Utils.handleExceptionWrapper;
-import static net.locusworks.common.utils.Splitter.fixedLengthSplit;
-import static java.lang.String.join;
-
-public class KeyFile implements AutoCloseable {
-
- public enum EncryptionType {
- RSA,
- AES,
- SSH
- }
-
- private Key key;
- private String description;
- private Writer writer;
- private EncryptionType encryptionType;
-
- public KeyFile(Key key) {
- this(key, null);
- }
-
- public KeyFile(Key key, String description) {
- this(key, description, EncryptionType.valueOf(key.getAlgorithm().toUpperCase()));
- }
-
- public KeyFile(Key key, String description, EncryptionType encryptionType) {
- this.key = key;
- this.description = description;
- this.encryptionType = encryptionType;
- }
-
- private KeyFile() {}
-
- private void loadFromFile(String fileName) {
- if (Utils.isEmptyString(fileName)) return;
-
- this.key = null;
- try {
- File keyFile = new File(fileName);
- if (!keyFile.exists()) {
- throw new IllegalArgumentException(String.format("Unable to find file with name %s. Please check path", fileName));
- }
-
- String contentStr = IOUtils.toString(new FileInputStream(keyFile), Charsets.UTF_8);
-
- boolean rsaFormat = !contentStr.startsWith("ssh-rsa") && !contentStr.startsWith("aes-seed");
- if (rsaFormat) {
- contentStr = contentStr.replace("-----.*", "");
- }
-
- contentStr = contentStr.replace("\\r?\\n", "");
-
- byte[] content = rsaFormat ? Base64.getDecoder().decode(contentStr): contentStr.getBytes(Charsets.UTF_8);
-
- EncryptionKeyFactory kf = EncryptionKeyFactory.getInstance("RSA");
-
- List keySpecs = Utils.toList(
- new KeySpecHelper(new AESKeySpec(content), true, EncryptionType.AES),
- new KeySpecHelper(new SSHEncodedKeySpec(content), false, EncryptionType.SSH),
- new KeySpecHelper(new PKCS8EncodedKeySpec(content), true, EncryptionType.RSA),
- new KeySpecHelper(new X509EncodedKeySpec(content), false, EncryptionType.RSA)
- );
-
- for (KeySpecHelper ksh : keySpecs) {
- try {
- this.key = ksh.isPrivate() ? kf.generatePrivateKey(ksh.getKeySpec()) : kf.generatePublicKey(ksh.getKeySpec());
- this.encryptionType = ksh.getEncryptionType();
- break;
- } catch (NullPointerException | InvalidKeySpecException ikse) { continue; }
- }
-
- throw new InvalidKeySpecException(String.format("Unable to determine if file %s is a private or public key. Not type of PKCS8, X509, SSH or AES spec", fileName));
- } catch (Exception ex) {
- throw new RuntimeException(ex);
- }
- }
-
- public void write(String fileName) {
- try {
- String data;
- switch(this.encryptionType) {
- case AES:
- data = String.format("%s %s", this.key.getFormat(), Base64.getEncoder().encodeToString(this.key.getEncoded()));
- IOUtils.writeStringToFile(fileName, data);
- break;
- case SSH:
- try (DataOutputStreamHelper dosh = new DataOutputStreamHelper()) {
- getSSHPubKeyBytes(this.key)
- .forEach(handleExceptionWrapper(item ->{
- dosh.writeInt(item.length);
- dosh.write(item);
- }));
- data = String.format("ssh-rsa", dosh.base64Encoded(), this.description);
- IOUtils.writeStringToFile(fileName, data);
- }
- break;
- default:
- writePem(fileName);
- }
- } catch (Exception ex) {
- throw new IllegalArgumentException(ex);
- }
- }
-
- public void setDescription(String description) {
- this.description = description;
- }
-
- public String getDescription() {
- if (Utils.isEmptyString(this.description)) {
- return this.key instanceof PrivateKey ? "PRIVATE KEY" : "PUBLIC KEY";
- }
- return this.description;
- }
-
- public Key getKey() {
- return this.key;
- }
-
- @Override
- public void close() {
- try {
- if (this.writer != null) {
- this.writer.flush();
- this.writer.close();
- this.writer = null;
- }
- } catch (Exception ex) {
- throw new RuntimeException(ex);
- }
- }
-
- public static KeyFile read(String fileName) {
- try (KeyFile kf = new KeyFile()) {
- kf.loadFromFile(fileName);
- return kf;
- }
- }
-
- private void writePem(String fileName) {
- try {
- String desc = getDescription();
- this.writer = new OutputStreamWriter(new FileOutputStream(fileName), Charsets.UTF_8);
- this.writer.write(String.format("-----BEGIN RSA %s-----", desc));
-
- String encoded = Base64.getEncoder().encodeToString(this.key.getEncoded());
- String out = join("\n", fixedLengthSplit(60).split(encoded));
-
- this.writer.write(out);
- this.writer.write(String.format("-----END RSA %s-----", desc));
- } catch (IOException ex) {
- throw new RuntimeException(ex);
- }
- }
-
- private List getSSHPubKeyBytes(Key key) {
- RSAPublicKey rpk = (RSAPublicKey)key;
- return Arrays.asList("ssh-rsa".getBytes(Charsets.UTF_8),
- rpk.getPublicExponent().toByteArray(),
- rpk.getModulus().toByteArray()
- );
- }
-
- private static class KeySpecHelper {
- private KeySpec keySpec;
- private boolean isPrivate;
- private EncryptionType encryptionType;
-
- public KeySpecHelper(KeySpec keySpec, boolean isPrivate, EncryptionType encryptionType) {
- super();
- this.keySpec = keySpec;
- this.isPrivate = isPrivate;
- this.encryptionType = encryptionType;
- }
-
- public synchronized final KeySpec getKeySpec() {
- return keySpec;
- }
-
- public synchronized final boolean isPrivate() {
- return isPrivate;
- }
-
- public synchronized final EncryptionType getEncryptionType() {
- return encryptionType;
- }
- }
-
-}
diff --git a/src/main/java/net/locusworks/common/crypto/RSA.java b/src/main/java/net/locusworks/common/crypto/RSA.java
deleted file mode 100644
index 3ba85aa..0000000
--- a/src/main/java/net/locusworks/common/crypto/RSA.java
+++ /dev/null
@@ -1,156 +0,0 @@
-package net.locusworks.common.crypto;
-
-import java.io.ByteArrayInputStream;
-import java.nio.file.Files;
-import java.nio.file.Paths;
-import java.security.Key;
-import java.security.KeyPair;
-import java.security.KeyPairGenerator;
-import java.security.PrivateKey;
-import java.security.PublicKey;
-import java.security.SecureRandom;
-import java.security.interfaces.RSAKey;
-import java.util.Base64;
-
-import javax.crypto.Cipher;
-import javax.crypto.CipherInputStream;
-import javax.crypto.IllegalBlockSizeException;
-
-import net.locusworks.common.Charsets;
-import net.locusworks.common.crypto.KeyFile.EncryptionType;
-import net.locusworks.common.io.IOUtils;
-
-public class RSA {
-
- private static final String ENCRYPTION_TYPE = "RSA";
- private static final String ENCRYPTION_ALGORITHM = "RSA/ECB/PKCS10PADDING";
- private static final String PROVIDER = "SunJCE";
- private static final String RANDOM_ALGORITHM = "SHA1PRNG";
-
- private static final int PADDING_LENGTH = 11;
- private static final int DEFAULT_KEY_LENGTH = 2048;
-
- public static KeyPair generateKeyPair() {
- return generateKeyPair(DEFAULT_KEY_LENGTH);
- }
-
- public static KeyPair generateKeyPair(int keyLength) {
- try {
- KeyPairGenerator kpg = KeyPairGenerator.getInstance(ENCRYPTION_TYPE);
- SecureRandom sr = SecureRandom.getInstance(RANDOM_ALGORITHM);
- kpg.initialize(keyLength, sr);
- return kpg.genKeyPair();
- } catch (Exception ex) {
- throw new RuntimeException(ex);
- }
- }
-
- public static KeyPair loadPrivateKey(String privateKeyFileName) {
- return loadKeyPair(null, privateKeyFileName);
- }
-
- public static KeyPair loadPublicKey(String publicKeyFileName) {
- return loadKeyPair(publicKeyFileName, null);
- }
-
- public static KeyPair loadKeyPair(String publicKey, String privateKey) {
- KeyFile pubKey = KeyFile.read(publicKey);
- KeyFile prvKey = KeyFile.read(privateKey);
- return new KeyPair((PublicKey)pubKey.getKey(), (PrivateKey)prvKey.getKey());
- }
-
- public static boolean generateAndWriteSSHKeys() {
- KeyPair kp = generateKeyPair();
- return writePrivateKey(kp) && writePublicKey(kp, true);
- }
-
- public static boolean generateAndWriteKeyPair() {
- return generateAndWriteKeyPair(DEFAULT_KEY_LENGTH);
- }
-
- public static boolean generateAndWriteKeyPair(String keyPairName) {
- return generateAndWriteKeyPair(keyPairName, DEFAULT_KEY_LENGTH);
- }
-
- public static boolean generateAndWriteKeyPair(int keyLength) {
- return generateAndWriteKeyPair("id_rsa", keyLength);
- }
-
- public static boolean generateAndWriteKeyPair(String keyPairName, int keyLength) {
- KeyPair kp = generateKeyPair(keyLength);
- return writePrivateKey(kp, keyPairName, "PRIVATE KEY") && writePublicKey(kp, keyPairName + ".pub", "PUBLIC KEY");
- }
-
- public static boolean writePrivateKey(KeyPair kp) {
- return writePrivateKey(kp, "id_rsa", "PRIVATE KEY");
- }
-
- public static boolean writePrivateKey(KeyPair kp, String fileName, String description) {
- return writePemFile(kp.getPrivate(), fileName, description);
- }
-
- public static boolean writePublicKey(KeyPair kp) {
- return writePublicKey(kp, false);
- }
-
- public static boolean writePublicKey(KeyPair kp, boolean sshFormat) {
- return writePublicKey(kp, "id_rsa.pub", "PUBLIC KEY", sshFormat);
- }
-
- public static boolean writePublicKey(KeyPair kp, String fileName, String description) {
- return writePemFile(kp.getPublic(), fileName, description, false);
- }
-
- public static boolean writePublicKey(KeyPair kp, String fileName, String description, boolean sshFormat) {
- return writePemFile(kp.getPublic(), fileName, description, sshFormat);
- }
-
- public static int calculateRequiredKeyLength(String message) {
- return (message.getBytes(Charsets.UTF_8).length + PADDING_LENGTH) * 8;
- }
-
- public static String encrypt(Key key, String message) {
- try {
- calculateKeyLength(key, message);
- Cipher cipher = Cipher.getInstance(ENCRYPTION_ALGORITHM, PROVIDER);
- cipher.init(Cipher.ENCRYPT_MODE, key);
- CipherInputStream cis = new CipherInputStream(new ByteArrayInputStream(message.getBytes(Charsets.UTF_8)), cipher);
- byte[] encrypted = IOUtils.toByteArray(cis);
- return Base64.getEncoder().encodeToString(encrypted);
- } catch (Exception ex) {
- throw new RuntimeException(ex);
- }
- }
-
- public static String decrypt(Key key, String message) {
- try {
- Cipher cipher = Cipher.getInstance(ENCRYPTION_ALGORITHM, PROVIDER);
- cipher.init(Cipher.DECRYPT_MODE, key);
- byte[] decoded = Base64.getDecoder().decode(message);
- byte[] plainTextArray = cipher.doFinal(decoded);
- return new String(plainTextArray, Charsets.UTF_8);
- } catch (Exception ex) {
- throw new RuntimeException(ex);
- }
- }
-
- private static boolean writePemFile(Key key, String fileName, String description) {
- return writePemFile(key, fileName, description, false);
- }
-
- private static boolean writePemFile(Key key, String fileName, String description, boolean sshFormat) {
- try(KeyFile kf = sshFormat ? new KeyFile(key, description, EncryptionType.SSH) : new KeyFile(key, description)) {
- kf.write(fileName);
- }
- return Files.exists(Paths.get(fileName));
- }
-
- private static void calculateKeyLength(Key key, String message) throws IllegalBlockSizeException {
- int keyLength = ((RSAKey)key).getModulus().bitLength();
- int requiredKeyLength = calculateRequiredKeyLength(message);
- if (keyLength < requiredKeyLength) {
- throw new IllegalBlockSizeException(String.format("RSA key size of %d is not large enough to encrypt message of length %d. "
- + "Increase key size to a minimum of %d and re-encrypt with new key", keyLength, message.length(), requiredKeyLength));
- }
- }
-}
diff --git a/src/main/java/net/locusworks/common/crypto/SSHEncodedKeySpec.java b/src/main/java/net/locusworks/common/crypto/SSHEncodedKeySpec.java
deleted file mode 100644
index 0572364..0000000
--- a/src/main/java/net/locusworks/common/crypto/SSHEncodedKeySpec.java
+++ /dev/null
@@ -1,65 +0,0 @@
-package net.locusworks.common.crypto;
-
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.math.BigInteger;
-import java.security.spec.EncodedKeySpec;
-import java.security.spec.InvalidKeySpecException;
-import java.security.spec.RSAPublicKeySpec;
-import java.util.Arrays;
-import java.util.Base64;
-
-import net.locusworks.common.Charsets;
-import net.locusworks.common.io.IOUtils;
-
-import static net.locusworks.common.utils.Checks.checkArguments;
-import static net.locusworks.common.utils.Utils.get;
-import static net.locusworks.common.utils.Utils.size;
-
-public class SSHEncodedKeySpec extends EncodedKeySpec {
-
- private static final String SSH_MARKER = "ssh-rsa";
-
- public SSHEncodedKeySpec(byte[] encodedKey) {
- super(encodedKey);
- }
-
- public RSAPublicKeySpec convertToRSAPubKeySpec() throws InvalidKeySpecException {
- try {
- byte[] data = this.getEncoded();
- InputStream stream = new ByteArrayInputStream(data);
- Iterable parts = Arrays.asList(IOUtils.toString(stream, Charsets.UTF_8).split(" "));
-
- checkArguments(size(parts) >= 2 && SSH_MARKER.equals(get(parts, 0)), "Bad format, should be: ssh-rsa AAB3...");
- stream = new ByteArrayInputStream(Base64.getDecoder().decode(String.valueOf(get(parts, 1))));
- String marker = new String(readLengthFirst(stream));
- checkArguments(SSH_MARKER.equals(marker), "Looking for marker %s but received %s", SSH_MARKER, marker);
- BigInteger publicExponent = new BigInteger(readLengthFirst(stream));
- BigInteger modulus = new BigInteger(readLengthFirst(stream));
- RSAPublicKeySpec keySpec = new RSAPublicKeySpec(modulus, publicExponent);
- return keySpec;
- } catch (Exception ex) {
- throw new InvalidKeySpecException(ex);
- }
- }
-
- @Override
- public String getFormat() {
- return null;
- }
-
- private static byte[] readLengthFirst(InputStream in) throws IOException {
- int[] bytes = new int[] {in.read(), in.read(), in.read(), in.read()};
- int length = 0;
- int shift = 24;
- for (int i = 0; i < bytes.length; i++) {
- length += bytes[i] << shift;
- shift -= 8;
- }
- byte[] val = new byte[length];
- in.read(val);
- return val;
- }
-
-}
diff --git a/src/main/java/net/locusworks/common/crypto/package-info.java b/src/main/java/net/locusworks/common/crypto/package-info.java
deleted file mode 100644
index 99ddca3..0000000
--- a/src/main/java/net/locusworks/common/crypto/package-info.java
+++ /dev/null
@@ -1,5 +0,0 @@
-/**
- * Package contains classes that help encrypting, decrypting, salting and hashing objects
- * @author Isaac Parenteau
- */
-package net.locusworks.common.crypto;
\ No newline at end of file
diff --git a/src/main/java/net/locusworks/common/exceptions/ApplicationException.java b/src/main/java/net/locusworks/common/exceptions/ApplicationException.java
deleted file mode 100644
index 0ade43a..0000000
--- a/src/main/java/net/locusworks/common/exceptions/ApplicationException.java
+++ /dev/null
@@ -1,108 +0,0 @@
-package net.locusworks.common.exceptions;
-
-/***
- * Custom exception class for the patch repository
- * @author Isaac Parenteau
- *
- */
-public class ApplicationException extends Exception {
- private final Integer code;
- boolean success = false;
- private static final long serialVersionUID = 1L;
-
- public static ApplicationException egregiousServer() {
- return new ApplicationException(9001, "Something went wrong. Please see logs for details");
- }
-
- public static ApplicationException invalidCreds() {
- return new ApplicationException(9001, "Invalid credentials provided");
- }
-
- public static ApplicationException notLoggedIn() {
- return new ApplicationException(9002, "Not logged in");
- }
-
- public static ApplicationException invalidEmailAddress() {
- return new ApplicationException(9005, "Invalid email address");
- }
-
- public static ApplicationException actionNotPermitted() {
- return new ApplicationException(9007, "Action not permitted");
- }
-
- public static ApplicationException actionNotPermitted(String message) {
- return new ApplicationException(9007, "Action not permitted: " + message);
- }
-
- public static ApplicationException passwordsNotEqual() {
- return new ApplicationException(9008, "Passwords do not match");
- }
-
- public static ApplicationException unAuthorized() {
- return new ApplicationException(9009, "unauthorized");
- }
-
- public static ApplicationException duplicateEntry(String message) {
- return new ApplicationException(9100, message);
- }
-
- public static ApplicationException duplicateEntry(String messageFmt, Object... args) {
- return new ApplicationException(9100, String.format(messageFmt, args));
- }
-
- public static ApplicationException noEntryExists(String message) {
- return new ApplicationException(9101, message);
- }
-
- public static ApplicationException noEntryExists(String messageFmt, Object... items) {
- return new ApplicationException(9101, String.format(messageFmt, items));
- }
-
- public static ApplicationException constraintViolation(String message) {
- return new ApplicationException(9102, message);
- }
-
- public static ApplicationException constraintViolation(String messageFmt, Object... items) {
- return new ApplicationException(9102, String.format(messageFmt, items));
- }
-
- public static ApplicationException illegalArgument(String message) {
- return new ApplicationException(9103, message);
- }
-
- public static ApplicationException generic(String message) {
- return new ApplicationException(9999, message);
- }
-
- public static ApplicationException fromException(Throwable e) {
- return new ApplicationException(9999, e);
- }
-
- public ApplicationException(int code, Throwable e) {
- this(code, e.getMessage(), e);
- }
-
- public ApplicationException(int code, String message) {
- super(message);
- this.code = code;
- }
-
- public ApplicationException(int code, String message, Throwable e) {
- super(message, e);
- this.code = code;
- }
-
- public boolean getSuccess() {
- return success;
- }
-
- public Integer getCode() {
- return code;
- }
-
- @Override
- public String getMessage() {
- return super.getMessage();
- }
-
-}
diff --git a/src/main/java/net/locusworks/common/immutables/Pair.java b/src/main/java/net/locusworks/common/immutables/Pair.java
deleted file mode 100644
index 36149c3..0000000
--- a/src/main/java/net/locusworks/common/immutables/Pair.java
+++ /dev/null
@@ -1,55 +0,0 @@
-package net.locusworks.common.immutables;
-
-/**
- * Class that holds two immutable objects as a pair
- * @author Isaac Parenteau
- * @version 1.0.0
- * @param class type of object 1
- * @param class type of object 2
- */
-public class Pair extends Unit {
-
- private V2 value2;
-
- /**
- * Constructor with no values
- */
- public Pair() {
- super();
- }
-
- /**
- * Constructor
- * @param value1 Object 1
- * @param value2 Object 2
- */
- public Pair(V1 value1, V2 value2) {
- super(value1);
- this.value2 = value2;
- }
-
- /**
- * Set value2
- * @param value2 value to set it
- */
- public void setValue2(V2 value2) {
- this.value2 = value2;
- }
-
- /**
- * Get value2
- * @return value2
- */
- public V2 getValue2() {
- return this.value2;
- }
-
- @Override
- public boolean equals(Object other) {
- if (!(other instanceof Pair)) return false;
-
- Pair, ?> otherPair = (Pair, ?>)other;
-
- return super.equals(otherPair) && this.getValue2().equals(otherPair.getValue2());
- }
-}
\ No newline at end of file
diff --git a/src/main/java/net/locusworks/common/immutables/Triplet.java b/src/main/java/net/locusworks/common/immutables/Triplet.java
deleted file mode 100644
index 5ff5c83..0000000
--- a/src/main/java/net/locusworks/common/immutables/Triplet.java
+++ /dev/null
@@ -1,57 +0,0 @@
-package net.locusworks.common.immutables;
-
-/**
- * Class that holds three immutable objects as triplets
- * @author Isaac Parenteau
- * @version 1.0.0
- * @param class type of object 1
- * @param class type of object 2
- * @param class type of object 3
- */
-public class Triplet extends Pair {
-
- private V3 value3;
-
- /**
- * default constructor with no values
- */
- public Triplet() {
- super();
- }
-
- /**
- * Constructor
- * @param value1 Object 1
- * @param value2 Object 2
- * @param value3 Object 3
- */
- public Triplet(V1 value1, V2 value2, V3 value3) {
- super(value1, value2);
- this.value3 = value3;
- }
-
- /**
- * Set value 3
- * @param value3 value 3
- */
- public void setValue3(V3 value3) {
- this.value3 = value3;
- }
-
- /**
- * Get value 3
- * @return value 3
- */
- public V3 getValue3() {
- return value3;
- }
-
- @Override
- public boolean equals(Object other) {
- if (!(other instanceof Triplet)) return false;
-
- Triplet, ?, ?> otherTriplet = (Triplet, ?, ?>)other;
-
- return super.equals(otherTriplet) && this.getValue3().equals(otherTriplet.getValue3());
- }
-}
\ No newline at end of file
diff --git a/src/main/java/net/locusworks/common/immutables/Unit.java b/src/main/java/net/locusworks/common/immutables/Unit.java
deleted file mode 100644
index b0a0971..0000000
--- a/src/main/java/net/locusworks/common/immutables/Unit.java
+++ /dev/null
@@ -1,50 +0,0 @@
-package net.locusworks.common.immutables;
-
-/**
- * Class that holds three immutable objects as triplets
- * @author Isaac Parenteau
- * @version 1.0.0
- * @param class type of object 1
- */
-public class Unit {
-
- private V1 value1;
-
- /**
- * Default constructor with no values
- */
- public Unit() {}
-
- /**
- * Constuctor
- * @param value1 value 1
- */
- public Unit(V1 value1) {
- this.value1 = value1;
- }
-
- /**
- * Set value 1
- * @param value1 value 1
- */
- public void setValue1(V1 value1) {
- this.value1 = value1;
- }
-
- /**
- * Get value 1
- * @return value1
- */
- public V1 getValue1() {
- return value1;
- }
-
- @Override
- public boolean equals(Object other) {
- if (!(other instanceof Unit)) return false;
-
- Unit> otherUnit = (Unit>)other;
-
- return this.getValue1().equals(otherUnit.getValue1());
- }
-}
\ No newline at end of file
diff --git a/src/main/java/net/locusworks/common/interfaces/AutoCloseableIterator.java b/src/main/java/net/locusworks/common/interfaces/AutoCloseableIterator.java
deleted file mode 100644
index d494fcb..0000000
--- a/src/main/java/net/locusworks/common/interfaces/AutoCloseableIterator.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package net.locusworks.common.interfaces;
-
-import java.util.Iterator;
-
-public interface AutoCloseableIterator extends Iterator, AutoCloseable {
-
- @Override
- public void close();
-
-}
diff --git a/src/main/java/net/locusworks/common/interfaces/PersistableRequest.java b/src/main/java/net/locusworks/common/interfaces/PersistableRequest.java
deleted file mode 100644
index 9bbfc69..0000000
--- a/src/main/java/net/locusworks/common/interfaces/PersistableRequest.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package net.locusworks.common.interfaces;
-
-public interface PersistableRequest {
-
-}
diff --git a/src/main/java/net/locusworks/common/interfaces/ThrowingConsumer.java b/src/main/java/net/locusworks/common/interfaces/ThrowingConsumer.java
deleted file mode 100644
index cde492e..0000000
--- a/src/main/java/net/locusworks/common/interfaces/ThrowingConsumer.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package net.locusworks.common.interfaces;
-
-@FunctionalInterface
-public interface ThrowingConsumer {
- void accept(T t) throws E;
-}
diff --git a/src/main/java/net/locusworks/common/io/IOUtils.java b/src/main/java/net/locusworks/common/io/IOUtils.java
deleted file mode 100644
index 7ce89f1..0000000
--- a/src/main/java/net/locusworks/common/io/IOUtils.java
+++ /dev/null
@@ -1,358 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package net.locusworks.common.io;
-
-import java.io.BufferedReader;
-import java.io.ByteArrayOutputStream;
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.OutputStream;
-import java.io.Reader;
-import java.io.StringWriter;
-import java.io.Writer;
-import java.nio.charset.Charset;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.nio.file.Paths;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-import net.locusworks.common.Charsets;
-
-public class IOUtils {
-
- private static final int DEFAULT_BUFFER_SIZE = 1024 * 4;
- public static final int EOF = -1;
-
- /**
- * Gets the contents of an InputStream as a list of Strings,
- * one entry per line, using the specified character encoding.
- *
- * This method buffers the input internally, so there is no need to use a
- * BufferedInputStream.
- *
- * @param input the InputStream to read from, not null
- * @param encoding the encoding to use, null means platform default
- * @return the list of Strings, never null
- * @throws NullPointerException if the input is null
- * @throws IOException if an I/O error occurs
- */
- public static List readLines(final InputStream stream, final Charset charset) throws IOException {
- final InputStreamReader reader = new InputStreamReader(stream, charset);
- return readLines(reader);
- }
-
- /**
- * Gets the contents of a Reader as a list of Strings,
- * one entry per line.
- *
- * This method buffers the input internally, so there is no need to use a
- * BufferedReader.
- *
- * @param input the Reader to read from, not null
- * @return the list of Strings, never null
- * @throws NullPointerException if the input is null
- * @throws IOException if an I/O error occurs
- */
- public static List readLines(final Reader input) throws IOException {
- final BufferedReader reader = toBufferedReader(input);
- final List list = new ArrayList<>();
- for(String line = reader.readLine(); line != null; line = reader.readLine()) {
- list.add(line);
- }
- return list;
- }
-
- /**
- * Returns the given reader if it is a {@link BufferedReader}, otherwise creates a BufferedReader from the given
- * reader.
- *
- * @param reader the reader to wrap or return (not null)
- * @return the given reader or a new {@link BufferedReader} for the given reader
- * @throws NullPointerException if the input parameter is null
- * @see #buffer(Reader)
- */
- public static BufferedReader toBufferedReader(final Reader reader) {
- return reader instanceof BufferedReader ? (BufferedReader) reader : new BufferedReader(reader);
- }
-
- /**
- * Gets the contents of an InputStream as a byte[].
- *
- * This method buffers the input internally, so there is no need to use a
- * BufferedInputStream.
- *
- * @param input the InputStream to read from
- * @return the requested byte array
- * @throws NullPointerException if the input is null
- * @throws IOException if an I/O error occurs
- */
- public static byte[] toByteArray(final InputStream input) throws IOException {
- try (final ByteArrayOutputStream output = new ByteArrayOutputStream()) {
- copy(input, output);
- return output.toByteArray();
- }
- }
-
- /**
- * Copies bytes from an InputStream to an
- * OutputStream.
- *
- * This method buffers the input internally, so there is no need to use a
- * BufferedInputStream.
- *
- * Large streams (over 2GB) will return a bytes copied value of
- * -1 after the copy has completed since the correct
- * number of bytes cannot be returned as an int. For large streams
- * use the copyLarge(InputStream, OutputStream) method.
- *
- * @param input the InputStream to read from
- * @param output the OutputStream to write to
- * @return the number of bytes copied, or -1 if > Integer.MAX_VALUE
- * @throws NullPointerException if the input or output is null
- * @throws IOException if an I/O error occurs
- */
- public static int copy(final InputStream input, final OutputStream output) throws IOException {
- final long count = copyLarge(input, output);
- if (count > Integer.MAX_VALUE) {
- return -1;
- }
- return (int) count;
- }
- /**
- * Copies bytes from an InputStream to an OutputStream using an internal buffer of the
- * given size.
- *
- * This method buffers the input internally, so there is no need to use a BufferedInputStream.
- *
- *
- * @param input the InputStream to read from
- * @param output the OutputStream to write to
- * @param bufferSize the bufferSize used to copy from the input to the output
- * @return the number of bytes copied
- * @throws NullPointerException if the input or output is null
- * @throws IOException if an I/O error occurs
- */
- public static long copy(final InputStream input, final OutputStream output, final int bufferSize)
- throws IOException {
- return copyLarge(input, output, new byte[bufferSize]);
- }
-
- /**
- * Copies bytes from an InputStream to chars on a
- * Writer using the specified character encoding.
- *
- * This method buffers the input internally, so there is no need to use a
- * BufferedInputStream.
- *
- * This method uses {@link InputStreamReader}.
- *
- * @param input the InputStream to read from
- * @param output the Writer to write to
- * @param inputEncoding the encoding to use for the input stream, null means platform default
- * @throws NullPointerException if the input or output is null
- * @throws IOException if an I/O error occurs
- */
- public static void copy(final InputStream input, final Writer output, final Charset inputEncoding)
- throws IOException {
- final InputStreamReader in = new InputStreamReader(input, inputEncoding.toString());
- copy(in, output);
- }
-
- /**
- * Copies chars from a Reader to a Writer.
- *
- * This method buffers the input internally, so there is no need to use a
- * BufferedReader.
- *
- * Large streams (over 2GB) will return a chars copied value of
- * -1 after the copy has completed since the correct
- * number of chars cannot be returned as an int. For large streams
- * use the copyLarge(Reader, Writer) method.
- *
- * @param input the Reader to read from
- * @param output the Writer to write to
- * @return the number of characters copied, or -1 if > Integer.MAX_VALUE
- * @throws NullPointerException if the input or output is null
- * @throws IOException if an I/O error occurs
- */
- public static int copy(final Reader input, final Writer output) throws IOException {
- final long count = copyLarge(input, output);
- if (count > Integer.MAX_VALUE) {
- return -1;
- }
- return (int) count;
- }
-
- /**
- * Copies chars from a large (over 2GB) Reader to a Writer.
- *
- * This method buffers the input internally, so there is no need to use a
- * BufferedReader.
- *
- * The buffer size is given by {@link #DEFAULT_BUFFER_SIZE}.
- *
- * @param input the Reader to read from
- * @param output the Writer to write to
- * @return the number of characters copied
- * @throws NullPointerException if the input or output is null
- * @throws IOException if an I/O error occurs
- */
- public static long copyLarge(final Reader input, final Writer output) throws IOException {
- return copyLarge(input, output, new char[DEFAULT_BUFFER_SIZE]);
- }
-
- /**
- * Copies bytes from a large (over 2GB) InputStream to an
- * OutputStream.
- *
- * This method buffers the input internally, so there is no need to use a
- * BufferedInputStream.
- *
- * The buffer size is given by {@link #DEFAULT_BUFFER_SIZE}.
- *
- * @param input the InputStream to read from
- * @param output the OutputStream to write to
- * @return the number of bytes copied
- * @throws NullPointerException if the input or output is null
- * @throws IOException if an I/O error occurs
- */
- public static long copyLarge(final InputStream input, final OutputStream output)
- throws IOException {
- return copy(input, output, DEFAULT_BUFFER_SIZE);
- }
-
- /**
- * Copies bytes from a large (over 2GB) InputStream to an
- * OutputStream.
- *
- * This method uses the provided buffer, so there is no need to use a
- * BufferedInputStream.
- *
- *
- * @param input the InputStream to read from
- * @param output the OutputStream to write to
- * @param buffer the buffer to use for the copy
- * @return the number of bytes copied
- * @throws NullPointerException if the input or output is null
- * @throws IOException if an I/O error occurs
- */
- public static long copyLarge(final InputStream input, final OutputStream output, final byte[] buffer)
- throws IOException {
- long count = 0;
- int n;
- while (EOF != (n = input.read(buffer))) {
- output.write(buffer, 0, n);
- count += n;
- }
- return count;
- }
-
- /**
- * Copies chars from a large (over 2GB) Reader to a Writer.
- *
- * This method uses the provided buffer, so there is no need to use a
- * BufferedReader.
- *
- *
- * @param input the Reader to read from
- * @param output the Writer to write to
- * @param buffer the buffer to be used for the copy
- * @return the number of characters copied
- * @throws NullPointerException if the input or output is null
- * @throws IOException if an I/O error occurs
- */
- public static long copyLarge(final Reader input, final Writer output, final char[] buffer) throws IOException {
- long count = 0;
- int n;
- while (EOF != (n = input.read(buffer))) {
- output.write(buffer, 0, n);
- count += n;
- }
- return count;
- }
-
- /**
- * Gets the contents of an InputStream as a String
- * using the specified character encoding.
- *
- * This method buffers the input internally, so there is no need to use a
- * BufferedInputStream.
- *
- *
- * @param input the InputStream to read from
- * @param encoding the encoding to use, null means platform default
- * @return the requested String
- * @throws NullPointerException if the input is null
- * @throws IOException if an I/O error occurs
- */
- public static String toString(final InputStream input, final Charset encoding) throws IOException {
- try (final StringWriter sw = new StringWriter()) {
- copy(input, sw, encoding);
- return sw.toString();
- }
- }
-
- public static void writeStringToFile(String fileName, String data) throws IOException {
- writeStringToFile(Paths.get(fileName), data, Charsets.UTF_8);
- }
-
-
- public static void writeStringToFile(String fileName, String data, Charset charset) throws IOException {
- writeStringToFile(Paths.get(fileName), data, charset);
- }
-
- public static void writeStringToFile(Path file, String data) throws IOException {
- writeStringToFile(file, data, Charsets.UTF_8);
- }
-
- @Deprecated
- public static void writeStringToFile(File file, String data, Charset charset) throws IOException {
- writeStringToFile(file.toPath(), data, charset);
- }
-
- public static void writeStringToFile(Path file, String data, Charset charset) throws IOException {
- try(Writer writer = Files.newBufferedWriter(file, charset)) {
- writer.write(data);
- writer.flush();
- }
- }
-
- public static void deleteFile(String fileName) {
- deleteFile(Paths.get(fileName));
- }
-
- @Deprecated
- public static void deleteFile(File file) {
- deleteFile(file.toPath());
- }
-
- public static void deleteFile(Path file) {
- try {
- Files.deleteIfExists(file);
- } catch (IOException ex) {
- throw new IllegalArgumentException(ex);
- }
- }
-
- public static void deleteFiles(String... fileNames) {
- Arrays.asList(fileNames).forEach(file -> deleteFile(file));
- }
-}
diff --git a/src/main/java/net/locusworks/common/migration/BaseMigrationManager.java b/src/main/java/net/locusworks/common/migration/BaseMigrationManager.java
deleted file mode 100644
index 8f96110..0000000
--- a/src/main/java/net/locusworks/common/migration/BaseMigrationManager.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package net.locusworks.common.migration;
-
-import java.util.ArrayList;
-import java.util.List;
-
-public abstract class BaseMigrationManager {
-
- protected List migrations = new ArrayList<>();
-
- public abstract void migrate() throws Exception;
-
-}
diff --git a/src/main/java/net/locusworks/common/migration/MigrationCallback.java b/src/main/java/net/locusworks/common/migration/MigrationCallback.java
deleted file mode 100644
index fc47e2f..0000000
--- a/src/main/java/net/locusworks/common/migration/MigrationCallback.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package net.locusworks.common.migration;
-
-@FunctionalInterface
-public interface MigrationCallback {
- void results(String msg);
-}
diff --git a/src/main/java/net/locusworks/common/migration/MigrationItem.java b/src/main/java/net/locusworks/common/migration/MigrationItem.java
deleted file mode 100644
index ad3280a..0000000
--- a/src/main/java/net/locusworks/common/migration/MigrationItem.java
+++ /dev/null
@@ -1,74 +0,0 @@
-package net.locusworks.common.migration;
-
-import java.util.Arrays;
-
-import org.flywaydb.core.Flyway;
-import org.flywaydb.core.api.MigrationInfo;
-import org.flywaydb.core.internal.info.MigrationInfoDumper;
-
-public class MigrationItem {
-
- protected Flyway flyway = null;
- protected MigrationInfo[] pendingMigrations;
- protected MigrationInfo[] allMigrations;
- private MigrationCallback callback;
-
- public MigrationItem(Flyway flyway, MigrationCallback callback) {
- this.allMigrations = flyway.info().all();
- this.pendingMigrations = flyway.info().pending();
- this.flyway=flyway;
- this.callback = callback;
- }
-
- public MigrationItem(Flyway flyway) {
- this(flyway, null);
- }
-
- public String[] getSchemas() {
- return flyway.getConfiguration().getSchemas();
- }
-
- public int qtyPending() {
- return pendingMigrations.length;
- }
-
- public void repair() {
- // no harm in calling migrate even if none pending, log will contain
- // assurance that the migrations were verified
- try {
- String schemas = Arrays.toString(getSchemas()).replace("[", "").replace("]", "");
-
- String status = String.format("Repair status for %s:%n%s", schemas, getAllMigrationsLog());
-
- callback(status);
-
- flyway.repair();
- } catch (Exception e) {
- String message = String.format("%nDatabase migration error:%n %s %nPortal webapp cannot continue.", e.getMessage());
- throw new RuntimeException(message, e);
- }
- }
-
- public void migrate() {
- // no harm in calling migrate even if none pending, log will contain
- // assurance that the migrations were verified
- try {
- String schemas = Arrays.toString(getSchemas()).replace("[", "").replace("]", "");
- String status = String.format("Repair status for %s:%n%s", schemas, getAllMigrationsLog());
- callback(status);
- flyway.migrate();
- } catch (Exception e) {
- String message = String.format("%nDatabase migration error:%n %s %nPortal webapp cannot continue.", e.getMessage());
- throw new RuntimeException(message, e);
- }
- }
-
- public String getAllMigrationsLog() {
- return MigrationInfoDumper.dumpToAsciiTable(allMigrations);
- }
-
- private void callback(String msg) {
- if (this.callback != null) this.callback.results(msg);
- }
-
-}
diff --git a/src/main/java/net/locusworks/common/net/HttpClientHelper.java b/src/main/java/net/locusworks/common/net/HttpClientHelper.java
deleted file mode 100644
index 56039bf..0000000
--- a/src/main/java/net/locusworks/common/net/HttpClientHelper.java
+++ /dev/null
@@ -1,95 +0,0 @@
-package net.locusworks.common.net;
-
-import java.security.SecureRandom;
-
-import javax.net.ssl.SSLContext;
-import javax.net.ssl.TrustManager;
-
-import org.apache.http.HttpEntity;
-import org.apache.http.HttpResponse;
-import org.apache.http.client.HttpClient;
-import org.apache.http.client.methods.HttpGet;
-import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
-import org.apache.http.impl.client.HttpClientBuilder;
-import org.apache.http.util.EntityUtils;
-
-import net.locusworks.common.net.certmanagers.TrustAllCertsManager;
-import net.locusworks.common.net.hostverifiers.AllHostValidVerifyer;
-
-public class HttpClientHelper {
-
- public enum HttpSchema {
- HTTP,
- HTTPS;
-
- public static HttpSchema findEnum(String value) {
- for (HttpSchema schema : values()) {
- if (value.equalsIgnoreCase(schema.toString())) {
- return schema;
- }
- }
- return null;
- }
- }
-
- private static final String[] TLS = new String[] {"TLSv1", "TLSv1.1", "TLSv1.2"};
-
- private HttpClient client;
- private String baseUrl;
-
- /**
- * Constructor to handle http connection
- * @param protocol protocol to use (http or https)
- * @param host the host url
- * @param port the host port
- * @throws Exception exception
- */
- public HttpClientHelper(String protocol, String host, String port) throws Exception {
- HttpSchema schema = HttpSchema.findEnum(protocol);
- if (schema == null) {
- throw new Exception("Unable to find http schema of " + protocol);
- }
- this.baseUrl = String.format("%s://%s:%s", schema.toString().toLowerCase(), host, port);
- this.client = createClient(schema);
- }
-
- private HttpClient createClient(HttpSchema schema) throws Exception {
- HttpClientBuilder builder = HttpClientBuilder.create();
-
- if (schema == HttpSchema.HTTP) {
- return builder.build();
- }
-
- TrustManager[] trustAllCerts = new TrustManager[] { new TrustAllCertsManager() };
- //Setup the ssl instance using tls
- SSLContext sslContext = SSLContext.getInstance("TLS");
- sslContext.init(null, trustAllCerts, new SecureRandom());
-
- SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslContext, TLS, null, new AllHostValidVerifyer());
-
- builder = builder.setSSLSocketFactory(sslsf);
-
- return builder.build();
- }
-
- /**
- * Get the http GET response code
- * @param endpoint endpoint to get the response from
- * @return responseCode
- * @throws Exception general exception
- */
- public Integer getGetResponseCode(String endpoint) throws Exception {
- String url = this.baseUrl + endpoint;
-
- HttpResponse response = this.client.execute(new HttpGet(url));
-
- HttpEntity entity = response.getEntity();
-
- Integer responseCode = response.getStatusLine().getStatusCode();
-
- EntityUtils.consume(entity);
-
- return responseCode;
- };
-
-}
diff --git a/src/main/java/net/locusworks/common/net/certmanagers/TrustAllCertsManager.java b/src/main/java/net/locusworks/common/net/certmanagers/TrustAllCertsManager.java
deleted file mode 100644
index d27e2f1..0000000
--- a/src/main/java/net/locusworks/common/net/certmanagers/TrustAllCertsManager.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package net.locusworks.common.net.certmanagers;
-
-import java.security.cert.CertificateException;
-import java.security.cert.X509Certificate;
-
-import javax.net.ssl.TrustManager;
-import javax.net.ssl.X509TrustManager;
-
-public class TrustAllCertsManager implements X509TrustManager {
-
- @Override
- public void checkClientTrusted(X509Certificate[] arg0, String arg1) throws CertificateException { }
-
- @Override
- public void checkServerTrusted(X509Certificate[] arg0, String arg1) throws CertificateException { }
-
- @Override
- public X509Certificate[] getAcceptedIssuers() { return null; }
-
- public static TrustManager[] trustAllCerts() {
- return new TrustManager[] { new TrustAllCertsManager() };
- }
-
-}
diff --git a/src/main/java/net/locusworks/common/net/hostverifiers/AllHostValidVerifyer.java b/src/main/java/net/locusworks/common/net/hostverifiers/AllHostValidVerifyer.java
deleted file mode 100644
index c385876..0000000
--- a/src/main/java/net/locusworks/common/net/hostverifiers/AllHostValidVerifyer.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package net.locusworks.common.net.hostverifiers;
-
-import javax.net.ssl.HostnameVerifier;
-import javax.net.ssl.SSLSession;
-
-public class AllHostValidVerifyer implements HostnameVerifier {
-
- @Override
- public boolean verify(String arg0, SSLSession arg1) { return true; }
-
-}
diff --git a/src/main/java/net/locusworks/common/net/ssl/SSLManager.java b/src/main/java/net/locusworks/common/net/ssl/SSLManager.java
deleted file mode 100644
index 1309b0b..0000000
--- a/src/main/java/net/locusworks/common/net/ssl/SSLManager.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package net.locusworks.common.net.ssl;
-
-import java.security.KeyManagementException;
-import java.security.NoSuchAlgorithmException;
-import java.security.SecureRandom;
-
-import javax.net.ssl.SSLContext;
-import javax.net.ssl.TrustManager;
-
-import org.apache.http.client.HttpClient;
-import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
-import org.apache.http.impl.client.HttpClientBuilder;
-
-import net.locusworks.common.net.certmanagers.TrustAllCertsManager;
-import net.locusworks.common.net.hostverifiers.AllHostValidVerifyer;
-
-public class SSLManager {
-
- public static final String[] TLS = new String[] {"TLSv1", "TLSv1.1", "TLSv1.2"};
-
- public static HttpClient getTrustAllTLSClient() throws NoSuchAlgorithmException, KeyManagementException {
- SSLContext context = SSLContext.getInstance("TLS");
- context.init(null, new TrustManager[] { new TrustAllCertsManager() }, new SecureRandom());
-
- SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(context, TLS, null, new AllHostValidVerifyer());
-
- return HttpClientBuilder.create().setSSLSocketFactory(sslsf).build();
- }
-
-}
diff --git a/src/main/java/net/locusworks/common/objectmapper/ObjectMapperError.java b/src/main/java/net/locusworks/common/objectmapper/ObjectMapperError.java
deleted file mode 100644
index 1f90f29..0000000
--- a/src/main/java/net/locusworks/common/objectmapper/ObjectMapperError.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package net.locusworks.common.objectmapper;
-
-/**
- * Error handler for the object mapper class
- * @author Isaac Parenteau
- * @version 1.0.0
- * @date 02/15/2018
- *
- */
-public interface ObjectMapperError {
- void getError(Throwable e);
-}
diff --git a/src/main/java/net/locusworks/common/objectmapper/ObjectMapperHelper.java b/src/main/java/net/locusworks/common/objectmapper/ObjectMapperHelper.java
deleted file mode 100644
index 9ce2050..0000000
--- a/src/main/java/net/locusworks/common/objectmapper/ObjectMapperHelper.java
+++ /dev/null
@@ -1,148 +0,0 @@
-package net.locusworks.common.objectmapper;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-
-import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility;
-import com.fasterxml.jackson.annotation.JsonInclude.Include;
-import com.fasterxml.jackson.annotation.PropertyAccessor;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.google.gson.Gson;
-import com.google.gson.GsonBuilder;
-
-/**
- * Object mapper to map to convert objects to json string or
- * json string back to object
- * @author Isaac Parenteau
- * @version 1.0.0
- * @date 02/15/2018
- */
-public class ObjectMapperHelper {
-
- private static ObjectMapper mapper;
- static {
- mapper = new ObjectMapper();
- mapper.setSerializationInclusion(Include.NON_NULL);
- mapper.setVisibility(PropertyAccessor.FIELD, Visibility.ANY);
- }
-
- /**
- * Write an object out to json
- * @param object Object to convert to json
- * @return return a string representation of the object converted to json
- */
- public static ObjectMapperResults writeValue(Object object) {
- String results = "";
- try {
- results = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(object);
- } catch (Exception ex) {
- try {
- GsonBuilder gsonBuilder = new GsonBuilder();
- gsonBuilder.setPrettyPrinting();
- Gson gson = gsonBuilder.create();
- results = gson.toJson(object);
- } catch (Exception e) {
- new ObjectMapperResults<>(e);
- }
- }
- return new ObjectMapperResults<>(results);
- }
-
- /**
- * Convert binary data to an object
- * @param src Binary data to convert
- * @param clazz Class to convert the data to
- * @param The expected class of the value
- * @return the object populated with the data in the json string
- */
- public static ObjectMapperResults readValue(byte[] src, Class clazz) {
- try {
- return new ObjectMapperResults(mapper.readValue(src, clazz));
- } catch (Exception ex) {
- return new ObjectMapperResults(ex);
- }
- }
-
- /**
- * Convert a json string to an object
- * @param src Json String
- * @param clazz Class to convert the json string to
- * @param The expected class of the value
- * @return the object populated with the data in the json string
- */
- public static ObjectMapperResults readValue(String src, Class clazz) {
- try {
- return new ObjectMapperResults(mapper.readValue(src, clazz));
- } catch (Exception ex) {
- return new ObjectMapperResults(ex);
- }
- }
-
- /**
- * Convert an java object to a class
- * @param src Object to convert
- * @param clazz Class to convert the object to
- * @param The expected class of the value
- * @return the object populated with the data in the json string
- */
- public static ObjectMapperResults readValue(Object src, Class clazz) {
- try {
- if (src instanceof String) {
- return readValue((String)src, clazz);
- }
- return readValue(mapper.writeValueAsString(src), clazz);
- } catch (Exception ex) {
- return new ObjectMapperResults(ex);
- }
- }
-
- /**
- * Converts an object to a list
- * @param object Object to convert
- * @param objectClass Class to convert the object to
- * @param The expected class of the object
- * @return the object list populated with the data in the json string
- */
- public static > ObjectMapperListResults> readListValue(Object object, Class objectClass) {
- return readListValue(object, objectClass, ArrayList.class);
- }
-
- /**
- * Converts an object to a list
- * @param object Object to convert
- * @param objectClass Class to convert the object to
- * @param listClass List type to make
- * @param The expected class of the object
- * @param The expect class of the list
- * @return the object list populated with the data in the json string
- */
- public static > ObjectMapperListResults> readListValue(Object object, Class objectClass, Class listClass) {
- try {
- if (object instanceof String) {
- return readListValue((String)object, objectClass, listClass);
- }
- return readListValue(mapper.writeValueAsString(object), objectClass, listClass);
- } catch (Exception ex) {
- return new ObjectMapperListResults<>(ex);
- }
- }
-
- /**
- * Converts an object to a list
- * @param src Source to convert
- * @param objectClass Class to convert the object to
- * @param listClass List type to make
- * @param The expected class of the object
- * @param The expect class of the list
- * @return the object list populated with the data in the json string
- */
- public static > ObjectMapperListResults> readListValue(String src, Class objectClass, Class listClass) {
- try {
- List item = mapper.readValue(src, mapper.getTypeFactory().constructCollectionType(listClass, objectClass));
- return new ObjectMapperListResults<>(item);
- } catch (Exception ex) {
- return new ObjectMapperListResults<>(ex);
- }
- }
-}
\ No newline at end of file
diff --git a/src/main/java/net/locusworks/common/objectmapper/ObjectMapperListResults.java b/src/main/java/net/locusworks/common/objectmapper/ObjectMapperListResults.java
deleted file mode 100644
index b1af466..0000000
--- a/src/main/java/net/locusworks/common/objectmapper/ObjectMapperListResults.java
+++ /dev/null
@@ -1,51 +0,0 @@
-package net.locusworks.common.objectmapper;
-
-import java.util.Collection;
-
-/**
- * Holds the results from the object mapper list conversion
- * @author Isaac Parenteau
- * @version 1.0.0
- * @date 02/15/2018
- * @param class type of the object mapper
- */
-public class ObjectMapperListResults> extends ObjectMapperResults {
-
- /**
- * Constructor
- * @param results results from the conversion
- */
- public ObjectMapperListResults(T results) {
- this(results, null);
- }
-
- /**
- * Constructor
- * @param exception exception that was thrown during conversion
- */
- public ObjectMapperListResults(Throwable exception) {
- this(null, exception);
- }
-
- /**
- * Constructor
- * @param results results from the conversion
- * @param exception exception that was thrown during conversion
- */
- public ObjectMapperListResults(T results, Throwable exception) {
- super(results, exception);
- }
-
- /**
- * Add the error handler to the results to retrieve the error that caused
- * the exception
- * @param error the error handler to use
- * @return this
- */
- public ObjectMapperListResults withErrorHandler(ObjectMapperError error) {
- if (this.hasError() && error != null) {
- error.getError(this.getException());
- }
- return this;
- }
-}
\ No newline at end of file
diff --git a/src/main/java/net/locusworks/common/objectmapper/ObjectMapperResults.java b/src/main/java/net/locusworks/common/objectmapper/ObjectMapperResults.java
deleted file mode 100644
index 092be8f..0000000
--- a/src/main/java/net/locusworks/common/objectmapper/ObjectMapperResults.java
+++ /dev/null
@@ -1,93 +0,0 @@
-package net.locusworks.common.objectmapper;
-
-/**
- * Holds the results from the object mapper list conversion
- * @author Isaac Parenteau
- * @version 1.0.0
- * @date 02/15/2018
- * @param class type of the object being converted from json to object
- */
-public class ObjectMapperResults {
-
- private Throwable exception;
- private T results;
-
- /**
- * Constructor
- * @param results results from the conversion
- */
- public ObjectMapperResults(T results) {
- this(results, null);
- }
-
- /**
- * Constructor
- * @param exception exception that was thrown during conversion
- */
- public ObjectMapperResults(Throwable exception) {
- this(null, exception);
- }
-
- /**
- * Constructor
- * @param results results from the conversion
- * @param exception exception that was thrown during conversion
- */
- public ObjectMapperResults(T results, Throwable exception) {
- this.results = results;
- this.exception = exception;
- }
-
- /**
- * get the exception that happened during conversion
- * @return exception
- */
- public Throwable getException() {
- return exception;
- }
-
- /**
- * Set the exception
- * @param exception
- */
- public void setException(Throwable exception) {
- this.exception = exception;
- }
-
- /**
- * Get the result
- * @return the converted results
- */
- public T getResults() {
- return results;
- }
-
- /**
- * set the results
- * @param results results to set
- */
- public void setResults(T results) {
- this.results = results;
- }
-
- /**
- * Check to see if the conversion caused an error
- * @return true if there is an error, false otherwise
- */
- public boolean hasError() {
- return this.exception != null;
- }
-
- /**
- * Add the error handler to the results to retrieve the error that caused
- * the exception
- * @param error the error handler to use
- * @return this
- */
- public ObjectMapperResults withErrorHandler(ObjectMapperError error) {
- if (this.hasError() && error != null) {
- error.getError(this.getException());
- }
- return this;
- }
-}
diff --git a/src/main/java/net/locusworks/common/properties/ImmutableProperties.java b/src/main/java/net/locusworks/common/properties/ImmutableProperties.java
deleted file mode 100644
index 0884479..0000000
--- a/src/main/java/net/locusworks/common/properties/ImmutableProperties.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package net.locusworks.common.properties;
-
-import java.util.Properties;
-
-public class ImmutableProperties extends Properties {
-
- private static final long serialVersionUID = 65942088008978137L;
-
- public ImmutableProperties() {
- super();
- }
-
- public ImmutableProperties(Properties props) {
- super();
- if (props == null || props.isEmpty()) return;
-
- props.entrySet().forEach(item -> this.put(item.getKey(), item.getValue()));
- }
-
- @Override
- public synchronized Object setProperty(String key, String value) {
- return put(key, value);
- }
-
- public synchronized Object put(Object key, Object value) {
- if (containsKey(key))
- throw new RuntimeException("Cannot change key value once its set: " + key);
- return super.put(key, value);
- }
-
-}
diff --git a/src/main/java/net/locusworks/common/properties/OrderedProperties.java b/src/main/java/net/locusworks/common/properties/OrderedProperties.java
deleted file mode 100644
index dcefa70..0000000
--- a/src/main/java/net/locusworks/common/properties/OrderedProperties.java
+++ /dev/null
@@ -1,1026 +0,0 @@
-package net.locusworks.common.properties;
-
-/*
- * Copyright (c) 1995, 2013, Oracle and/or its affiliates. All rights reserved.
- * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- */
-import java.io.IOException;
-import java.io.PrintStream;
-import java.io.PrintWriter;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.io.Reader;
-import java.io.Writer;
-import java.io.OutputStreamWriter;
-import java.io.BufferedWriter;
-import java.util.Collections;
-import java.util.Date;
-import java.util.Enumeration;
-import java.util.LinkedHashMap;
-import java.util.Map;
-import java.util.Set;
-
-/**
- * The {@code Properties} class represents a persistent set of
- * properties. The {@code Properties} can be saved to a stream
- * or loaded from a stream. Each key and its corresponding value in
- * the property list is a string.
- *
- * A property list can contain another property list as its
- * "defaults"; this second property list is searched if
- * the property key is not found in the original property list.
- *
- * Because {@code Properties} inherits from {@code Hashtable}, the
- * {@code put} and {@code putAll} methods can be applied to a
- * {@code Properties} object. Their use is strongly discouraged as they
- * allow the caller to insert entries whose keys or values are not
- * {@code Strings}. The {@code setProperty} method should be used
- * instead. If the {@code store} or {@code save} method is called
- * on a "compromised" {@code Properties} object that contains a
- * non-{@code String} key or value, the call will fail. Similarly,
- * the call to the {@code propertyNames} or {@code list} method
- * will fail if it is called on a "compromised" {@code Properties}
- * object that contains a non-{@code String} key.
- *
- *
- * The {@link #load(java.io.Reader) load(Reader)} /
- * {@link #store(java.io.Writer, java.lang.String) store(Writer, String)}
- * methods load and store properties from and to a character based stream
- * in a simple line-oriented format specified below.
- *
- * The {@link #load(java.io.InputStream) load(InputStream)} /
- * {@link #store(java.io.OutputStream, java.lang.String) store(OutputStream, String)}
- * methods work the same way as the load(Reader)/store(Writer, String) pair, except
- * the input/output stream is encoded in ISO 8859-1 character encoding.
- * Characters that cannot be directly represented in this encoding can be written using
- * Unicode escapes as defined in section 3.3 of
- * The Java™ Language Specification;
- * only a single 'u' character is allowed in an escape
- * sequence. The native2ascii tool can be used to convert property files to and
- * from other character encodings.
- *
- *
The {@link #loadFromXML(InputStream)} and {@link
- * #storeToXML(OutputStream, String, String)} methods load and store properties
- * in a simple XML format. By default the UTF-8 character encoding is used,
- * however a specific encoding may be specified if required. Implementations
- * are required to support UTF-8 and UTF-16 and may support other encodings.
- * An XML properties document has the following DOCTYPE declaration:
- *
- *
- * <!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
- *
- * Note that the system URI (http://java.sun.com/dtd/properties.dtd) is
- * not accessed when exporting or importing properties; it merely
- * serves as a string to uniquely identify the DTD, which is:
- *
This class is thread-safe: multiple threads can share a single
- * Properties object without the need for external synchronization.
- *
- * @see native2ascii tool for Solaris
- * @see native2ascii tool for Windows
- *
- * @author Arthur van Hoff
- * @author Michael McCloskey
- * @author Xueming Shen
- * @since JDK1.0
- */
-public class OrderedProperties extends LinkedHashMap