/** * Loads a database of users from an XML file. * * @param in - the InputStream containing the XML user file. */ public void readUsers(InputStream in) { try { DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = dbf.newDocumentBuilder(); Document doc = db.parse(in); Element rootElement = doc.getDocumentElement(); NodeList nodes = rootElement.getChildNodes(); HashMap userAssigns = new HashMap(); HashMap roleAssigns = new HashMap(); boolean isClearTextPassword = true; for (int i = 0; i < nodes.getLength(); i++) { Node item = nodes.item(i); if (item instanceof Element) { Element l = (Element) item; Map map = readMap(l); Set groups = (Set) map.remove(ROLE_ASSIGNMENT); if ("user".equals(l.getNodeName())) { String pwd = (String) map.get(UserEntries.FIELD_PASSWORD); String user = (String) map.get(UserEntries.FIELD_UID); if (user == null) { _log.warn("No id for user entry"); continue; } if (_log.isDebugEnabled()) { _log.debug("Adding user " + user + " with password:"******"\\" + user, pwd); } map.put(UserEntries.FIELD_PASSWORD, pwd); _userCache.addUser(user, map); if (groups != null) { userAssigns.put(user, groups); } } else if ("role".equals(l.getNodeName())) { String role = (String) map.get(UserEntries.FIELD_RID); if (role == null) { if (_log.isWarnEnabled()) { _log.warn("No id for role entry"); } continue; } _userCache.addRole(role, map); if (groups != null) { roleAssigns.put(role, groups); } } else if ("password".equals(l.getNodeName())) { String isClearText = (String) map.get(UserEntries.FIELD_IS_CLEAR_TEXT_PASSWORD); if (isClearText != null) { isClearTextPassword = Boolean.getBoolean(isClearText); } } } } Iterator assigns = userAssigns.entrySet().iterator(); while (assigns.hasNext()) { Map.Entry entry = (Map.Entry) assigns.next(); String user = (String) entry.getKey(); Iterator iter = ((Set) entry.getValue()).iterator(); while (iter.hasNext()) { String group = (String) iter.next(); _userCache.assign(user, group); } } assigns = roleAssigns.entrySet().iterator(); while (assigns.hasNext()) { Map.Entry entry = (Map.Entry) assigns.next(); String role = (String) entry.getKey(); Iterator iter = ((Set) entry.getValue()).iterator(); while (iter.hasNext()) { String group = (String) iter.next(); _userCache.addRoleToRole(role, group); } } } catch (ParserConfigurationException e) { _log.warn("Cannot parse user file: ", e); } catch (UserServiceException e) { _log.warn("Problem adding user or role from file: ", e); } catch (SAXException e) { _log.warn("Could not parse user file: ", e); } catch (IOException e) { _log.warn("Could not parse user file: ", e); } }