package com.ai.parts;

import com.ai.application.interfaces.*;
import com.ai.application.utils.AppObjects;
import com.ai.common.*;
import java.io.*;
import javax.servlet.http.*;
import javax.servlet.*;
import java.util.Map;
import com.ai.servlets.AspireConstants;
import com.ai.aspire.authentication.*;
import com.ai.servlets.SWIHttpEvents;
import com.ai.servlets.AspireServletException;

public class AspireLoginPart extends AHttpPart
{
//*****************************************************************
//* Called by the framework
//*****************************************************************
   protected Object executeRequestForHttpPart(String requestName
         ,HttpServletRequest request
         ,HttpServletResponse response
         ,HttpSession session
         ,Map inArgs)
         throws RequestExecutionException
   {
      try
      {
         String username = (String)inArgs.get("username");
         String password = (String)inArgs.get("password");
         return new Boolean(login(username,password,request,response,session));
      }
      catch(AuthorizationException x)
      {
         throw new RequestExecutionException("Error:Invalid user",x);
      }
      catch(AspireServletException x)
      {
         throw new RequestExecutionException("Error:userlogin event error",x);
      }
   }
//*****************************************************************
//* Do the login
//*****************************************************************
   private boolean login(String username, String password, 
   				HttpServletRequest request, 
				HttpServletResponse response, 
				HttpSession session)
         throws RequestExecutionException, 
		 		AuthorizationException, 
				AspireServletException
   {
      boolean validPassword = yourLogin(username,password);
      if (validPassword == false)
      {
         //Invalid password
         throw new AuthorizationException("INVALID_PASSWORD:userid or password is wrong");
      }
      //Good password. Set the username in session
      session.setAttribute(AspireConstants.ASPIRE_USER_NAME_KEY,username);

	  //Kick off a user login event
      SWIHttpEvents.userLogin(username,session,request,response);
	  
	  //Indicate a successful login
      session.setAttribute(AspireConstants.ASPIRE_LOGGEDIN_STATUS_KEY, "true");
      return true;
   }
//*****************************************************************
//* Use an authentication plugin to do the acutal login
//*****************************************************************
   protected boolean yourLogin(String username, String password)
         throws AuthorizationException
   {
      try
      {
         IAuthentication auth =
               (IAuthentication)AppObjects.getObject(AspireConstants.AUTHENTICATION_OBJECT,null);
         return auth.verifyPassword(username,password);
      }
      catch(RequestExecutionException x)
      {
         throw new AuthorizationException("Error:Could not get the authorization object",x);
      }
   }//eof-function
}//eof-class