001: package com.calipso.reportgenerator.reportmanager;
002:
003: import com.calipso.reportgenerator.common.InfoException;
004:
005: import java.util.HashMap;
006: import java.util.StringTokenizer;
007: import java.util.Iterator;
008: import java.io.*;
009:
010: import com.calipso.reportgenerator.common.LanguageTraslator;
011: import com.calipso.reportgenerator.common.VersionProperties;
012:
013: /**
014: * Representa el repositorio de los usuarios con
015: * sus respectivas contrasenas
016: */
017:
018: public class UsersRepository {
019:
020: private HashMap users;
021: private String repositoryPath;
022:
023: /**
024: * Crea una instancia de <code>UsersRepository</code>
025: * @param repositoryPath
026: */
027: public UsersRepository(String repositoryPath) throws InfoException {
028: this .repositoryPath = repositoryPath;
029: initialize(new File(repositoryPath));
030: }
031:
032: /**
033: * Llena un diccionario con los valores del repositorio
034: * en caso de que este ultimo exista
035: * @param repositoryFile
036: * @throws InfoException
037: */
038: private void initialize(File repositoryFile) throws InfoException {
039: if (repositoryFile.exists()) {
040: fillUsersMapFrom(repositoryFile);
041: }
042: }
043:
044: /**
045: * Llena un diccionario con los valores del repositorio.
046: * Cada entrada al diccionario contiene el nombre de usuario
047: * mientras que a cada entrada le corresponden las contrasenas
048: * de los usuarios.
049: * @param repositoryFile
050: */
051: private void fillUsersMapFrom(File repositoryFile)
052: throws InfoException {
053: FileReader fileReader = null;
054: try {
055: fileReader = new FileReader(repositoryFile);
056: } catch (FileNotFoundException e) {
057: throw new InfoException(LanguageTraslator.traslate("479"),
058: e);
059: }
060: BufferedReader bufferedReader = new BufferedReader(fileReader);
061: String line = null;
062: try {
063: line = bufferedReader.readLine();
064: while (line != null) {
065: if (!line.equals("")) {
066: StringTokenizer tokenizer = new StringTokenizer(
067: line, "=");
068: String user = tokenizer.nextToken();
069: String password = tokenizer.nextToken();
070: getUsers().put(user, password);
071: }
072: line = bufferedReader.readLine();
073: }
074: bufferedReader.close();
075: fileReader.close();
076: } catch (IOException e) {
077: throw new InfoException(LanguageTraslator.traslate("480"),
078: e);
079: }
080:
081: }
082:
083: /**
084: * Valida un usuario. En caso de ser un usuario inexistente
085: * permite dar de alta el usuario siempre y cuando se ingrese
086: * la contrasena de root o admin. Por ello solo root puede dar
087: * de alta usuarios.
088: * @param userName nombre de usuario
089: * @param password contrasena de usuario
090: * @return
091: */
092: public boolean validate(String userName, String password)
093: throws InfoException {
094: boolean returnVal = false;
095: if (getUsers().containsKey(userName)) {
096: String encryptPassword = PasswordEncryptor
097: .getEncryptedPassword(password);
098: String storedPassword = getUsers().get(userName).toString();
099: if (storedPassword.trim().equalsIgnoreCase(
100: encryptPassword.trim())) {
101: returnVal = true;
102: }
103: }
104: return returnVal;
105: }
106:
107: /**
108: * Cambia la contrasena de un usuario
109: * @param userName nombre de usuario
110: * @param newPasswd nueva contrasena
111: */
112: public void changePasswd(String userName, String newPasswd)
113: throws InfoException {
114: getUsers().remove(userName);
115: getUsers().put(userName, newPasswd);
116: updateChanges();
117: }
118:
119: /**
120: * Borra un usuario del repositorio
121: * @param userName
122: */
123: public void deleteUser(String userName) throws InfoException {
124: getUsers().remove(userName);
125: updateChanges();
126: }
127:
128: /**
129: * Actualiza los cambios realizados en el repositorio.
130: */
131: private void updateChanges() throws InfoException {
132: try {
133: File outputFile = new File(repositoryPath);
134: FileWriter fileWriter = null;
135: fileWriter = new FileWriter(outputFile.getPath(), true);
136: BufferedWriter bufferedWriter = new BufferedWriter(
137: fileWriter);
138: Iterator iterator = getUsers().keySet().iterator();
139: while (iterator.hasNext()) {
140: String currentUserName = iterator.next().toString();
141: String hashedPasswd = getUsers().get(currentUserName)
142: .toString();
143: bufferedWriter.write(currentUserName + "="
144: + hashedPasswd + '\n');
145: }
146: bufferedWriter.close();
147: fileWriter.close();
148: } catch (Exception e) {
149: throw new InfoException(LanguageTraslator.traslate("481"),
150: e);
151: }
152: }
153:
154: /**
155: * Agrega un nuevo usuario.
156: * @param userName
157: * @param password
158: */
159: public void addNewUser(String userName, String password)
160: throws InfoException {
161: if (getUsers().containsKey(userName)) {
162: throw new InfoException(LanguageTraslator.traslate("394"));
163: }
164: File outputFile = new File(repositoryPath);
165: FileWriter fileWriter = null;
166: try {
167: fileWriter = new FileWriter(outputFile.getPath(), true);
168: BufferedWriter bufferedWriter = new BufferedWriter(
169: fileWriter);
170: bufferedWriter.write(userName + "="
171: + PasswordEncryptor.getEncryptedPassword(password)
172: + '\n');
173: bufferedWriter.close();
174: fileWriter.close();
175: } catch (Exception e) {
176: throw new InfoException(LanguageTraslator.traslate("482"),
177: e);
178: }
179: }
180:
181: /**
182: * Devuelve los usuarios del repositorio
183: * @return
184: */
185: private HashMap getUsers() {
186: if (users == null) {
187: users = new HashMap();
188: }
189: return users;
190: }
191: }
|