--- /dev/null
+ /* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-\r
+ * This Source Code Form is subject to the terms of the Mozilla Public\r
+ * License, v. 2.0. If a copy of the MPL was not distributed with this\r
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.\r
+ * Contributor(s):\r
+ * Copyright (c) 2008-2009 EADS DEFENCE AND SECURITY - All rights reserved\r
+ * Copyright(c) Airbus Defence and Space 2014 - All rights reserved */\r
+\r
+var gConsole = Components.classes["@mozilla.org/consoleservice;1"].getService(Components.interfaces.nsIConsoleService);\r
+\r
+const PREF_SECURE_HEADERS_FOLDER_DATAS="secureheaders.folderdata";\r
+const PREF_DEFAULT_SECUREHEADERS = "secureheaders.bydefault";\r
+const PROPERTIES_URL = "chrome://messenger/locale/secureheaders.properties";\r
+const SECURE_HEADERS_ATTRIBUTE_CHECK="secureheaders.checked";\r
+const HEADER_SEPARATOR=",";\r
+\r
+/*\r
+ * \r
+ */\r
+//document.addEventListener('load', msgCompSMIMEOnLoad, true);\r
+window.addEventListener("compose-window-init", msgCompSMIMEOnLoad, true);\r
+window.addEventListener("compose-window-reopen", msgCompSMIMEOnLoad, true);\r
+function msgCompSMIMEOnLoad() {\r
+ gConsole.logStringMessage("[msgCompSMIMESecureHeaders : msgCompSMIMEOnLoad]");\r
+ \r
+ /* Get profile directory */\r
+ var dirSecureHeader = Components.classes["@mozilla.org/file/directory_service;1"].createInstance(Components.interfaces.nsIProperties).get("ProfD", Components.interfaces.nsIFile);\r
+ dirSecureHeader.append("secureHeaders");\r
+ \r
+ /* Copy a default profile if needed */\r
+ if (!dirSecureHeader.exists()) {\r
+ dirSecureHeader.create(Components.interfaces.nsIFile.DIRECTORY_TYPE, 0755);\r
+ var defaultFile = Components.classes["@mozilla.org/file/directory_service;1"].createInstance(Components.interfaces.nsIProperties).get("ProfDefNoLoc", Components.interfaces.nsIFile);\r
+ defaultFile.append("secureHeadersDefault.xml");\r
+ if (defaultFile.exists())\r
+ defaultFile.copyTo(dirSecureHeader, "secureHeadersDefault.xml");\r
+ }\r
+ \r
+ // observer on sending message\r
+ var secureheaders_ObserverSvc = Components.classes["@mozilla.org/observer-service;1"].getService(Components.interfaces.nsIObserverService);\r
+ secureheaders_ObserverSvc.addObserver(secureheaders_OnSend, "mail:composeOnSend", false); \r
+}\r
+\r
+\r
+/*\r
+ * \r
+ */\r
+var secureheaders_OnSend = {\r
+ _ArrayheadersToSign : null,\r
+ observe: function(subject, topic, data) {\r
+ //is HeaderSecure requested\r
+ gConsole.logStringMessage("[msgCompSMIMESecureHeaders : Observe]");\r
+ var elt = document.getElementById("menu_securitySecureHeader1");\r
+ if(elt.hasAttribute("checked")){\r
+ this.AddSecureHeadersArray();\r
+ }\r
+ },\r
+ AddSecureHeadersArray: function(){\r
+ try {\r
+ if (!gMsgCompose.compFields) return;\r
+ if (!gMsgCompose.compFields.securityInfo) return;\r
+ \r
+ var msgSMimeCompFields = gMsgCompose.compFields.securityInfo;\r
+ if(!msgSMimeCompFields){\r
+ gConsole.logStringMessage("[msgCompSMIMESecureHeaders : AddSecureHeadersArray] gMsgCompose.compFields.securityInfo not found");\r
+ return;\r
+ }\r
+ gConsole.logStringMessage("[msgCompSMIMESecureHeaders : AddSecureHeadersArray]");\r
+ \r
+ //clear secure headers\r
+ msgSMimeCompFields.clearSecureHeaders();\r
+\r
+ // get preferences informations to sign\r
+ var arrayHeaderToSign = ReadXmlHeadersToSign();\r
+ \r
+ // relaxed canon algorithm as default value \r
+ msgSMimeCompFields.canonAlgorithme = 1;\r
+ \r
+ if(arrayHeaderToSign){\r
+ var secHeader = null;\r
+ \r
+ for(i=0;i<arrayHeaderToSign.length;++i){ \r
+ if(arrayHeaderToSign[i]._name == "canonalgo"){\r
+ // is canonalgo value\r
+ msgSMimeCompFields.canonAlgorithme = parseInt(arrayHeaderToSign[i]._status,10);\r
+ //gConsole.logStringMessage("[ _secure_headers - AddSecureHeadersArray] canonAlgorithme = " + msgSMimeCompFields.canonAlgorithme);\r
+ }else{ \r
+ // create Header object\r
+ secHeader = Components.classes["@mozilla.org/messenger-smime/smime-secure-header;1"].createInstance(Components.interfaces.nsIMsgSMIMESecureHeader);\r
+ secHeader.headerName=arrayHeaderToSign[i]._name;\r
+ if(arrayHeaderToSign[i]._status!="")\r
+ secHeader.headerStatus=arrayHeaderToSign[i]._status;\r
+ /*if(arrayHeaderToSign[i]._encrypted!="")\r
+ secHeader.headerEncrypted=arrayHeaderToSign[i]._encrypted;*/\r
+ \r
+ // push Header object to array of msgCompFields object\r
+ msgSMimeCompFields.addSecureHeader(secHeader);\r
+ }\r
+ }\r
+ }\r
+ }catch(e){\r
+ gConsole.logStringMessage("[msgCompSMIMESecureHeaders : AddSecureHeadersArray] Error: " + e + "\nfile : " + Error().fileName+"\nline : "+Error().lineNumber);\r
+ }\r
+ } \r
+};\r
+\r
+/*\r
+ *\r
+ */\r
+var DEFAULT_SECUREHEADERS_XML_DIR = "secureHeaders"\r
+var DEFAULT_SECUREHEADERS_XML_FILE = "secureHeadersDefault.xml"\r
+function ReadXmlHeadersToSign(){\r
+ try{\r
+ //var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);\r
+ \r
+ // get xml file path\r
+ if(!gCurrentIdentity){ \r
+ gConsole.logStringMessage("[msgCompSMIMESecureHeaders : ReadXmlHeadersToSign] no xml files define \n ");\r
+ return;\r
+ }\r
+ var pref_data = gCurrentIdentity.getCharAttribute(PREF_SECURE_HEADERS_FOLDER_DATAS);\r
+ var file = null;\r
+ if(!pref_data){ \r
+ file = Components.classes["@mozilla.org/file/directory_service;1"].getService(Components.interfaces.nsIProperties).get("ProfD", Components.interfaces.nsIFile); // get profile folder\r
+ file.append(DEFAULT_SECUREHEADERS_XML_DIR);\r
+ file.append(DEFAULT_SECUREHEADERS_XML_FILE);\r
+ pref_data = file.path;\r
+ }else{\r
+ file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);\r
+ file.initWithPath( pref_data );\r
+ }\r
+ \r
+ if(!file.exists()){\r
+ gConsole.logStringMessage("[msgCompSMIMESecureHeaders : ReadXmlHeadersToSign] Error loading schema file : " + completePath);\r
+ return;\r
+ }\r
+ \r
+ // Get Xml Document parser\r
+ var stream = Components.classes["@mozilla.org/network/file-input-stream;1"].createInstance(Components.interfaces.nsIFileInputStream);\r
+ stream.init(file, -1, -1, Components.interfaces.nsIFileInputStream.CLOSE_ON_EOF);\r
+ var parser = Components.classes["@mozilla.org/xmlextras/domparser;1"].createInstance(Components.interfaces.nsIDOMParser);\r
+ var xmlDoc = parser.parseFromStream(stream, null, file.fileSize, "text/xml");\r
+ \r
+ // get datas from file\r
+ var tabSecureHeaders = new Array; // tabHeaders[headerName][status][encrypted]\r
+ var compatibleTag = xmlDoc.getElementsByTagName("ximf:headers");\r
+ var sValue="";\r
+ \r
+ if(compatibleTag.length>0){\r
+ // get canonical algorithm\r
+ if(compatibleTag[0].hasAttribute("canonalgo")){\r
+ var canonalgo = compatibleTag[0].getAttribute("canonalgo"); \r
+ tabSecureHeaders.push(new xSecureHeader("canonalgo", canonalgo));\r
+ //gConsole.logStringMessage("[msgCompSMIMESecureHeaders : ReadXmlHeadersToSign] get canonical algorithm : " + canonalgo);\r
+ }\r
+ \r
+ // get headers to sign\r
+ var childNodes = compatibleTag[0].childNodes;\r
+ for(var j=0; j <childNodes.length; ++j ){\r
+ var header_name = ""; \r
+ var header_status = 0; \r
+ \r
+ //var header_encrypted = -1;\r
+ if(childNodes[j].localName == "header"){\r
+ header_name = childNodes[j].getAttribute("name");\r
+ if(childNodes[j].hasAttribute("status"))\r
+ header_status = parseInt(childNodes[j].getAttribute("status"),10);\r
+ \r
+ /*if(childNodes[j].hasAttribute("encrypted"))\r
+ header_encrypted = parseInt(childNodes[j].getAttribute("encrypted"),10);*/\r
+ \r
+ // load values to array\r
+ tabSecureHeaders.push(new xSecureHeader(header_name, header_status));\r
+ }\r
+ }\r
+ return tabSecureHeaders;\r
+ }else{\r
+ gConsole.logStringMessage("[msgCompSMIMESecureHeaders : ReadXmlHeadersToSign] no headers tag in file " + completePath);\r
+ }\r
+ } catch (e) {\r
+ gConsole.logStringMessage("[msgCompSMIMESecureHeaders : ReadXmlHeadersToSign] Error: " + e + "\nfile : " + Error().fileName+"\nline : "+Error().lineNumber);\r
+ }\r
+}\r
+\r
+/*\r
+ * \r
+ */\r
+function xSecureHeader(name,status){\r
+ if(name)\r
+ this._name = name;\r
+ if(status)\r
+ this._status = status;\r
+ /*if(encrypted)\r
+ this._encrypted = encrypted;*/\r
+}
\ No newline at end of file