Skip to main content

This CGIT instance is deprecated, and repositories have been moved to Gitlab or Github. See the repository descriptions for specific locations.

summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/util/SetCookie2Validator.java')
-rw-r--r--bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/util/SetCookie2Validator.java629
1 files changed, 629 insertions, 0 deletions
diff --git a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/util/SetCookie2Validator.java b/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/util/SetCookie2Validator.java
new file mode 100644
index 000000000..5982e3a85
--- /dev/null
+++ b/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/util/SetCookie2Validator.java
@@ -0,0 +1,629 @@
+/*******************************************************************************
+ * Copyright (c) 2002-2005 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM - Initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.wsi.internal.core.util;
+
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.Vector;
+
+/**
+ * This class checks the cookies conform to RFC2965.
+ *
+ * @author Baltak
+ */
+public class SetCookie2Validator
+{
+
+ private Vector commentVect = new Vector();
+ private Vector commentURLVect = new Vector();
+ private Vector domainVect = new Vector();
+ private Vector max_AgeVect = new Vector();
+ private Vector pathVect = new Vector();
+ private Vector portVect = new Vector();
+ private Vector versionVect = new Vector();
+
+ private boolean path = false;
+
+ /**
+ * Method resetFlags.
+ */
+ private void resetPath()
+ {
+ path = false;
+ }
+
+ /**
+ * Check if the string satisfy the "Set-Cookie2" header value.
+ * @param str String
+ * @return boolean
+ */
+ public boolean isSetCookie2(String str)
+ {
+
+ try
+ {
+ int index = 0;
+ int newIndex = 0;
+ while (true)
+ {
+ newIndex = getLastCookie(str, index);
+ if (index == newIndex)
+ return false;
+ // skip spaces
+ index = newIndex;
+ index = skipSpaces(str, index);
+ if (index == str.length())
+ {
+ return true;
+ }
+ else
+ {
+ if (str.charAt(index) != ',')
+ return false;
+ index++;
+ // skip spaces
+ index = skipSpaces(str, index);
+ }
+
+ }
+ }
+ catch (Throwable th)
+ {
+ return false;
+ }
+
+ }
+
+ /**
+ * Method getLastCookie.
+ * @param str
+ * @param startIndex
+ * @return int
+ */
+ private int getLastCookie(String str, int startIndex)
+ {
+
+ resetPath();
+
+ int index = startIndex;
+ // find token
+ int newIndex = BasicRules.getLastToken(str, index);
+ if (index == newIndex)
+ return startIndex;
+
+ index = newIndex;
+ if (index == str.length())
+ return startIndex;
+
+ // if not '=' - error
+ if (str.charAt(index) != '=')
+ return startIndex;
+
+ index++;
+ if (index == str.length())
+ return startIndex;
+
+ // get value
+ newIndex = getLastValue(str, index);
+ if (index == newIndex)
+ return startIndex;
+
+ while (true)
+ {
+ index = newIndex;
+ if (index == str.length())
+ return index;
+
+ if (str.charAt(index) != ';')
+ return index;
+ index++;
+ // skip spaces
+ index = skipSpaces(str, index);
+
+ if (index == str.length())
+ return startIndex;
+ newIndex = getLastSetCookieAv(str, index);
+ if (index == newIndex)
+ return startIndex;
+ }
+ }
+
+ /**
+ * Method getLastValue.
+ * @param str
+ * @param startIndex
+ * @return int
+ */
+ private int getLastValue(String str, int startIndex)
+ {
+
+ int index = BasicRules.getLastToken(str, startIndex);
+ if (index != startIndex)
+ return index;
+ index = BasicRules.getLastQuotedString(str, startIndex);
+ if (index != startIndex)
+ return index;
+
+ return startIndex;
+ }
+
+ /**
+ * Method getLastSetCookieAv.
+ * @param str
+ * @param startIndex
+ * @return int
+ */
+ private int getLastSetCookieAv(String str, int startIndex)
+ {
+
+ int index = startIndex;
+ int newIndex = 0;
+
+ if (str.startsWith("Comment=", index))
+ {
+ index += "Comment=".length();
+ newIndex = getLastValue(str, index);
+ if (index == newIndex)
+ return startIndex;
+ // debug ->
+ String qqq = getValue(str, index, newIndex);
+ commentVect.add(qqq);
+ // debug <-
+ return newIndex;
+ }
+ else if (str.startsWith("CommentURL=", index))
+ {
+ index += "CommentURL=".length();
+
+ if (str.charAt(index) != '\"')
+ return startIndex;
+
+ newIndex = str.indexOf('\"', index + 1);
+ if (newIndex == -1)
+ return startIndex;
+ try
+ {
+ new URL(str.substring(index + 1, newIndex));
+ }
+ catch (MalformedURLException mue)
+ {
+ return startIndex;
+ }
+ // debug ->
+ String qqq = getValue(str, index + 1, newIndex);
+ commentURLVect.add(qqq);
+ // debug <-
+ newIndex++;
+ return newIndex;
+ }
+ else if (str.startsWith("Discard", index))
+ {
+ return startIndex + "Discard".length();
+ }
+ else if (str.startsWith("Domain=", index))
+ {
+ index += "Domain=".length();
+
+ newIndex = getLastValue(str, index);
+ if (index == newIndex)
+ return startIndex;
+
+ // debug ->
+ String qqq = getValue(str, index, newIndex);
+ domainVect.add(qqq);
+ // debug <-
+ return newIndex;
+ }
+ else if (str.startsWith("Max-Age=", index))
+ {
+ index += "Max-Age=".length();
+
+ newIndex = getLastValue(str, index);
+ if (index == newIndex)
+ return startIndex;
+
+ String qqq = getValue(str, index, newIndex);
+ try
+ {
+ Integer.parseInt(qqq);
+ }
+ catch (NumberFormatException nfe)
+ {
+ return startIndex;
+ }
+ // debug ->
+ max_AgeVect.add(qqq);
+ // debug <-
+ return newIndex;
+ }
+ else if (str.startsWith("Path=", index))
+ {
+ index += "Path=".length();
+
+ newIndex = getLastValue(str, index);
+ if (index == newIndex)
+ return startIndex;
+
+ String qqq = getValue(str, index, newIndex);
+ if (path == false)
+ pathVect.add(qqq);
+ path = true;
+ return newIndex;
+ }
+ else if (str.startsWith("Port", index))
+ {
+ index += "Port".length();
+ if (str.charAt(index) != '=')
+ return index;
+
+ index++;
+ if (str.charAt(index) != '\"')
+ return startIndex;
+
+ index++;
+ newIndex = getLastPortList(str, index);
+ if (index == newIndex)
+ return startIndex;
+
+ // debug ->
+ String qqq = getValue(str, index, newIndex);
+ portVect.add(qqq);
+ // debug <-
+
+ index = newIndex;
+ if (str.charAt(index) != '\"')
+ return startIndex;
+ index++;
+ return index;
+
+ }
+ else if (str.startsWith("Secure", index))
+ {
+ return startIndex + "Secure".length();
+ }
+ else if (str.startsWith("Version=", index))
+ {
+ index += "Version=".length();
+
+ newIndex = getLastDIGIT(str, index);
+ if (index == newIndex)
+ return startIndex;
+
+ // debug ->
+ String qqq = getValue(str, index, newIndex);
+ versionVect.add(qqq);
+ // debug <-
+ return newIndex;
+ }
+ else
+ {
+ return startIndex;
+ }
+ }
+
+ /**
+ * Method getLastPortList.
+ * @param str
+ * @param startIndex
+ * @return int
+ */
+ private int getLastPortList(String str, int startIndex)
+ {
+ int index = startIndex;
+ int newIndex = 0;
+
+ while (true)
+ {
+ newIndex = getLastDIGIT(str, index);
+ if (index == newIndex)
+ return startIndex;
+
+ index = newIndex;
+ if (str.charAt(index) != ',')
+ return index;
+ index++;
+ }
+ }
+
+ /**
+ * Method getLastDIGIT.
+ * @param str
+ * @param startIndex
+ * @return int
+ */
+ private int getLastDIGIT(String str, int startIndex)
+ {
+ int index = startIndex;
+ for (; index < str.length(); index++)
+ {
+ if (!BasicRules.isDIGIT(str.charAt(index)))
+ return index;
+ }
+ return index;
+ }
+
+ /**
+ * Check if the string satisfy the "Cookie" header value.
+ * @param str String
+ * @return boolean
+ */
+ public boolean isCookie(String str)
+ {
+ int index = 0;
+ int newIndex = 0;
+
+ try
+ {
+ newIndex = getLastVersion(str, index);
+ if (index == newIndex)
+ return false;
+
+ index = newIndex;
+ index = skipSpaces(str, index);
+ if (str.charAt(index) != ';' && str.charAt(index) != ',')
+ return false;
+
+ index++;
+ index = skipSpaces(str, index);
+
+ while (true)
+ {
+ newIndex = getLastCookiesValue(str, index);
+ if (index == newIndex)
+ return false;
+
+ index = newIndex;
+ if (index == str.length())
+ return true;
+
+ if (str.charAt(index) != ';' && str.charAt(index) != ',')
+ return false;
+ index++;
+ index = skipSpaces(str, index);
+ }
+ }
+ catch (Throwable th)
+ {
+ return false;
+ }
+ }
+
+ /**
+ * Method getLastVersion.
+ * @param str
+ * @param startIndex
+ * @return int
+ */
+ private int getLastVersion(String str, int startIndex)
+ {
+ int index = startIndex;
+ int newIndex = 0;
+ if (!str.startsWith("$Version="))
+ return startIndex;
+ index += "$Version=".length();
+ newIndex = getLastValue(str, index);
+ if (index == newIndex)
+ return startIndex;
+
+ return newIndex;
+ }
+
+ /**
+ * Method getLastCookiesValue.
+ * @param str
+ * @param startIndex
+ * @return int
+ */
+ private int getLastCookiesValue(String str, int startIndex)
+ {
+ int index = startIndex;
+ int newIndex = 0;
+ int oldIndex = 0;
+
+ // find token
+ newIndex = BasicRules.getLastToken(str, index);
+ if (index == newIndex)
+ return startIndex;
+
+ index = newIndex;
+ if (index == str.length())
+ return startIndex;
+
+ // if not '=' - error
+ if (str.charAt(index) != '=')
+ return startIndex;
+
+ index++;
+ if (index == str.length())
+ return startIndex;
+
+ // get value
+ newIndex = getLastValue(str, index);
+ if (index == newIndex)
+ return startIndex;
+
+ index = newIndex;
+ if (index == str.length())
+ return index;
+
+ if (str.charAt(index) != ';')
+ return index;
+
+ // process [";" path] [";" domain] [";" port]
+ oldIndex = index;
+ index++;
+ if (index == str.length())
+ return startIndex;
+
+ index = skipSpaces(str, index);
+ if (index == str.length())
+ return startIndex;
+
+ // process path
+ newIndex = getLastPath(str, index);
+ if (index != newIndex)
+ {
+ index = newIndex;
+ if (index == str.length())
+ return index;
+
+ if (str.charAt(index) != ';')
+ return index;
+
+ oldIndex = index;
+ index++;
+ if (index == str.length())
+ return startIndex;
+
+ index = skipSpaces(str, index);
+ if (index == str.length())
+ return startIndex;
+
+ }
+
+ // process domain
+ newIndex = getLastDomain(str, index);
+ if (index != newIndex)
+ {
+ index = newIndex;
+ if (index == str.length())
+ return index;
+
+ if (str.charAt(index) != ';')
+ return index;
+
+ oldIndex = index;
+ index++;
+ if (index == str.length())
+ return startIndex;
+
+ index = skipSpaces(str, index);
+ if (index == str.length())
+ return startIndex;
+
+ }
+
+ // process port
+ newIndex = getLastPort(str, index);
+ if (index != newIndex)
+ return newIndex;
+ else
+ return oldIndex;
+ }
+
+ /**
+ * Method getLastPath.
+ * @param str
+ * @param startIndex
+ * @return int
+ */
+ private int getLastPath(String str, int startIndex)
+ {
+ int index = startIndex;
+ int newIndex = 0;
+
+ if (!str.startsWith("$Path=", index))
+ return startIndex;
+ index += "$Path=".length();
+ newIndex = getLastValue(str, index);
+ if (index == newIndex)
+ return startIndex;
+
+ return newIndex;
+ }
+
+ /**
+ * Method getLastDomain.
+ * @param str
+ * @param startIndex
+ * @return int
+ */
+ private int getLastDomain(String str, int startIndex)
+ {
+ int index = startIndex;
+ int newIndex = 0;
+
+ if (!str.startsWith("$Domain=", index))
+ return startIndex;
+ index += "$Domain=".length();
+ newIndex = getLastValue(str, index);
+ if (index == newIndex)
+ return startIndex;
+
+ return newIndex;
+ }
+
+ /**
+ * Method getLastPort.
+ * @param str
+ * @param startIndex
+ * @return int
+ */
+ private int getLastPort(String str, int startIndex)
+ {
+ int index = startIndex;
+ int newIndex = 0;
+
+ if (!str.startsWith("$Port", index))
+ return startIndex;
+
+ index += "$Port".length();
+ if (str.charAt(index) != '=')
+ return index;
+
+ index++;
+ if (str.charAt(index) != '\"')
+ return startIndex;
+
+ index++;
+ newIndex = getLastPortList(str, index);
+ if (index == newIndex)
+ return startIndex;
+
+ index = newIndex;
+ if (str.charAt(index) != '\"')
+ return startIndex;
+ index++;
+ return index;
+ }
+
+ /**
+ * Method skipSpaces.
+ * @param str
+ * @param index
+ * @return int
+ */
+ private int skipSpaces(String str, int index)
+ {
+ for (; index < str.length(); index++)
+ if (!BasicRules.isSP(str.charAt(index)))
+ break;
+ return index;
+ }
+
+ /**
+ * Method getValue.
+ * @param str
+ * @param beg
+ * @param end
+ * @return String
+ */
+ private String getValue(String str, int beg, int end)
+ {
+ String qqq = null;
+ if (str.charAt(beg) == '\"')
+ qqq = str.substring(beg + 1, end - 1);
+ else
+ qqq = str.substring(beg, end);
+ return qqq;
+ }
+
+}

Back to the top