From 67810a8a0b08fc8697ee8fc8843af3757c12a421 Mon Sep 17 00:00:00 2001 From: jmccrohan Date: Wed, 6 Apr 2011 15:29:05 +0100 Subject: Initial Commit --- src/chrome/content/proxy.js | 1080 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 1080 insertions(+) create mode 100644 src/chrome/content/proxy.js (limited to 'src/chrome/content/proxy.js') diff --git a/src/chrome/content/proxy.js b/src/chrome/content/proxy.js new file mode 100644 index 0000000..8c94d0f --- /dev/null +++ b/src/chrome/content/proxy.js @@ -0,0 +1,1080 @@ +/* +* 2008 +* Copyright Steve McFred and Jeremy Gillick (author of SwitchProxy) +*/ + +/* +* +* ERROR CODES +* 100 - 149: mproxy_setProxy() +* 150 - 199: mproxy_removeProxy() +* 200 - 249: mproxy_clearCookies() +* 250 - 299: mproxy_editProxyDialog() +* 300 - 349: mproxy_manualUpgradCheck() +* +*/ + +var gSwitchP_List; +var gSwitchP_ListPopup; +var gSwitchP_ContextList; +var gSwitchP_StatusBar; +var gSwitchP_MenuList; +var gSwitchP_ManageList; +var gSwitchP_ElementList; +var gSwitchP_ElementButton; +var gSwitchP_LastItem; +var gSwitchP_ProxyCount = 0; +var gSwitchP_InManager = false; +var gSwitchP_Loaded = false; +var gSwitchP_Cycle = null; +var gSwitchP_CommandEnd = true; +var gSwitchP_Prefs = null; +var gSwitchP_NoneLabel = "None"; + +var gSwitchPTabMgr = null; + +function mproxy_initProxy(event){ + + window.removeEventListener("load", mproxy_initProxy, true); + + if(!gSwitchP_Loaded){ + + gSwitchP_List = document.getElementById('proxy-list') + gSwitchP_ListPopup = document.getElementById('proxy-list-popup'); + gSwitchP_ManageList = document.getElementById('manage-proxy-list'); + gSwitchP_ContextList = document.getElementById('context-proxy-list'); + gSwitchP_StatusBar = document.getElementById('mproxy-status'); + gSwitchP_MenuList = document.getElementById('mproxy-menu-list'); + gSwitchP_ElementList = document.getElementById('mproxy-element-list'); + gSwitchP_ElementButton = document.getElementById('mproxy-element-button'); + gSwitchP_Prefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch); + + gSwitchP_NoneLabel = mproxy_getString("common.proxy.none"); + + //Is in Proxy Manager + if(gSwitchP_ManageList != null){ + gSwitchP_InManager = true; + gSwitchP_List = gSwitchP_ManageList; + } + + mproxy_showMenus(true); + + //Cleanup RDF File + mproxy_cleanupRdf(); + + //Populate Proxy List + mproxy_populateList(); + + //Set Last Proxy Selected + if(gSwitchP_List != null) + gSwitchP_LastItem = gSwitchP_List.selectedItem; + + //Add Preferences Listener + var oProxyObserver = { + observe : function(subject, topic, data){ mproxy_populateList(); } + }; + var oMenuObserver = { + observe : function(subject, topic, data){ mproxy_showMenus(false); } + }; + //var oPrefBranch = Components.classes["@mozilla.org/preferences-service;1"].createInstance(Components.interfaces.nsIPrefBranchInternal); + ////oPrefBranch.addObserver("network.proxy", oPrefObserver, false); + //oPrefBranch.addObserver("mproxy.proxy.rdf.lastupdate", oProxyObserver, false); + //oPrefBranch.addObserver("mproxy.display", oMenuObserver, false); + + //if(navigator.userAgent.search(/Thunderbird/gi) > -1){ + // oPrefBranch = Components.classes["@mozilla.org/preferences-service;1"].createInstance(Components.interfaces.nsIPrefBranchInternal); + //} + //Else{ +oPrefBranch = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService); +//} +oPrefBranch.addObserver("mproxy.proxy.rdf.lastupdate", oProxyObserver, false); +//oPrefBranch.addObserver("mproxy.display", oMenuObserver, false); +//oPrefBranch.addObserver("network.proxy", oPrefObserver, false); + + //Auto-Update Anonymous Proxy Lists (after 10 minutes) + //gAnonUpdateTimout = setTimeout("mproxy_anon_autoUpdateLists()", 600000); + + // Start Anon Rotation + //setTimeout("mproxy_anon_nextProxy()", 1000); + + gSwitchP_Loaded = true; + } +} + +// Return Tab Manager +function mproxy_getTabManager(){ + return gSwitchPTabMgr; +} + +//Used for debugging removed + + +//Displays the context menu based on what +// the user selects in the options +function mproxy_showMenus(onStartup){ + try{ + //Show/Hide menus + var oPrefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService).getBranch(""); + + // Status Bar + var isHidden = (oPrefs.prefHasUserValue("mproxy.display.statusbar") && !oPrefs.getBoolPref("mproxy.display.statusbar")) + document.getElementById("mproxy-status").setAttribute("collapsed", isHidden); + + // If not thunderbird + if(navigator.userAgent.search(/Thunderbird/gi) < 0){ + + //Context + var isHidden = (oPrefs.prefHasUserValue("mproxy.display.context") && !oPrefs.getBoolPref("mproxy.display.context")) + document.getElementById("mproxy-context-menu").setAttribute("collapsed", isHidden); + document.getElementById("mproxy-context-separator").setAttribute("hidden", isHidden); + + //Toolbar + if(onStartup){ + oPrefs.setBoolPref("mproxy.display.toolbar", (!document.getElementById("proxy-toolbar").getAttribute("collapsed"))); + } + else{ + var isHidden = (oPrefs.prefHasUserValue("mproxy.display.toolbar") && !oPrefs.getBoolPref("mproxy.display.toolbar")) + document.getElementById("proxy-toolbar").setAttribute("collapsed", isHidden); + } + } + + }catch(err){} +} + +// Show Element List +function mproxy_showElementList(event){ + + var oContext = document.getElementById('context-proxy-list'); + if(oContext == null){ + return; + } + +} + +//Returns is the entered menu is currently showing +// values are 'context' or 'toolbar' +function mproxy_menuShowing(sMenu){ + var oObj = null; + + if(sMenu == "context"){ + oObj = document.getElementById("mproxy-context-menu"); + } + else if(sMenu == "toolbar"){ + oObj = document.getElementById("proxy-toolbar"); + } + + if(oObj == null) + return false; + + return !eval(oObj.getAttribute("collapsed")); +} + + +//Clears current Proxy List +function mproxy_clearList(){ + + gSwitchP_ProxyCount = 0; + + //Toolbar List + if(!gSwitchP_InManager && gSwitchP_List != null && gSwitchP_List.removeAllItems && !gSwitchP_List.open){ + gSwitchP_List.removeAllItems(); + } + //Manage Proxy Box + if(gSwitchP_InManager && gSwitchP_List != null){ + aNodes = gSwitchP_List.childNodes; + for(var i = aNodes.length-1; i >= 0; i--){ + gSwitchP_List.removeChild(aNodes[i]); + } + } + //Context List + if(gSwitchP_ContextList != null){ + aNodes = gSwitchP_ContextList.childNodes; + for(var i = aNodes.length-1; i >= 0; i--){ + gSwitchP_ContextList.removeChild(aNodes[i]); + } + } + //Toolbar Element List + if(gSwitchP_ElementList != null){ + aNodes = gSwitchP_ElementList.childNodes; + for(var i = aNodes.length-1; i >= 0; i--){ + if(aNodes[i].getAttribute("class") == "proxy-menu-item") + gSwitchP_ElementList.removeChild(aNodes[i]); + } + } + // Tools Menu List + if(gSwitchP_MenuList != null){ + aNodes = gSwitchP_MenuList.childNodes; + for(var i = aNodes.length-1; i >= 0; i--){ + if(aNodes[i].getAttribute("class") == "proxy-menu-item") + gSwitchP_MenuList.removeChild(aNodes[i]); + } + } +} + +//Add Item to lists +function mproxy_appendToList(sLabel, sValue, isSelected, iType){ + var oItem = null; + + gSwitchP_ProxyCount++; + + try{ + + //Toolbar List + if(!gSwitchP_InManager && gSwitchP_List != null && !gSwitchP_List.open){ + oItem = gSwitchP_List.appendItem(sLabel, sValue); + oItem.setAttribute("oncommand", "mproxy_selectProxy();"); //mproxy_anon_stopRotation(); + oItem.setAttribute("proxyType", iType); + } + + //Manage Proxy Box + if(gSwitchP_InManager && gSwitchP_List != null && sLabel != gSwitchP_NoneLabel){ + oItem = gSwitchP_List.appendItem(sLabel, sValue); + oItem.setAttribute("proxyType", iType); + } + + //Context List + if(gSwitchP_ContextList != null){ + oItem = document.createElement("menuitem"); + oItem.setAttribute("label", sLabel); + oItem.setAttribute("value", sValue); + oItem.setAttribute("type", "checkbox"); + oItem.setAttribute("autocheck", "false"); + oItem.setAttribute("proxyType", iType); + oItem.setAttribute("oncommand", "mproxy_queueSetProxy(this);"); + gSwitchP_ContextList.appendChild(oItem); + } + + //Toolbar Element List + if(gSwitchP_ElementList != null){ + //Get separator, which is after proxy list + var oSeparator = document.getElementById("mproxy-element-list-separator"); + oItem = document.createElement("menuitem"); + oItem.setAttribute("id", sValue); + oItem.setAttribute("label", sLabel); + oItem.setAttribute("value", sValue); + oItem.setAttribute("type", "checkbox"); + oItem.setAttribute("autocheck", "false"); + oItem.setAttribute("proxyType", iType); + oItem.setAttribute("class", "proxy-menu-item"); + oItem.setAttribute("oncommand", "mproxy_queueSetProxy(this);"); + gSwitchP_ElementList.insertBefore(oItem, oSeparator); + } + + // Tools Menu List + if(gSwitchP_MenuList != null){ + //Get separator, which is after proxy list + var oSeparator = document.getElementById("mproxy-menu-list-separator"); + oItem = document.createElement("menuitem"); + oItem.setAttribute("id", sValue); + oItem.setAttribute("label", sLabel); + oItem.setAttribute("value", sValue); + oItem.setAttribute("type", "checkbox"); + oItem.setAttribute("autocheck", "false"); + oItem.setAttribute("proxyType", iType); + oItem.setAttribute("class", "proxy-menu-item"); + oItem.setAttribute("oncommand", "mproxy_queueSetProxy(this);"); + gSwitchP_MenuList.insertBefore(oItem, oSeparator); + } + + //Select + if(isSelected) + mproxy_selectItem(sLabel); + + }catch(err){} +} + +//Sets List item with labe sLabel, to be selected/checked +function mproxy_selectItem(sLabel){ + + try{ + + //Toolbar List + if(!gSwitchP_InManager && gSwitchP_List != null){ + oItem = gSwitchP_List.getElementsByAttribute("label", sLabel); + if(oItem != null){ + oItem = oItem[0]; + gSwitchP_List.selectedItem = oItem; + oItem.setAttribute("selected", true); + } + } + + //Context + if(gSwitchP_ContextList != null){ + oItem = gSwitchP_ContextList.getElementsByAttribute("label", sLabel); + if(oItem != null){ + //Uncheck Other + var aChecked = gSwitchP_ContextList.getElementsByAttribute("checked", "true"); + for(var c = 0; c < aChecked.length; c++){ + aChecked[c].setAttribute("checked", false); + } + + //Select + oItem = oItem[0]; + gSwitchP_ContextList.selectedItem = oItem; + oItem.setAttribute("checked", true); + } + } + + //Toolbar Element List + if(gSwitchP_ElementList != null){ + oItem = gSwitchP_ElementList.getElementsByAttribute("label", sLabel); + if(oItem != null && oItem.length > 0){ + + //Uncheck Other + var aChecked = gSwitchP_ElementList.getElementsByAttribute("checked", "true"); + for(var c = 0; c < aChecked.length; c++){ + aChecked[c].setAttribute("checked", false); + } + + //Check Selected + oItem = oItem[0]; + gSwitchP_ElementList.selectedItem = oItem; + oItem.setAttribute("selected", true); + oItem.setAttribute("checked", true); + + //Change Button Label + gSwitchP_ElementButton = document.getElementById('mproxy-element-button'); + if(gSwitchP_ElementButton != null){ + gSwitchP_ElementButton.setAttribute("label", sLabel); + } + } + } + + // Tools Menu List + if(gSwitchP_MenuList != null){ + oItem = gSwitchP_MenuList.getElementsByAttribute("label", sLabel); + if(oItem != null && oItem.length > 0){ + + //Uncheck Other + var aChecked = gSwitchP_MenuList.getElementsByAttribute("checked", "true"); + for(var c = 0; c < aChecked.length; c++){ + aChecked[c].setAttribute("checked", false); + } + + //Check Selected + oItem = oItem[0]; + gSwitchP_MenuList.selectedItem = oItem; + oItem.setAttribute("selected", true); + oItem.setAttribute("checked", true); + } + } + + // Status Bar + if(gSwitchP_StatusBar != null){ + gSwitchP_StatusBar.setAttribute("label", mproxy_getString("common.label.proxy")+" "+sLabel); + } + mproxy_clearTimeout(gSwitchP_Cycle); + + }catch(err){ + mproxy_debug(err); + } +} + +//Return menuitem for the given sUri +function mproxy_getMenuItem(sUri){ + var oItem = null; + + //Toolbar + oItem = (gSwitchP_List != null) ? gSwitchP_List.getElementsByAttribute("value", sUri) : null; + if(oItem != null && oItem[0] != null) + return oItem[0]; + + //Context + oItem = (gSwitchP_List != null) ? gSwitchP_ContextList.getElementsByAttribute("value", sUri) : null; + if(oItem != null && oItem[0] != null) + return oItem[0]; + + //Toolbar Element + oItem = (gSwitchP_List != null) ? gSwitchP_ElementList.getElementsByAttribute("value", sUri) : null; + if(oItem != null && oItem[0] != null) + return oItem[0]; + + + //Default + return null; +} + +function mproxy_cycle(sAction){ + if(gSwitchP_Cycle != null){ + + mproxy_clearTimeout(gSwitchP_Cycle); + gSwitchP_CommandEnd = true; + + if(sAction == 'change' && gSwitchP_LastItem != null && gSwitchP_List != null && gSwitchP_List.selectedItem.label != gSwitchP_LastItem.label && gSwitchP_List.selectedIndex > 0){ + gSwitchP_List.label = gSwitchP_LastItem.label; + gSwitchP_List.selectedItem = gSwitchP_LastItem; + gSwitchP_List.selectedItem.value = gSwitchP_LastItem.value; + + mproxy_setProxy(); + } + else if(sAction == 'select' && gSwitchP_List != null && gSwitchP_List.selectedIndex > -1){ + mproxy_setStatus(mproxy_getString("toolbar.notApplied"), "#F00"); + setTimeout("mproxy_setStatus(mproxy_getString('toolbar.loading'))", 3000); + setTimeout("mproxy_populateList('"+ gSwitchP_LastItem.label +"');", 4000); + setTimeout("mproxy_setProxy();", 4500); + } + + } +} + +//When user selects a Proxy from the menu list +function mproxy_selectProxy(){ + + mproxy_clearTimeout(gSwitchP_Cycle); + if(gSwitchP_List == null || gSwitchP_List.selectedItem == null || gSwitchP_InManager) + return; + + //if(gSwitchP_List.selectedItem.label != gSwitchP_NoneLabel){ + //document.getElementById('edit-button').disabled = false; + //document.getElementById('remove-button').disabled = false; + //document.getElementById('edit-button').image = "chrome://mproxy/content/icons/pencil.png"; + //document.getElementById('remove-button').image = "chrome://mproxy/content/icons/cross.png"; + + //} + //else{ + //document.getElementById('edit-button').disabled = true; + //document.getElementById('remove-button').disabled = true; + //document.getElementById('edit-button').image = "chrome://mproxy/content/icons/pencil_disabled.png"; + //document.getElementById('remove-button').image = "chrome://mproxy/content/icons/cross_disabled.png"; + //} + + if(typeof(gSwitchP_List.selectedItem.value) != 'undefined'){ + //If this item is not being used by the browser, + // show a helpful message and cycle + var oPrefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService).getBranch(""); + if((!oPrefs.prefHasUserValue("mproxy.proxy.current") || oPrefs.getCharPref("mproxy.proxy.current") != gSwitchP_List.selectedItem.value) && gSwitchP_LastItem != null && gSwitchP_LastItem != gSwitchP_List.selectedItem){ + mproxy_setStatus(mproxy_getString("toolbar.clickApply"), "#060"); + + //Cycle if user doesn't click 'Apply' + //if(gSwitchP_Cycle == null) + // gSwitchP_Cycle = setTimeout("mproxy_cycle('select')", 10000); + } + //If it is being used by the browser + else if(oPrefs.prefHasUserValue("mproxy.proxy.current") && oPrefs.getCharPref("mproxy.proxy.current") == gSwitchP_List.selectedItem.value){ + mproxy_clearTimeout(gSwitchP_Cycle); + + //Anonomous + if(gSwitchP_List.selectedItem.getAttribute("proxyType") == "3"){ + // if(mproxy_anon_getCurrent() == "unknown") + // mproxy_setProxy(false); + // + // mproxy_setStatus(mproxy_getString("toolbar.using") +" "+ gSwitchP_List.selectedItem.label +" ["+ mproxy_anon_getCurrent() +"] ("+ mproxy_anon_getCurrentCount() +")"); + } + //Standard + else{ + mproxy_setStatus(mproxy_getString("toolbar.using") +" "+ gSwitchP_List.selectedItem.label); + } + } + else{ + mproxy_clearTimeout(gSwitchP_Cycle); + mproxy_setStatus(mproxy_getString("toolbar.using.none")); + } + } + + return true; +} + +//Queue Set Proxy +function mproxy_queueSetProxy(oMenuItem){ + mproxy_clearTimeout(gSwitchP_Cycle); + setTimeout("mproxy_setProxy(true, true, null, '"+ oMenuItem.label +"', '"+ oMenuItem.getAttribute("value") +"', '"+ oMenuItem.getAttribute("proxyType") +"')", 10); +} + +//Set Proxy +function mproxy_setProxy(bClean, fromContextMenu, oMenuItem, sLabel, sUri, sType){ + + //Start Command + gSwitchP_CommandEnd = false; + mproxy_clearTimeout(gSwitchP_Cycle); + //mproxy_anon_stopRotation(); + + //If in Proxy Manager, do nothing + if(gSwitchP_InManager){ + gSwitchP_CommandEnd = true; + return; + } + + var hasError = false; + + //Set fromContextMenu + if(fromContextMenu == null) + fromContextMenu = false; + + //Get Proxy URI & Label + var sProxyUri = ""; + var sProxyLabel = ""; + var sProxyType = 0; + if(sUri != null && sLabel != null){ + sProxyUri = sUri; + sProxyLabel = sLabel; + + if(sType) sProxyType = sType; + } + else if(oMenuItem != null){ + sProxyUri = oMenuItem.getAttribute("value"); + sProxyLabel = oMenuItem.getAttribute("label"); + sProxyType = oMenuItem.getAttribute("proxyType"); + } + else{ + if(fromContextMenu == true){ + sProxyUri = gSwitchP_ContextList.selectedItem.value; + sProxyLabel = gSwitchP_ContextList.selectedItem.label; + sProxyType = gSwitchP_ContextList.selectedItem.getAttribute("proxyType"); + } + else if(gSwitchP_List != null){ + sProxyUri = gSwitchP_List.selectedItem.value; + sProxyLabel = gSwitchP_List.selectedItem.label; + sProxyType = gSwitchP_List.selectedItem.getAttribute("proxyType"); + } + } + + //Branch if Anonomous + if(sProxyType == "3"){ + //mproxy_setStatus(mproxy_getString("toolbar.loading")); + //mproxy_anon_loadProxy(sProxyUri, true); + } + else if(sProxyUri != ""){ + mproxy_setStatus(mproxy_getString("toolbar.loading")); + try{ + //Always clear proxy settings first - this may mess up with selection... + //gSwitchP_Prefs.setIntPref("network.proxy.type", 0); + + //Change Browser Preferences + var aProps = mproxy_ds_getPropertyValuesFor(sProxyUri); + + for(key in gmproxy_options){ + + //Get pref type and update preference + var sPrefVal = ""; + if(typeof(gmproxy_options_defaults[key]) == "number"){ + gSwitchP_Prefs.setIntPref(gmproxy_options[key], parseInt(aProps[gSProxyRdfNodeUriRoot +"#"+ key])); + } + else if(typeof(gmproxy_options_defaults[key]) == "boolean"){ + gSwitchP_Prefs.setBoolPref(gmproxy_options[key], eval(aProps[gSProxyRdfNodeUriRoot +"#"+ key])); + } + else{ //String + gSwitchP_Prefs.setCharPref(gmproxy_options[key], aProps[gSProxyRdfNodeUriRoot +"#"+ key]); + } + } + + //Get Proxy Label + sProxyLabel = aProps[gSProxyRdfNodeName]; + + //Update Status + mproxy_setStatus(mproxy_getString("toolbar.using") +" "+ sProxyLabel); + + //Update Preference + gSwitchP_Prefs.setCharPref("mproxy.proxy.current", sProxyUri); + } + catch(err){ + alert("100: "+ mproxy_getString("error.unknown")+ "\n("+ err +")"); + hasError = true; + + //Cycle back to 'None' + //if(gSwitchP_Cycle == null && !fromContextMenu) + // gSwitchP_Cycle = setTimeout("mproxy_cycle('change')", 500); + } + } + else{ + //Turn off proxy pref + try{ + gSwitchP_Prefs.setIntPref("network.proxy.type", 0); + + //Update Status + mproxy_setStatus(mproxy_getString("toolbar.using.none")); + + + //Update Preference + gSwitchP_Prefs.setCharPref("mproxy.proxy.current", ""); + + }catch(e){ + alert("101: "+ mproxy_getString("error.unknown")); + hasError = true; + } + } + + // Finalize + if(hasError){ + //Update Status + mproxy_setStatus(mproxy_getString("error.proxy.load") +" " + sProxyLabel, "#F00"); + } + else{ + + //mproxy_tab_notify(sProxyUri); + + //Select this proxy in all lists + mproxy_selectItem(sProxyLabel); + + //Set Last Proxy + gSwitchP_LastItem = mproxy_getMenuItem(sProxyUri); + + //Options + try{ + if(bClean){ + // Clear Cookies + if(typeof(gBrowser) != 'undefined' && gSwitchP_Prefs.prefHasUserValue("mproxy.clear.cookies") && gSwitchP_Prefs.getBoolPref("mproxy.clear.cookies")){ + mproxy_clearCookies(); + } + + // Reload Page + if((typeof(gBrowser) != 'undefined' && (!gSwitchP_Prefs.prefHasUserValue("mproxy.reload.tab") || gSwitchP_Prefs.getBoolPref("mproxy.reload.tab")))){ + try{ + var oTab = gBrowser.mCurrentBrowser; + oTab.webNavigation.reload(nsIWebNavigation.LOAD_FLAGS_BYPASS_PROXY | nsIWebNavigation.LOAD_FLAGS_BYPASS_CACHE); + } catch(err) { } + } + + // Set Update Pref + gSwitchP_Prefs.setIntPref("mproxy.proxy.rdf.lastupdate", (new Date()).getTime()); + } + + }catch(err){alert("102: "+ mproxy_getString("error.unknown") + "\n("+err+")");} + } + + //End Command + gSwitchP_CommandEnd = true; + +} + +//Test if the RDF Element, oRef, is the current proxy being used +function mproxy_isSelected(oRef){ + + try{ + var oPrefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch); + var aProps = mproxy_ds_getPropertyValuesFor(oRef.Value); + var sCurrUri = ""; + var iType = parseInt(aProps[gSProxyRdfNodeUriRoot + "#networkProxyType"]); + + if(oPrefs.prefHasUserValue("mproxy.proxy.current") && (sCurrUri = oPrefs.getCharPref("mproxy.proxy.current")) == oRef.Value){ + + //Verify this is really what's being used in the browser + if(iType == oPrefs.getIntPref("network.proxy.type")){ + if(iType == 1){ + for(key in gmproxy_options){ + + //Skip These Keys + if(key == "networkProxyType" || key == "networkProxyAutoconfigURL" || key == "networkProxyHTTPShare" ) + continue; + + //Skip if RDF has Default Values + if( (key == "networkProxySOCKSVersion" && (aProps[gSProxyRdfNodeUriRoot +"#"+ key] == "5" || aProps[gSProxyRdfNodeUriRoot +"#"+ key] == "")) + || (key == "networkProxyNone" && aProps[gSProxyRdfNodeUriRoot +"#"+ key] == "localhost, 127.0.0.1")){ + continue; + } + + //If Pref and RDF doesn't have a value for this + if(!oPrefs.prefHasUserValue(gmproxy_options[key]) + && (aProps[gSProxyRdfNodeUriRoot +"#"+ key] == "" || aProps[gSProxyRdfNodeUriRoot +"#"+ key] == "0")){ + continue; + } + + // If pref doesn't have this and the RDF record does + // return false + if(!oPrefs.prefHasUserValue(gmproxy_options[key]) + && (aProps[gSProxyRdfNodeUriRoot +"#"+ key] != "" && aProps[gSProxyRdfNodeUriRoot +"#"+ key] != "0")){ + return false; + } + + + //Get pref and convert to string + var sPrefVal = ""; + if(oPrefs.getPrefType(gmproxy_options[key]) == Components.interfaces.nsIPrefBranch.PREF_INT) + sPrefVal = oPrefs.getIntPref(gmproxy_options[key]) + ""; + if(oPrefs.getPrefType(gmproxy_options[key]) == Components.interfaces.nsIPrefBranch.PREF_BOOL) + sPrefVal = oPrefs.getBoolPref(gmproxy_options[key]) + ""; + if(oPrefs.getPrefType(gmproxy_options[key]) == Components.interfaces.nsIPrefBranch.PREF_STRING) + sPrefVal = oPrefs.getCharPref(gmproxy_options[key]); + + //Return false if isn't equal + if(sPrefVal != aProps[gSProxyRdfNodeUriRoot +"#"+ key]){ + return false; + } + } + return true; + } + //If type is 2 and the PAC url is the same + else if(iType == 2 && oPrefs.prefHasUserValue("mproxy.proxy.current") + && oPrefs.getCharPref("network.proxy.autoconfig_url") == aProps[gSProxyRdfNodeUriRoot + "#networkProxyAutoconfigURL"]){ + return true; + } + } + //Anonomous + else if(iType == 3 && oPrefs.prefHasUserValue("network.proxy.http") && oPrefs.prefHasUserValue("network.proxy.http_port")){ + //var sProxy = oPrefs.getCharPref("network.proxy.http") +":"+ oPrefs.getIntPref("network.proxy.http_port"); + + //is sProxy in proxy list + //oTestRes = mproxy_ds_getElementForValue(gSProxyRdfNodeUriRoot +"#proxy", sProxy); + + //if(oTestRes instanceof Components.interfaces.nsIRDFResource && oTestRes.Value == oRes.Value){ + //mproxy_anon_loadProxy(oRef.Value, true); + //return true; + //} + + return false; + } + } + + }catch(err){} + + + return false; +} + +function mproxy_removeProxy(){ + mproxy_clearTimeout(gSwitchP_Cycle); + var oItem = gSwitchP_List.selectedItem; + + //Can't delete 'None' + if((gSwitchP_List.selectedItem != null) && + (gSwitchP_List.selectedItem.label == gSwitchP_NoneLabel) ){ + alert("150: "+ mproxy_getString("error.remove.forbidden")); + return; + } + + if(!confirm(mproxy_getString("confirm.remove"))) + return; + + try{ + //RDF + //Remove + mproxy_ds_removeElement(oItem.value); + + //Cleanup + mproxy_cleanupRdf(); + + //Update List + mproxy_populateList(); + setTimeout("mproxy_setProxy();", 300); + } + catch(err){ + alert("151: "+ mproxy_getString("error.remove") + "\n("+ err +")"); + } +} + +function mproxy_clearCookies(){ + try{ + var oCookies = Components.classes["@mozilla.org/cookiemanager;1"].createInstance(Components.interfaces.nsICookieManager); + oCookies.removeAll(); + }catch(err){ + alert("200: "+ mproxy_getString("error.cookie")); + } + return true; +} + +function mproxy_add_proxy(sName, sPort, issocks, toset){ + try{ + + var oTestProxy = mproxy_ds_getElementForValue(gSProxyRdfNodeName, sName); + if(oTestProxy != null){ + return false; + } + + var sProxyUri = mproxy_getUniqueProxyUri(); + var oProxy = mproxy_ds_getResource(sProxyUri); + mproxy_ds_addElement(sProxyUri); + + if (issocks) { //socks + mproxy_ds_addProperty(oProxy, mproxy_ds_getResource(gSProxyRdfNodeUriRoot+"#networkProxyType"), "1", true); + mproxy_ds_addProperty(oProxy, mproxy_ds_getResource(gSProxyRdfNodeUriRoot+"#networkProxyHTTP"), "", true); + mproxy_ds_addProperty(oProxy, mproxy_ds_getResource(gSProxyRdfNodeUriRoot+"#networkProxyHTTP_Port"), "", true); + mproxy_ds_addProperty(oProxy, mproxy_ds_getResource(gSProxyRdfNodeUriRoot+"#networkProxyHTTPShare"), false, true); + mproxy_ds_addProperty(oProxy, mproxy_ds_getResource(gSProxyRdfNodeUriRoot+"#networkProxySSL"), "", true); + mproxy_ds_addProperty(oProxy, mproxy_ds_getResource(gSProxyRdfNodeUriRoot+"#networkProxySSL_Port"), "", true); + mproxy_ds_addProperty(oProxy, mproxy_ds_getResource(gSProxyRdfNodeUriRoot+"#networkProxyFTP"), "", true); + mproxy_ds_addProperty(oProxy, mproxy_ds_getResource(gSProxyRdfNodeUriRoot+"#networkProxyFTP_Port"), "", true); + mproxy_ds_addProperty(oProxy, mproxy_ds_getResource(gSProxyRdfNodeUriRoot+"#networkProxyGopher"), "", true); + mproxy_ds_addProperty(oProxy, mproxy_ds_getResource(gSProxyRdfNodeUriRoot+"#networkProxyGopher_Port"), "", true); + mproxy_ds_addProperty(oProxy, mproxy_ds_getResource(gSProxyRdfNodeUriRoot+"#networkProxySOCKS"), "127.0.0.1", true); + mproxy_ds_addProperty(oProxy, mproxy_ds_getResource(gSProxyRdfNodeUriRoot+"#networkProxySOCKS_Port"), sPort, true); + mproxy_ds_addProperty(oProxy, mproxy_ds_getResource(gSProxyRdfNodeUriRoot+"#networkProxySOCKSVersion"), "5", true); + mproxy_ds_addProperty(oProxy, mproxy_ds_getResource(gSProxyRdfNodeUriRoot+"#networkProxyNone"), "localhost, 127.0.0.1", true); + mproxy_ds_addProperty(oProxy, mproxy_ds_getResource(gSProxyRdfNodeUriRoot+"#networkProxyAutoconfigURL"), "", true); + mproxy_ds_addProperty(oProxy, mproxy_ds_getResource(gSProxyRdfNodeUriRoot+"#name"), sName, true); + } + else { //regular http for all + mproxy_ds_addProperty(oProxy, mproxy_ds_getResource(gSProxyRdfNodeUriRoot+"#networkProxyType"), "1", true); + mproxy_ds_addProperty(oProxy, mproxy_ds_getResource(gSProxyRdfNodeUriRoot+"#networkProxyHTTP"), "127.0.0.1", true); + mproxy_ds_addProperty(oProxy, mproxy_ds_getResource(gSProxyRdfNodeUriRoot+"#networkProxyHTTP_Port"), sPort, true); + mproxy_ds_addProperty(oProxy, mproxy_ds_getResource(gSProxyRdfNodeUriRoot+"#networkProxyHTTPShare"), true, true); + mproxy_ds_addProperty(oProxy, mproxy_ds_getResource(gSProxyRdfNodeUriRoot+"#networkProxySSL"), "127.0.0.1", true); + mproxy_ds_addProperty(oProxy, mproxy_ds_getResource(gSProxyRdfNodeUriRoot+"#networkProxySSL_Port"), sPort, true); + mproxy_ds_addProperty(oProxy, mproxy_ds_getResource(gSProxyRdfNodeUriRoot+"#networkProxyFTP"), "127.0.0.1", true); + mproxy_ds_addProperty(oProxy, mproxy_ds_getResource(gSProxyRdfNodeUriRoot+"#networkProxyFTP_Port"), sPort, true); + mproxy_ds_addProperty(oProxy, mproxy_ds_getResource(gSProxyRdfNodeUriRoot+"#networkProxyGopher"), "127.0.0.1", true); + mproxy_ds_addProperty(oProxy, mproxy_ds_getResource(gSProxyRdfNodeUriRoot+"#networkProxyGopher_Port"), sPort, true); + mproxy_ds_addProperty(oProxy, mproxy_ds_getResource(gSProxyRdfNodeUriRoot+"#networkProxySOCKS"), "", true); + mproxy_ds_addProperty(oProxy, mproxy_ds_getResource(gSProxyRdfNodeUriRoot+"#networkProxySOCKS_Port"), "", true); + mproxy_ds_addProperty(oProxy, mproxy_ds_getResource(gSProxyRdfNodeUriRoot+"#networkProxySOCKSVersion"), "5", true); + mproxy_ds_addProperty(oProxy, mproxy_ds_getResource(gSProxyRdfNodeUriRoot+"#networkProxyNone"), "localhost, 127.0.0.1", true); + mproxy_ds_addProperty(oProxy, mproxy_ds_getResource(gSProxyRdfNodeUriRoot+"#networkProxyAutoconfigURL"), "", true); + mproxy_ds_addProperty(oProxy, mproxy_ds_getResource(gSProxyRdfNodeUriRoot+"#name"), sName, true); + } + if (toset) { + mproxy_setProxy(true, null, null, sName, sProxyUri, 1); + mproxy_selectItem(sName); + } + return true; + }catch(e){ + alert(mproxy_getString("error.unknown") +"\n("+ e +")"); + return false; + } +} + +function mproxy_populateList(sSelectedLabel){ + mproxy_clearTimeout(gSwitchP_Cycle); + + var sProxyUri = ""; + var iSelected = (gSwitchP_List != null) ? gSwitchP_List.selectedIndex : -1; + var aProxies = new Array(); + + //Don't populate if a local command has not finished or if list is open + if(!gSwitchP_CommandEnd){ + gSwitchP_CommandEnd = true; //reset + return; + } + else{ //Start Command + gSwitchP_CommandEnd = false; + } + + //Load Elements + try{ + + //Remove List Items & Add 'None' + mproxy_clearList(); + mproxy_appendToList(gSwitchP_NoneLabel, "", true, 0); + mproxy_selectItem(gSwitchP_NoneLabel); + + //Add Tor as default proxy, and set proxy to it + //mproxy_add_proxy(mproxy_getString("common.proxy.tor"), "9050", true, true); + + //Get and Sort Elements + var aProxies = mproxy_ds_getAllElements(); + aProxies.sort(mproxy_sortProxies); + + //Add to list + for(i = 0; i < aProxies.length; i++){ + + if(typeof(aProxies[i]) == 'undefined') + continue; + + try{ + + oRes = mproxy_ds_getResource(aProxies[i]); + sProxyName = mproxy_ds_getValueFor(oRes, mproxy_ds_getResource(gSProxyRdfNodeName)); + sProxyType = mproxy_ds_getValueFor(oRes, mproxy_ds_getResource(gSProxyRdfNodeUriRoot+ "#networkProxyType")); + + if(sProxyName != null){ + oItem = mproxy_appendToList(sProxyName, aProxies[i], false, sProxyType); + + //Select Item + if((sSelectedLabel != null && sSelectedLabel == sProxyName) || (sSelectedLabel == null && mproxy_isSelected(oRes))){ + mproxy_selectItem(sProxyName); + } + } + + } catch(err) {} + } + + //Finish + gSwitchP_CommandEnd = true; + setTimeout("mproxy_selectProxy();", 300); + + }catch(err){} +} + +/* +* Sort Proxy List +* + oResA and oResB are RDF URIs +*/ +function mproxy_sortProxies(oResA, oResB){ + try{ + //Get Proxy Names + sValA = mproxy_ds_getValueFor(mproxy_ds_getResource(oResA), mproxy_ds_getResource(gSProxyRdfNodeName)); + sValB = mproxy_ds_getValueFor(mproxy_ds_getResource(oResB), mproxy_ds_getResource(gSProxyRdfNodeName)); + + + if (sValA < sValB) + return -1; + if (sValA == sValB) + return 0; + if (sValA > sValB) + return 1; + } + catch(e){ return 0; } +} + +/* Cleanup unused mproxy data in RDF +* + Remove resources that have not been applied or used +*/ +function mproxy_cleanupRdf(){ + + try{ + + var aElements = mproxy_ds_getAllElements(); + for(var e = 0; e < aElements.length; e++){ + oRes = mproxy_ds_getResource(aElements[e]); + aProps = mproxy_ds_getPropertyValuesFor(aElements[e]); + + //If does not have a name property, + // then it is not listed -- so it's junk + if(aProps[gSProxyRdfNodeName] == null){ + mproxy_ds_removeElement(aElements[e]); + } + } + }catch(err){} +} + +// Automatic Upgrade +/* +* From Version 0.4 +* + Add preference 'mproxy.version' +* + Add preference 'mproxy.proxy.current' +* + Change proxy's URI to random number +* + Convert #proxy to networkProxyAutoconfigURL +* + Add elements for full manual proxy configuration +* + view the globals.js gmproxy_options array for full list +*/ + + +//Generates random number for proxy URI +function mproxy_getUniqueProxyUri(){ + var sUri = gSProxyRdfRoot + "/mproxy_" + Math.round((Math.random() * 200000)); + + if(mproxy_ds_doesProxyElementExist(sUri)) + return mproxy_getUniqueProxyUri(); + + return sUri; +} + +function mproxy_setStatus(sMsg, sColor){ + if(!sColor) + sColor = "#000"; + + oStatus = document.getElementById('status-text'); + + if(oStatus != null){ + document.getElementById('status-text').style.color = sColor; + document.getElementById('status-text').value = sMsg; + } +} + +//Clear Timeout +function mproxy_clearTimeout(){ + clearTimeout(gSwitchP_Cycle); + gSwitchP_Cycle = null; +} + +//Execute a command when system is ready +// iCurrCount is for internal use, do not +// pass this argument +function mproxy_doCommand(sCommand, iLimitCount){ + + if(iLimitCount == null) + iLimitCount = 0; + + //Wait for current command to end + if(!gSwitchP_CommandEnd && iLimitCount < 10){ + iLimitCount++ + setTimeout("mproxy_doCommand('"+ sCommand +"', "+ iCurrCount +")", 100); + } + else{ + gSwitchP_CommandEnd = true; + setTimeout(sCommand, 100); + } +} + +/* +* Launch Dialogs +*/ + + //Edit Proxy Dialog + function mproxy_editProxyDialog(isNew){ + mproxy_clearTimeout(gSwitchP_Cycle); + + var sAction = null; + + //Nothing Selected + var oEditItem = null + if(!isNew && (oEditItem = gSwitchP_List.selectedItem) == null){ + alert("250: "+ mproxy_getString("error.edit.select")); + return; + } + + //Can't edit 'None' + if(!gSwitchP_InManager && !isNew && gSwitchP_List != null && gSwitchP_List.selectedItem != null && gSwitchP_List.selectedItem.label == gSwitchP_NoneLabel){ + alert("251: "+ mproxy_getString("error.edit.forbidden")); + return; + } + + //Edit + if(!isNew){ + + //Anon + //if(oEditItem.getAttribute("proxyType") == "3"){ + // window.openDialog("chrome://mproxy/content/dialogs/editanon.xul","editproxy","centerscreen, chrome", "edit", oEditItem.value); + //} + //Standard + //else{ + window.openDialog("chrome://mproxy/content/dialogs/editproxy.xul","editproxy","centerscreen, chrome", "edit", oEditItem.value); + //} + } + //Add + else{ + //window.openDialog("chrome://mproxy/content/dialogs/addproxytype.xul","editproxy","centerscreen, chrome", "add"); + window.openDialog("chrome://mproxy/content/dialogs/editproxy.xul","addproxy","centerscreen, chrome", "add", gSwitchP_InManager); + } + } + + //Manage Proxy Dialog + function mproxy_openProxyManager(){ + window.openDialog("chrome://mproxy/content/dialogs/manager.xul","manageproxies","centerscreen, chrome, resizable"); + } + +/* +* Options +*/ + function mproxy_openmproxyPrefs(){ + window.openDialog("chrome://mproxy/content/options/options.xul","mproxyPrefs","centerscreen, chrome"); + } + + function mproxy_goTomproxySite(fromDialog){ + + // If Thunderbird + if(navigator.userAgent.search(/Thunderbird/gi) > -1){ + var messenger = Components.classes["@mozilla.org/messenger;1"].createInstance(); + messenger = messenger.QueryInterface(Components.interfaces.nsIMessenger); + messenger.launchExternalURL(gmproxy_DownloadSite +"?r=mproxy"); + } + else{ + opener.gBrowser.selectedTab = opener.getBrowser().addTab(gmproxy_DownloadSite +"?r=mproxy"); + } + self.close(); + } + + function mproxy_goTomproxyAbout(){ + window.openDialog("chrome://mproxy/content/dialogs/about.xul","mproxyAbout","centerscreen, chrome, modal"); + } + +/* +* Automatic Updator +*/ + + //If there is a new version, returns the XPI url, else returns false + + //The user selects to check for updates + +/* +* UNINSTALL +*/ + function mproxy_uninstall(oLogger){ + try{ + var oPrefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch); + oPrefs.deleteBranch("mproxy"); + + oLogger.addLog(new window.ExtuninstallLogItem(oLogger.REMOVE_ACTION, oLogger.SUCCESS_STATUS, "Preferences Branch 'mproxy'", null, null)); + }catch(err){ + oLogger.addLog(new window.ExtuninstallLogItem(oLogger.REMOVE_ACTION, oLogger.WARN_STATUS, "Preferences Branch 'mproxy'", 1001, err)); + throw 1001; + } + } + -- cgit v1.2.3