1 19 20 package com.sslexplorer.install.forms; 21 22 import java.util.ArrayList ; 23 import java.util.Calendar ; 24 import java.util.List ; 25 26 import javax.servlet.http.HttpServletRequest ; 27 28 import org.apache.commons.logging.Log; 29 import org.apache.commons.logging.LogFactory; 30 import org.apache.struts.Globals; 31 import org.apache.struts.action.ActionErrors; 32 import org.apache.struts.action.ActionMapping; 33 import org.apache.struts.action.ActionMessage; 34 35 import com.sslexplorer.core.CoreServlet; 36 import com.sslexplorer.core.UserDatabaseManager; 37 import com.sslexplorer.jdbc.JDBCUserDatabase; 38 import com.sslexplorer.properties.Property; 39 import com.sslexplorer.properties.impl.realms.RealmKey; 40 import com.sslexplorer.realms.DefaultRealm; 41 import com.sslexplorer.realms.Realm; 42 import com.sslexplorer.security.User; 43 import com.sslexplorer.security.UserDatabase; 44 import com.sslexplorer.wizard.AbstractWizardSequence; 45 import com.sslexplorer.wizard.forms.DefaultWizardForm; 46 47 48 54 public class ConfigureSuperUserForm extends DefaultWizardForm { 55 56 final static Log log = LogFactory.getLog(ConfigureSuperUserForm.class); 57 58 61 public final static String ATTR_SUPER_USER_PASSWORD = "superUserPassword"; 62 63 66 public final static String ATTR_SUPER_USER = "account"; 67 68 71 public final static String ATTR_SUPER_USER_EMAIL = "email"; 72 73 final static String DUMMY_PASSWORD = "**********"; 75 76 private String confirmSuperUserPassword; 78 private String superUserPassword; 79 private String account; 80 private String email; 81 private List <String > usernames; 82 private String databaseType; 83 private UserDatabase userDatabase; 84 85 89 public ConfigureSuperUserForm() { 90 super(true, true, "/WEB-INF/jsp/content/install/configureSuperUser.jspf", "account", false, false, "configureSuperUser", 91 "install", "installation.configureSuperUser", 3); 92 } 93 94 99 public void init(AbstractWizardSequence sequence, HttpServletRequest request) throws Exception { 100 databaseType = (String ) sequence.getAttribute(SelectUserDatabaseForm.ATTR_USER_DATABASE, JDBCUserDatabase.DATABASE_TYPE); 101 userDatabase = (UserDatabase) sequence.getAttribute(SelectUserDatabaseForm.ATTR_USER_DATABASE_INSTANCE, null); 102 103 try { 105 if(!userDatabase.isOpen()) { 106 log.info("Opening user databse"); 107 Calendar now = Calendar.getInstance(); 108 Realm realm = new DefaultRealm((String )sequence.getAttribute(SelectUserDatabaseForm.ATTR_USER_DATABASE, null), 1, UserDatabaseManager.DEFAULT_REALM_NAME, UserDatabaseManager.DEFAULT_REALM_DESCRIPTION, now, now); 109 userDatabase.open(CoreServlet.getServlet(), realm); 110 } 111 112 String bestGuess = null; 113 String actualEmail = ""; 114 String firstEmail = null; 115 boolean found = false; 116 account = Property.getProperty(new RealmKey("security.administrators", userDatabase.getRealm().getResourceId())); 117 email = ""; 118 User[] users = userDatabase.listAllUsers("*"); 119 usernames = new ArrayList <String >(); 120 if (users != null) { 121 for (int i = 0; i < users.length; i++) { 122 String un = users[i].getPrincipalName(); 123 usernames.add(un); 124 if(i == 0) { 125 firstEmail = users[i].getEmail(); 126 } 127 if(un.equals(account)) { 128 actualEmail = users[i].getEmail(); 129 found = true; 130 } 131 else if (un.toLowerCase().startsWith("admin") || un.toLowerCase().startsWith("root")) { 132 bestGuess = un; 133 actualEmail = users[i].getEmail(); 134 } 135 } 136 } 137 if(!found) { 138 if(bestGuess != null) { 139 account = bestGuess; 140 email = actualEmail; 141 } 142 else if (usernames.size() > 0) { 143 account = (String ) usernames.get(0); 144 email = firstEmail; 145 } 146 else { 147 account = ""; 148 email = ""; 149 } 150 } 151 else { 152 email = actualEmail; 153 } 154 } catch (Exception e) { 155 log.error("Failed to load user database.", e); 156 } 157 158 161 String password = (String ) sequence.getAttribute(ATTR_SUPER_USER_PASSWORD, ""); 162 if (!password.equals("")) { 163 superUserPassword = DUMMY_PASSWORD; 164 confirmSuperUserPassword = DUMMY_PASSWORD; 165 } else { 166 superUserPassword = ""; 167 confirmSuperUserPassword = ""; 168 } 169 account = (String ) sequence.getAttribute(ATTR_SUPER_USER, account); 170 email = (String ) sequence.getAttribute(ATTR_SUPER_USER_EMAIL, email); 171 } 172 173 178 public void apply(AbstractWizardSequence sequence) throws Exception { 179 String password = getSuperUserPassword(sequence); 180 sequence.putAttribute(ATTR_SUPER_USER_PASSWORD, password); 181 sequence.putAttribute(ATTR_SUPER_USER, account); 182 sequence.putAttribute(ATTR_SUPER_USER_EMAIL, email); 183 } 184 185 private String getSuperUserPassword(AbstractWizardSequence sequence) { 186 if(!getSuperUserCreationSupported()) { 187 return ""; 188 } 189 190 if (DUMMY_PASSWORD.equals(superUserPassword)) { 191 return (String ) sequence.getAttribute(ATTR_SUPER_USER_PASSWORD, ""); 192 } else { 193 return superUserPassword; 194 } 195 } 196 197 202 public void setSuperUserPassword(String superUserPassword) { 203 this.superUserPassword = superUserPassword; 204 } 205 206 211 public String getSuperUserPassword() { 212 return superUserPassword; 213 } 214 215 220 public void setConfirmSuperUserPassword(String confirmSuperUserPassword) { 221 this.confirmSuperUserPassword = confirmSuperUserPassword; 222 } 223 224 229 public String getConfirmSuperUserPassword() { 230 return confirmSuperUserPassword; 231 } 232 233 239 public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { 240 if (isCommiting() && superUserPassword != null) { 241 try { 242 if (!( superUserPassword.equals(DUMMY_PASSWORD) && confirmSuperUserPassword.equals(DUMMY_PASSWORD)) && !superUserPassword.equals(confirmSuperUserPassword)) { 244 throw new Exception ("passwordsDoNotMatch"); 245 } 246 if (account.equals("")) { 247 throw new Exception ("noSuperUserSpecified"); 248 } 249 try { 250 userDatabase.getAccount(account); 251 } catch (Exception e) { 252 log.error("Failure to getAccount", e); 253 254 if (getSuperUserCreationSupported()) { 255 if (superUserPassword.equals("")) { 256 throw new Exception ("noPassword"); 257 } 258 } 259 else { 260 throw new Exception ("superUserDoesntExist"); 261 } 262 } 263 } catch (Exception e) { 264 ActionErrors errs = new ActionErrors(); 266 errs.add(Globals.ERROR_KEY, new ActionMessage("installation.configureSuperUser.error." + e.getMessage())); 267 return errs; 268 } 269 } 270 return null; 271 } 272 273 278 public String getAccount() { 279 return account; 280 } 281 282 287 public String getEmail() { 288 return email; 289 } 290 291 296 public void setAccount(String account) { 297 this.account = account; 298 } 299 300 305 public void setEmail(String email) { 306 this.email = email; 307 } 308 309 312 public UserDatabase getUserDatabase() { 313 return userDatabase; 314 } 315 316 323 public boolean getSuperUserCreationSupported() { 324 return JDBCUserDatabase.DATABASE_TYPE.equals(databaseType); 325 } 326 } 327 | Popular Tags |