package oracle.sample.jaastester;

import javax.security.auth.Subject;
import javax.security.auth.login.LoginContext;
import javax.security.auth.login.LoginException;

/*
 * @(#)JaasTester.java  1.0 March 2005
 *
 * Copyright (c) 2001-2005 by Oracle. All Rights Reserved.
 * 
 * Oracle grants you ("Licensee") a non-exclusive, royalty free, license to use,
 * modify and redistribute this software in source and binary code form,
 * provided that i) this copyright notice and license appear on all copies of
 * the software; and ii) Licensee does not utilize the software in a manner
 * which is disparaging to Oracle.
 * 
 * This software is provided "AS IS," without a warranty of any kind. ALL
 * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING ANY
 * IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
 * NON-INFRINGEMENT, ARE HEREBY EXCLUDED. ORACLE AND ITS LICENSORS SHALL NOT BE
 * LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING
 * OR DISTRIBUTING THE SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL ORACLE OR ITS
 * LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT,
 * INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER
 * CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE USE OF
 * OR INABILITY TO USE SOFTWARE, EVEN IF ORACLE HAS BEEN ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGES.
 * 
 * This software is not designed or intended for use in on-line control of
 * aircraft, air traffic, aircraft navigation or aircraft communications; or in
 * the design, construction, operation or maintenance of any nuclear
 * facility. Licensee represents and warrants that it will not use or
 * redistribute the Software for such purposes.
 */


public class JaasTester 
{
  protected LoginContext lc = null;
  
  public JaasTester(String username, String password)
  {
    PassiveCallbackHandler pcbh = new PassiveCallbackHandler(username, password);
    try
    { 
    
      /* LOGIN MODULE TETS AREA */
      
      /* Physical database account like scott/tiger */
      
      //lc = new LoginContext("DBSystemLoginModuleTest", pcbh);
    
      /* Database Schema Users */
      //lc = new LoginContext("DBTableLoginModuleTest", pcbh);
      
      /* Clear Text Passwords in User Table */
      lc = new LoginContext("DBTableLoginModuleJavaLogger", pcbh);
      
      /* Encrypted Passwords in User Table */
      //lc = new LoginContext("DBTableLoginModuleJavaLoggerEncrPw", pcbh);
      
      /* Authentication using stored procedure */
      //lc = new LoginContext("DBProcLoginModuleJavaLogger", pcbh);
      
      
      lc.login();
      Subject subject = lc.getSubject();
      
    /* ===== USE FOR TESTING ====
    
      Iterator it = subject.getPrincipals().iterator();
      
      while (it.hasNext()){ 
        System.out.println("Tester: Principal found: " + ((Principal)it.next()).toString() +" \n");
      }
     */
    }
    catch (LoginException e)
    {
      System.out.println(e.getMessage());
    }
    finally
    {
      try 
      {
        
        lc.logout();
      } catch (Exception ex)
      {
        ex.printStackTrace();
      }
    }
    
    System.exit(0);
  }

  
  public static void main(String[] args)
  {
    /*
     * Tester for TableLM
     */
    //new JaasTester("Darth Vader","welcome0"); 
    new JaasTester("Han Solo","welcome2");
    //new JaasTester("scott","tiger");
    
    
    /*
     * Tester for DB System authentication 
    */
   // new JaasTester("scott","tiger");
    
  
    
  }
}