//$Header: /cvsroot-fuse/mec-as2/39/mendelson/util/clientserver/user/UserAccess.java,v 1.1 2012/04/18 14:10:45 heller Exp $ package de.mendelson.util.clientserver.user; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.InputStreamReader; import java.io.RandomAccessFile; import java.io.Reader; import java.util.logging.Logger; /* * Copyright (C) mendelson-e-commerce GmbH Berlin Germany * * This software is subject to the license agreement set forth in the license. * Please read and agree to all terms before using this software. * Other product and brand names are trademarks of their respective owners. */ /** * Contains several utilities for the user access * @author S.Heller * @version $Revision: 1.1 $ */ public class UserAccess { private Logger logger; // TODO make system prop and fix so that default behavior fast fails if not found private String passwdFile = "./resources/etc/passwd"; public UserAccess(Logger logger) { this.logger = logger; } public User addUser(String userName, char[] password) throws Exception { if (this.readUser(userName) != null) { throw new Exception("User \"" + userName + "\" does already exist."); } User user = new User(); user.setName(userName); user.setPasswdCrypted(User.cryptPassword(password)); for (int i = 0; i < 3; i++) { user.setPermission(i, ""); } RandomAccessFile file = new RandomAccessFile(this.passwdFile, "rw"); file.seek(this.passwdFile.length()); String newLine = User.serialize(user); file.writeBytes("\n"); file.writeBytes(newLine); file.writeBytes("\n"); file.close(); return( user ); } /**Reads a user from of the actual passwd file*/ public User readUser(String userName) { User user = null; String userLine = this.readUserLine(userName); if (userLine != null) { user = User.parse(userLine); } return (user); } /**Loads the passwd file and looks for the user *a single line should be like: *username:passwd:passwdcrypted:permission1 (1/0):permission2 (1/0):permission3 (1/0):permissionn (1/0) */ public String readUserLine(String userName) { BufferedReader bufferedReader = null; try { Reader reader = new InputStreamReader(new FileInputStream(this.passwdFile), "UTF-8"); bufferedReader = new BufferedReader(reader); String line = ""; while (line != null) { line = bufferedReader.readLine(); if (line != null) { if (line.startsWith("#")) { continue; } String[] token = line.split(":"); if (token[0].equalsIgnoreCase(userName)) { return (line); } } } } catch (Exception e) { this.logger.warning("Password storage read error: " + e.getMessage()); } finally { if (bufferedReader != null) { try { bufferedReader.close(); } catch (Exception ee) { //nop } } } return (null); } }