You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@guacamole.apache.org by mj...@apache.org on 2017/10/27 17:52:00 UTC

[22/25] incubator-guacamole-client git commit: GUACAMOLE-362: Move PrivateKeyGuacamoleProperty into CAS extension and use ByteArrayOutputStream for reading thefile.

GUACAMOLE-362: Move PrivateKeyGuacamoleProperty into CAS extension and use ByteArrayOutputStream for reading thefile.


Project: http://git-wip-us.apache.org/repos/asf/incubator-guacamole-client/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-guacamole-client/commit/b968e073
Tree: http://git-wip-us.apache.org/repos/asf/incubator-guacamole-client/tree/b968e073
Diff: http://git-wip-us.apache.org/repos/asf/incubator-guacamole-client/diff/b968e073

Branch: refs/heads/master
Commit: b968e073c26d2bcfeeb6ce8a813f201136e1cad0
Parents: c92d2e3
Author: Nick Couchman <vn...@apache.org>
Authored: Fri Oct 27 12:57:15 2017 -0400
Committer: Nick Couchman <vn...@apache.org>
Committed: Fri Oct 27 13:06:07 2017 -0400

----------------------------------------------------------------------
 .../auth/cas/conf/CASGuacamoleProperties.java   |  1 -
 .../cas/conf/PrivateKeyGuacamoleProperty.java   | 90 ++++++++++++++++++
 .../properties/PrivateKeyGuacamoleProperty.java | 96 --------------------
 3 files changed, 90 insertions(+), 97 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-guacamole-client/blob/b968e073/extensions/guacamole-auth-cas/src/main/java/org/apache/guacamole/auth/cas/conf/CASGuacamoleProperties.java
----------------------------------------------------------------------
diff --git a/extensions/guacamole-auth-cas/src/main/java/org/apache/guacamole/auth/cas/conf/CASGuacamoleProperties.java b/extensions/guacamole-auth-cas/src/main/java/org/apache/guacamole/auth/cas/conf/CASGuacamoleProperties.java
index aa4a06e..dd741a3 100644
--- a/extensions/guacamole-auth-cas/src/main/java/org/apache/guacamole/auth/cas/conf/CASGuacamoleProperties.java
+++ b/extensions/guacamole-auth-cas/src/main/java/org/apache/guacamole/auth/cas/conf/CASGuacamoleProperties.java
@@ -19,7 +19,6 @@
 
 package org.apache.guacamole.auth.cas.conf;
 
-import org.apache.guacamole.properties.PrivateKeyGuacamoleProperty;
 import org.apache.guacamole.properties.StringGuacamoleProperty;
 
 /**

http://git-wip-us.apache.org/repos/asf/incubator-guacamole-client/blob/b968e073/extensions/guacamole-auth-cas/src/main/java/org/apache/guacamole/auth/cas/conf/PrivateKeyGuacamoleProperty.java
----------------------------------------------------------------------
diff --git a/extensions/guacamole-auth-cas/src/main/java/org/apache/guacamole/auth/cas/conf/PrivateKeyGuacamoleProperty.java b/extensions/guacamole-auth-cas/src/main/java/org/apache/guacamole/auth/cas/conf/PrivateKeyGuacamoleProperty.java
new file mode 100644
index 0000000..caa84cc
--- /dev/null
+++ b/extensions/guacamole-auth-cas/src/main/java/org/apache/guacamole/auth/cas/conf/PrivateKeyGuacamoleProperty.java
@@ -0,0 +1,90 @@
+/*
+ * 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 org.apache.guacamole.auth.cas.conf;
+
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.InputStream;
+import java.io.IOException;
+import java.lang.IllegalArgumentException;
+import java.security.InvalidKeyException;
+import java.security.KeyFactory;
+import java.security.NoSuchAlgorithmException;
+import java.security.PrivateKey;
+import java.security.spec.InvalidKeySpecException;
+import java.security.spec.KeySpec;
+import java.security.spec.PKCS8EncodedKeySpec;
+import org.apache.guacamole.properties.GuacamoleProperty;
+import org.apache.guacamole.GuacamoleServerException;
+import org.apache.guacamole.environment.Environment;
+import org.apache.guacamole.environment.LocalEnvironment;
+
+/**
+ * A GuacamoleProperty whose value is derived from a private key file.
+ */
+public abstract class PrivateKeyGuacamoleProperty implements GuacamoleProperty<PrivateKey>  {
+
+    @Override
+    public PrivateKey parseValue(String value) throws GuacamoleServerException {
+
+        if (value == null || value.isEmpty())
+            return null;
+
+        try {
+
+            // Open and read the file specified in the configuration.
+            File keyFile = new File(value);
+            FileInputStream keyStreamIn = new FileInputStream(keyFile);
+            ByteArrayOutputStream keyStreamOut = new ByteArrayOutputStream();
+            byte[] keyBuffer = new byte[1024];
+            try {
+                for (int readBytes; (readBytes = keyStreamIn.read(keyBuffer)) != -1;)
+                    keyStreamOut.write(keyBuffer, 0, readBytes);
+            }
+            catch (IOException e) {
+                throw new GuacamoleServerException("IOException while trying to read bytes from file.", e);
+            }
+
+            final byte[] keyBytes = keyStreamOut.toByteArray();
+
+            // Set up decryption infrastructure
+            KeyFactory keyFactory = KeyFactory.getInstance("RSA");
+            KeySpec keySpec = new PKCS8EncodedKeySpec(keyBytes);
+            return keyFactory.generatePrivate(keySpec);
+
+        }
+        catch (FileNotFoundException e) {
+            throw new GuacamoleServerException("Could not find the specified key file.", e);
+        }
+        catch (IOException e) {
+            throw new GuacamoleServerException("Could not read in the specified key file.", e);
+        }
+        catch (NoSuchAlgorithmException e) {
+            throw new GuacamoleServerException("RSA algorithm is not available.", e);
+        }
+        catch (InvalidKeySpecException e) {
+            throw new GuacamoleServerException("Key is not in expected PKCS8 encoding.", e);
+        }
+
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-guacamole-client/blob/b968e073/guacamole-ext/src/main/java/org/apache/guacamole/properties/PrivateKeyGuacamoleProperty.java
----------------------------------------------------------------------
diff --git a/guacamole-ext/src/main/java/org/apache/guacamole/properties/PrivateKeyGuacamoleProperty.java b/guacamole-ext/src/main/java/org/apache/guacamole/properties/PrivateKeyGuacamoleProperty.java
deleted file mode 100644
index 68070f5..0000000
--- a/guacamole-ext/src/main/java/org/apache/guacamole/properties/PrivateKeyGuacamoleProperty.java
+++ /dev/null
@@ -1,96 +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 org.apache.guacamole.properties;
-
-import java.io.BufferedInputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.InputStream;
-import java.io.IOException;
-import java.lang.IllegalArgumentException;
-import java.security.InvalidKeyException;
-import java.security.KeyFactory;
-import java.security.NoSuchAlgorithmException;
-import java.security.PrivateKey;
-import java.security.spec.InvalidKeySpecException;
-import java.security.spec.KeySpec;
-import java.security.spec.PKCS8EncodedKeySpec;
-import org.apache.guacamole.GuacamoleServerException;
-import org.apache.guacamole.environment.Environment;
-import org.apache.guacamole.environment.LocalEnvironment;
-
-/**
- * A GuacamoleProperty whose value is derived from a private key file.
- */
-public abstract class PrivateKeyGuacamoleProperty implements GuacamoleProperty<PrivateKey>  {
-
-    @Override
-    public PrivateKey parseValue(String value) throws GuacamoleServerException {
-
-        if (value == null || value.isEmpty())
-            return null;
-
-        try {
-
-            // Open and read the file specified in the configuration.
-            File keyFile = new File(value);
-            InputStream keyInput = new BufferedInputStream(new FileInputStream(keyFile));
-            int keyLength = (int) keyFile.length();
-            final byte[] keyBytes = new byte[keyLength];
-            int totalBytesRead = 0;
-            for(int keyRead = keyInput.read(keyBytes, 0, keyBytes.length);
-                    keyRead >= 0;
-                    keyRead = keyInput.read(keyBytes, totalBytesRead, (keyBytes.length - totalBytesRead))) {
-                totalBytesRead += keyRead;
-            }
-
-            // Zero-sized key
-            if (totalBytesRead == 0)
-                throw new GuacamoleServerException("Failed to ready key because key is empty.");
-
-            // Fewer bytes read than contained in the key
-            else if (totalBytesRead < keyLength)
-                throw new GuacamoleServerException("Unable to read the full length of the key.");
-
-            keyInput.close();
-
-            // Set up decryption infrastructure
-            KeyFactory keyFactory = KeyFactory.getInstance("RSA");
-            KeySpec keySpec = new PKCS8EncodedKeySpec(keyBytes);
-            return keyFactory.generatePrivate(keySpec);
-
-        }
-        catch (FileNotFoundException e) {
-            throw new GuacamoleServerException("Could not find the specified key file.", e);
-        }
-        catch (IOException e) {
-            throw new GuacamoleServerException("Could not read in the specified key file.", e);
-        }
-        catch (NoSuchAlgorithmException e) {
-            throw new GuacamoleServerException("RSA algorithm is not available.", e);
-        }
-        catch (InvalidKeySpecException e) {
-            throw new GuacamoleServerException("Key is not in expected PKCS8 encoding.", e);
-        }
-
-    }
-
-}