1 22 23 package org.continuent.sequoia.controller.authentication; 24 25 import java.util.ArrayList ; 26 import java.util.HashMap ; 27 import java.util.Iterator ; 28 29 import org.continuent.sequoia.common.i18n.Translate; 30 import org.continuent.sequoia.common.users.AdminUser; 31 import org.continuent.sequoia.common.users.DatabaseBackendUser; 32 import org.continuent.sequoia.common.users.VirtualDatabaseUser; 33 import org.continuent.sequoia.common.xml.DatabasesXmlTags; 34 35 45 public class AuthenticationManager 46 { 47 52 53 54 private ArrayList virtualLogins; 55 56 57 private ArrayList adminUsers; 58 59 65 private HashMap realLogins; 66 67 68 private boolean transparentLogin; 69 70 73 74 77 public AuthenticationManager() 78 { 79 this(true); 80 } 81 82 87 public AuthenticationManager(boolean transparentLogin) 88 { 89 virtualLogins = new ArrayList (); 90 adminUsers = new ArrayList (); 91 realLogins = new HashMap (); 92 this.transparentLogin = transparentLogin; 93 } 94 95 98 99 107 public boolean isValidAdminUser(AdminUser user) 108 { 109 synchronized (adminUsers) 110 { 111 return adminUsers.contains(user); 112 } 113 } 114 115 122 public boolean isValidVirtualUser(VirtualDatabaseUser vUser) 123 { 124 synchronized (virtualLogins) 125 { 126 return virtualLogins.contains(vUser); 127 } 128 } 129 130 137 public boolean isValidVirtualLogin(String vLogin) 138 { 139 Iterator iter = virtualLogins.iterator(); 140 VirtualDatabaseUser u; 141 while (iter.hasNext()) 142 { 143 u = (VirtualDatabaseUser) iter.next(); 144 if (u.getLogin().equals(vLogin)) 145 { 146 return true; 147 } 148 } 149 return false; 150 } 151 152 157 public boolean isTransparentLoginEnabled() 158 { 159 return transparentLogin; 160 } 161 162 168 public void addAdminUser(AdminUser user) 169 { 170 synchronized (adminUsers) 171 { 172 adminUsers.add(user); 173 } 174 } 175 176 184 public void addRealUser(String vLogin, DatabaseBackendUser rUser) 185 throws AuthenticationManagerException 186 { 187 HashMap list = (HashMap ) realLogins.get(vLogin); 188 if (list == null) 189 { 190 list = new HashMap (); 191 list.put(rUser.getBackendName(), rUser); 192 realLogins.put(vLogin, list); 193 } 194 else 195 { 196 DatabaseBackendUser u = (DatabaseBackendUser) list.get(rUser 197 .getBackendName()); 198 if (u != null) 199 throw new AuthenticationManagerException( 200 Translate.get("authentication.failed.add.user.already.exists", 201 new String []{rUser.getLogin(), vLogin, rUser.getBackendName(), 202 u.getLogin()})); 203 list.put(rUser.getBackendName(), rUser); 204 } 205 } 206 207 212 public void addVirtualUser(VirtualDatabaseUser vUser) 213 { 214 synchronized (virtualLogins) 215 { 216 virtualLogins.add(vUser); 217 } 218 } 219 220 226 public boolean removeAdminUser(AdminUser user) 227 { 228 synchronized (adminUsers) 229 { 230 return adminUsers.remove(user); 231 } 232 } 233 234 239 public void removeVirtualUser(VirtualDatabaseUser vUser) 240 { 241 synchronized (virtualLogins) 242 { 243 virtualLogins.remove(vUser); 244 } 245 } 246 247 257 public boolean userIsAuthorizedToConnectFrom(VirtualDatabaseUser user, 258 String clientIpAddress) 259 { 260 synchronized (virtualLogins) 261 { 262 int vUserIdx = virtualLogins.indexOf(user); 263 if (vUserIdx == -1) 264 return false; 265 VirtualDatabaseUser vLogin = (VirtualDatabaseUser) virtualLogins 266 .get(vUserIdx); 267 AccessControl acl = vLogin.getAccessControl(); 268 if (acl == null) 269 return true; 270 return acl.acceptConnectionFrom(clientIpAddress); 271 } 272 } 273 274 277 public ArrayList getAdminUsers() 278 { 279 return adminUsers; 280 } 281 282 291 public DatabaseBackendUser getDatabaseBackendUser(String vLogin, 292 String backendName) 293 { 294 Object list = realLogins.get(vLogin); 295 if (list == null) 296 return null; 297 else 298 return (DatabaseBackendUser) ((HashMap ) list).get(backendName); 299 } 300 301 304 public HashMap getRealLogins() 305 { 306 return realLogins; 307 } 308 309 312 public ArrayList getVirtualLogins() 313 { 314 return virtualLogins; 315 } 316 317 323 public String getVirtualPassword(String vLogin) 324 { 325 Iterator iter = virtualLogins.iterator(); 326 VirtualDatabaseUser u; 327 while (iter.hasNext()) 328 { 329 u = (VirtualDatabaseUser) iter.next(); 330 if (u.getLogin().equals(vLogin)) 331 { 332 return u.getPassword(); 333 } 334 } 335 return null; 336 } 337 338 341 342 347 public String getXml() 348 { 349 StringBuffer info = new StringBuffer (); 350 info.append("<" + DatabasesXmlTags.ELT_AuthenticationManager + ">"); 351 for (int i = 0; i < adminUsers.size(); i++) 352 { 353 AdminUser adminUser = (AdminUser) adminUsers.get(i); 354 info.append(adminUser.getXml()); 355 } 356 357 for (int i = 0; i < virtualLogins.size(); i++) 358 { 359 VirtualDatabaseUser vu = (VirtualDatabaseUser) virtualLogins.get(i); 360 info.append(vu.getXml()); 361 } 362 info.append("</" + DatabasesXmlTags.ELT_AuthenticationManager + ">"); 363 return info.toString(); 364 } 365 366 } 367 | Popular Tags |