Browse Source

HttpEncoder StreamUtils Preconditions

MaxKey 3 years ago
parent
commit
6caa74b0f9

+ 7 - 6
maxkey-common/src/main/java/org/maxkey/util/HttpEncoder.java

@@ -35,16 +35,17 @@ public abstract class HttpEncoder {
         ENCODING_RULES = Collections.unmodifiableMap(rules);
     }
 
-    public static String encode(String plain) throws Exception {
-        String encoded;
+    public static String encode(String plain) {
+        String encoded = null;
         try {
             encoded = URLEncoder.encode(plain, CHARSET);
+            for (Map.Entry<String, String> rule : ENCODING_RULES.entrySet()) {
+                encoded = applyRule(encoded, rule.getKey(), rule.getValue());
+            }
         } catch (UnsupportedEncodingException uee) {
-            throw new Exception("Charset not found while encoding string: " + CHARSET, uee);
-        }
-        for (Map.Entry<String, String> rule : ENCODING_RULES.entrySet()) {
-            encoded = applyRule(encoded, rule.getKey(), rule.getValue());
+        	uee.printStackTrace();
         }
+        
         return encoded;
     }
 

+ 93 - 0
maxkey-common/src/main/java/org/maxkey/util/Preconditions.java

@@ -0,0 +1,93 @@
+/*
+ * Copyright [2022] [MaxKey of copyright http://www.maxkey.top]
+ * 
+ * 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 org.maxkey.util;
+
+
+import java.util.Locale;
+import java.util.regex.Pattern;
+
+import org.maxkey.client.oauth.model.OAuthConstants;
+
+/**
+ * Utils for checking preconditions and invariants
+ */
+public abstract class Preconditions {
+
+    private static final String DEFAULT_MESSAGE = "Received an invalid parameter";
+
+    // scheme = alpha *( alpha | digit | "+" | "-" | "." )
+    private static final String URL_REGEXP = "^[a-zA-Z][a-zA-Z0-9+.-]*://\\S+";
+
+    /**
+     * Checks that an object is not null.
+     *
+     * @param object any object
+     * @param errorMsg error message
+     *
+     * @throws IllegalArgumentException if the object is null
+     */
+    public static void checkNotNull(Object object, String errorMsg) {
+        check(object != null, errorMsg);
+    }
+
+    /**
+     * Checks that a string is not null or empty
+     *
+     * @param string any string
+     * @param errorMsg error message
+     *
+     * @throws IllegalArgumentException if the string is null or empty
+     */
+    public static void checkEmptyString(String string, String errorMsg) {
+        check(string != null && !string.trim().isEmpty(), errorMsg);
+    }
+
+    /**
+     * Checks that a URL is valid
+     *
+     * @param url any string
+     * @param errorMsg error message
+     */
+    public static void checkValidUrl(String url, String errorMsg) {
+        checkEmptyString(url, errorMsg);
+        check(isUrl(url), errorMsg);
+    }
+
+    /**
+     * Checks that a URL is a valid OAuth callback
+     *
+     * @param url any string
+     * @param errorMsg error message
+     */
+    public static void checkValidOAuthCallback(String url, String errorMsg) {
+        checkEmptyString(url, errorMsg);
+        if (url.toLowerCase(Locale.getDefault()).compareToIgnoreCase(OAuthConstants.OUT_OF_BAND) != 0) {
+            check(isUrl(url), errorMsg);
+        }
+    }
+
+    private static boolean isUrl(String url) {
+        return Pattern.compile(URL_REGEXP).matcher(url).matches();
+    }
+
+    private static void check(boolean requirements, String error) {
+        if (!requirements) {
+            throw new IllegalArgumentException(error == null || error.trim().length() <= 0 ? DEFAULT_MESSAGE : error);
+        }
+    }
+
+}

+ 65 - 0
maxkey-common/src/main/java/org/maxkey/util/StreamUtils.java

@@ -0,0 +1,65 @@
+/*
+ * Copyright [2022] [MaxKey of copyright http://www.maxkey.top]
+ * 
+ * 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 org.maxkey.util;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.Reader;
+import java.util.zip.GZIPInputStream;
+
+/**
+ * Utils to deal with Streams.
+ */
+public abstract class StreamUtils {
+
+    /**
+     * Returns the stream contents as an UTF-8 encoded string
+     *
+     * @param is input stream
+     * @return string contents
+     * @throws java.io.IOException in any. SocketTimeout in example
+     */
+    public static String getStreamContents(InputStream is) throws IOException {
+        Preconditions.checkNotNull(is, "Cannot get String from a null object");
+        final char[] buffer = new char[0x10000];
+        final StringBuilder out = new StringBuilder();
+        try (Reader in = new InputStreamReader(is, "UTF-8")) {
+            int read;
+            do {
+                read = in.read(buffer, 0, buffer.length);
+                if (read > 0) {
+                    out.append(buffer, 0, read);
+                }
+            } while (read >= 0);
+        }
+        return out.toString();
+    }
+
+    /**
+     * Return String content from a gzip stream
+     *
+     * @param is input stream
+     * @return string contents
+     * @throws java.io.IOException in any. SocketTimeout in example
+     */
+    public static String getGzipStreamContents(InputStream is) throws IOException {
+        Preconditions.checkNotNull(is, "Cannot get String from a null object");
+        final GZIPInputStream gis = new GZIPInputStream(is);
+        return getStreamContents(gis);
+    }
+}

+ 3 - 3
maxkey-webs/maxkey-web-maxkey/src/main/java/org/maxkey/MaxKeyApplication.java

@@ -54,9 +54,9 @@ public class MaxKeyApplication extends SpringBootServletInitializer {
         } catch (ServletException e) {
             _logger.error("ServletException", e);
         }
-        _logger.info("MaxKey at " + new DateTime());
-        _logger.info("MaxKey Server Port "
-                +   applicationContext.getBean(ApplicationConfig.class).getPort());
+        _logger.info("MaxKey at {}" , new DateTime());
+        _logger.info("MaxKey Server Port {}"
+        		,applicationContext.getBean(ApplicationConfig.class).getPort());
         _logger.info("MaxKey started.");
     }
 

+ 7 - 4
maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/MaxKeyMgtApplication.java

@@ -61,16 +61,19 @@ public class MaxKeyMgtApplication extends SpringBootServletInitializer {
 	public static void main(String[] args) {
 	    _logger.info("Start MaxKeyMgtApplication ...");
 
-		ConfigurableApplicationContext  applicationContext =SpringApplication.run(MaxKeyMgtApplication.class, args);
-		InitializeContext initWebContext=new InitializeContext(applicationContext);
+		ConfigurableApplicationContext  applicationContext = 
+				SpringApplication.run(MaxKeyMgtApplication.class, args);
+		InitializeContext initWebContext = 
+				new InitializeContext(applicationContext);
 		
 		try {
 			initWebContext.init(null);
 		} catch (ServletException e) {
 			_logger.error("Exception ",e);
 		}
-		_logger.info("MaxKeyMgt at "+new DateTime());
-		_logger.info("MaxKeyMgt Server Port "+applicationContext.getBean(ApplicationConfig.class).getPort());
+		_logger.info("MaxKeyMgt at {}" , new DateTime());
+		_logger.info("MaxKeyMgt Server Port {}"
+				,applicationContext.getBean(ApplicationConfig.class).getPort());
 		_logger.info("MaxKeyMgt started.");
 		
 	}