1276 lines
		
	
	
		
			30 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			1276 lines
		
	
	
		
			30 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| // This is our javascript, which will pop up our message
 | |
| // in an alert box.
 | |
| 
 | |
| var bGlobalPrompt = 'true';
 | |
| var consoleService = null;
 | |
| var loginCounter = 0;
 | |
| var sAttemptedHost = '';
 | |
| var IAWindow;
 | |
| var props = null;
 | |
| var sCurrentPersona = "home";
 | |
| var bShowValues = false;
 | |
| 
 | |
| 
 | |
| function dumpRealms()
 | |
| {	
 | |
| 	logMessage("dumpRealms called");
 | |
| 	var realms = Packages.Jim.getRealms("jim_realms.xml");	
 | |
| }
 | |
| 
 | |
| 
 | |
| function writeTestKey()
 | |
| {
 | |
| 	writeCASASetting("Bandit", "ldapdn", "cn=bandit1,o=novell");
 | |
| 	writeCASASetting("Bandit", "password", "11111111");
 | |
| 	writeCASASetting("Bandit", "ftoBalance", "100");
 | |
| 	writeCASASetting("Bandit", "costCenter", "Marketing");
 | |
| 	writeCASASetting("Bandit", "sn", "CASA Last Name");
 | |
| 	writeCASASetting("Bandit", "facsimileTelephoneNumber", "111-222-3333");
 | |
| 	writeCASASetting("Bandit", "postalAddress", "Los Angeles");
 | |
| 	writeCASASetting("Bandit", "manager", "CASA Manager");
 | |
| 	writeCASASetting("Bandit", "mail", "casa@novell.com");
 | |
| 	writeCASASetting("Bandit", "telephoneNumber", "999-999-8888");
 | |
| 	writeCASASetting("Bandit", "givenName", "CASA First name");
 | |
| 	writeCASASetting("Bandit", "kBalance", "100000");
 | |
| 	writeCASASetting("Bandit", "cn", "Casa");
 | |
| 	writeCASASetting("Bandit", "title", "My House");
 | |
| 	writeCASASetting("Bandit", "creditCard", "9999-8888-7777-6666");
 | |
| 	writeCASASetting("Bandit", "salary", "The same as Steve Jobs");					
 | |
| }
 | |
| 
 | |
| function writeCASASetting(sID, sKey, sValue)
 | |
| {
 | |
| 	var obj = getMiCASAStore();
 | |
| 	try 
 | |
|     {    		        
 | |
| 	    res = obj.miCASAWriteKey(sID, sKey, sValue);
 | |
| 	}
 | |
| 	catch (err)
 | |
| 	{
 | |
| 	   	alert(err);
 | |
| 	}
 | |
| }
 | |
| 
 | |
| 
 | |
| function readTestKey()
 | |
| {
 | |
| 	readCASASetting("Bandit", "ldapdn");
 | |
| 	readCASASetting("Bandit", "password");
 | |
| }
 | |
| 
 | |
| function readCASASetting(sID, sKey)
 | |
| {
 | |
| 	var obj = getMiCASAStore();
 | |
| 	var theValue = new String();
 | |
| 	logMessage("Reading from CASA: " + sKey);
 | |
| 	try 
 | |
|     {    		        
 | |
| 	    res = obj.miCASAReadKey(sID, sKey, theValue);
 | |
| 	    logMessage("rcode:"+res + " sValue:"+theValue.value);
 | |
| 	    
 | |
| 	}
 | |
| 	catch (err)
 | |
| 	{
 | |
| 	   	logMessage(err);
 | |
| 	}
 | |
| 	
 | |
| 	return theValue.value;
 | |
| }
 | |
| 
 | |
| function getCASAData(arraySelected)
 | |
| {
 | |
| 	var htData = new java.util.Hashtable();
 | |
| 	
 | |
| 	for (var i=0; i<arraySelected.length; i++)
 | |
| 	{	
 | |
| 		var sValue = readCASASetting("Bandit", arraySelected[i]);
 | |
| 		logMessage("From CASA:" + sValue);
 | |
| 		
 | |
| 		if ((sValue != null) && (sValue.length > 0))	
 | |
| 		{
 | |
| 			htData.put(arraySelected[i], sValue);	
 | |
| 		}
 | |
| 				
 | |
| 	
 | |
| 	}
 | |
| 	return htData;
 | |
| }
 | |
| 
 | |
| function getPeristentPersona()
 | |
| {	
 | |
| 	try
 | |
| 	{
 | |
| 		var props = loadMapFileAndReturnProps();
 | |
| 		var sPersona = props.getProperty("CurrentPersona");			
 | |
| 		return sPersona;
 | |
| 	}
 | |
| 	catch (error)
 | |
| 	{
 | |
| 		return "home";
 | |
| 	}
 | |
| 
 | |
| }
 | |
| 
 | |
| 
 | |
| function setLocalPersona()
 | |
| {
 | |
| 	sCurrentPersona = "home";
 | |
| 	changePersona(sCurrentPersona);	
 | |
| 	if (bShowValues)
 | |
| 	{
 | |
| 		showAttribsWithValues();
 | |
| 	}
 | |
| }
 | |
| 
 | |
| function setEnterprisePersona()
 | |
| {
 | |
| 	sCurrentPersona = "work";	
 | |
| 	changePersona(sCurrentPersona);	
 | |
| 	if (bShowValues)
 | |
| 	{
 | |
| 		showAttribsWithValues();
 | |
| 	}
 | |
| }
 | |
| 
 | |
| function setCombinedPersona()
 | |
| {
 | |
| 	sCurrentPersona = "joined";	
 | |
| 	changePersona(sCurrentPersona);	
 | |
| 	if (bShowValues)
 | |
| 	{
 | |
| 		showAttribsWithValues();
 | |
| 	}
 | |
| }
 | |
| 
 | |
| function setCasaPersona()
 | |
| {
 | |
| 	sCurrentPersona = "CASA";	
 | |
| 	changePersona(sCurrentPersona);	
 | |
| 	if (bShowValues)
 | |
| 	{
 | |
| 		showAttribsWithValues();
 | |
| 	}
 | |
| }
 | |
| 
 | |
| function displayCurrentPersona()
 | |
| {
 | |
| 	var curPersonaIDElement = document.getElementById("curPersonaID");	
 | |
| 	if (curPersonaIDElement != null)
 | |
| 	{
 | |
| 		curPersonaIDElement.value = sCurrentPersona;
 | |
| 	}
 | |
| }
 | |
| 
 | |
| 
 | |
| function changePersona(persona)
 | |
| {
 | |
| 	logMessage("Changing persona to: "+persona);
 | |
| 	
 | |
| 	try
 | |
| 	{
 | |
| 		var props = loadMapFileAndReturnProps();
 | |
| 		props.setProperty("CurrentPersona", persona);
 | |
| 		storeProperties(props);
 | |
| 	}
 | |
| 	catch (err)
 | |
| 	{
 | |
| 		alert(err);
 | |
| 	}							
 | |
| 	sCurrentPersona = persona;
 | |
| 	displayCurrentPersona();	
 | |
| }
 | |
| 
 | |
| 
 | |
| function logMessage(message)
 | |
| {
 | |
|   try
 | |
|   {
 | |
|       if (consoleService == null)
 | |
|       {
 | |
|         consoleService = Components.classes["@mozilla.org/consoleservice;1"]
 | |
|                                      .getService(Components.interfaces.nsIConsoleService);
 | |
|       }
 | |
| 
 | |
|         consoleService.logStringMessage("CASA: " + message +"\n");
 | |
|    }
 | |
|    catch (err)
 | |
|    {
 | |
|    
 | |
|    }
 | |
| }
 | |
| 
 | |
| function showConsole()
 | |
| {
 | |
|     var jvm = Components.classes["@mozilla.org/oji/jvm-mgr;1"].getService(Components.interfaces.nsIJVMManager);
 | |
|     if (jvm != null)
 | |
|     {
 | |
| 		jvm.showJavaConsole();
 | |
| 	}
 | |
| 	else
 | |
| 	{
 | |
| 		logMessage("No JVM");
 | |
| 		alert("No JVM");
 | |
| 	}
 | |
| }
 | |
| 
 | |
| function displayUserDir()
 | |
| {
 | |
|     alert(java.lang.System.getProperty("user.dir"));    
 | |
| }
 | |
| 
 | |
| function displayUserHome()
 | |
| {
 | |
|     alert(java.lang.System.getProperty("user.home"));    
 | |
| }
 | |
| 
 | |
| function displayJavaInfo()
 | |
| {
 | |
|     alert("Version: " + java.lang.System.getProperty("java.version") + "\r\nClassPath: " + java.lang.System.getProperty("java.class.path"));    
 | |
| }
 | |
| 
 | |
| 
 | |
| function storeProperties(props)
 | |
| {
 | |
| 	var userdir = java.lang.System.getProperty("user.dir");
 | |
| 	logMessage("looking for namemap.properties in " + userdir);
 | |
| 	
 | |
| 	try
 | |
| 	{
 | |
| 		var os = java.io.FileOutputStream(userdir + "/namemap.properties");
 | |
| 		props.store(os,null);	
 | |
| 		os.close();			
 | |
| 	}
 | |
| 	catch (error)
 | |
| 	{
 | |
| 		alert(error);
 | |
| 	}
 | |
| }
 | |
| 
 | |
| function loadMapFileAndReturnProps()
 | |
| {
 | |
| 	try
 | |
| 	{
 | |
| 		var userdir = java.lang.System.getProperty("user.dir");
 | |
| 		logMessage("looking for namemap.properties in " + userdir);
 | |
| 		
 | |
| 		var is = java.io.FileInputStream(userdir + "/namemap.properties");
 | |
| 		//alert(is);		
 | |
| 	
 | |
| 		props = new java.util.Properties();
 | |
| 		props.load(is);
 | |
| 		is.close();			
 | |
| 		logMessage(props);
 | |
| 		return props;
 | |
| 	}
 | |
| 	catch (ioerror)
 | |
| 	{
 | |
| 		logMessage(ioerror);
 | |
| 	}
 | |
| }
 | |
| 
 | |
| function mapAttrib(sName)
 | |
| {
 | |
| 	if (sName == null) return;
 | |
| 	if (sName.indexOf('opt.')==0)
 | |
| 	{
 | |
| 		//sName = sName.substring(4);		
 | |
| 	}
 | |
| 		
 | |
| 	if (props == null)
 | |
| 	{
 | |
| 		props = loadMapFileAndReturnProps();
 | |
| 		if (props == null)
 | |
| 		{
 | |
| 			logMessage("did not load props");
 | |
| 			return sName;
 | |
| 		}
 | |
| 	}
 | |
| 	
 | |
| 	var newName = props.getProperty(sName);
 | |
| 	//alert(newName);
 | |
| 	if (newName != null)
 | |
| 	{
 | |
| 		logMessage("found mapped name: " + newName);
 | |
| 		return newName;
 | |
| 	}
 | |
| 	else
 | |
| 	{	
 | |
| 		logMessage("did not find mapped name: " + sName);
 | |
| 		return sName;
 | |
| 	}
 | |
| 		
 | |
| }
 | |
| 
 | |
| 
 | |
| function mapName(sName)
 | |
| {
 | |
| 	if (sName.indexOf('opt.')==0)
 | |
| 	{
 | |
| 		//sName = sName.subString(4);		
 | |
| 	}
 | |
| 
 | |
| 	switch (sName)
 | |
| 	{
 | |
| 		case "cn": 
 | |
| 			return 'User_name';
 | |
| 			break;
 | |
| 		case "mail": 
 | |
| 			return 'Email_Address';
 | |
| 			break;
 | |
| 		case "mailStop": 
 | |
| 			return 'Post-office';
 | |
| 			break;
 | |
| 		case "jobCode": 
 | |
| 			return 'Job_Code';
 | |
| 			break;
 | |
| 		case "costCenter": 
 | |
| 			return 'Cost.Center';
 | |
| 			break;		
 | |
| 		case "givenName": 
 | |
| 			return 'First_name';
 | |
| 			break;			
 | |
| 		case "workForceId": 
 | |
| 			return 'EmployeID';
 | |
| 			break;	
 | |
| 	}
 | |
| 	
 | |
| 	return sName;
 | |
| 
 | |
| }
 | |
| 
 | |
| 
 | |
| 
 | |
| function handleIA(attribs)
 | |
| {		
 | |
| 		
 | |
| 		var attribsRequested = attribs.split(',');
 | |
| 		var params = '';
 | |
| 		for (var i=0; i<attribsRequested.length; i++)
 | |
| 		{
 | |
| 			// TODO: map to readable name.
 | |
| 			params += attribsRequested[i] + '=' +  mapAttrib(attribsRequested[i]) + '&';		
 | |
| 		}
 | |
| 		
 | |
| 		// test code
 | |
| 		var sPassword = null;
 | |
| 
 | |
| 		var sPromptIAURL = "chrome://casa/content/ia.xul?" + params;	
 | |
| 		//if (confirm("show window?"))
 | |
| 		{	    		
 | |
| 			{       	    	    
 | |
| 				
 | |
| 				var properties = "modal=yes,status=no,titlebar=no,toolbar=no,menubar=no,location=no,height=600,width=600";
 | |
| 				IAWindow = window.openDialog(sPromptIAURL, null, properties);
 | |
| 				
 | |
| 				//alert(IAWindow.document.getElementById('attribList'));
 | |
| 			} 
 | |
| 		}	
 | |
| 	
 | |
| 		
 | |
| /*		
 | |
| 		alert("Screen Dimension\n" +
 | |
| 				"  width:" + 
 | |
| 				java.awt.Toolkit.getDefaultToolkit().getScreenSize().width +
 | |
| 				" height:" + 
 | |
| 				java.awt.Toolkit.getDefaultToolkit().getScreenSize().height);
 | |
| */
 | |
| 				
 | |
| 		try
 | |
| 		{
 | |
| 					
 | |
| 			java.lang.System.out.println("   java.version: " + java.lang.System.getProperty("java.version"));
 | |
| 			java.lang.System.out.println("java.class.path: " + java.lang.System.getProperty("java.class.path"));			
 | |
| 			java.lang.System.out.println("       user.dir: " + java.lang.System.getProperty("user.dir"));
 | |
| 			java.lang.System.out.println("		user.home: " + java.lang.System.getProperty("user.home"));											
 | |
| 		}
 | |
| 		catch (jndierror)
 | |
| 		{
 | |
| 			alert(jndierror);			
 | |
| 		}
 | |
| 		
 | |
| }
 | |
| 
 | |
| 
 | |
| function websso()
 | |
| {
 | |
| 	//logMessage("PAGE LOADED");	
 | |
| 	var url = window._content.location.host;
 | |
| 	var enabledsite = "no";
 | |
| 	var ssosite = "no"; 
 | |
| 	var fileindex = 0;
 | |
| 	var obj = null;
 | |
| 			
 | |
| 	if (url == null || url.length < 1)
 | |
| 	{
 | |
| 	   logMessage("Host URL not found");
 | |
| 	   return;
 | |
| 	}
 | |
| 	// reset loginprompt
 | |
| 	bGlobalPrompt = 'true';
 | |
| 
 | |
|     var para=window._content.document.getElementsByTagName("input");        
 | |
|     
 | |
|     for (var j = 0; !(j >= para.length) ; j++)
 | |
| 	{
 | |
| 		if((para.item(j).type == "password"))
 | |
| 		{
 | |
| 			 ssosite = "yes";
 | |
| 			 logMessage("Password field");
 | |
| 			 logMessage(para.item(j).name);			 
 | |
| 		}
 | |
| 
 | |
| /*
 | |
| 		var banditForm = window._content.document.getElementsByName("Bandit.Form");
 | |
| 		if (banditForm != null)
 | |
| 		{
 | |
| 			alert("Found bandit form");
 | |
| 			alert(banditForm.name);
 | |
| 			var inputs = banditForm.hasChildNodes();
 | |
| 			alert(inputs);
 | |
| 		}
 | |
| */
 | |
| 		
 | |
| 		if((para.item(j).type == "hidden") && (para.item(j).name == "bandit"))
 | |
| 		{
 | |
| 			handleIA(para.item(j).value);
 | |
| 			return;		
 | |
| 		}			
 | |
| 							 
 | |
| 	}
 | |
| 
 | |
|     if (ssosite == "yes") 
 | |
|     {
 | |
|     		        
 | |
|         //alert('password field found');
 | |
|         var secretId = url; 
 | |
|         var sKey = "";
 | |
|         //var theValue;
 | |
|         var bAutoLogin = false;
 | |
|     
 | |
|         //bGlobalPrompt = false;
 | |
|         try {
 | |
|     
 | |
|             netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
 | |
|             //alert('test2');
 | |
|             const cid = "@novell.com/CASA/MiCASAKeys;1";
 | |
|             if (obj == null)
 | |
|             {
 | |
|                 obj = Components.classes[cid].createInstance();
 | |
|                 //alert('test3');
 | |
|                 obj = obj.QueryInterface(Components.interfaces.IMiCASAKeys);
 | |
|                 //alert(obj);
 | |
|             }
 | |
|         }
 | |
|         catch (err)
 | |
|         {
 | |
|             logMessage(err);
 | |
|         }
 | |
|     
 | |
|         var theValue = new String;
 | |
|         var res;
 | |
| 			
 | |
|         // does config allow sso for this site? 
 | |
|                
 | |
|         try
 | |
|         {
 | |
|             res = obj.miCASAReadKey(secretId, 'Config.DoNotSave', theValue);
 | |
|             if (res == 0)
 | |
|             {
 | |
|                 if (theValue.value == 'true')
 | |
|                 {
 | |
|                     logMessage('Config does not allow SSO for this url');
 | |
|                     window.removeEventListener("submit",promptuser,true) ;
 | |
|                     return;
 | |
|                 }
 | |
|             }                        
 | |
|         }
 | |
|         catch (err)
 | |
|         {      
 | |
|             logMessage(err);            
 | |
|         }
 | |
|         
 | |
|         
 | |
|         var formToSubmit;            										
 | |
| 	    // looping for inputs and setting the correct values 
 | |
| 	    for (var j = 0; !(j >= para.length) ; j++)
 | |
| 	    {
 | |
| 	        try 
 | |
| 	        {
 | |
| 	        if((para.item(j).type == "text") || (para.item(j).type == "password"))
 | |
| 	        {	            
 | |
|     		    sKey = para.item(j).name;
 | |
|                 logMessage('Getting: '  + secretId + ':' + sKey);		                           
 | |
|                 
 | |
|                 theValue = new String;                                
 | |
| 		        res = obj.miCASAReadKey(secretId, sKey, theValue);		    
 | |
|     		    
 | |
| 		        if (res == 0)
 | |
| 		        {	    	    				 	
 | |
| 			        var ele = window._content.document.getElementsByName(sKey);        						
 | |
| 			        if (ele != null)
 | |
| 			        {
 | |
| 				        ele[0].value = theValue.value;		                                                 
 | |
| 			        }
 | |
| 		        }
 | |
| 		        
 | |
| 		        // locate and save off the form of the password element
 | |
| 		        if (para.item(j).type == "password")
 | |
| 		        {		            
 | |
| 		            formToSubmit = para.item(j).parentNode.parentNode;
 | |
| 		            		            
 | |
| 		            // did we get it?
 | |
| 		            if (formToSubmit.type != "form")
 | |
| 		            {
 | |
| 		                formToSubmit = formToSubmit.parentNode;		                
 | |
| 		            }		            		            
 | |
| 		            		            
 | |
| 		        }
 | |
| 		        
 | |
| 		    }
 | |
| 		    }
 | |
| 		    catch (err)
 | |
| 		    {
 | |
| 		        //alert(err);
 | |
| 		    }		    				    
 | |
| 	    }
 | |
| 		    
 | |
|         
 | |
|         try 
 | |
|         {
 | |
|             res = obj.miCASAReadKey(secretId, 'autologin', theValue);
 | |
|             if (theValue.value == 'true')
 | |
|             {
 | |
|                 // if this is a new url, reset the counter
 | |
|                 if (sAttemptedHost != url)
 | |
|                 {
 | |
|                     loginCounter = 0;
 | |
|                 }
 | |
|                                 
 | |
|                 // if we've attempted this login before, don't try it again
 | |
|                 if (loginCounter > 2)
 | |
|                 {
 | |
|                     return;
 | |
|                 }
 | |
|                 
 | |
|                 // if there's more than one form, determine which one to submit.
 | |
|                 var forms = window._content.document.forms;                                
 | |
|                 if (forms.length > 1)
 | |
|                 {
 | |
|                     // find the form with the matching password id.
 | |
|                     logMessage("More than 1 form on page");                                        
 | |
|                 }
 | |
|                 else
 | |
|                 {
 | |
|                     formToSubmit = window._content.document.forms[0].submit();                                
 | |
|                 }
 | |
|                 
 | |
|                 //try it now
 | |
|                 logMessage('Autologin begins');
 | |
|                 sAttemptedHost = url;
 | |
|                 loginCounter += 1;  
 | |
|                                               
 | |
|                 formToSubmit.submit();                                                 
 | |
|             }
 | |
|         }
 | |
|         catch (err1)
 | |
|         {
 | |
|             logMessage(err1);        
 | |
|         }        		 	    		 
 | |
|     }     
 | |
| }
 | |
|   
 | |
| 
 | |
| function promptuser()
 | |
| {
 | |
| 	  var username = "";
 | |
| 	  var password = "";
 | |
| 	  var bIsLogin = 'false';
 | |
| 	  var sPromptURL = "chrome://casa/content/prompt.xul?";
 | |
| 	  var ele=window._content.document.getElementsByTagName("input");
 | |
| 	  var secretID = window._content.location.host;
 | |
| 						
 | |
| 	  if (bGlobalPrompt != 'true') 
 | |
| 	  {
 | |
| 		bGlobalPrompt = 'true';
 | |
| 		return;
 | |
| 	  }
 | |
| 				
 | |
| 	  sPromptURL = sPromptURL + "secretid=" + secretID;
 | |
| 	  
 | |
| 	  for (i = 0; !(i>= ele.length); i++)
 | |
| 		{
 | |
| 		   
 | |
| 		  if((ele.item(i).type == "password"))
 | |
| 		  {											  		  				    
 | |
| 				password = ele.item(i).value;								
 | |
| 				if (password.length > 0)
 | |
| 				{
 | |
| 					bIsLogin = 'true';
 | |
| 				}
 | |
| 				else
 | |
| 				{
 | |
| 					break;
 | |
| 				}
 | |
| 				
 | |
| 				sPromptURL = sPromptURL + "&" + ele.item(i).name + "=" + ele.item(i).value;						    			
 | |
| 							    
 | |
| 			    // don't prompt user if password field is the same
 | |
| 		        try 
 | |
| 		        {
 | |
|     		        netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
 | |
| 		            const cid = "@novell.com/CASA/MiCASAKeys;1";
 | |
| 		            
 | |
| 		            //if (obj == null)
 | |
| 		            {
 | |
| 		                obj = Components.classes[cid].createInstance();			                
 | |
| 		                obj = obj.QueryInterface(Components.interfaces.IMiCASAKeys);		                
 | |
| 		            }
 | |
| 		        		            		            
 | |
|                     var theValue = new String;                                                                            
 | |
| 		            var res;
 | |
| 		            try
 | |
| 		            {
 | |
| 		                res = obj.miCASAReadKey(secretID, ele.item(i).name, theValue);		            
 | |
| 		            }
 | |
| 		            catch (err)
 | |
| 		            {												
 | |
| 						if (err.toString().indexOf("fcdd") > 0)
 | |
| 						{
 | |
| 							logMessage("fcdd found");
 | |
| 							res = -803;
 | |
| 						}
 | |
| 						else
 | |
| 						{
 | |
| 							logMessage("fcdd not found");
 | |
| 						}
 | |
| 		            }
 | |
|                     					
 | |
|                     if (res == 0) 
 | |
|                     {                                                
 | |
|                         if (theValue.value == ele.item(i).value)
 | |
|                         {                     
 | |
| 		                    bIsLogin = 'false';
 | |
| 		                    break;
 | |
| 		                }
 | |
| 		            }
 | |
| 		            else if (res == -803)
 | |
| 		            {
 | |
| 						logMessage("CASA Services not available");
 | |
| 						return;		            
 | |
| 		            }		                		    		            		            		            
 | |
| 
 | |
| 		        } catch (err) {
 | |
| 		            bIsLogin = 'false';
 | |
| 		        }			    
 | |
| 							
 | |
| 				//bIsLogin = 'true';
 | |
| 			 }
 | |
| 		   else if((ele.item(i).type == "text"))
 | |
| 		   {
 | |
| 				username = ele.item(i).value;
 | |
| 				sPromptURL = sPromptURL + "&" + ele.item(i).name + "=" + ele.item(i).value;
 | |
| 		   }                                 
 | |
| 		 }
 | |
| 	
 | |
| 	if (bIsLogin == 'true')
 | |
| 	{	    
 | |
| 		//if (confirm("Save credentials in CASA?"))
 | |
| 		{       	    	    
 | |
| 			var properties = "modal=yes,status=no,titlebar=no,toolbar=no,menubar=no,location=no,height=100,width=100";
 | |
| 			var win = window.open(sPromptURL, null, properties);
 | |
| 		} 
 | |
| 	}   
 | |
|  }
 | |
| 
 | |
| 	function centerPrompt()
 | |
| 	{
 | |
| 	  var sh = screen.height;
 | |
| 	  var sw = screen.width;
 | |
| 
 | |
| 	  sizeToContent();
 | |
| 
 | |
| 	  var contentheight = window.innerHeight;
 | |
| 	  var contentwidth = window.innerWidth;
 | |
| 	
 | |
| 	  window.moveTo((sw-contentwidth)/2 , (sh-contentheight)/2);
 | |
| 	  	  
 | |
| 	}
 | |
| 
 | |
| 	var bAllSelected = false;
 | |
| 	function toogleAllAttribsOptional()
 | |
| 	{
 | |
| 		var lstBoxOpt = document.getElementById('attribListOptional');	
 | |
| 		var bttnSelectAll = document.getElementById('selectall');
 | |
| 		
 | |
| 		if (bAllSelected)
 | |
| 		{			
 | |
| 			lstBoxOpt.clearSelection();
 | |
| 			bAllSelected = false;
 | |
| 			bttnSelectAll.label = "Select All    ";
 | |
| 		}
 | |
| 		else
 | |
| 		{
 | |
| 			
 | |
| 			lstBoxOpt.selectAll();
 | |
| 			bAllSelected = true;
 | |
| 			bttnSelectAll.label = "    Clear All";
 | |
| 		}								
 | |
| 	}
 | |
| 
 | |
| 	function selectAllAttribsOptional()
 | |
| 	{
 | |
| 		var lstBoxOpt = document.getElementById('attribListOptional');	
 | |
| 		var bttnSelectAll = document.getElementById('selectall');					
 | |
| 		lstBoxOpt.selectAll();
 | |
| 		bAllSelected = true;
 | |
| 		bttnSelectAll.label = "    Clear All";	
 | |
| 	}
 | |
| 
 | |
| 	function selectAllAttribs()
 | |
| 	{
 | |
| 		var lstBox = document.getElementById('attribList');	
 | |
| 		lstBox.selectAll();
 | |
| 	}
 | |
| 		
 | |
| 	function getAllValues(arraySelected)
 | |
| 	{
 | |
| 		var sUser = readCASASetting("Bandit", "ldapdn");
 | |
| 		var sPass = readCASASetting("Bandit", "password");
 | |
| 						
 | |
| 		if (sUser != null)
 | |
| 		{
 | |
| 			logMessage("CASA returned:"+sUser);
 | |
| 		}
 | |
| 		else
 | |
| 		{
 | |
| 			logMessage("SecretID Bandit not found");
 | |
| 			sUser = "cn=admin,o=novell";
 | |
| 		}
 | |
| 		
 | |
| 
 | |
| 		var	htData;
 | |
| 		if (sCurrentPersona == "CASA")
 | |
| 		{
 | |
| 			htData = getCASAData(arraySelected);
 | |
| 		}	
 | |
| 		else
 | |
| 		{	
 | |
| 			try 
 | |
| 			{			
 | |
| 				logMessage(" ********* Calling IA");
 | |
| 				htData = Packages.Jim.main2("cn=bandit1,o=Novell", sPass, null, sCurrentPersona, arraySelected);
 | |
| 				logMessage(" ******** Returned");
 | |
| 			}
 | |
| 			catch (err)
 | |
| 			{
 | |
| 				logMessage(" ******** Error calling IA: " + err);
 | |
| 			}
 | |
| 		}	
 | |
| 		return htData;
 | |
| 	}		
 | |
| 		
 | |
| 	function toogleShowHide()
 | |
| 	{
 | |
| 		var bttn = document.getElementById('bttnShowValues');		
 | |
| 	
 | |
| 		clearBoxes();
 | |
| 		
 | |
| 		if (bShowValues)
 | |
| 		{
 | |
| 			bShowValues = false;
 | |
| 			setAttribs();					
 | |
| 			if (bttn != null)
 | |
| 			{
 | |
| 				bttn.label = "Show Values";
 | |
| 			}
 | |
| 		}
 | |
| 		else
 | |
| 		{
 | |
| 			bShowValues = true;
 | |
| 			showAttribsWithValues();		
 | |
| 			if (bttn != null)
 | |
| 			{
 | |
| 				bttn.label = "Hide Values";
 | |
| 			}
 | |
| 		}		
 | |
| 	}		
 | |
| 
 | |
| 	function showAttribsWithValues()
 | |
| 	{
 | |
| 		logMessage("showAttribsWithValues called");
 | |
| 		
 | |
| 		bShowValues = true;
 | |
| 		sCurrentPersona = getPeristentPersona();
 | |
| 		displayCurrentPersona();
 | |
| 		
 | |
| 		var parentHost = opener._content.location.host;
 | |
| 		var label = document.getElementById('hostsite');
 | |
| 		label.value = parentHost;
 | |
| 				
 | |
| 		var url = document.location.toString();
 | |
| 		var sAttrib = "";
 | |
| 		var sDisplay = "";						
 | |
| 				
 | |
| 		var lstBox = document.getElementById('attribList');	
 | |
| 		var lstBoxOpt = document.getElementById('attribListOptional');	
 | |
| 		
 | |
| 		var params = url.substring(url.indexOf('?')+1).split('&');
 | |
| 			
 | |
| 		var csvRequested = "";	
 | |
| 		//collect requested attribs and query IA for values
 | |
| 		for (var i = 0; !(i > params.length - 1); i++)			
 | |
| 		{					    
 | |
| 		    sAttrib = params[i].substring(0, params[i].indexOf('='));
 | |
| 		    sDisplay = params[i].substring(params[i].indexOf('=')+1);
 | |
| 		    
 | |
| 		    if (sAttrib.length > 0)
 | |
| 		    {
 | |
| 										
 | |
| 				if (sAttrib.indexOf('opt') == 0)
 | |
| 				{
 | |
| 					csvRequested += sAttrib.substring(4);
 | |
| 				}
 | |
| 				else
 | |
| 				{
 | |
| 					csvRequested += sAttrib;
 | |
| 				}												
 | |
| 			}
 | |
| 			
 | |
| 			// append comma
 | |
| 			if (i < params.length -2)
 | |
| 			{
 | |
| 				csvRequested += ',';
 | |
| 			}			
 | |
| 		}			
 | |
| 		
 | |
| 		//alert(csvRequested);
 | |
| 		
 | |
| 		// query all values requested
 | |
| 		var arrayRequested = csvRequested.split(',');
 | |
| 		var htValues = getAllValues(arrayRequested);														
 | |
| 		
 | |
| 		//alert(htValues);
 | |
| 		// clear the current listboxes							
 | |
| 		clearBoxes();
 | |
| 		
 | |
| 		var sCurrentValue = '';									
 | |
| 		for (var i = 0; !(i > params.length - 1); i++)
 | |
| 		{		    
 | |
| 		    sAttrib = params[i].substring(0, params[i].indexOf('='));
 | |
| 		    sDisplay = params[i].substring(params[i].indexOf('=')+1);
 | |
| 		    
 | |
| 		    if (sAttrib.length > 0)
 | |
| 		    {										
 | |
| 				// reset sCurrentValue
 | |
| 				sCurrentValue = '';
 | |
| 				
 | |
| 				if (sAttrib.indexOf('opt') == 0)
 | |
| 				{
 | |
| 					sCurrentValue = htValues.get(sAttrib.substring(4));
 | |
| 					if (sCurrentValue != null)
 | |
| 					{
 | |
| 						sCurrentValue = " (" + sCurrentValue + ")";
 | |
| 					}
 | |
| 					else 
 | |
| 					{
 | |
| 						sCurrentValue = '';
 | |
| 					}
 | |
| 					
 | |
| 					lstBoxOpt.appendItem(mapAttrib(sDisplay.substring(4)) + sCurrentValue, sAttrib.substring(4));
 | |
| 				}
 | |
| 				else
 | |
| 				{
 | |
| 					//alert("getting: " + sAttrib);
 | |
| 					//alert(htValues);
 | |
| 					sCurrentValue = htValues.get(sAttrib);
 | |
| 					if (sCurrentValue != null)
 | |
| 					{
 | |
| 						sCurrentValue = " (" + sCurrentValue + ")";
 | |
| 					}
 | |
| 					else 
 | |
| 					{
 | |
| 						sCurrentValue = '';
 | |
| 					}
 | |
| 					
 | |
| 					lstBox.appendItem(sDisplay  + sCurrentValue, sAttrib);		 
 | |
| 				}
 | |
| 			}
 | |
| 		}
 | |
| 							
 | |
| 		selectAllAttribs();										
 | |
| 		centerPrompt();					
 | |
| 	}		
 | |
| 		
 | |
| 	function clearBoxes()
 | |
| 	{
 | |
| 		// clear required
 | |
| 		var lstBox = document.getElementById('attribList');
 | |
| 		
 | |
| 		for (var i=lstBox.getRowCount(); i>0; i--)
 | |
| 		{
 | |
| 			lstBox.removeItemAt(i-1);			
 | |
| 		}
 | |
| 		
 | |
| 		// clear optional
 | |
| 		lstBox = document.getElementById('attribListOptional');	
 | |
| 		for (var i=lstBox.getRowCount(); i>0; i--)
 | |
| 		{
 | |
| 			lstBox.removeItemAt(i-1);			
 | |
| 		}		
 | |
| 	}
 | |
| 	
 | |
| 	
 | |
| 			
 | |
| 	function setAttribs()
 | |
| 	{
 | |
| 		logMessage("setAttribs called");
 | |
| 		
 | |
| 		sCurrentPersona = getPeristentPersona();
 | |
| 		changePersona(sCurrentPersona);
 | |
| 		
 | |
| 		var parentHost = opener._content.location.host;
 | |
| 		var label = document.getElementById('hostsite');
 | |
| 		label.value = parentHost;
 | |
| 				
 | |
| 		var url = document.location.toString();
 | |
| 		var sAttrib = "";
 | |
| 		var sDisplay = "";						
 | |
| 				
 | |
| 		var lstBox = document.getElementById('attribList');	
 | |
| 		var lstBoxOpt = document.getElementById('attribListOptional');	
 | |
| 		
 | |
| 		var params = url.substring(url.indexOf('?')+1).split('&');
 | |
| 			
 | |
| 		for (var i = 0; !(i > params.length - 1); i++)
 | |
| 		{		    
 | |
| 		    sAttrib = params[i].substring(0, params[i].indexOf('='));
 | |
| 		    sDisplay = params[i].substring(params[i].indexOf('=')+1);
 | |
| 		    
 | |
| 		    if (sAttrib.length > 0)
 | |
| 		    {
 | |
| 										
 | |
| 				if (sAttrib.indexOf('opt') == 0)
 | |
| 				{
 | |
| 					lstBoxOpt.appendItem(mapAttrib(sDisplay.substring(4)), sAttrib.substring(4));
 | |
| 				}
 | |
| 				else
 | |
| 				{
 | |
| 					lstBox.appendItem(sDisplay, sAttrib);		 
 | |
| 				}
 | |
| 			}
 | |
| 		}
 | |
| 							
 | |
| 		selectAllAttribs();										
 | |
| 		centerPrompt();					
 | |
| 	}
 | |
| 	
 | |
| 	function getSelectedPersona()
 | |
| 	{
 | |
| 		var personaLst = document.getElementById('theList');
 | |
| 		var personaSelected = personaLst.selectedItems;		
 | |
| 		return personaSelected[0].value 		
 | |
| 	}
 | |
| 	
 | |
| 	function getSelectedAttribsOptional()
 | |
| 	{		
 | |
| 		var lstBox = document.getElementById('attribListOptional');		
 | |
| 		var selected = lstBox.selectedItems;						
 | |
| 		return selected;
 | |
| 	}
 | |
| 	
 | |
| 	function displaySelectedAttribsOptional()
 | |
| 	{
 | |
| 		var selected = getSelectedAttribsOptional();
 | |
| 		for (var i=0; i<selected.length; i++)
 | |
| 		{
 | |
| 			alert(selected[i].value);
 | |
| 		}		
 | |
| 	}	
 | |
| 	
 | |
| 	function getSelectedAttribs()
 | |
| 	{		
 | |
| 		var lstBox = document.getElementById('attribList');		
 | |
| 		var selected = lstBox.selectedItems;						
 | |
| 		return selected;
 | |
| 	}
 | |
| 	
 | |
| 	function displaySelectedAttribs()
 | |
| 	{
 | |
| 		var selected = getSelectedAttribs();
 | |
| 		for (var i=0; i<selected.length; i++)
 | |
| 		{
 | |
| 			alert(selected[i].value);
 | |
| 		}		
 | |
| 	}
 | |
| 	
 | |
| 	function displayAllSelectedAttribs()
 | |
| 	{
 | |
| 		displaySelectedAttribs();
 | |
| 		displaySelectedAttribsOptional();
 | |
| 	
 | |
| 	}
 | |
| 	
 | |
| 	function getMiCASAStore()
 | |
| 	{
 | |
| 	    const cid = "@novell.com/CASA/MiCASAKeys;1";
 | |
| 	   
 | |
|         //if (obj == null)
 | |
|         {
 | |
|             obj = Components.classes[cid].createInstance();
 | |
|             //alert('test3');
 | |
|             obj = obj.QueryInterface(Components.interfaces.IMiCASAKeys);
 | |
|             //alert(obj);
 | |
|         }
 | |
|         return obj;
 | |
| 	}
 | |
| 	
 | |
| 		
 | |
| 	function getBanditUsername()
 | |
| 	{
 | |
| 		logMessage("getBanditUsername");
 | |
| 		var theValue = new String();
 | |
| 		var obj = getMiCASAStore();
 | |
| 		logMessage(obj);
 | |
| 		if (obj != null)
 | |
| 		{		
 | |
| 			var res = obj.miCASAReadKey("Bandit", "ldapdn", theValue);
 | |
| 			logMessage("MiCASAReadKey returnCode: " + res);		    		    
 | |
| 			if (res == 0)
 | |
| 			{
 | |
| 				alert(theValue);
 | |
| 			}
 | |
| 		}	
 | |
| 		return theValue;
 | |
| 	}
 | |
| 	
 | |
| 	function getBanditPassword()
 | |
| 	{
 | |
| 		logMessage("getBanditPassword");
 | |
| 		var theValue = new String();
 | |
| 		var obj = getMiCASAStore();
 | |
| 		logMessage(obj);
 | |
| 		if (obj != null)
 | |
| 		{			
 | |
| 			var res = obj.miCASAReadKey("Bandit", "password", theValue);
 | |
| 			logMessage("MiCASAReadKey returnCode: " + res);		    
 | |
| 			if (res == 0)
 | |
| 			{
 | |
| 				alert(theValue);
 | |
| 			}
 | |
| 		}		
 | |
| 	}
 | |
| 	
 | |
| 	function processIA()
 | |
| 	{
 | |
| 		
 | |
| 		// get selected persona
 | |
| 		//var selectedPersona = getSelectedPersona();
 | |
| 		var selectedPersona = sCurrentPersona;
 | |
| 		logMessage("Selected Persona: " + selectedPersona);
 | |
| 		
 | |
| 		// get selected attribs
 | |
| 		var selected = getSelectedAttribs();				
 | |
| 		//alert(selected);
 | |
| 		
 | |
| 		// build array of selected attribs
 | |
| 		var csvSelected = '';
 | |
| 		for (var i=0; i<selected.length; i++)
 | |
| 		{
 | |
| 			csvSelected += selected[i].value + ',';		
 | |
| 		}
 | |
| 		
 | |
| 		// get selected attribs
 | |
| 		selected = getSelectedAttribsOptional();				
 | |
| 				
 | |
| 		for (var i=0; i<selected.length; i++)
 | |
| 		{
 | |
| 			csvSelected += selected[i].value + ',';		
 | |
| 		}
 | |
| 		
 | |
| 		//alert(csvSelected);		
 | |
| 		var arraySelected = csvSelected.split(',');
 | |
| 		logMessage("Selected Array: " + arraySelected);
 | |
| 
 | |
| 		var sUser = readCASASetting("Bandit", "ldapdn");
 | |
| 		var sPass = readCASASetting("Bandit", "password");
 | |
| 						
 | |
| 		if (sUser != null)
 | |
| 		{
 | |
| 			logMessage("CASA returned:"+sUser);
 | |
| 		}
 | |
| 		else
 | |
| 		{
 | |
| 			logMessage("SecretID Bandit not found");
 | |
| 			sUser = "cn=admin,o=novell";
 | |
| 		}
 | |
| 		
 | |
| 
 | |
| 		var	htData;
 | |
| 		if (selectedPersona == "CASA")
 | |
| 		{
 | |
| 			htData = getCASAData(arraySelected);
 | |
| 		}	
 | |
| 		else
 | |
| 		{	
 | |
| 			try 
 | |
| 			{			
 | |
| 				logMessage(" ********* Calling IA");
 | |
| 				htData = Packages.Jim.main2("cn=bandit1,o=Novell", sPass, null, selectedPersona, arraySelected);
 | |
| 				logMessage(" ******** Returned");
 | |
| 			}
 | |
| 			catch (err)
 | |
| 			{
 | |
| 				logMessage(" ******** Error calling IA: " + err);
 | |
| 			}
 | |
| 		}
 | |
| 						
 | |
| 		//alert(htData);		
 | |
| 		// if we got the stuff, request url with this stuff
 | |
| 		if ((htData != null) && (htData.size() > 0))
 | |
| 		{										
 | |
| 			var repostURL = opener._content.location + "?";										
 | |
| 			var keys = htData.keys();
 | |
| 			while (keys.hasMoreElements())
 | |
| 			{
 | |
| 				var sKey = keys.nextElement();
 | |
| 				var sValue = htData.get(sKey);
 | |
| 				repostURL += (sKey + "=" + sValue);						
 | |
| 				if (keys.hasMoreElements())
 | |
| 					repostURL += "&";						
 | |
| 			}					
 | |
| 													
 | |
| 			opener._content.location = repostURL;
 | |
| 						
 | |
| 		}						
 | |
| 		
 | |
| 		// close this window
 | |
| 		window.close();	
 | |
| 				
 | |
| 	}
 | |
| 	
 | |
| 	
 | |
| 
 | |
| 	function closeWin()
 | |
| 	{
 | |
| 		var secretID = "";
 | |
| 		var sKey = "";
 | |
| 		var sValue = "";		
 | |
| 		
 | |
| 		var url = document.location.toString();
 | |
| 		var params = url.substring(url.indexOf('?')+1).split('&');
 | |
| 
 | |
| 		var remember = document.getElementById("CASA.RememberMe");
 | |
| 		var autologin = document.getElementById("CASA.RemAndLogin");
 | |
| 		var never = document.getElementById("CASA.Never");		
 | |
| 			    
 | |
| 	    try 
 | |
| 	    {
 | |
| 	        //alert('test1');
 | |
| 		    netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
 | |
|     	    //alert('test2');
 | |
| 	        const cid = "@novell.com/CASA/MiCASAKeys;1";
 | |
| 	        //if (obj == null)
 | |
| 	        {
 | |
| 	            obj = Components.classes[cid].createInstance();	
 | |
| 	            //alert(obj);
 | |
| 	            obj = obj.QueryInterface(Components.interfaces.IMiCASAKeys);		            
 | |
| 	            //alert(obj);	            
 | |
| 	        }
 | |
| 
 | |
|         } catch (err) 
 | |
|         {
 | |
| 	        logMessage(err);
 | |
| 	        return;
 | |
| 	    }
 | |
| 	    				
 | |
| 		// get the secretID (url host)
 | |
| 		for (var i = 0; !(i > params.length - 1); i++)
 | |
| 		{		    
 | |
| 		    sKey = params[i].substring(0, params[i].indexOf('='));
 | |
| 		    sValue = params[i].substring(params[i].indexOf('=')+1);
 | |
| 
 | |
| 		    if (sKey == "secretid")
 | |
| 		    {
 | |
| 		        secretID = sValue;
 | |
| 		        break;
 | |
| 		    }
 | |
| 		}
 | |
| 
 | |
| 		
 | |
| 		//alert(never.selected);
 | |
| 
 | |
| 	    if (never.selected)
 | |
| 	    {	     
 | |
|             try 
 | |
|             {    		        
 | |
| 	    	    res = obj.miCASAWriteKey(secretID, 'Config.DoNotSave', 'true');
 | |
| 	    	}
 | |
| 	    	catch (err)
 | |
| 	    	{
 | |
| 	    	     //alert(err);
 | |
| 	    	}	
 | |
| 	    	window.close();    
 | |
| 	    	return;	    
 | |
| 	    }		
 | |
| 		
 | |
| 		
 | |
| 		if (remember.selected || autologin.selected)
 | |
| 		{				
 | |
| 		    // save each key-value
 | |
| 		    var res;
 | |
| 		    for (i = 0; !(i > params.length - 1); i++)
 | |
| 		    {		    
 | |
| 		        sKey = params[i].substring(0, params[i].indexOf('='));
 | |
| 		        sValue = params[i].substring(params[i].indexOf('=')+1);
 | |
| 
 | |
| 		        if (sKey == "secretid")
 | |
| 		        {
 | |
|                     //alert('do nothing');
 | |
| 		        }
 | |
| 		        else		        
 | |
| 		        {
 | |
| 					if (sValue.length > 0)
 | |
| 					{
 | |
| 						logMessage('Writing ' + secretID + '[' + secretID.length + '] : ' + sKey + ' : xxxxxxx');
 | |
| 						try {    		        
 | |
| 	    					res = obj.miCASAWriteKey(secretID, sKey, sValue);
 | |
| 	    					if (res != 0)
 | |
| 	    						logMessage('Error saving key');
 | |
| 	    				}
 | |
| 	    				catch (err)
 | |
| 	    				{
 | |
| 	    					alert('CASA services not available');
 | |
| 	    					logMessage(err);
 | |
| 	    					window.close();
 | |
| 	    					return;
 | |
| 	    				}
 | |
| 	    	        }		 
 | |
| 		        }
 | |
| 		    }
 | |
|                                     
 | |
| 		    if (autologin.selected)
 | |
| 		    {
 | |
|     		    //alert(" set autologin flag ");		        
 | |
| 		        res = obj.miCASAWriteKey(secretID, 'autologin', 'true');
 | |
| 		    }
 | |
| 		    else
 | |
| 		    {		        
 | |
| 		        res = obj.miCASAWriteKey(secretID, 'autologin', 'false');
 | |
| 		    }
 | |
| 		}
 | |
| 		
 | |
| 		window.close();		
 | |
| 	}
 | |
| 
 | |
| 	function cancelWin()
 | |
| 	{
 | |
| 	    window.close();
 | |
| 	}
 | |
| 
 | |
| 
 | |
| 
 | |
| logMessage('adding event listener');
 | |
| window.addEventListener("load",websso,true) ;
 | |
| window.addEventListener("submit",promptuser,true) ;
 | |
| 
 |