package com.idega.core.accesscontrol.business; import java.util.StringTokenizer; import com.idega.business.IBORuntimeException; import com.idega.core.accesscontrol.data.LoginTable; import com.idega.core.accesscontrol.data.LoginTableHome; import com.idega.data.IDOException; import com.idega.data.IDOLookup; import com.idega.data.IDOLookupException; /** * Title: LoginCreator Description: Copyright: Copyright (c) 2000-2001 idega.is * All Rights Reserved Company: idega * * @author <a href="mailto:aron@idega.is">Aron Birkir</a> * @version 1.1 */ public class LoginCreator { public static String alpha = "aAáÁbBcCdDðÐeEéÉfFgGhHiIíÍjJkKlLmMnNoOóÓpPqQrRsStTuUúÚvVwWxXyYýÝzZþÞæÆöÖ"; public static String beta = "aaaabbccddddeeeeffgghhiiiijjkkllmmnnooooppqqrrssttuuuuvvwwxxyyyyzzttaaoo"; public static String dega = "aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ0123456789"; public static String consonants = "bBcCdDfFgGhHjJkKlLmMnNpPqQrRsStTvVwWxXzZþÞ"; public static String vowels = "aAáÁeEéÉiIíÍoOóÓuUúÚyYýÝæÆöÖ"; private static final int ONE = 1, TWO = 2, THREE = 3; public LoginCreator() { } public static String createLogin(String name) { StringTokenizer st = new StringTokenizer(name); int TYPE = 0; int tokenCount = st.countTokens(); int firstSize = 0; int thirdIndex = 0; String first = null, second = null, third = null; if (st.hasMoreTokens()) { first = st.nextToken(); firstSize = first.length(); } if (st.hasMoreTokens()) { second = st.nextToken(); } if (st.hasMoreTokens()) { third = st.nextToken(); } if (tokenCount == 2) { third = second; } StringBuffer sb = new StringBuffer(); int index = -1; if (firstSize <= 7) { TYPE = ONE; for (int i = 0; i < first.length(); i++) { index = alpha.indexOf(String.valueOf(first.charAt(i))); if (index >= 0) { sb.append(beta.charAt(index)); } } if (third != null) { index = alpha.indexOf(String.valueOf(third.charAt(thirdIndex))); if (index >= 0) { sb.append(beta.charAt(index)); } } } else if (firstSize > 7 && tokenCount == 2) { TYPE = TWO; for (int i = 0; i < 5; i++) { index = alpha.indexOf(String.valueOf(first.charAt(i))); if (index >= 0) { sb.append(beta.charAt(index)); } } if (second != null) { index = alpha.indexOf(String.valueOf(third.charAt(thirdIndex))); if (index >= 0) { sb.append(beta.charAt(index)); } } } else if (tokenCount >= 3) { TYPE = THREE; index = alpha.indexOf(String.valueOf(first.charAt(0))); if (index != -1) { sb.append(beta.charAt(index)); } index = alpha.indexOf(String.valueOf(second.charAt(0))); if (index != -1) { sb.append(beta.charAt(index)); } index = alpha.indexOf(String.valueOf(third.charAt(thirdIndex))); if (index != -1) { sb.append(beta.charAt(index)); } } while (checkLoginExistence(sb.toString())) { switch (TYPE) { case ONE: case TWO: case THREE: if (thirdIndex < third.length()) { sb.append(third.charAt(thirdIndex++)); } break; } // System.err.println(sb.toString()); } // System.err.println(sb.toString()); return sb.toString(); } public static boolean checkLoginExistence(String login) { try { LoginTableHome home = (LoginTableHome) IDOLookup.getHome(LoginTable.class); return home.getNumberOfLogins(login) > 0; } catch (IDOException ex) { ex.printStackTrace(); return false; } catch (IDOLookupException ile) { throw new IBORuntimeException(ile); } } public static String createPasswd(int NumberOfCharacters) { StringBuffer passwd = new StringBuffer(NumberOfCharacters); int len = dega.length(); for (int i = 0; i < NumberOfCharacters; i++) { int num = (int) (Math.random() * len); passwd.append(dega.charAt(num)); } return passwd.toString(); } }