001/**
002 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
003 *
004 * Copyright (c) 2005 Sun Microsystems Inc. All Rights Reserved
005 *
006 * The contents of this file are subject to the terms
007 * of the Common Development and Distribution License
008 * (the License). You may not use this file except in
009 * compliance with the License.
010 *
011 * You can obtain a copy of the License at
012 * https://opensso.dev.java.net/public/CDDLv1.0.html or
013 * opensso/legal/CDDLv1.0.txt
014 * See the License for the specific language governing
015 * permission and limitations under the License.
016 *
017 * When distributing Covered Code, include this CDDL
018 * Header Notice in each file and include the License file
019 * at opensso/legal/CDDLv1.0.txt.
020 * If applicable, add the following below the CDDL Header,
021 * with the fields enclosed by brackets [] replaced by
022 * your own identifying information:
023 * "Portions Copyrighted [year] [name of copyright owner]"
024 *
025 * $Id: DomainValidator.java,v 1.4 2008/06/25 05:41:48 qcheng Exp $
026 *
027 */
028
029/**
030 * Portions Copyrighted [2011] [ForgeRock AS]
031 */
032package com.iplanet.ums.validation;
033
034import java.util.StringTokenizer;
035import java.util.Vector;
036
037/**
038 * Validates domain
039 *
040 * @supported.all.api
041 */
042public class DomainValidator implements IValidator {
043
044    /**
045     * Determines if the value is a valid domain string
046     * 
047     * @param value
048     *            string value to validate
049     * @param rule
050     *            not used by this method
051     * @return true if the value represents a valid domain string
052     */
053    public boolean validate(String value, String rule) {
054        return validate(value);
055    }
056
057    /**
058     * Determines if the domain is valid
059     * 
060     * @param domain
061     *            domain string to test
062     * @return true if the domain string is valid.
063     */
064    public boolean validate(String domain) {
065        StringTokenizer tok;
066
067        tok = new StringTokenizer(domain, ".");
068        if (tok.countTokens() <= 1) {
069            return false;
070        }
071
072        while (tok.hasMoreTokens()) {
073            if (!isValidDomainPart(tok.nextToken())) {
074                return false;
075            }
076        }
077
078        return true;
079    }
080
081    /**
082     * Check if the given domain part is valid
083     */
084    private boolean isValidDomainPart(String dp) {
085        char ch;
086        Character character;
087
088        StringBuilder buf = new StringBuilder(dp);
089
090        // subdomain can not start or end with a hyphen
091        if (buf.charAt(0) == '-' || buf.charAt(buf.length() - 1) == '-') {
092            return false;
093        }
094
095        // subdomain or "label" can not be longer than 63 chars
096        if (buf.length() > 63) {
097            return false;
098        }
099
100        for (int i = 0; i < buf.length(); i++) {
101
102            ch = buf.charAt(i);
103            character = new Character(ch);
104
105            if (!validDomainChars.contains(character.toString())) {
106                return false;
107            }
108        }
109        return true;
110    }
111
112    private static Vector validDomainChars = new Vector();
113
114    static {
115        validDomainChars.addElement("a");
116        validDomainChars.addElement("b");
117        validDomainChars.addElement("c");
118        validDomainChars.addElement("d");
119        validDomainChars.addElement("e");
120        validDomainChars.addElement("f");
121        validDomainChars.addElement("g");
122        validDomainChars.addElement("h");
123        validDomainChars.addElement("i");
124        validDomainChars.addElement("j");
125        validDomainChars.addElement("k");
126        validDomainChars.addElement("l");
127        validDomainChars.addElement("m");
128        validDomainChars.addElement("n");
129        validDomainChars.addElement("o");
130        validDomainChars.addElement("p");
131        validDomainChars.addElement("q");
132        validDomainChars.addElement("r");
133        validDomainChars.addElement("s");
134        validDomainChars.addElement("t");
135        validDomainChars.addElement("u");
136        validDomainChars.addElement("v");
137        validDomainChars.addElement("w");
138        validDomainChars.addElement("x");
139        validDomainChars.addElement("y");
140        validDomainChars.addElement("z");
141        validDomainChars.addElement("A");
142        validDomainChars.addElement("B");
143        validDomainChars.addElement("C");
144        validDomainChars.addElement("D");
145        validDomainChars.addElement("E");
146        validDomainChars.addElement("F");
147        validDomainChars.addElement("G");
148        validDomainChars.addElement("H");
149        validDomainChars.addElement("I");
150        validDomainChars.addElement("J");
151        validDomainChars.addElement("K");
152        validDomainChars.addElement("L");
153        validDomainChars.addElement("M");
154        validDomainChars.addElement("N");
155        validDomainChars.addElement("O");
156        validDomainChars.addElement("P");
157        validDomainChars.addElement("Q");
158        validDomainChars.addElement("R");
159        validDomainChars.addElement("S");
160        validDomainChars.addElement("T");
161        validDomainChars.addElement("U");
162        validDomainChars.addElement("V");
163        validDomainChars.addElement("W");
164        validDomainChars.addElement("X");
165        validDomainChars.addElement("Y");
166        validDomainChars.addElement("Z");
167        validDomainChars.addElement("-");
168        validDomainChars.addElement("_");
169        validDomainChars.addElement("0");
170        validDomainChars.addElement("1");
171        validDomainChars.addElement("2");
172        validDomainChars.addElement("3");
173        validDomainChars.addElement("4");
174        validDomainChars.addElement("5");
175        validDomainChars.addElement("6");
176        validDomainChars.addElement("7");
177        validDomainChars.addElement("8");
178        validDomainChars.addElement("9");
179    }
180
181}




























































Copyright © 2010-2017, ForgeRock All Rights Reserved.