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.