package com.fuse;


/*
	FUSE Light Server - multiuser server application
	Copyright (C) 2000 Aapo Kyrola / Sulake Oy  Helsinki, Finland

	This program is free software; you can redistribute it and/or
	modify it under the terms of the GNU General Public License
	as published by the Free Software Foundation; either version 2
	of the License, or (at your option) any later version.

	This program is distributed in the hope that it will be useful,
	but WITHOUT ANY WARRANTY; without even the implied warranty of
	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
	GNU General Public License for more details.

	You should have received a copy of the GNU General Public License
	along with this program; if not, write to the Free Software
	Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
*/


import java.io.*;
import java.util.*;
import java.text.*;

import com.fuse.storage.data_objects.*;
import com.fuse.storage.*;

/**
  * Handles user authentication, password check.
  */
public class FUSEAuthenticator {
	public static SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy HH:mm:ss");
	
	FUSEAuthenticator() {
	
	}
	
	/**
	  * @throws IncorrectLoginException
	  */
	public FUSEUser login(String user, String password) throws IncorrectLoginException {
		try {
			if (FUSEEnvironment.getProperty("refuse_user." + user) != null) {
				throw new IncorrectLoginException("Access refused.");
			}
			FUSEUser userObj = FUSEEnvironment.getRegister().loadUser(user);
			if (userObj == null) throw new IncorrectLoginException("User does not exist");
			
			if (userObj.getPassword().equals(password)) {
				/* Increase access times */
				String accessCount = userObj.getProperty("access_count");
				if (accessCount == null) accessCount = "0";
				userObj.setProperty("access_count", new Integer(Integer.parseInt(accessCount) + 1).toString());
				userObj.setProperty("last_access_time", sdf.format(new Date()));
			
				try {
					FUSEEnvironment.getRegister().updateUser(userObj);	 
				} catch (Exception e) {
					Log.error(e);
				}
				return userObj;
			}
			throw new IncorrectLoginException("Wrong password");
		} catch (DatabaseException de) {
			Log.error(de);
			throw new IncorrectLoginException(de.getMessage());
		}
	}
}


