+Ximfmail (3.1.20+1.8.2)
+* Corrective on diplaying classification stamps
+* Corrective on displaying XIMF headers panel
+* Corrective on managing XIMF instances
+* Corrective on custom columns
+* Corrective on empty Ximf header value to hide
+* Corrective on using settings to sign messages (user can send unsigned message)
+-- Sep 07 2012
+
Ximfmail (3.1.11+0.6.4)
* Corrective on blocking TrustedBird on downloading messages with big attachments
* Corrective on using settings to sign messages
/* \r
* global variables\r
*/\r
-var gJSLoader = Components.classes["@mozilla.org/moz/jssubscript-loader;1"].createInstance(Components.interfaces.mozIJSSubScriptLoader); \r
var gXimfmailIdentity=null;\r
-gJSLoader.loadSubScript("chrome://ximfmail/content/jquery.js");\r
-gJSLoader.loadSubScript("chrome://ximfmail/content/controler-ximfmail.js");\r
-gJSLoader.loadSubScript("chrome://ximfmail/content/constant-ximfmail.js");\r
-\r
\r
/* \r
* new theme selection : load instances of theme\r
$("#checkListTheme").removeAttr("disabled");\r
\r
//get XIMF instances of profile for account\r
- CreateXimfmailCatalog();\r
+ if(!gXimfCatalog) CreateXimfmailCatalog();\r
var listInstances = document.getElementById("listThemPopup"); \r
listInstances.database.AddDataSource(gXimfCatalog.getDSCatalog()); \r
listInstances.builder.rebuild();\r
if($("#checkListTheme").attr("checked") == "true"){\r
$("#isUsingXimfail").attr("disabled","false"); \r
return false; \r
- }else{ \r
+ }else{\r
$("#isUsingXimfail").attr("disabled","true");\r
return true;\r
- } \r
+ }\r
}\r
\r
/*\r
class="color-dialog" onload="parent.onPanelLoaded('am-ximfmail.xul');"\r
orient="vertical">\r
\r
+ <script type="application/javascript" src="chrome://ximfmail/content/jquery.js" />\r
+ <script type="application/javascript" src="chrome://ximfmail/content/constant-ximfmail.js" />\r
+ <script type="application/javascript" src="chrome://ximfmail/content/ximfCatalog.js" />\r
+ <script type="application/javascript" src="chrome://ximfmail/content/controler-ximfmail.js" />\r
<script type="application/javascript" src="chrome://ximfmail/content/ximfmail.js" />\r
<script type="application/javascript" src="chrome://ximfmail/content/am-ximfmail.js" />\r
\r
* global variables\r
*/\r
var gConsole = Components.classes["@mozilla.org/consoleservice;1"].getService(Components.interfaces.nsIConsoleService);\r
-var gJSLoader = Components.classes["@mozilla.org/moz/jssubscript-loader;1"].createInstance(Components.interfaces.mozIJSSubScriptLoader);\r
-gJSLoader.loadSubScript("chrome://ximfmail/content/jquery.js");\r
-\r
\r
/*\r
* \r
//$("#"+idElement).attr("ref",refValue);\r
\r
var list = document.getElementById(idElement); \r
- list.database.AddDataSource(gXimfCatalog.getDSCatalog()); \r
+ list.database.AddDataSource(XimfCatalog.getInstance().getDSCatalog()); \r
list.setAttribute("ref",refValue);\r
list.builder.rebuild();\r
\r
}\r
\r
//add complete header to description\r
- document.getElementById("ximfheaderName").value = title.substring(0,title.lastIndexOf(":"));\r
- if(!xSeparator){ \r
+ //document.getElementById("ximfheaderName").value = title.substring(0,title.lastIndexOf(":"));\r
+ document.title = title.substring(0,title.lastIndexOf(":"));\r
+ if(!xSeparator){\r
document.getElementById("ximfheaderValue").value = val;\r
}else{ \r
var reg=new RegExp("["+xSeparator+"]+", "g");\r
\r
<!DOCTYPE overlay SYSTEM "chrome://ximfmail/locale/ximfmail.dtd">\r
<?xml-stylesheet href="chrome://ximfmail/skin" type="text/css"?>\r
-<dialog id="ximfmail-dialog-hdrInfo" title="&dlgheader.hdrInfo.descr;" \r
+<!-- title="&dlgheader.hdrInfo.descr;" -->\r
+<dialog id="ximfmail-dialog-hdrInfo" \r
+ \r
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" \r
buttons="accept" \r
buttonlabelaccept="OK"\r
* Dual licensed under the MIT (MIT-LICENSE.txt)\r
* and GPL (GPL-LICENSE.txt) licenses.\r
*\r
- * $Date: 2009-11-05 14:00:08 +0100 (jeu., 05 nov. 2009) $\r
- * $Rev: 40578 $\r
+ * $Date: 2008-05-24 14:22:17 -0400 (Sat, 24 May 2008) $\r
+ * $Rev: 5685 $\r
*/\r
(function(){var _jQuery=window.jQuery,_$=window.$;var jQuery=window.jQuery=window.$=function(selector,context){return new jQuery.fn.init(selector,context);};var quickExpr=/^[^<]*(<(.|\s)+>)[^>]*$|^#(\w+)$/,isSimple=/^.[^:#\[\.]*$/,undefined;jQuery.fn=jQuery.prototype={init:function(selector,context){selector=selector||document;if(selector.nodeType){this[0]=selector;this.length=1;return this;}if(typeof selector=="string"){var match=quickExpr.exec(selector);if(match&&(match[1]||!context)){if(match[1])selector=jQuery.clean([match[1]],context);else{var elem=document.getElementById(match[3]);if(elem){if(elem.id!=match[3])return jQuery().find(selector);return jQuery(elem);}selector=[];}}else\r
return jQuery(context).find(selector);}else if(jQuery.isFunction(selector))return jQuery(document)[jQuery.fn.ready?"ready":"load"](selector);return this.setArray(jQuery.makeArray(selector));},jquery:"1.2.6",size:function(){return this.length;},length:0,get:function(num){return num==undefined?jQuery.makeArray(this):this[num];},pushStack:function(elems){var ret=jQuery(elems);ret.prevObject=this;return ret;},setArray:function(elems){this.length=0;Array.prototype.push.apply(this,elems);return this;},each:function(callback,args){return jQuery.each(this,callback,args);},index:function(elem){var ret=-1;return jQuery.inArray(elem&&elem.jquery?elem[0]:elem,this);},attr:function(name,value,type){var options=name;if(name.constructor==String)if(value===undefined)return this[0]&&jQuery[type||"attr"](this[0],name);else{options={};options[name]=value;}return this.each(function(i){for(name in options)jQuery.attr(type?this.style:this,name,jQuery.prop(this,options[name],type,i,name));});},css:function(key,value){if((key=='width'||key=='height')&&parseFloat(value)<0)value=undefined;return this.attr(key,value,"curCSS");},text:function(text){if(typeof text!="object"&&text!=null)return this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(text));var ret="";jQuery.each(text||this,function(){jQuery.each(this.childNodes,function(){if(this.nodeType!=8)ret+=this.nodeType!=1?this.nodeValue:jQuery.fn.text([this]);});});return ret;},wrapAll:function(html){if(this[0])jQuery(html,this[0].ownerDocument).clone().insertBefore(this[0]).map(function(){var elem=this;while(elem.firstChild)elem=elem.firstChild;return elem;}).append(this);return this;},wrapInner:function(html){return this.each(function(){jQuery(this).contents().wrapAll(html);});},wrap:function(html){return this.each(function(){jQuery(this).wrapAll(html);});},append:function(){return this.domManip(arguments,true,false,function(elem){if(this.nodeType==1)this.appendChild(elem);});},prepend:function(){return this.domManip(arguments,true,true,function(elem){if(this.nodeType==1)this.insertBefore(elem,this.firstChild);});},before:function(){return this.domManip(arguments,false,false,function(elem){this.parentNode.insertBefore(elem,this);});},after:function(){return this.domManip(arguments,false,true,function(elem){this.parentNode.insertBefore(elem,this.nextSibling);});},end:function(){return this.prevObject||jQuery([]);},find:function(selector){var elems=jQuery.map(this,function(elem){return jQuery.find(selector,elem);});return this.pushStack(/[^+>] [^+>]/.test(selector)||selector.indexOf("..")>-1?jQuery.unique(elems):elems);},clone:function(events){var ret=this.map(function(){if(jQuery.browser.msie&&!jQuery.isXMLDoc(this)){var clone=this.cloneNode(true),container=document.createElement("div");container.appendChild(clone);return jQuery.clean([container.innerHTML])[0];}else\r
* ZAC de la Clef Saint Pierre - 78990 Elancourt - FRANCE (IDDN.FR.001.480012.002.S.P.2008.000.10000)
* ***** END LICENSE BLOCK ***** */
var gConsole = Components.classes["@mozilla.org/consoleservice;1"].getService(Components.interfaces.nsIConsoleService);
-var gJSLoader = Components.classes["@mozilla.org/moz/jssubscript-loader;1"].createInstance(Components.interfaces.mozIJSSubScriptLoader);
-gJSLoader.loadSubScript("chrome://ximfmail/content/constant-ximfmail.js");
/**
if (aIID.equals(Components.interfaces.nsISupports)
|| aIID.equals(Components.interfaces.nsIStreamListener))
return this;
- throw Components.results.NS_NOINTERFACE;
},
data: "",
isDataComplete: false,
var idxEnd = this.data.indexOf("\r\n\r\n",0); // * CRLF DOS : "\r\n"
if(idxEnd == -1) idxEnd = this.data.indexOf("\n\n",0); // * CRLF UNIX : "\n"
if(idxEnd == -1) idxEnd = this.data.indexOf("\r\r",0); //CRLF OS : "\r"
- if(idxEnd != -1) this.isDataComplete = true; // msgSrc = msgSrc.substr(0,idxEnd); //dbg gConsole.logStringMessage("[smime - MessageAnalyser - succes getting mime headers : ] \n" + msgSrc);
+ if(idxEnd != -1) this.isDataComplete = true;
+ gConsole.logStringMessage("[XimfmailGetMessage - streamListener.onDataAvailable ]isDataComplete=true ");
}
+ gConsole.logStringMessage("[XimfmailGetMessage - streamListener.onDataAvailable ]");
},
onStopRequest: function(request, context, status) {
if (Components.isSuccessCode(status)) {
+ gConsole.logStringMessage("[XimfmailGetMessage - streamListener.isDataComplete ] all mime headers have been parsed - status = " + status );
callbackFunction( this.data, mailUri, callbackParam);
- } else {
- srv.errorSrv("notifyListener.getMsgSrc - "+mailUri+" - Error: "+status);
+ } else {
+ if(this.isDataComplete == true){
+ // all mime headers have been parsed
+ gConsole.logStringMessage("[XimfmailGetMessage - streamListener.isDataComplete ] all mime headers have been parsed !");
+ callbackFunction( this.data, mailUri, callbackParam);
+ }else{
+ gConsole.logStringMessage("[XimfmailGetMessage - streamListener.onStopRequest ] Error: "+status);
+ }
}
}
}
gConsole.logStringMessage("[ximfmail - XimfmailGetMessage ]");
- $("#ximfmailMailPanel").attr("collapsed","true"); // XIMF headers ihm
- $("#ximfmail-custom-panel").attr("collapsed","true"); //XIMF account profile type ihm
- $("#ximfHeadBox").attr("collapsed","true"); // XIMF pictures ihm
+ //$("#ximfmailMailPanel").attr("collapsed","true"); // XIMF headers ihm
+ //$("#ximfmail-custom-panel").attr("collapsed","true"); //XIMF account profile type ihm
var pref = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService).getBranch(null);
pref = pref.QueryInterface(Components.interfaces.nsIPrefBranch2);
if(pref.getBoolPref("mailnews.headers.showXimfmail")){
try { msgSvc.streamMessage(mailUri, streamListener, null, null, false, null); } catch (ex) { return false; }
}else{
DeleteXimfHeaders();
+ gUriMsgLoading.remove(mailUri);
}
}
/*
- * Set Ximf headers of message to array
- *
- *
+ * Set Ximf headers of message to array : {[headerName][headerValue],[headerName][headerValue],...}
+ * headerName will be low-case formated
+ * use "for (headerName in gSecureHeadersArray) {}" to parse array
*/
function XimfmailParseMessage(msgSrc){
var separator = new RegExp("\\r\\n|\\r|\\n", "i");// end line
var tab = msgSrc.split(separator);
- var currentXimfHdrArray = [];
+ var currentXimfHdrArray = {};
+
// filter on IMF headers - append data to array
var reg_folding = new RegExp("( )","g");
- var reg_folding2 = new RegExp("(\t)","g");
- var idxTab=0;
-
- for(idxTab=0; idxTab<tab.length; ++idxTab){
- var header_line = tab[idxTab];
- // search for long header fields (folding) - RFC 2822
- if(header_line[0]!= " "){
- try{
+ var reg_folding2 = new RegExp("(\t)","g");
+ for(var idxTab=0; idxTab<tab.length; ++idxTab){
+ try{
+ var header_line = tab[idxTab];
+ // search for long header fields (folding) - RFC 2822
+ if(header_line[0]!= " "){
while( idxTab < tab.length ){
- var next_line = tab[idxTab+1];
- if(next_line){
- if(next_line[0] == " " || next_line[0] == "\t"){
- header_line += next_line; //next_line.toLowerCase();
- header_line = header_line.replace(reg_folding," ");
- header_line = header_line.replace(reg_folding2,"");
- ++idxTab;
+ try{
+ var next_line = tab[idxTab+1];
+ if(next_line){
+ if(next_line[0] == " " || next_line[0] == "\t"){
+ header_line += next_line; //next_line.toLowerCase();
+ header_line = header_line.replace(reg_folding," ");
+ header_line = header_line.replace(reg_folding2,"");
+ ++idxTab;
+ }else{ break; }
}else{ break; }
- }else{ break; }
- }
- }catch(e){}
- }
- //gConsole.logStringMessage("[ximfmail - createXimfHdrArray - decode header line : ] \n" + header_line);
-
- // fill _ximfHdrArray
- //var lowcaseTmp = header_line.toLowerCase();
-
- var lowcaseTmp = header_line; //String_from_utf8(header_line).toLowerCase();
- if(lowcaseTmp.indexOf(":")!=-1){
- var xhdr = new Object;
- xhdr._hdrName = lowcaseTmp.substring(0,lowcaseTmp.indexOf(": ",0));
- xhdr._hdrValue = lowcaseTmp.substring(lowcaseTmp.indexOf(": ",lowcaseTmp)+2);
-
- // decode MIME Header
- xhdr._hdrValue = DecodeMimeXimfheader(xhdr._hdrValue);
-
- currentXimfHdrArray.push(xhdr);
- //gConsole.logStringMessage("[ximfmail - MessageAnalyser - push : ] \n" + xhdr._hdrName + " :: "+xhdr._hdrValue);
+ }catch(e){}
+ }
+ }
+ // decode MIME Header and add header to arrray
+ if(header_line.indexOf(":")!=-1){
+ let hdrName = header_line.substring(0,header_line.indexOf(": ",0));
+ let hdrValue = header_line.substring(header_line.indexOf(": ",header_line)+2);
+ if(hdrName != "") currentXimfHdrArray[hdrName/*.toLowerCase()*/]= DecodeMimeXimfheader(hdrValue);
}
- }
-
+ }catch(e){}
+ }
return currentXimfHdrArray;
}
this._mailUri = null;
this._instanceMsgXimf = null;
this._current_definition = null;
- this._currentXimfHdrArray = [];
+ this._currentXimfHdrArray = {};
if(typeof XimfmailMesssage.initialized == "undefined"){
// set uri of message
XimfmailMesssage.prototype.set = function(uri){
this._mailUri = uri;
this._instanceMsgXimf = null;
- this._currentXimfHdrArray=headerArray;
+ // this._currentXimfHdrArray=headerArray;
+ // be sure to have lower case header name
+ for(hdr in headerArray){
+ //this._currentXimfHdrArray[hdr.toLowerCase()] = headerArray[hdr];
+ this._currentXimfHdrArray[hdr] = headerArray[hdr];
+ }
// get account XIMF definition
var prefBranch = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService).getBranch(null);
}else{
gConsole.logStringMessage("DBG [ximfmail - XimfmailMesssage.init ] no ximf preferences ");
return false;
- }
-
+ }
+
var uriXimfInstance = this.hasXimfHeaders(this._current_definition);
if(uriXimfInstance){
gConsole.logStringMessage("DBG [ximfmail - XimfmailMesssage.init ] mail instance : " + uriXimfInstance);
if(!sname) return null;
// check currentDefinition in XimfmailCatalog
- CreateXimfmailCatalog();
- uriInstanceXimf = gXimfCatalog.getInstanceUri(currentDefinition,sname,sversion);
+ if(!gXimfCatalog){CreateXimfmailCatalog();}
+ var uriInstanceXimf = gXimfCatalog.getInstanceUri(currentDefinition,sname,sversion);
}catch(e){
gConsole.logStringMessage("[ximfmail - XimfmailMesssage.hasXimfHeaders ] \n " + e + "\nfile : " + Error().fileName+"\nline : "+Error().lineNumber);
XimfmailMesssage.prototype.getHeaderValue = function(headerName){
var value = null;
try{
- var tmpHead = null;
- for(var idx_xHdrArray = 0 ; idx_xHdrArray < this._currentXimfHdrArray.length ; ++idx_xHdrArray){
- tmpHead = this._currentXimfHdrArray[idx_xHdrArray]._hdrName;
- if(headerName.toLowerCase() == tmpHead.toLowerCase()){
- value = this._currentXimfHdrArray[idx_xHdrArray]._hdrValue;
- break;
- }
+ //value = this._currentXimfHdrArray[headerName.toLowerCase()];
+ value = this._currentXimfHdrArray[headerName];
+ if(value == null){
+ // try to get header insensitive case
+ for(hdr in this._currentXimfHdrArray){
+ if(headerName.toLowerCase() == hdr.toLowerCase()){
+ value = this._currentXimfHdrArray[hdr];
+ break;
+ //alert("value as insensitive case founded : " +hdr+" : "+ value)
+ }
+ }
}
+
}catch(e){
gConsole.logStringMessage("[ximfmail - XimfmailMesssage.getValue ] \n " + e + "\nfile : " + Error().fileName+"\nline : "+Error().lineNumber);
+ value=null;
}
return value;
};
// get XIMF value from message
- XimfmailMesssage.prototype.getCompleteArray = function(){
- return this._currentXimfHdrArray();
+ XimfmailMesssage.prototype.getCompleteXimfArray = function(){
+ return this._currentXimfHdrArray;
};
// set XIMF value to message
XimfmailMesssage.prototype.setXimfHeader = function(headerName,headerValue){
- try{
- var isNewHeader = true;
- for(var idx_xHdrArray = 0 ; idx_xHdrArray < this._currentXimfHdrArray.length ; ++idx_xHdrArray){
- var tmpHead = this._currentXimfHdrArray[idx_xHdrArray]._hdrName;
- if(tmpHead.toLowerCase() == headerName.toLowerCase()){
- this._currentXimfHdrArray[idx_xHdrArray]._hdrValue = headerValue;
- isNewHeader = false;
- break;
- }
- }
- if(isNewHeader){
- var xhdr = new Object;
- xhdr._hdrName = headerName;
- xhdr._hdrValue = headerValue;
- this._currentXimfHdrArray.push(xhdr);
- }
+ try{
+ //this._currentXimfHdrArray[headerName.toLowerCase()] = headerValue;
+ this._currentXimfHdrArray[headerName] = headerValue;
}catch(e){
- gConsole.logStringMessage("[ximfmail - XimfmailMesssage.setXimfHeader ] \n " + e + "\nfile : " + Error().fileName+"\nline : "+Error().lineNumber);
+ gConsole.logStringMessage("[ximfmail - XimfmailMesssage.setXimfHeader ] \n " + e + "\nfile : " + Error().fileName+"\nline : "+Error().lineNumber);
}
};
XimfmailMesssage.initialized = true;
//
window.addEventListener('messagepane-loaded', InitXimfailMsgWindow, true);
+/*
+ * gUriMsgLoading check for messages which are currently loading *
+ */
+var gUriMsgLoading = {
+ uriList : [], // array of uri loading
+ add : function(uri){
+ if(uri) this.uriList.push(uri)
+ gConsole.logStringMessage("[ximfmail - gUriMsgLoading.add ] uri : " + uri);
+ },
+ remove : function(uri){
+ if(!uri) return;
+ var idx = 0;
+ try{
+ for(idx ; idx<this.uriList.length ; ++idx){
+ if(this.uriList[idx] === uri){
+ this.uriList.splice(idx,1);
+ gConsole.logStringMessage("[ximfmail - gUriMsgLoading.remove ] uri : " + uri);
+ return;
+ }
+ }
+ }catch(e){
+ gConsole.logStringMessage("[ximfmail - gUriMsgLoading.remove ] error for uri " + uri +"\n error: "+ e + "\nfile : " + Error().fileName+"\nline : "+e.lineNumber);
+ }
+ },
+ isLoading : function(uri){
+ if(!uri) return;
+ try{
+ for(var idx=0 ; idx<this.uriList.length ; ++idx){
+ if(this.uriList[idx] === uri){
+ gConsole.logStringMessage("[ximfmail - gUriMsgLoading.isloading : true ] uri : " + uri);
+ return true;
+ }
+ }
+ }catch(e){
+ gConsole.logStringMessage("[ximfmail - gUriMsgLoading.isloading ] error for uri " + uri +"\n error: "+ e + "\nfile : " + Error().fileName+"\nline : "+e.lineNumber);
+ }
+ gConsole.logStringMessage("[ximfmail - gUriMsgLoading.isloading : false ] uri : " + uri);
+ return false;
+ }
+};
+
/*
* Create a message listener
*/
//
gMessageListeners.push({
onStartHeaders: function (){
-
+ $("#ximfmailMailPanel").attr("collapsed","true"); // box for ximf headers
+ $("#ximfHeadBox").attr("collapsed","true"); // box for ximf pictures
},
onEndHeaders: function(){
var uriMsg = null;
var msgDBHdr = gFolderDisplay.selectedMessage;
if(msgDBHdr) uriMsg = msgDBHdr.folder.getUriForMsg(msgDBHdr);
}
- XimfmailGetMessage(uriMsg,XimfmailParseAndOpenMesssage);
+ if(!gUriMsgLoading.isLoading(uriMsg)){
+ gUriMsgLoading.add(uriMsg);
+ XimfmailGetMessage(uriMsg,XimfmailParseAndOpenMesssage);
+ }
},
onEndAttachments: function (){
}
function XimfmailParseAndOpenMesssage(msgSrc,uriSrc){
var currentXimfHdrArray = XimfmailParseMessage(msgSrc);
try{
- if(currentXimfHdrArray.length > 0){
+
var ximfMsg = new XimfmailMesssage();
if(ximfMsg.init(uriSrc,currentXimfHdrArray)){
//alert("XimfmailParseMesssage uriSrc = " + uriSrc +" \n valid ximfmail message")
if(folderPaneElt){
// is read message opened in new tab
if(folderPaneElt.hasAttribute("collapsed")){
- $("#ximfmail-custom-panel").attr("collapsed","true");
+ $("#ximfmail-custom-panel").attr("collapsed","true");
if(ShowXimfmailPanel(ximfMsg)){
$("#ximfmailMailPanel").removeAttr("collapsed");
}
}else{
- $("#ximfmail-custom-panel").removeAttr("collapsed");
+ $("#ximfmail-custom-panel").removeAttr("collapsed");
}
- }else{
- //alert("XimfmailParseMesssage - new window - uriSrc = " + uriSrc +" \n valid ximfmail message")
- // message is displayed in new window
- $("#ximfmail-custom-panel").removeAttr("collapsed");
+ }else{
+ // message is displayed in new window
if(ShowXimfmailPanel(ximfMsg)) $("#ximfmailMailPanel").removeAttr("collapsed");
}
// common elements to display
- if(ShowExpandedHeaders(ximfMsg)){
- $("#ximfHeadBox").removeAttr("collapsed");
- }
+ ShowExpandedHeaders(ximfMsg);
}
- }
+
}catch(e){
gConsole.logStringMessage("XimfmailParseAndOpenMesssage error:"+e);
}
+ gUriMsgLoading.remove(uriSrc);
};
if($("#signedHdrIcon").attr("signed") == "ximfalert"){
$("#signedHdrIcon").attr("signed","");
}
+ try{$(".ximfImgCategory").remove()}catch(e){}
}catch(e){}
}
var composeDom = CreateDOMWithXimfInstance(ximfmailMesssage._instanceMsgXimf,"chrome://theme_ximfmail/content/messengerCompose-ximfmail.xsl");
$("#ximfmailMailHeadersTablist").append(composeDom);
$("#ximfmailMailPanel").attr("hidden","true");
-
+ $("#ximfmail-custom-panel").attr("collapsed",true); // Dom element of preview panel
// compute datas to message
try{
var xheader_dom = $("label[ximfheader]");
// insert security pictures...
function ShowExpandedHeaders(ximfmailMesssage){
- try{
- // ximfmail elements to display pictures
- var imgClassification = document.getElementById("ximfSecurityClassificationLabelImg");
- var imgCategory = document.getElementById("ximfCategoryClassificationLabelImg");
+ try{
+ // raz ximf pictures elements
+ try{
+ $(".ximfImgCategory").remove();
+ $("#ximfSecurityClassificationLabelImg").attr("src","");
+ $("#ximfCategoryClassificationLabelImg").attr("src","");
+ }catch(e){}
// selected message has no XIMF headers
if(!ximfmailMesssage._instanceMsgXimf){
- // remove all ximfmail pictures
- if(imgClassification) imgClassification.setAttribute("src","");
- if(imgCategory) imgCategory.setAttribute("src","");
return false;
- }
-
+ }
+
+ // ximfmail elements to display pictures
+ var imgClassification = document.getElementById("ximfSecurityClassificationLabelImg");
+ var imgCategory = document.getElementById("ximfCategoryClassificationLabelImg");
+
//display security labels pictures
//gConsole.logStringMessage("[ximfmail - showExpandedHeaders ] \n search for labels to display... ");
if(imgClassification){
var valuemsg = valueRef.toLowerCase();
var valueref = tabPictureValueRef[iPict].toLowerCase();
if( valuemsg.indexOf(valueref, 0) != -1 ){
- imgClassification.setAttribute("src",tabPictureValueName[iPict]);
+ imgClassification.setAttribute("src",tabPictureValueName[iPict]);
}
}
}
}
if(imgCategory){
- imgCategory.setAttribute("src","");
+ imgCategory.setAttribute("src","");
+ $(".ximfImgCategory").remove();
var reg=new RegExp("[&]+", "g");
var picturesCategorArray = CreateRulesArray(ximfmailMesssage._instanceMsgXimf,"ximf:categoryPictures");
for(var iHdr=0; iHdr<picturesCategorArray.length ; ++iHdr){
//alert("picturesClassifArray[idxPix]._valueRef : "+picturesClassifArray[idxPix]._valueRef + " & " + valueRef );
var valuemsg = valueRef.toLowerCase();
var valueref = tabPictureValueRef[iPict].toLowerCase();
+ var container = document.getElementById("ximfHeadBox");
if( valuemsg.indexOf(valueref, 0) != -1 ){
- imgCategory.setAttribute("src",tabPictureValueName[iPict]);
+ //imgCategory.setAttribute("src",tabPictureValueName[iPict]);
+ try{
+ var img = document.createElement("image");
+ img.setAttribute("class","ximfImgCategory");
+ img.setAttribute("src",tabPictureValueName[iPict]);
+ container.appendChild(img);
+ }catch(e){
+ gConsole.logStringMessage("[ximfmail - showExpandedHeaders ] \n " + e + "\nfile : " + Error().fileName+"\nline : "+e.lineNumber);
+ }
}
}
}
}catch(e){
gConsole.logStringMessage("[ximfmail - showExpandedHeaders ] \n " + e + "\nfile : " + Error().fileName+"\nline : "+e.lineNumber);
}
+
+ $("#ximfHeadBox").removeAttr("collapsed");
return true;
}
<?xml-stylesheet href="chrome://ximfmail/skin" type="text/css"?>
<!DOCTYPE overlay SYSTEM "chrome://ximfmail/locale/ximfmail.dtd">
-<overlay id="ximfMessengerOverlay" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">\r
+<overlay id="ximfMessengerOverlay" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
+ xmlns:html="http://www.w3.org/1999/xhtml">\r
\r
<script type="application/javascript" src="chrome://ximfmail/content/jquery.js" />\r
<script type="application/javascript" src="chrome://ximfmail/content/controler-ximfmail.js" />\r
- <script type="application/javascript" src="chrome://ximfmail/content/constant-ximfmail.js" />\r
+ <script type="application/javascript" src="chrome://ximfmail/content/constant-ximfmail.js" />
+ <script type="application/javascript" src="chrome://ximfmail/content/ximfCatalog.js" />\r
<script type="application/javascript" src="chrome://ximfmail/content/ximfmail.js" />\r
<script type="application/javascript" src="chrome://ximfmail/content/messageAnalyser-ximfmail.js" />\r
<script type="application/javascript" src="chrome://ximfmail/content/messageWindow-ov-ximfmail.js" />\r
\r
- <!-- Display Ximf pictures in message of new window-->\r
- <!-- Display Ximf pictures in message --> \r
- <rows id="expandedHeaderRows">\r
- <row id="ximfHeadBox" insertbefore="expandedfromRow" collapsed="true">\r
- <label value=""/>\r
- <hbox>\r
- <image id="ximfSecurityClassificationLabelImg"/>\r
- <spacer flex="1"/> \r
- <image id="ximfCategoryClassificationLabelImg"/>\r
- <spacer flex="1"/> \r
- </hbox> \r
- </row>\r
- </rows>\r
+ <!-- Display Ximf pictures in message -->
+ <html:div id="expandedHeadersTopBox">
+ <hbox id="ximfHeadBox" insertafter="header-view-toolbox">
+ <image id="ximfSecurityClassificationLabelImg"/>
+ <image id="ximfCategoryClassificationLabelImg"/>
+ </hbox>
+ </html:div>\r
\r
<vbox id="messagepanebox"> \r
<!-- Display Ximf headers in message of new window -->
var gCurrentIdentity = null;\r
var gPreviousIdentity = null;\r
var gComposeMsgByMenuitem = false;\r
-var gXimfThreadTree = null;\r
\r
var gConsole = Components.classes["@mozilla.org/consoleservice;1"].getService(Components.interfaces.nsIConsoleService);\r
var gXBranch = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService).getBranch(null);\r
$(document).ready(function(){\r
// init ximfmail operations\r
CreateXimfmailCatalog(); \r
- gXimfThreadTree = new XimfThreadTree();\r
+ OnSelectfolderPane(); \r
+ \r
+ // Creating Ximf Custom Columns\r
var observerService = Components.classes["@mozilla.org/observer-service;1"].getService(Components.interfaces.nsIObserverService);\r
- observerService.addObserver(XimfThreadTreeDBViewObserver, "MsgCreateDBView", false); \r
-\r
- OnSelectfolderPane();\r
-\r
+ observerService.addObserver(XimfThreadTreeDBViewObserver, "MsgCreateDBView", false); \r
+ \r
// event manager\r
$("#folderTree").select(OnSelectfolderPane);\r
//optional-for technical informations $("#threadTree").select(OnSelectMsg);\r
$("#key_openMessage").bind("command",OnOpenMsg);\r
$("#threadTree").keypress(OnOpenMsgWithKey); \r
//\r
- $("#threadTree").click(UpdateThreadPane);\r
$("#button-newmsg").mousedown(OnSelectfolderPane); // load instances \r
$("#button-newmsg").bind('command', OnComposeDefaultMsg); // use default instance \r
$("#button-reply").mousedown(OnSelectfolderPane);\r
\r
// Security Labels compatibility (RFC2634)\r
try{CreateSecurityLabelXml();}catch(e){}\r
+ \r
});\r
\r
-\r
-/*\r
- * save state of custom columns\r
- */\r
-function UpdateThreadPane(){\r
- if(gXimfThreadTree){ \r
- gXimfThreadTree.saveColumnToHide();\r
- }\r
-}\r
-\r
- \r
-\r
/*\r
* \r
*/\r
pref.setBoolPref("mailnews.headers.showXimfmail",true);\r
$("#menupopup-newmsg").attr("datasources","chrome://theme_ximfmail/content/ximfCatalog.rdf");\r
$("#menupopup-newmsg menuitem").attr("hidden","false");\r
- $("#ximfmail-custom-panel").attr("hidden","false"); \r
+ $("#ximfmail-custom-panel").removeAttr("collapsed"); \r
+ $("#button-newmsg").attr("type","menu-button");\r
}else{\r
pref.setBoolPref("mailnews.headers.showXimfmail",false);\r
$("#menupopup-newmsg").attr("datasources","");\r
$("#menupopup-newmsg menuitem").attr("hidden","true");\r
- $("#ximfmail-custom-panel").attr("hidden","true"); \r
- }\r
- \r
- // load custom tree\r
- if( gPreviousIdentity != gCurrentIdentity){ \r
- gPreviousIdentity = gCurrentIdentity;\r
- if(gXimfThreadTree){ \r
- gXimfThreadTree.createThreadTree();\r
- gXimfThreadTree.addCustomColumnHandler();\r
- }\r
+ $("#ximfmail-custom-panel").attr("collapsed","true"); \r
+ $("#button-newmsg").attr("type","");\r
}\r
}catch(e){\r
gConsole.logStringMessage("[ximfmail - OnSelectfolderPane ] \n " + e + "\nfile : " + Error().fileName+"\nline : "+Error().lineNumber); \r
-\r
}\r
}\r
\r
/*\r
* Get account user settings\r
*/\r
- function GetCurrentUser() { \r
+ function GetCurrentUser() {\r
+ \r
var folder=GetFirstSelectedMsgFolder();\r
var identity = null; \r
var server;\r
}\r
if(identity){\r
gCurrentIdentity=identity;\r
- var prefName="mail.identity."+identity.key+".useremail";\r
+ var prefName="mail.identity."+identity.key+".useremail"; \r
try{\r
if(gXBranch.prefHasUserValue( prefName ))\r
return gXBranch.getCharPref(prefName); \r
\r
<?xml-stylesheet href="chrome://ximfmail/skin" type="text/css"?>\r
<!DOCTYPE overlay SYSTEM "chrome://ximfmail/locale/ximfmail.dtd">\r
-<overlay id="ximfMessengerOverlay" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">\r
+<overlay id="ximfMessengerOverlay" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"\r
+ xmlns:html="http://www.w3.org/1999/xhtml">\r
\r
<script type="application/javascript" src="chrome://ximfmail/content/jquery.js" /> \r
<script type="application/javascript" src="chrome://ximfmail/content/constant-ximfmail.js" />\r
+ <script type="application/javascript" src="chrome://ximfmail/content/ximfCatalog.js" />\r
<script type="application/javascript" src="chrome://ximfmail/content/controler-ximfmail.js" />\r
<script type="application/javascript" src="chrome://ximfmail/content/ximfmail.js" />\r
<script type="application/javascript" src="chrome://ximfmail/content/messageAnalyser-ximfmail.js" />\r
\r
<!-- Display Ximf headers in single message -->\r
<vbox id="singlemessage">\r
- <vbox id="ximfmailMailPanel" insertafter="msgHeaderView" collapsed="true">\r
- \r
+ <vbox id="ximfmailMailPanel" insertafter="msgHeaderView" collapsed="true"> \r
<hbox id="ximfmailMailPanelFocusBar" class="ximfmailFocusBar" flex="1" align="center">\r
<button class="ximfmailButton" id="ximfmailComposeMessageMaximize" tooltiptext="&ximfmail.compose.focus;" accesskey="+" hidden="true" />\r
<button class="ximfmailButton" id="ximfmailComposeMessageMinimize" tooltiptext="&ximfmail.compose.unfocus;" accesskey="-" />\r
</hbox> \r
</vbox>\r
</vbox>\r
- <!-- Display Ximf pictures in message --> \r
- <rows id="expandedHeaderRows">\r
- <row id="ximfHeadBox" insertbefore="expandedfromRow" collapsed="true">\r
- <label value=""/>\r
- <hbox>\r
- <image id="ximfSecurityClassificationLabelImg"/>\r
- <spacer flex="1"/> \r
- <image id="ximfCategoryClassificationLabelImg"/>\r
- <spacer flex="1"/> \r
- </hbox> \r
- </row>\r
- </rows>\r
+ \r
+ <!-- Display Ximf pictures in message expandedHeadersBottomBox --> \r
+ <html:div id="expandedHeadersTopBox">\r
+ <hbox id="ximfHeadBox" insertafter="header-view-toolbox">\r
+ <image id="ximfSecurityClassificationLabelImg"/> \r
+ <image id="ximfCategoryClassificationLabelImg"/> \r
+ </hbox>\r
+ </html:div>\r
+ \r
</overlay>
\ No newline at end of file
* EADS Defence and Security - 1 Boulevard Jean Moulin - \r
* ZAC de la Clef Saint Pierre - 78990 Elancourt - FRANCE (IDDN.FR.001.480012.002.S.P.2008.000.10000) \r
* ***** END LICENSE BLOCK ***** */\r
-
+\r
var gConsole = Components.classes["@mozilla.org/consoleservice;1"].getService(Components.interfaces.nsIConsoleService);\r
var gPrefBranch = null;\r
var gCurrentInstance = "";\r
\r
-
+\r
/* Init ximfmail document */ \r
window.addEventListener("compose-window-init", XimfmailComposeInit, true);\r
-//window.addEventListener("compose-window-reopen", XimfmailReOpen, true); function XimfmailReOpen(){alert("compose-window-reopen")}\r
\r
/*\r
* (Re)open message composer with XIMF instance\r
*/\r
-function XimfmailComposeInit(){\r
+function XimfmailComposeInit(){ \r
// ximfmail not requested\r
+ ResetXimfhdrsDom();\r
if(!gPrefBranch) gPrefBranch = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService).getBranch(null);\r
if(!gPrefBranch.getBoolPref("mailnews.headers.showXimfmail")){ \r
- $("#isUsingXimfail").attr("hidden","true");\r
- $("#ximfmailComposeMessageHeadersTablist").empty();
+ $("#isUsingXimfail").attr("hidden","true"); \r
try{\r
- //remove ximf events ...
- HideSendMessageElements(true);
+ //remove ximf events ...\r
+ HideSendMessageElements(true);\r
$("#addressingWidget").unbind("command",SpecialXimfRule_CheckAddress); \r
- ReloadSecurityAccess();
+ ReloadSecurityAccess();\r
}catch(e){}\r
}else{\r
- CreateXimfmailCatalog(); \r
+ if(!gXimfCatalog) CreateXimfmailCatalog();\r
$("#isUsingXimfail").attr("hidden","false");\r
\r
// observer on sending message\r
var ximfmailObserverSvc = Components.classes["@mozilla.org/observer-service;1"].getService(Components.interfaces.nsIObserverService);\r
ximfmailObserverSvc.addObserver(ximfmailOnSend, "mail:composeOnSend", false); \r
- \r
- // I can't catch event on completely initialized compose message, so loop on gCurrentIdentity loaded\r
- setTimeout("XimfmailStartup()", 50);\r
+ \r
+ XimfmailStartup();\r
} \r
}\r
\r
var gMaxTimeoutXimfmail=0;\r
function XimfmailStartup(){\r
if(!gCurrentIdentity){ \r
+ // I can't catch event on completely initialized compose message, so loop on gCurrentIdentity loaded\r
if(gMaxTimeoutXimfmail<20){\r
setTimeout("XimfmailStartup()", 100);\r
++gMaxTimeoutXimfmail;\r
}\r
return;\r
- }\r
+ } \r
\r
var currentInstance = null;\r
var current_definition = null;\r
- //is Template or Draft message\r
+ // is Template or Draft message\r
var typeMsg = -1;\r
try{\r
// get current definition and default instance of account loaded \r
try{ \r
switch(typeMsg){ \r
case nsIMsgCompType.Draft:\r
- case nsIMsgCompType.Template:
+ case nsIMsgCompType.Template:\r
case nsIMsgCompType.Reply:\r
case nsIMsgCompType.ReplyAll:\r
case nsIMsgCompType.ReplyToSender: \r
* Get Extended headers of messages and display known instances\r
*/\r
function XimfmailParseAndUpdateComposeMesssage(msgSrc,uriSrc){\r
+ \r
var currentXimfHdrArray = XimfmailParseMessage(msgSrc);\r
var ximfMsg = new XimfmailMesssage();\r
if(ximfMsg.init(uriSrc,currentXimfHdrArray)){\r
LoadXimfmailPanel(ximfMsg._instanceMsgXimf);\r
ComputeWithForm(ximfMsg);\r
- }else{\r
- $("#ximfmailComposeMessageHeadersTablist").empty();\r
+ }else{ \r
$("#ximfmailComposeMessageTitle").attr("value","");\r
$("#isUsingXimfail").attr("hidden","false");\r
//remove ximf events ...\r
/*\r
* \r
*/\r
-function LoadXimfmailPanel(currentInstance){ \r
+function LoadXimfmailPanel(currentInstance){\r
try{\r
- //reset old ihm\r
- $("#ximfmailComposeMessageHeadersTablist").empty();\r
ReloadSecurityAccess(); // reload security user functions\r
}catch(e){}\r
gConsole.logStringMessage("DBG [ximfmail - messengerCompose - LoadXimfmailPanel ] \n XIMF instance : "+ currentInstance);\r
var event = document.createEvent('Events');\r
event.initEvent('compose-ximfmail-init', false, true);\r
document.getElementById("msgcomposeWindow").dispatchEvent(event);\r
- }
+ } \r
}\r
\r
+// overload Trustedbird function : add verifications on security message\r
+SendMessage = function(){\r
+ if(CheckIfMustBSigned()){ return false;}\r
+ dump("SendMessage from XUL\n");\r
+ GenericSendMessage(nsIMsgCompDeliverMode.Now);\r
+};\r
+\r
+// overload Trustedbird function : add verifications on security message\r
+SendMessageLater = function(){\r
+ if(CheckIfMustBSigned()){ return false;}\r
+ dump("SendMessageLater from XUL\n");\r
+ GenericSendMessage(nsIMsgCompDeliverMode.Later);\r
+};\r
+\r
+/*\r
+ * is XIMFMAIL message ?\r
+ * yes : check if message must be signed\r
+ * no : continue\r
+ */\r
+function CheckIfMustBSigned(){ \r
+ try{\r
+\r
+ var arrSecureHdrs = CreateRulesArray(gCurrentInstance,"ximf:secureHeaders"); \r
+ var arrSecurityLabelHdrs = CreateRulesArray(gCurrentInstance,"ximf:securityLabel");\r
+ if(arrSecureHdrs.length > 0 || arrSecurityLabelHdrs.length > 0){ \r
+ if(!gSMFields.signMessage){ \r
+ // current message must be secured\r
+ toggleSignMessage(); \r
+ if (!gCurrentIdentity.getUnicharAttribute("signing_cert_name")){ \r
+ return true;\r
+ }else{ \r
+ if(!gSMFields.signMessage){\r
+ // certificate is set by user\r
+ toggleSignMessage();\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }catch(e){\r
+ gConsole.logStringMessage("[ximfmail - SendMessage_Ximf ] not a ximf message... \n " + e + "\nfile : " + Error().fileName+"\nline : "+e.lineNumber);\r
+ }\r
+ return false;\r
+}\r
\r
/*\r
* \r
*/\r
-var ximfmailOnSend = { \r
- observe: function(subject, topic, data) { \r
- if(!gCurrentIdentity) return; \r
+var ximfmailOnSend = {\r
+ observe: function(subject, topic, data) {\r
+ if(!gCurrentIdentity) return; \r
try{\r
var msgCompFields = gMsgCompose.compFields; \r
var charSet = null;\r
\r
//update new selection\r
var arrayAddCompfieldsotherHeaders2 = new Array();\r
- for(i=0 ; i<arrayAddCompfieldsotherHeaders.length ; ++i){;
+ for(i=0 ; i<arrayAddCompfieldsotherHeaders.length ; ++i){;\r
if(arrayAddCompfieldsotherHeaders[i]!= ""){\r
arrayAddCompfieldsotherHeaders2.push(arrayAddCompfieldsotherHeaders[i]);\r
}\r
}\r
\r
// append Security labels\r
- AppendESSSecuityLabel(); \r
+ AppendESSSecuityLabel();\r
}catch(e){\r
- gConsole.logStringMessage("[ximfmail - XimfmailStartup ] \n " + e + "\nfile : " + Error().fileName+"\nline : "+Error().lineNumber); \r
+ gConsole.logStringMessage("[ximfmail - ximfmailOnSend ] \n " + e + "\nfile : " + Error().fileName+"\nline : "+Error().lineNumber); \r
} \r
}\r
};
\ No newline at end of file
<script type="application/javascript" src="chrome://ximfmail/content/jquery.js" />\r
<script type="application/javascript" src="chrome://ximfmail/content/messengerCompose-ov-ximfmail.js" /> \r
<script type="application/javascript" src="chrome://ximfmail/content/constant-ximfmail.js" />\r
+ <script type="application/javascript" src="chrome://ximfmail/content/ximfCatalog.js" />\r
<script type="application/javascript" src="chrome://ximfmail/content/ximfmail.js" /> \r
<script type="application/javascript" src="chrome://ximfmail/content/ximfDataSource.js" />\r
<script type="application/javascript" src="chrome://ximfmail/content/messageAnalyser-ximfmail.js" />\r
} \r
}\r
\r
-\r
var gXimfHdrs = null; \r
// \r
function XimfmailInstanceHeaders(){\r
};\r
// \r
XimfmailInstanceHeaders.prototype.loadXimfSecurityRules = function(){\r
- var isSigned = false;\r
- \r
+ var isToogleSigned = false;\r
// get secure state from prefs\r
- if (gSMFields) isSigned = gSMFields.signMessage; \r
+ if(!gSMFields){\r
+ // use Trustedbird function to initialize gSMFields\r
+ onComposerReOpen(); \r
+ }\r
\r
// secure headers \r
try{\r
serializer.serializeToStream(signHeaders, foStream, ""); // rememeber, doc is the DOM tree\r
foStream.close();\r
\r
- // set folder datas \r
+ // set folder datas\r
gCurrentIdentity.setCharAttribute("secureheaders.folderdata",file.path);\r
\r
- // sign message with secure headers\r
+ // message with secure headers : force sign message\r
gCurrentIdentity.setBoolAttribute("secureheaders.checked",true);\r
$("#idItemSecureHeaders_1").attr("checked","true"); \r
$("#idItemSecureHeaders_2").attr("checked","true"); \r
$("#idItemSecureHeaders_1").attr("disabled","true");\r
- $("#idItemSecureHeaders_2").attr("disabled","true"); \r
- if(!isSigned){\r
- toggleSignMessage();// signMessage(); // from file msgCompSMIMIEOverlay.js\r
- isSigned = true;\r
- } \r
+ $("#idItemSecureHeaders_2").attr("disabled","true"); \r
+ \r
+ $("#menu_securitySign1").attr("checked","true");\r
+ $("#menu_securitySign2").attr("checked","true");\r
$("#menu_securitySign1").attr("disabled","true");\r
- $("#menu_securitySign2").attr("disabled","true"); \r
+ $("#menu_securitySign2").attr("disabled","true");\r
\r
+ if(!gSMFields.signMessage){\r
+ toggleSignMessage();\r
+ isToogleSigned = true;\r
+ // if certificate problem resolved, try to load ui signature\r
+ if (gCurrentIdentity.getUnicharAttribute("signing_cert_name")&&!gSMFields.signMessage){\r
+ toggleSignMessage();// certificate is set by user\r
+ }\r
+ \r
+ }\r
gConsole.logStringMessage("ximfmail - loadSecurityRules - secureHeaders on "); \r
}\r
}else{\r
_eSSSecurityLabelHdrArray = CreateRulesArray(_instance,"ximf:securityLabel");\r
if(_eSSSecurityLabelHdrArray.length > 0){ \r
$("#menu_securityLabelDialog1").attr("checked","true"); \r
- $("#menu_securityLabelDialog2").attr("checked","true"); \r
$("#menu_securityLabelDialog1").attr("disabled","true");\r
+ $("#menu_securityLabelDialog2").attr("checked","true"); \r
$("#menu_securityLabelDialog2").attr("disabled","true");\r
\r
- if(!isSigned){\r
- toggleSignMessage(); // from file msgCompSMIMIEOverlay.js\r
- isSigned = true;\r
- }\r
- if(gSMFields){\r
- gSMFields.securityClassification = -1;\r
- gSMFields.privacyMark = "";\r
- gSMFields.securityCategories = "";\r
- }\r
+ $("#menu_securitySign1").attr("checked","true"); \r
+ $("#menu_securitySign1").attr("disabled","true");\r
+ $("#menu_securitySign2").attr("checked","true");\r
+ $("#menu_securitySign2").attr("disabled","true");\r
+ \r
+ if(!gSMFields.signMessage){\r
+ if(!isToogleSigned){\r
+ toggleSignMessage();\r
+ // if certificate problem resolved, try to load ui signature\r
+ if (gCurrentIdentity.getUnicharAttribute("signing_cert_name")&&!gSMFields.signMessage){\r
+ toggleSignMessage();// certificate is set by user\r
+ }\r
+ }\r
+ } \r
+ \r
+ // \r
+ gSMFields.securityClassification = -1;\r
+ gSMFields.privacyMark = "";\r
+ gSMFields.securityCategories = ""; \r
gConsole.logStringMessage("ximfmail - loadSecurityRules - securityLabels on "); \r
}else{\r
gConsole.logStringMessage("ximfmail - loadSecurityRules - securityLabels off "); \r
function InsertXimfmailComposer(currentInstance){\r
try{\r
if(gXimfHdrs){gXimfHdrs = null;}\r
- \r
gXimfHdrs = new XimfmailInstanceHeaders();\r
gXimfHdrs.init(currentInstance);\r
gXimfHdrs.loadXimfSecurityRules();\r
\r
// ihm init \r
- ResetXimfhdrsDom();\r
InsertXimfhdrsDom(gXimfHdrs.getXimfInstanceResource(), gChromeXslMsgCompose);\r
\r
// controler init \r
* DOM MANIPULATIONS OF XIMFMAIL ELEMENTS\r
*/\r
function ResetXimfhdrsDom(){\r
- // delete old ximf items\r
- $("#ximfmailComposeMessageHeadersTablist").empty();\r
+ try{\r
+ // delete old ximf items\r
+ $("#ximfmailComposeMessageHeadersTablist").empty();\r
+ }catch(e){\r
+ gConsole.logStringMessage("[ximfmail - ResetXimfhdrsDom ] " + e +"\nline : " + e.lineNumber + " : "+ e + "\nfile : "+ Error().fileName);\r
+ }\r
}\r
\r
function InsertXimfhdrsDom(ximfInstanceResource, urlXslTemplate){\r
$("#isUsingXimfail").attr("hidden","true");\r
return;\r
}\r
- $("#isUsingXimfail").attr("hidden","false");\r
- \r
+\r
if(gXimfCatalog){\r
$("#ximfmailComposeMessageTitle").attr("value",gXimfCatalog.getLabelInstance(ximfInstanceResource));\r
}else{\r
$("#ximfmailComposeMessageHeadersTablist").append(CreateDOMWithXimfInstance(ximfInstanceResource, urlXslTemplate));\r
}catch(e){\r
// TODO : alert user of xslt problem\r
- ("#isUsingXimfail").attr("hidden","false");\r
+ ("#isUsingXimfail").attr("hidden","true");\r
} \r
\r
// custom panels where maxitem=1 and contains composed elements\r
for(j=0;j<mnuitems.length;++j){\r
var chkbx = document.createElement("checkbox");\r
$(chkbx).attr("id",$(mnuitems[j]).attr("id"));\r
+ $(chkbx).attr("class","ximfCheckbox");\r
$(chkbx).attr("label",$(mnuitems[j]).attr("label"));\r
$(chkbx).attr("ximfvalue",$(mnuitems[j]).attr("ximfvalue"));\r
$(chkbx).attr("ximftextbox",$(mnuitems[j]).attr("ximftextbox"));\r
// Custom Ximf Headers Dom\r
CustomXimfhdrsInputBox(); \r
CustomXimfhdrsButton(); \r
- CustomXimfhdrsTreeDialog(); // append DOM elements to access external datas \r
+ CustomXimfhdrsTreeDialog(); // append DOM elements to access external datas\r
+ \r
+ // display Ximf elements\r
+ $("#isUsingXimfail").attr("hidden","false");\r
} \r
\r
/*\r
var listEditorClass = $("popup > textbox[class='ximfInputbox']");\r
for(var i = 0 ; i<listEditorClass.length ; ++i){ \r
try{\r
- var idTxtBox = listEditorClass[i].getAttribute("ximfreftextbox");\r
- var inputbox = $("textbox[id='"+idTxtBox+"'][class]");\r
- if(inputbox[0].getAttribute("class") != "ximfDatetime"){ \r
- var editor_button = $("textbox[id='"+idTxtBox+"']>button");\r
- editor_button[0].setAttribute("class","ximfmailButtonTxt ximfEditor"); \r
- editor_button[0].setAttribute("tooltiptext",getIlkProperties("ximfmail.composer.editor.image"));\r
- editor_button[0].setAttribute("refbox",inputbox[0].getAttribute("id")); \r
+ var idTxtBox = $(listEditorClass[i]).attr("ximfreftextbox");\r
+ var inputbox = $("textbox[id='"+idTxtBox+"']");\r
+ if($(inputbox).attr("class") != "ximfDatetime"){ \r
+ var editor_button = $("textbox[id='"+idTxtBox+"']>button"); \r
+ $(editor_button).attr("class","ximfmailButtonTxt ximfEditor"); \r
+ $(editor_button).attr("tooltiptext",getIlkProperties("ximfmail.composer.editor.image"));\r
+ $(editor_button).attr("refbox",$(inputbox).attr("id"));\r
\r
- inputbox[0].setAttribute("ximfmaxitems", listEditorClass[i].getAttribute("ximfmaxitems"));\r
- inputbox[0].setAttribute("ximfminitems", listEditorClass[i].getAttribute("ximfminitems"));\r
- inputbox[0].setAttribute("ximseparator", listEditorClass[i].getAttribute("ximseparator"));\r
- inputbox[0].setAttribute("tabindex",parseInt(i, 10)+100);\r
- inputbox[0].setAttribute("class","ximfEditor"); \r
- inputbox[0].removeAttribute("popup");\r
- inputbox[0].removeAttribute("readonly");\r
+ $(inputbox).attr("ximfmaxitems", $(listEditorClass[i]).attr("ximfmaxitems"));\r
+ $(inputbox).attr("ximfminitems", $(listEditorClass[i]).attr("ximfminitems"));\r
+ $(inputbox).attr("ximseparator", $(listEditorClass[i]).attr("ximseparator"));\r
+ $(inputbox).attr("tabindex",parseInt(i, 10)+100);\r
+ $(inputbox).attr("class","ximfEditor");\r
+ $(inputbox).removeAttr("popup");\r
+ $(inputbox).removeAttr("readonly");\r
}\r
}catch(e){\r
- gConsole.logStringMessage("[ximfmail - modifyEditorBox ] \n " + e + "\nfile : " + Error().fileName+"\nline : "+e.lineNumber); \r
+ gConsole.logStringMessage("[ximfmail - CustomXimfhdrsInputBox ] \n " + e + "\nfile : " + Error().fileName+"\nline : "+e.lineNumber); \r
} \r
}\r
\r
rdfdataSource = _dataSourceArray[idxDatasSource]._dataSource;\r
refRdfdataSource = _dataSourceArray[idxDatasSource]._refDataSource;\r
}else{ \r
- // get xml schema from profile instance directory \r
+ // get xml schema from profile instance directory\r
var sCompletePath = getFilePathInProfile("extensions/"+gXimfCatalog.getSchemaInstance(gXimfHdrs.getXimfInstanceResource()));\r
sCompletePath = sCompletePath.substring(0, sCompletePath.lastIndexOf("\\")+1) + keyCat; \r
var dir = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);\r
} \r
}\r
\r
+\r
/*\r
* Open window text editor\r
*/\r
$("textbox[class='ximfEditor']").bind("change",OnCheckXimfhdrsEditor); \r
$("button[class*='ximfEditor']").bind("command",OnClickEditorButton);\r
\r
+ // check for mandatory ximf headers when editor texbox has changed\r
+ $("#ximfmailComposeMessageHeadersTablist textbox").bind("change",function(e){\r
+ e.currentTarget.setAttribute("ximfvalue",e.currentTarget.value);\r
+ CheckXimfhdrsSelection();});\r
+ \r
// get complete information of ximf hdr\r
$("button[class*='ximfDetail']").bind("command",function(evt){\r
OpenInfoDialog($(evt.currentTarget).attr("refLabel")); \r
var arrayCheckedbox = null;\r
while(nextElt){\r
if(nextElt.localName == "popup"){ \r
- arrayCheckedbox = $("popup[id='"+nextElt.id+"'] checkbox[class='ximCheckbox'][checked]" ); \r
+ arrayCheckedbox = $("popup[id='"+nextElt.id+"'] checkbox[class='ximfCheckbox'][checked]" ); \r
//alert("checklist OK !!" + nextElt.id + arrayCheckbox.length);\r
// id of parent node\r
idTextBox = nextElt.getAttribute('ximfreftextbox'); \r
// send hidden headers elements\r
var arrayValues = $("label[class='ximfHiddenHeader']");\r
if(arrayValues){ \r
- for(var idx=0; idx<=arrayValues.length; idx++){\r
+ for(var idx=0; idx<arrayValues.length; idx++){\r
try { \r
if(arrayValues[idx].getAttribute(_XIMF_ATT_XVALUE)){ \r
sCompleteList += EncodeMimeXimfheader($(arrayValues[idx]).attr("ximfheader"), $(arrayValues[idx]).attr(_XIMF_ATT_XVALUE), charSet) + headersSeparator; \r
// send textbox elements\r
arrayValues = $("textbox[class='XimfTextboxDisplay']");\r
if(arrayValues){ \r
- for(var idx=0; idx<=arrayValues.length; idx++){\r
+ for(var idx=0; idx<arrayValues.length; idx++){\r
try { \r
if($(arrayValues[idx]).attr(_XIMF_ATT_XVALUE)){\r
sCompleteList += EncodeMimeXimfheader($("#"+$(arrayValues[idx]).attr(_XIMF_ATT_REF_HEADER)).attr("ximfheader"), $(arrayValues[idx]).attr(_XIMF_ATT_XVALUE), charSet) + headersSeparator;\r
try{ \r
arrayValues = $("textbox[class='ximfEditor']");\r
if(arrayValues){\r
- for( idx=0; idx<=arrayValues.length; idx++){ \r
+ for( idx=0; idx<arrayValues.length; idx++){ \r
if(arrayValues[idx].value){\r
try{\r
sCompleteList += EncodeMimeXimfheader($("#"+$(arrayValues[idx]).attr(_XIMF_ATT_REF_HEADER)).attr("ximfheader"), arrayValues[idx].value, charSet) + headersSeparator; \r
//arrayValues = $("#ximfmailComposeMessagePanel " + _XIMF_ELT_DATEPICKER); \r
arrayValues = $("textbox[class='ximfDatetime']"); \r
if(arrayValues){ \r
- for( idx=0; idx<=arrayValues.length; idx++){ \r
+ for( idx=0; idx<arrayValues.length; idx++){ \r
if(arrayValues[idx].value){ \r
try{\r
sCompleteList += EncodeMimeXimfheader($("#"+$(arrayValues[idx]).attr(_XIMF_ATT_REF_HEADER)).attr("ximfheader"), arrayValues[idx].getAttribute(_XIMF_ATT_XVALUE), charSet) + headersSeparator; \r
try{\r
arrayValues = $("#ximfmailComposeMessagePanel ximfaddress");\r
if(arrayValues){ \r
- for( idx=0; idx<=arrayValues.length; idx++){ \r
+ for( idx=0; idx<arrayValues.length; idx++){ \r
if(arrayValues[idx].listaddress != ""){\r
try{\r
sCompleteList += EncodeMimeXimfheader($("#"+$(arrayValues[idx]).attr(_XIMF_ATT_REF_HEADER)).attr("ximfheader"), arrayValues[idx].listaddress, charSet) + headersSeparator;\r
* ***** END LICENSE BLOCK ***** */\r
\r
/*\r
- * TreeThread observer\r
+ * XimfThreadTreeDBViewObserver\r
+ * 'MsgCreateDBView' : Special event that gets fired whenever a view is created. \r
+ * When that event fires, set up the custom column handler on the new view.\r
*/\r
var XimfThreadTreeDBViewObserver = {\r
// Components.interfaces.nsIObserver\r
- observe: function(aMsgFolder, aTopic, aData) { \r
- if(gXimfThreadTree) gXimfThreadTree.addCustomColumnHandler();\r
+ observe: function(aMsgFolder, aTopic, aData){ \r
+ gConsole.logStringMessage("ximfmail - XimfThreadTreeDBViewObserver:observe");\r
+ XimfThreadTree.getInstance().create();\r
}\r
}\r
\r
-/* \r
- * XimfThreadTree class\r
+/*\r
+ * Column handler template definition \r
+ */\r
+function XimfCustomColumnHandler(property){\r
+ // Properties\r
+ this.property = property;\r
+ this.isString = true; \r
+ \r
+ // Functions\r
+ this.getSortStringForRow = function (hdr){ return (this.isString) ? hdr.getStringProperty(this.property) : ""; };\r
+ this.isString = function (){ return this.isString; };\r
+ this.getCellProperties = function (row, col, props) {};\r
+ this.getRowProperties = function(row, props){};\r
+ this.getImageSrc = function (row, col){return null; };\r
+ this.getSortLongForRow = function(hdr){ return (this.isString) ? 0 : new Number(hdr.getStringProperty(this.property)).value; };\r
+ this.getCellText = function (row, col){\r
+ // get cell informations\r
+ var key = gDBView.getKeyAt(row);\r
+ var hdr = gDBView.db.GetMsgHdrForKey(key);\r
+ var value = hdr.getStringProperty(this.property); \r
+ // get ilk value if exists \r
+ var ilklabel = XimfThreadTree.getInstance().getIlkColumnArray()[this.property.toLowerCase()][value.toLowerCase()];\r
+ if(ilklabel == undefined) ilklabel = value;\r
+ //gConsole.logStringMessage("[ximfmail - XimfCustomColumnHandler ] getCellText "+this.property+" = " + ilklabel ); \r
+ return ilklabel; \r
+ };\r
+};\r
+\r
+/*\r
+ * XimfThreadTree \r
+ * Custom Columns with XIMF headers\r
+ * Get XIMF headers in xml containers <ihm> of Ximfmail instances : \r
+ * <ximf:treeRcv>\r
+ * <ximf:headerRef>header-reference</ximf:headerRef> \r
+ * <ximf:headerRef>header-reference-other</ximf:headerRef>\r
+ * </ximf:treeRcv>\r
*/\r
-function XimfThreadTree(){\r
+var XimfThreadTree = (function(){\r
// private:\r
+ var instantiated; \r
+ var _chromeXslTreeRcv = "chrome://theme_ximfmail/content/threadTree-ximfmail.xsl";\r
var _ximfHdrArrayByID = [];\r
+ var _refAccountArray = []; \r
+ var _ximfIlilkCustomColumnArray = [];\r
\r
- //\r
- function isDataInArray(data,array){\r
- for(var i=0; i<array.length; ++i){\r
- if(data == array[i]){\r
- return true;\r
- }\r
- }\r
- return false;\r
- }\r
- \r
- /*\r
- * Get ilk values from instance\r
- */\r
- function LoadIlkColumnsValues2(currentInstance){\r
- try{\r
- var ilkArray = [];\r
- // get xml schema for instance\r
- if(!gXimfCatalog){ \r
- gXimfCatalog = new XimfCatalog();\r
+ // add DOM element to tree\r
+ function addColumn(domTreecol,idTreecol){\r
+ $("#threadCols").append(domTreecol); // istancedom_treecol is mofified by append jquery function is called\r
+ var splitter_dom = document.createElement("splitter");\r
+ $(splitter_dom).attr("reftreecol",idTreecol);\r
+ $(splitter_dom).attr("class","tree-splitter");\r
+ $(splitter_dom).attr("ximfheadtree","1"); \r
+ $("#threadCols").append(splitter_dom);\r
+ gConsole.logStringMessage("[ximfmail - XimfThreadTree:addColumn] add new ximf column to Dom - id = " + idTreecol);\r
+ };\r
+ // attach handler object to custom column. addColumnHandler that takes a column ID\r
+ function addColumnHandler(idTreecol){\r
+ if (gDBView){ \r
+ gDBView.addColumnHandler(idTreecol, new XimfCustomColumnHandler(idTreecol.toLowerCase())); \r
+ gConsole.logStringMessage("[ximfmail - XimfThreadTree:addColumnHandler] load new XimfCustomColumnHandler for column " + idTreecol);\r
}\r
- var dir = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);\r
- var completePath = getFilePathInProfile("extensions/"+gXimfCatalog.getSchemaInstance(currentInstance));\r
- dir.initWithPath( completePath ); \r
- if(!dir.exists()){ \r
- gConsole.logStringMessage("[Ximfmail - createThreadTree - LoadIlkColumnsValues2] Error loading schema file : " + completePath);\r
- return;\r
- } \r
- var objXML = GetXmlDocument(completePath);\r
- var headers = objXML.getElementsByTagName("ximf:header");\r
- \r
- // get xml dictionary parser\r
- var urlDictionary = getFilePathInProfile("extensions/"+gXimfCatalog.getDictionaryInstance(currentInstance));\r
- dir.initWithPath( urlDictionary ); \r
- if(!dir.exists()){ \r
- gConsole.logStringMessage("[Ximfmail - LoadIlkColumnsValues2] Error loading dictionary file : " + completePath);\r
- return;\r
+ };\r
+ // remove DOM element from tree\r
+ function deleteColummn(idTreeCol){ \r
+ for(var i = 0 ; i < _ximfHdrArrayByID.length ; ++i){\r
+ if(_ximfHdrArrayByID[i] === idTreeCol){\r
+ _ximfHdrArrayByID.splice(i,1);\r
+ $("#"+idTreeCol).remove();\r
+ $("splitter[reftreecol='"+idTreeCol+"']").remove();\r
+ gConsole.logStringMessage("[ximfmail - XimfThreadTree:deleteColummn] remove ximf column from Dom - id = " + idTreeCol); \r
+ }\r
} \r
- var dicoXML = GetXmlDocument(urlDictionary);\r
- var dicoElements = dicoXML.getElementsByTagName("ximf:locale");\r
- \r
- // get local lang \r
- var prefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch);\r
- var refLang = prefs.getCharPref("general.useragent.locale");\r
- if(!refLang) refLang = "fr-FR"; \r
- var ilkEntities = null;\r
- for(var idxLang=0 ; idxLang < dicoElements.length ; ++idxLang){ \r
- if(dicoElements[idxLang].getAttribute("lang") == refLang){\r
- ilkEntities = dicoElements[idxLang].getElementsByTagName("ximf:ilk");\r
+ };\r
+ // update Ximfmail column\r
+ function updateXimfHdrArrayByID(idToUpdate){\r
+ gConsole.logStringMessage("[ximfmail - XimfThreadTree:updateXimfHdrArrayByID] update Ximfmail column " + idToUpdate); \r
+ var isIdExist = false;\r
+ for(var i = 0 ; i < _ximfHdrArrayByID.length ; ++i){\r
+ if(_ximfHdrArrayByID[i] === idToUpdate){ \r
+ isIdExist = true;\r
break;\r
}\r
}\r
- \r
- // parse XML and get labels\r
- for(var i=0 ; i < _ximfHdrArrayByID.length ; ++i){\r
- var currentTreeColId = _ximfHdrArrayByID[i];\r
- for(var idxH = 0 ; idxH < headers.length; ++idxH){ \r
- var attrHeaderList = headers[idxH].attributes; \r
- var headerName = headers[idxH].getAttribute("headerName");\r
- \r
- if(headerName.toLowerCase() == currentTreeColId.toLowerCase()){ \r
- var stringListElt = headers[idxH].getElementsByTagName("ximf:string");\r
- var treeElement = document.getElementById(currentTreeColId);\r
- \r
- var reg=new RegExp(' ', "gi");\r
- for(var j=0 ; j< stringListElt.length ; j++){\r
- try{ \r
- // get values from instance headers\r
- var sContent = stringListElt[j].getAttribute("content"); \r
- var sIlk = stringListElt[j].getAttribute("ilk")\r
- \r
- // get ilk entity from instance dictionay\r
- if(ilkEntities){\r
- for(var idxIlk = 0 ; idxIlk < ilkEntities.length ; ++idxIlk){\r
- if(ilkEntities[idxIlk].getAttribute("entity") == sIlk){\r
- sIlk = ilkEntities[idxIlk].textContent;\r
- //gConsole.logStringMessage("[Ximfmail - LoadIlkColumnsValues2] sIlk : " + sIlk); \r
- break;\r
- }\r
- }\r
- }\r
- // set values to tree column \r
- var ilkid = "ximfkey_"+sContent;\r
- ilkid = ilkid.replace(reg,"_");\r
- //gConsole.logStringMessage("[Ximfmail - LoadIlkColumnsValues2] ]"+ilkid +":"+sIlk+"["); \r
- treeElement.setAttribute(ilkid,sIlk); \r
- }catch(e){} \r
- }\r
- break;\r
- }\r
- }\r
- }\r
-\r
- }catch(e){\r
- gConsole.logStringMessage("[ximfmail - LoadIlkColumnsValues ] " + e +"\nline : " + e.lineNumber + " : "+ e + "\nfile : "+ Error().fileName);\r
+ if(!isIdExist){\r
+ _ximfHdrArrayByID.push(idToUpdate);\r
}\r
- return ilkArray;\r
}\r
- \r
- //\r
- function addCustomPreferences(preference, lower){\r
- var xListHdr = "";\r
- var prefList = [];\r
- var prefBranch = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService).getBranch(null);\r
+ // set Ximf headers to display to Thunderbird to check for x-headers\r
+ function addCustomPreferences(preference){\r
+ gConsole.logStringMessage("[ximfmail - XimfThreadTree:updateColumnToHide] Set Ximf headers to display to Thunderbird pref : " + preference);\r
+ var xListHdr = "";\r
+ var prefList = [];\r
+ var prefBranch = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService).getBranch(null);\r
\r
- try {\r
- xListHdr = prefBranch.getCharPref(preference);\r
- if((xListHdr) != ""){\r
- var reg=new RegExp("[ ]+", "g");\r
- prefList=xListHdr.split(reg); \r
- }\r
- } catch(ex) {}\r
-\r
- // add only new headers\r
- for (var i = 0; i < _ximfHdrArrayByID.length; i++) { \r
- if (!isDataInArray(_ximfHdrArrayByID[i].toLowerCase(),prefList)){\r
- if (xListHdr != "") {\r
- xListHdr += " ";\r
- } \r
- xListHdr += _ximfHdrArrayByID[i].toLowerCase();\r
- }\r
- } \r
- prefBranch.setCharPref(preference, xListHdr);\r
- };\r
- //Column handler template definition \r
- function XimfCustomColumnHandler(property) {\r
- // Properties\r
- this.property = property;\r
- this.isString = true; \r
- \r
- // Functions\r
- this.getSortStringForRow = function (hdr){ return (this.isString) ? hdr.getStringProperty(this.property) : ""; };\r
- this.isString = function (){ return this.isString; };\r
- this.getCellProperties = function (row, col, props) {};\r
- this.getRowProperties = function(row, props){};\r
- this.getImageSrc = function (row, col){return null; };\r
- this.getSortLongForRow = function(hdr){ return (this.isString) ? 0 : new Number(hdr.getStringProperty(this.property)).value; };\r
- this.getIlkValue = function(value){\r
- var newValue = value;\r
- listTreecol = $("treecol[ximfheadtree='1']");\r
- var reg=new RegExp(' ', "gi");\r
- for(var i=0; i<listTreecol.length; ++i){\r
- if(listTreecol[i].getAttribute("id").toLowerCase()== this.property){\r
- // set values to tree column\r
- var ilkid = "ximfkey_"+value;\r
- ilkid = ilkid.replace(reg,"_"); \r
- newValue = listTreecol[i].getAttribute(ilkid);\r
- if (newValue == ""){ \r
- newValue = value;\r
- }\r
- break;\r
+ try {\r
+ xListHdr = prefBranch.getCharPref(preference);\r
+ if((xListHdr) != ""){\r
+ var reg=new RegExp("[ ]+", "g");\r
+ prefList=xListHdr.split(reg); \r
+ }\r
+ } catch(ex) {}\r
+ \r
+ function isDataInArray(data,array){ \r
+ for(var i=0; i<array.length; ++i){\r
+ if(data == array[i]){\r
+ return true;\r
}\r
}\r
- return newValue;\r
- };\r
- this.getCellText = function (row, col){\r
- var key = gDBView.getKeyAt(row);\r
- var hdr = gDBView.db.GetMsgHdrForKey(key);\r
- var value = hdr.getStringProperty(this.property);\r
- //return hdr.getStringProperty(this.property);\r
- //return value.toLowerCase();\r
- return this.getIlkValue(value);;\r
- }; \r
+ return false;\r
+ }; \r
+ \r
+ // add only new headers\r
+ for (var i = 0; i < _ximfHdrArrayByID.length; i++) { \r
+ if (!isDataInArray(_ximfHdrArrayByID[i].toLowerCase(),prefList)){\r
+ if (xListHdr != "") {\r
+ xListHdr += " ";\r
+ } \r
+ xListHdr += _ximfHdrArrayByID[i].toLowerCase();\r
+ }\r
+ }\r
+ prefBranch.setCharPref(preference, xListHdr);\r
};\r
- \r
- function updateColumnToHide(){\r
+ // obsolete?\r
+ function updateColumnToHide(){ \r
try{\r
if(_ximfHdrArrayByID.length <= 0 ) return;\r
if(gCurrentIdentity){ \r
var prefList = gCurrentIdentity.getCharAttribute("ximfmail_context_DBHeaders");\r
- if(prefList == "undefined") return;\r
+ if(prefList == undefined) return;\r
for(var i=0; i<_ximfHdrArrayByID.length; ++i){\r
if(prefList.lastIndexOf(_ximfHdrArrayByID[i]) != -1){\r
$("treecol[id='"+_ximfHdrArrayByID[i]+"']").attr("hidden","true");\r
}\r
}\r
}catch(e){\r
- gConsole.logStringMessage("[ximfmail - createThreadTree ] " + e +"\nline : " + Error().lineNumber + " : "+ e + "\nfile : "+ Error().fileName);\r
+ gConsole.logStringMessage("[ximfmail - XimfThreadTree:updateColumnToHide ] " + e +"\nline : " + Error().lineNumber + " : "+ e + "\nfile : "+ Error().fileName);\r
} \r
}; \r
- \r
- // public:\r
- if(typeof XimfThreadTree.initialized == "undefined"){\r
- //load tree cells with ximf headers\r
- XimfThreadTree.prototype.createThreadTree = function(){\r
- try{\r
- if(gCurrentIdentity){\r
- var currentInstance = gCurrentIdentity.getCharAttribute("ximfmail_instance_treethread_ref");\r
- // delete previous ximfmail columns\r
- $("splitter[ximfheadtree='1']").remove();\r
- $("treecol[ximfheadtree='1']").remove();\r
- _ximfHdrArrayByID.splice(0,_ximfHdrArrayByID.length);\r
- // new instance -> new ximf columns\r
- if(gCurrentIdentity.getBoolAttribute(XIMF_PREF_IDENTITY_USE_XIMFMAIL)){\r
- $("#threadCols").append(CreateDOMWithXimfInstance(currentInstance,gChromeXslTreeRcv));\r
- \r
- // save list of ximf columns\r
- var listID = $("#threadCols treecol[ximfheadtree='1']");\r
- \r
- if(!listID) return;\r
- for(var idx=0; idx<listID.length; ++idx){\r
- _ximfHdrArrayByID.push(listID[idx].id); \r
+ // get ilk values from instance\r
+ function updateXimfIlkCustomColumnArray(currentInstance){\r
+ try{\r
+ gConsole.logStringMessage("[ximfmail - XimfThreadTree:updateXimfIlkCustomColumnArray ] create ilk array for Ximf values of instance : "+currentInstance);\r
+ \r
+ // get xml schema for instance\r
+ gXimfCatalog = XimfCatalog.getInstance();\r
+ \r
+ var dir = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);\r
+ var completePath = getFilePathInProfile("extensions/"+gXimfCatalog.getSchemaInstance(currentInstance));\r
+ dir.initWithPath( completePath ); \r
+ if(!dir.exists()){ \r
+ gConsole.logStringMessage("[ximfmail - XimfThreadTree:updateXimfIlkCustomColumnArray] Error on loading schema file : " + completePath);\r
+ return;\r
+ } \r
+ var objXML = GetXmlDocument(completePath);\r
+ var headers = objXML.getElementsByTagName("ximf:header");\r
+ \r
+ // get xml dictionary parser\r
+ var urlDictionary = getFilePathInProfile("extensions/"+gXimfCatalog.getDictionaryInstance(currentInstance));\r
+ dir.initWithPath( urlDictionary ); \r
+ if(!dir.exists()){ \r
+ gConsole.logStringMessage("[ximfmail - XimfThreadTree:updateXimfIlkCustomColumnArray] Error on loading dictionary file : " + completePath);\r
+ return;\r
+ } \r
+ var dicoXML = GetXmlDocument(urlDictionary);\r
+ var dicoElements = dicoXML.getElementsByTagName("ximf:locale");\r
+ \r
+ // get local lang \r
+ var prefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch);\r
+ var refLang = prefs.getCharPref("general.useragent.locale");\r
+ if(!refLang) refLang = "fr"; \r
+ var ilkEntities = null;\r
+ for(var idxLang=0 ; idxLang < dicoElements.length ; ++idxLang){ \r
+ if(dicoElements[idxLang].getAttribute("lang") == refLang){\r
+ ilkEntities = dicoElements[idxLang].getElementsByTagName("ximf:ilk");\r
+ break;\r
+ }\r
+ }\r
+ \r
+ // parse XML and get ilk values\r
+ for(var i=0 ; i < _ximfHdrArrayByID.length ; ++i){\r
+ var currentTreeColId = _ximfHdrArrayByID[i];\r
+ for(var idxH = 0 ; idxH < headers.length; ++idxH){ \r
+ var attrHeaderList = headers[idxH].attributes; \r
+ var headerName = headers[idxH].getAttribute("headerName"); \r
+ if(headerName.toLowerCase() == currentTreeColId.toLowerCase()){\r
+ var stringListElt = headers[idxH].getElementsByTagName("ximf:string"); \r
+ var tmparray = new Array(); \r
+ for(var j=0 ; j< stringListElt.length ; j++){\r
+ try{ \r
+ // get values from instance headers\r
+ var sContent = stringListElt[j].getAttribute("content"); \r
+ var sIlk = stringListElt[j].getAttribute("ilk") \r
+ // get ilk entity from instance dictionay\r
+ if(ilkEntities){\r
+ for(var idxIlk = 0 ; idxIlk < ilkEntities.length ; ++idxIlk){\r
+ if(ilkEntities[idxIlk].getAttribute("entity") == sIlk){\r
+ sIlk = ilkEntities[idxIlk].textContent;\r
+ break;\r
+ }\r
+ }\r
+ }\r
+ \r
+ // push array\r
+ tmparray[sContent.toLowerCase()]=sIlk;\r
+ \r
+ }catch(e){\r
+ gConsole.logStringMessage("[ximfmail - XimfThreadTree:updateXimfIlkCustomColumnArray ] " + e +"\nline : " + e.lineNumber + " : "+ e + "\nfile : "+ Error().fileName);\r
+ } \r
}\r
- updateColumnToHide();\r
- //LoadIlkColumnsValues(currentInstance);\r
- LoadIlkColumnsValues2(currentInstance); \r
- \r
- // use by Thunderbird to check for x-headers\r
- addCustomPreferences('mailnews.customDBHeaders', true); \r
+ // save ilk values for an ximf header \r
+ if(tmparray) _ximfIlilkCustomColumnArray[headerName.toLowerCase()] = tmparray;\r
}\r
- } \r
- }catch(e){\r
- gConsole.logStringMessage("[ximfmail - createThreadTree ] " + e +"\nline : " + Error().lineNumber + " : "+ e + "\nfile : "+ Error().fileName);\r
- }\r
- }; \r
- XimfThreadTree.prototype.addCustomColumnHandler = function(){\r
- if(_ximfHdrArrayByID.length <= 0 ) return;\r
- if (gDBView) { \r
- for(var i=0; i<_ximfHdrArrayByID.length; ++i){\r
- gDBView.addColumnHandler(_ximfHdrArrayByID[i], new XimfCustomColumnHandler(_ximfHdrArrayByID[i].toLowerCase()));\r
}\r
}\r
- };\r
- XimfThreadTree.prototype.saveColumnToHide = function(){\r
- var listID = $("#threadCols treecol[ximfheadtree='1']");//\r
- try{\r
- if(gCurrentIdentity){ \r
- prefList = ""\r
- for(var i=0; i<listID.length; ++i){\r
- if(listID[i].getAttribute("hidden") == "true"){\r
- if(prefList != "") prefList +=",";\r
- prefList += listID[i].id;\r
+ }catch(e){ \r
+ gConsole.logStringMessage("[ximfmail - XimfThreadTree:updateXimfIlkCustomColumnArray] " + e +"\nline : " + e.lineNumber + " : "+ e + "\nfile : "+ Error().fileName);\r
+ } \r
+ };\r
+ function init(){ \r
+ // singleton here\r
+ return{\r
+ // create : create Ximf columns if don't exist and/or add handler on Ximf columns\r
+ // return true if success / false if failed\r
+ create : function(){\r
+ try{\r
+ gConsole.logStringMessage("[ximfmail - XimfThreadTree:create ] create begin - _ximfHdrArrayByID len : "+_ximfHdrArrayByID.length);\r
+ GetCurrentUser();\r
+ if(!gCurrentIdentity) return false;\r
+ var refIdentityKey = gCurrentIdentity.key;\r
+ var currentlistID = $("#threadCols treecol[ximfheadtree='1']"); // get existing Ximf columns \r
+ \r
+ // check if Ximf columns of account already created \r
+ for(var i = 0 ; i < _refAccountArray.length ; ++i){\r
+ if(_refAccountArray[i] === refIdentityKey){\r
+ // account already updated for this session, don't do it again,\r
+ // handler Ximfmail columns headers must be fired \r
+ for(var idx =0 ; idx < currentlistID.length ; ++idx){\r
+ addColumnHandler(currentlistID[idx].id); \r
+ } \r
+ gConsole.logStringMessage("[ximfmail - XimfThreadTree:create ] account already updated for this session - handler Ximfmail columns");\r
+ return true; \r
+ } \r
+ }\r
+ _refAccountArray.push(refIdentityKey);\r
+ \r
+ // get Ximfmail instance with headers to custom \r
+ var currentInstance = gCurrentIdentity.getCharAttribute("ximfmail_instance_treethread_ref"); \r
+ var instancedom = CreateDOMWithXimfInstance(currentInstance,_chromeXslTreeRcv);\r
+ var istancedom_treecol = instancedom.childNodes;\r
+ \r
+ // add new headers to tree\r
+ gConsole.logStringMessage("[ximfmail - XimfThreadTree:create ] " + istancedom_treecol.length + " elements in Ximfmail instance to custom");\r
+ for(var k = istancedom_treecol.length - 1 ; k >= 0 ; --k){\r
+ try{\r
+ var instanceId = $(istancedom_treecol[k]).attr("id"); \r
+ var isCurrentIdInInstance = false;\r
+ for(var l = 0 ; l < currentlistID.length ; ++l){\r
+ if( instanceId === $(currentlistID[l]).attr("id")){\r
+ isCurrentIdInInstance = true; \r
+ gConsole.logStringMessage("[ximfmail - XimfThreadTree:create ] instance " + instanceId + " exists"); \r
+ break;\r
+ }\r
+ }\r
+ if(!isCurrentIdInInstance){\r
+ updateXimfHdrArrayByID(instanceId);\r
+ addColumn(istancedom_treecol[k],instanceId); // add DOM element to tree\r
+ addColumnHandler(instanceId); // load handler\r
+ gConsole.logStringMessage("[ximfmail - XimfThreadTree:create ] instance " + instanceId + " created"); \r
+ //updateColumnToHide(); ???\r
+ }\r
+ }catch(e){\r
+ gConsole.logStringMessage("[ximfmail - XimfThreadTree:create ] compute error - id = " + k + " : " + e); \r
+ }\r
+ }\r
+ \r
+ // used by Thunderbird to check for x-headers\r
+ addCustomPreferences('mailnews.customDBHeaders'); \r
+ \r
+ // load ilk array for Ximf values of tree cells\r
+ updateXimfIlkCustomColumnArray(currentInstance);\r
+ \r
+ // trace ilk array \r
+ var string = "";\r
+ for(xh in _ximfIlilkCustomColumnArray){\r
+ for(ilk in _ximfIlilkCustomColumnArray[xh]){\r
+ string += "["+ xh +"]["+ ilk +"]["+ _ximfIlilkCustomColumnArray[xh][ilk] + "]\n";\r
}\r
- } \r
- gCurrentIdentity.setCharAttribute("ximfmail_context_DBHeaders",prefList);\r
+ }\r
+ gConsole.logStringMessage("[ximfmail - XimfThreadTree:create ] array of ilk of ximf value" + string); \r
+ return true; \r
+ }catch(e){ \r
+ gConsole.logStringMessage("[ximfmail - XimfThreadTree:create] " + e +"\nline : " + e.lineNumber + " : "+ e + "\nfile : "+ Error().fileName);\r
+ return false;\r
+ } \r
+ },\r
+ // delete all custom columns of XIMF headers\r
+ deleteXimfColummns : function(){ \r
+ $("treecol[ximfheadtree='1']").remove();\r
+ $("splitter[ximfheadtree='1']").remove(); \r
+ gConsole.logStringMessage("[ximfmail - XimfThreadTree:deleteXimfColummns ] delete all custom columns of XIMF headers"); \r
+ },\r
+ // attach customColumnHandler for all columns of XIMF headers\r
+ addCustomColumnHandler : function(){\r
+ var currentlistID = $("#threadCols treecol[ximfheadtree='1']");\r
+ for(var i =0 ; i < currentlistID.length ; ++i){ \r
+ addColumnHandler(); \r
}\r
- }catch(e){\r
- gConsole.logStringMessage("[ximfmail - createThreadTree ] " + e +"\nline : " + Error().lineNumber + " : "+ e + "\nfile : "+ Error().fileName);\r
- } \r
- }; \r
- // loaded object\r
- XimfThreadTree.initialized = true;\r
+ gConsole.logStringMessage("[ximfmail - XimfThreadTree:addCustomColumnHandler ] attach customColumnHandler for all columns of XIMF headers"); \r
+ },\r
+ // get ilk array for Ximf values of tree cells\r
+ getIlkColumnArray : function(){ \r
+ return _ximfIlilkCustomColumnArray;\r
+ },\r
+ //obsolete?\r
+ saveColumnToHide : function(){\r
+ var listID = $("#threadCols treecol[ximfheadtree='1']");//\r
+ try{\r
+ if(gCurrentIdentity){ \r
+ prefList = ""\r
+ for(var i=0; i<listID.length; ++i){\r
+ if(listID[i].getAttribute("hidden") == "true"){\r
+ if(prefList != "") prefList +=",";\r
+ prefList += listID[i].id;\r
+ }\r
+ } \r
+ gCurrentIdentity.setCharAttribute("ximfmail_context_DBHeaders",prefList);\r
+ }\r
+ }catch(e){\r
+ gConsole.logStringMessage("[ximfmail - saveColumnToHide ] " + e +"\nline : " + Error().lineNumber + " : "+ e + "\nfile : "+ Error().fileName);\r
+ }\r
+ }\r
+ } \r
}\r
-}
\ No newline at end of file
+ return{\r
+ getInstance : function(){\r
+ if(!instantiated){\r
+ instantiated = init();\r
+ }\r
+ return instantiated;\r
+ }\r
+ }; \r
+})(); // one shot on XimfThreadTree
\ No newline at end of file
* ZAC de la Clef Saint Pierre - 78990 Elancourt - FRANCE (IDDN.FR.001.480012.002.S.P.2008.000.10000)
* ***** END LICENSE BLOCK ***** */
var gConsole = Components.classes["@mozilla.org/consoleservice;1"].getService(Components.interfaces.nsIConsoleService);
-var gJSLoader = Components.classes["@mozilla.org/moz/jssubscript-loader;1"].createInstance(Components.interfaces.mozIJSSubScriptLoader);
-gJSLoader.loadSubScript("chrome://ximfmail/content/constant-ximfmail.js");
-
+
/*
- *
+ * XimfCatalog : instance to get RDF list of Ximfmail instances
+ * call example : var ximfCatalog = XimfCatalog().getIntance().publicmethod();
*/
-function XimfCatalog(){
- // private:
- var _rdfService = null;
- var _dsCatalog = null;
- var _urlCatalog = null
-
-
- // public:
- if(typeof XimfCatalog.initialized == "undefined"){
- // init datasources
- try{
- // init RDF XPCOM Services
- _rdfService = Components.classes["@mozilla.org/rdf/rdf-service;1"].getService(Components.interfaces.nsIRDFService);
- _dsCatalog = Components.classes["@mozilla.org/rdf/datasource;1?name=in-memory-datasource"].createInstance(Components.interfaces.nsIRDFDataSource);
- _rdfCUtils = Components.classes["@mozilla.org/rdf/container-utils;1"].getService(Components.interfaces.nsIRDFContainerUtils);
+var XimfCatalog = (function(){
+ var instantiated;
+ var _rdfService = Components.classes["@mozilla.org/rdf/rdf-service;1"].getService(Components.interfaces.nsIRDFService);
+ var _dsCatalog = Components.classes["@mozilla.org/rdf/datasource;1?name=in-memory-datasource"].createInstance(Components.interfaces.nsIRDFDataSource);
+ var _rdfCUtils = Components.classes["@mozilla.org/rdf/container-utils;1"].getService(Components.interfaces.nsIRDFContainerUtils);
+
+ /*
+ *
+ */
+ function Create(force,aclLevel){
+ try{
+ if(force !== true){
+ if(instantiated){
+ gConsole.logStringMessage("[ximfmail - XimfCatalog:Create ] Catalog has already been instantiated");
+ return;
+ }
+ }
+
+ var extensionPath = getFilePathInProfile("extensions/");
+ var extensionList = getExtensionsList();
+ var sCompletePath;
+ var dir = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
+
+ // search for themes extensions
+ for(i = 0; i<extensionList.length; i++){
+ try{
+ sCompletePath = getFilePathInProfile("extensions/" + extensionList[i].id + "/chrome/content/ximfmail-profile.xml");
+ dir.initWithPath( sCompletePath );
+ if(dir.exists()){
+ // get xml profile
+ var xmlDoc = GetXmlDocument(sCompletePath);
+ //gXimfCatalog.registerXimfmailProfileNode(xmlDoc.documentElement,aclLevel);
+ AppendInstance(xmlDoc.documentElement,aclLevel);
+ }
+ }catch(e){
+ gConsole.logStringMessage("[ximfmail - XimfCatalog:Create ] \n " + e + "\nfile : " + Error().fileName+"\nline : "+e.lineNumber);
+ }
+ }
+
+ // Report saved resources
+ if(_dsCatalog){
+ var counter=0;
+ var it = _dsCatalog.GetAllResources();
+ while(it.hasMoreElements()){
+ counter++;
+ it.getNext();
+ }
+ gConsole.logStringMessage("[ximfmail - XimfCatalog:Create ] "+counter+" resources added to XimfmailCatalog" );
+ }
}catch(e){
- gConsole.logStringMessage("[ximfmail - XimfCatalog construct ] \n " + e + "\nfile : " + e.fileName+"\nline : "+ e.lineNumber);
+ gConsole.logStringMessage("[ximfmail - XimfCatalog:Create ] \n " + e + "\nfile : " + Error().fileName+"\nline : "+e.lineNumber);
}
-
- /*
- * get datasource object
- */
- XimfCatalog.prototype.getDSCatalog = function(){
- return _dsCatalog;
- };
-
- /*
- * read infomations from catalog
- */
- XimfCatalog.prototype.getTarget = function(instance,predicate){
+ }
+ /*
+ *
+ */
+ function AppendInstance(domProfile,aclLevel){
+ gConsole.logStringMessage("[ximfmail - XimfCatalog:AppendInstance ] Append to catalog instance (Level " + aclLevel + ")" + TRACE_DATE() );
+ try{
+ // default title of smtp message
+ var smtpXimfVersion = DEFAULT_XIMF_VERSION;
+ var smtpVersion = "1.0";
+ var smtpInstance = "smtp";
+ var smtpInstanceLabel = "";
try{
- var resource = _rdfService.GetResource(instance);
- var targets = _dsCatalog.ArcLabelsOut(resource);
- while (targets.hasMoreElements()){
- var newpredicate = targets.getNext();
- if (newpredicate instanceof Components.interfaces.nsIRDFResource){
- var target = _dsCatalog.GetTarget(resource, newpredicate, true);
- if (target instanceof Components.interfaces.nsIRDFLiteral){
- //alert(newpredicate.Value + " : \n\r" + target.Value);
- if(newpredicate.Value == predicate)
- return target.Value;
- }
- }
+ if(gPrefBranch){
+ var val = gPrefBranch.getCharPref("ximfmail.smtp_msg.name");
+ if(val){ smtpInstance = val; }
}
- }catch(e){
- gConsole.logStringMessage("[ximfmail - XimfCatalog ] \n " + e + "\nfile : " + Error().fileName+"\nline : "+Error().lineNumber);
+ }catch(e){}
+
+ // create Seq container
+ var RDFCUtils = Components.classes["@mozilla.org/rdf/container-utils;1"].createInstance(Components.interfaces.nsIRDFContainerUtils);
+
+ // create RDF resources
+ var seqNode = _rdfService.GetResource("http://www.ximfmail.com/catalog");
+ var RDFC = null;
+ try{
+ RDFC = _rdfCUtils.MakeSeq(_dsCatalog, seqNode);
+ }catch(e){
+ gConsole.logStringMessage("[ximfmail - XimfCatalog:AppendInstance ] \n " + e + "\nfile : " + Error().fileName+"\nline : "+e.lineNumber);
}
- return null;
- };
- /*
- * create catalog with profile xml informations
- */
- XimfCatalog.prototype.registerXimfmailProfileNode = function(domProfile,aclLevel){
- try{
- // default title of smtp message
- var smtpXimfVersion = DEFAULT_XIMF_VERSION;
- var smtpVersion = "1.0";
- var smtpInstance = "smtp";
- var smtpInstanceLabel = "";
- try{
- if(gPrefBranch){
- var val = gPrefBranch.getCharPref("ximfmail.smtp_msg.name");
- if(val){ smtpInstance = val; }
- }
- }catch(e){}
+
+ // add datas from xml profile to RDF file
+ // Create theme List
+ var themeTag = domProfile.getElementsByTagName("theme");
+ var theme = "";
+ var uriThemeDefinition = "http://www.ximfmail.com/catalog/" + themeTag[0].getAttribute("name");
+ if(themeTag.length > 0){
+ //var adate = new Date();
+ //theme = themeTag[0].getAttribute("name")+"-" + parseInt(adate.getTime())+ parseInt(Math.round(Math.random()*1000));
+ theme = themeTag[0].getAttribute("name");
+ var newURI = "http://www.ximfmail.com/catalog/" + theme;
- // create Seq container
- var RDFCUtils = Components.classes["@mozilla.org/rdf/container-utils;1"].createInstance(Components.interfaces.nsIRDFContainerUtils);
-
- // create RDF resources
- var seqNode = _rdfService.GetResource("http://www.ximfmail.com/catalog");
- var RDFC = null;
- try{
- RDFC = _rdfCUtils.MakeSeq(_dsCatalog, seqNode);
- }catch(e){
- gConsole.logStringMessage("[ximfmail - XimfCatalog.registerXimfmailProfileNode ] \n " + e + "\nfile : " + Error().fileName+"\nline : "+Error().lineNumber);
+ // get acl default level
+ var defaultacl=-1;
+ if(themeTag[0].hasAttribute("defaultacl")){
+ defaultacl = themeTag[0].getAttribute("defaultacl");
+ gConsole.logStringMessage("[ximfmail - XimfCatalog:AppendInstance ] Default ACL level of profile " + newURI + " : " + defaultacl);
}
-
- // add datas from xml profile to RDF file
- // Create theme List
- var themeTag = domProfile.getElementsByTagName("theme");
- var theme = "";
- var uriThemeDefinition = "http://www.ximfmail.com/catalog/" + themeTag[0].getAttribute("name");
- if(themeTag.length > 0){
- //var adate = new Date();
- //theme = themeTag[0].getAttribute("name")+"-" + parseInt(adate.getTime())+ parseInt(Math.round(Math.random()*1000));
- theme = themeTag[0].getAttribute("name");
- var newURI = "http://www.ximfmail.com/catalog/" + theme;
+
+ if( RDFC.IndexOf(_rdfService.GetResource(newURI)) == -1){
+ gConsole.logStringMessage("[ximfmail - XimfCatalog:AppendInstance] RDFC - AppendElement " + newURI);
+ RDFC.AppendElement(_rdfService.GetResource(newURI));
- // get acl default level
- var defaultacl=-1;
- if(themeTag[0].hasAttribute("defaultacl")){
- defaultacl = themeTag[0].getAttribute("defaultacl");
- gConsole.logStringMessage("[ximfmail - XimfCatalog.registerXimfmailProfileNode ] Default ACL level of profile " + newURI + " : " + defaultacl);
- }
-
- if( RDFC.IndexOf(_rdfService.GetResource(newURI)) == -1){
- RDFC.AppendElement(_rdfService.GetResource(newURI));
-
- _dsCatalog.Assert(_rdfService.GetResource(newURI),
- _rdfService.GetResource("http://www.ximfmail.com/RDF#name"),
- _rdfService.GetLiteral(theme), true);
+ _dsCatalog.Assert(_rdfService.GetResource(newURI),
+ _rdfService.GetResource("http://www.ximfmail.com/RDF#name"),
+ _rdfService.GetLiteral(theme), true);
+
+ _dsCatalog.Assert(_rdfService.GetResource(newURI),
+ _rdfService.GetResource("http://www.ximfmail.com/RDF#refSeq"),
+ _rdfService.GetLiteral("http://www.ximfmail.com/catalog/instance_"+theme), true);
- _dsCatalog.Assert(_rdfService.GetResource(newURI),
- _rdfService.GetResource("http://www.ximfmail.com/RDF#refSeq"),
- _rdfService.GetLiteral("http://www.ximfmail.com/catalog/instance_"+theme), true);
-
- _dsCatalog.Assert(_rdfService.GetResource(newURI),
- _rdfService.GetResource("http://www.ximfmail.com/RDF#defaultacl"),
- _rdfService.GetLiteral(defaultacl), true);
-
- }else{
- _dsCatalog.Change(_rdfService.GetResource(newURI),
- _rdfService.GetResource("http://www.ximfmail.com/RDF#name"),
- _rdfService.GetLiteral( this.getTarget(newURI,"http://www.ximfmail.com/RDF#name")),
- _rdfService.GetLiteral(theme));
-
- _dsCatalog.Change(_rdfService.GetResource(newURI),
- _rdfService.GetResource("http://www.ximfmail.com/RDF#refSeq"),
- _rdfService.GetLiteral(this.getTarget(newURI,"http://www.ximfmail.com/RDF#refSeq")),
- _rdfService.GetLiteral("http://www.ximfmail.com/catalog/instance_"+theme));
+ _dsCatalog.Assert(_rdfService.GetResource(newURI),
+ _rdfService.GetResource("http://www.ximfmail.com/RDF#defaultacl"),
+ _rdfService.GetLiteral(defaultacl), true);
+
+ }else{
+ gConsole.logStringMessage("[ximfmail - XimfCatalog:AppendInstance] RDFC - ReplacedElement " + newURI);
+
+ _dsCatalog.Unassert(_rdfService.GetResource(newURI),
+ _rdfService.GetResource("http://www.ximfmail.com/RDF#name"),
+ _rdfService.GetLiteral( getTarget(newURI,"http://www.ximfmail.com/RDF#name")));
+
+ _dsCatalog.Assert(_rdfService.GetResource(newURI),
+ _rdfService.GetResource("http://www.ximfmail.com/RDF#name"),
+ _rdfService.GetLiteral(theme), true);
+
+ _dsCatalog.Unassert(_rdfService.GetResource(newURI),
+ _rdfService.GetResource("http://www.ximfmail.com/RDF#refSeq"),
+ _rdfService.GetLiteral( getTarget(newURI,"http://www.ximfmail.com/RDF#refSeq")));
- _dsCatalog.Change(_rdfService.GetResource(newURI),
- _rdfService.GetResource("http://www.ximfmail.com/RDF#defaultacl"),
- _rdfService.GetLiteral(this.getTarget(newURI,"http://www.ximfmail.com/RDF#defaultacl")),
- _rdfService.GetLiteral(defaultacl));
- }
+ _dsCatalog.Assert(_rdfService.GetResource(newURI),
+ _rdfService.GetResource("http://www.ximfmail.com/RDF#refSeq"),
+ _rdfService.GetLiteral("http://www.ximfmail.com/catalog/instance_"+theme), true);
-
- }
-
- // Create instance List
- var RDFCI = RDFCUtils.MakeSeq(_dsCatalog, _rdfService.GetResource("http://www.ximfmail.com/catalog/instance_"+theme));
-
- // create definitions entries
- var instanceTag = themeTag[0].getElementsByTagName("instance");
- //alert(instanceTag.length + " instances in profile xml " + theme)
+ _dsCatalog.Unassert(_rdfService.GetResource(newURI),
+ _rdfService.GetResource("http://www.ximfmail.com/RDF#defaultacl"),
+ _rdfService.GetLiteral( getTarget(newURI,"http://www.ximfmail.com/RDF#defaultacl")));
+
+ _dsCatalog.Assert(_rdfService.GetResource(newURI),
+ _rdfService.GetResource("http://www.ximfmail.com/RDF#defaultacl"),
+ _rdfService.GetLiteral(defaultacl), true);
+ }
- var sValue="";
- var bHasSmtpInstance=false;
- for(var i = 0; i < instanceTag.length; i++){
- try{
- // default instance message, continue
- if(instanceTag[i].getAttribute("id") == "smtp"){
- bHasSmtpInstance = true;
- smtpInstance = instanceTag[i].getAttribute("name");
- smtpVersion = instanceTag[i].getAttribute("version");
- smtpXimfVersion = instanceTag[i].getAttribute("ximfVersion");
- try{
- smtpInstanceLabel = instanceTag[i].getAttribute("label");
- }catch(ex){}
- if(!smtpInstanceLabel) smtpInstanceLabel = smtpInstance;
- continue;
- }
- }catch(e){}
- // append resource element to sequence
- var newURI = "http://www.ximfmail.com/catalog/instance_"+theme +"/"+instanceTag[i].getAttribute("name");
- var newResource = _rdfService.GetResource(newURI);
- var isNewItem = false;
-
- if( RDFCI.IndexOf(newResource) == -1){
- RDFCI.AppendElement(newResource);
- isNewItem = true;
+
+ }
+
+ // Create instance List
+ var RDFCI = RDFCUtils.MakeSeq(_dsCatalog, _rdfService.GetResource("http://www.ximfmail.com/catalog/instance_"+theme));
+
+ // create definitions entries
+ var instanceTag = themeTag[0].getElementsByTagName("instance");
+ //alert(instanceTag.length + " instances in profile xml " + theme)
+
+ var sValue="";
+ var bHasSmtpInstance=false;
+ for(var i = 0; i < instanceTag.length; i++){
+ try{
+ // default instance message, continue
+ if(instanceTag[i].getAttribute("id") == "smtp"){
+ bHasSmtpInstance = true;
+ smtpInstance = instanceTag[i].getAttribute("name");
+ smtpVersion = instanceTag[i].getAttribute("version");
+ smtpXimfVersion = instanceTag[i].getAttribute("ximfVersion");
+ try{
+ smtpInstanceLabel = instanceTag[i].getAttribute("label");
+ }catch(ex){}
+ if(!smtpInstanceLabel) smtpInstanceLabel = smtpInstance;
+ continue;
}
-
- // append ximfVersion of instance
- if(isNewItem){
- _dsCatalog.Assert(newResource,
+ }catch(e){}
+ // append resource element to sequence
+ var newURI = "http://www.ximfmail.com/catalog/instance_"+theme +"/"+instanceTag[i].getAttribute("name");
+ var newResource = _rdfService.GetResource(newURI);
+ var isNewItem = false;
+ if( RDFCI.IndexOf(newResource) == -1){
+ RDFCI.AppendElement(newResource);
+ isNewItem = true;
+ }
+
+
+ // append ximfVersion of instance
+ if(isNewItem){
+ _dsCatalog.Assert(newResource,
+ _rdfService.GetResource("http://www.ximfmail.com/RDF#ximfVersion"),
+ _rdfService.GetLiteral(instanceTag[i].getAttribute("ximfVersion")), true);
+ }else{
+ _dsCatalog.Unassert(newResource,
_rdfService.GetResource("http://www.ximfmail.com/RDF#ximfVersion"),
- _rdfService.GetLiteral(instanceTag[i].getAttribute("ximfVersion")), true);
- }else{
- _dsCatalog.Change(newResource,
+ _rdfService.GetLiteral(getTarget(newURI,"http://www.ximfmail.com/RDF#ximfVersion")));
+
+ _dsCatalog.Assert(newResource,
_rdfService.GetResource("http://www.ximfmail.com/RDF#ximfVersion"),
- _rdfService.GetLiteral(this.getTarget(newURI,"http://www.ximfmail.com/RDF#ximfVersion")),
- _rdfService.GetLiteral(instanceTag[i].getAttribute("ximfVersion")));
- }
+ _rdfService.GetLiteral(instanceTag[i].getAttribute("ximfVersion")), true);
+
+ }
+
+ // append name of instance
+ if(isNewItem){
+ _dsCatalog.Assert(newResource,
+ _rdfService.GetResource("http://www.ximfmail.com/RDF#instance"),
+ _rdfService.GetLiteral(instanceTag[i].getAttribute("name")), true);
+ }else{
+ /*
+ _dsCatalog.Change(newResource,
+ _rdfService.GetResource("http://www.ximfmail.com/RDF#instance"),
+ _rdfService.GetLiteral(getTarget(newURI,"http://www.ximfmail.com/RDF#instance")),
+ _rdfService.GetLiteral(instanceTag[i].getAttribute("name")));
+ */
+
+ _dsCatalog.Unassert(newResource,
+ _rdfService.GetResource("http://www.ximfmail.com/RDF#instance"),
+ _rdfService.GetLiteral(getTarget(newURI,"http://www.ximfmail.com/RDF#instance")));
- // append name of instance
+ _dsCatalog.Assert(newResource,
+ _rdfService.GetResource("http://www.ximfmail.com/RDF#instance"),
+ _rdfService.GetLiteral(instanceTag[i].getAttribute("name")), true);
+ }
+
+ // append label of instance
+ try{
+ var instLabel = instanceTag[i].getAttribute("label");
+ if(!instLabel) instLabel = instanceTag[i].getAttribute("name");
+ //gConsole.logStringMessage("instLabel" + instLabel);
if(isNewItem){
_dsCatalog.Assert(newResource,
- _rdfService.GetResource("http://www.ximfmail.com/RDF#instance"),
- _rdfService.GetLiteral(instanceTag[i].getAttribute("name")), true);
- }else{
- _dsCatalog.Change(newResource,
- _rdfService.GetResource("http://www.ximfmail.com/RDF#instance"),
- _rdfService.GetLiteral(this.getTarget(newURI,"http://www.ximfmail.com/RDF#instance")),
- _rdfService.GetLiteral(instanceTag[i].getAttribute("name")));
+ _rdfService.GetResource("http://www.ximfmail.com/RDF#instanceLabel"),
+ _rdfService.GetLiteral(instLabel), true);
+ }else{
+ _dsCatalog.Unassert(newResource,
+ _rdfService.GetResource("http://www.ximfmail.com/RDF#instanceLabel"),
+ _rdfService.GetLiteral(getTarget(newURI,"http://www.ximfmail.com/RDF#instanceLabel")));
+
+ _dsCatalog.Assert(newResource,
+ _rdfService.GetResource("http://www.ximfmail.com/RDF#instanceLabel"),
+ _rdfService.GetLiteral(instLabel), true);
}
+ }catch(ex){}
+
+ // append version of instance
+ if(isNewItem){
+ _dsCatalog.Assert(newResource,
+ _rdfService.GetResource("http://www.ximfmail.com/RDF#version"),
+ _rdfService.GetLiteral(instanceTag[i].getAttribute("version")), true);
+ }else{
+ _dsCatalog.Unassert(newResource,
+ _rdfService.GetResource("http://www.ximfmail.com/RDF#version"),
+ _rdfService.GetLiteral(getTarget(newURI,"http://www.ximfmail.com/RDF#version")));
- // append label of instance
- try{
- var instLabel = instanceTag[i].getAttribute("label");
- if(!instLabel) instLabel = instanceTag[i].getAttribute("name");
- //gConsole.logStringMessage("instLabel" + instLabel);
- if(isNewItem){
- _dsCatalog.Assert(newResource,
- _rdfService.GetResource("http://www.ximfmail.com/RDF#instanceLabel"),
- _rdfService.GetLiteral(instLabel), true);
- }else{
- _dsCatalog.Change(newResource,
- _rdfService.GetResource("http://www.ximfmail.com/RDF#instanceLabel"),
- _rdfService.GetLiteral(this.getTarget(newURI,"http://www.ximfmail.com/RDF#instanceLabel")),
- _rdfService.GetLiteral(instanceTag[i].getAttribute("instanceLabel")));
- }
- }catch(ex){}
-
- // append version of instance
- if(isNewItem){
- _dsCatalog.Assert(newResource,
+ _dsCatalog.Assert(newResource,
_rdfService.GetResource("http://www.ximfmail.com/RDF#version"),
_rdfService.GetLiteral(instanceTag[i].getAttribute("version")), true);
- }else{
- _dsCatalog.Change(newResource,
- _rdfService.GetResource("http://www.ximfmail.com/RDF#version"),
- _rdfService.GetLiteral(this.getTarget(newURI,"http://www.ximfmail.com/RDF#version")),
- _rdfService.GetLiteral(instanceTag[i].getAttribute("version")));
- }
- // append id of instance
- try{
- if(isNewItem){
- _dsCatalog.Assert(newResource,
+
+ }
+ // append id of instance
+ try{
+ if(isNewItem){
+ _dsCatalog.Assert(newResource,
+ _rdfService.GetResource("http://www.ximfmail.com/RDF#id"),
+ _rdfService.GetLiteral(instanceTag[i].getAttribute("id")), true);
+ }else{
+ _dsCatalog.Unassert(newResource,
+ _rdfService.GetResource("http://www.ximfmail.com/RDF#id"),
+ _rdfService.GetLiteral(getTarget(newURI,"http://www.ximfmail.com/RDF#id")));
+ _dsCatalog.Assert(newResource,
_rdfService.GetResource("http://www.ximfmail.com/RDF#id"),
_rdfService.GetLiteral(instanceTag[i].getAttribute("id")), true);
- }else{
- _dsCatalog.Change(newResource,
- _rdfService.GetResource("http://www.ximfmail.com/RDF#id"),
- _rdfService.GetLiteral(this.getTarget(newURI,"http://www.ximfmail.com/RDF#id")),
- _rdfService.GetLiteral(instanceTag[i].getAttribute("id")));
- }
- }catch(e){
- gConsole.logStringMessage("[ximfmail - XimfCatalog.registerXimfmailProfileNode ] \n " + e + "\nfile : " + e.fileName+"\nline : "+e.lineNumber);
}
-
- // schema path value
- try{
- var schemaElt = instanceTag[i].getElementsByTagName("schema");
- sValue="";
- if(schemaElt){
- sValue = schemaElt[0].textContent;
- }
- if(isNewItem){
- _dsCatalog.Assert(newResource,
+ }catch(e){
+ gConsole.logStringMessage("[ximfmail - XimfCatalog:AppendInstance] \n " + e + "\nfile : " + Error().fileName+"\nline : "+e.lineNumber);
+ }
+
+ // schema path value
+ try{
+ var schemaElt = instanceTag[i].getElementsByTagName("schema");
+ sValue="";
+ if(schemaElt){
+ sValue = schemaElt[0].textContent;
+ }
+ if(isNewItem){
+ _dsCatalog.Assert(newResource,
+ _rdfService.GetResource("http://www.ximfmail.com/RDF#pathSchema"),
+ _rdfService.GetLiteral(instanceTag[i].getAttribute("directory")+sValue), true);
+ }else{
+ _dsCatalog.Unassert(newResource,
+ _rdfService.GetResource("http://www.ximfmail.com/RDF#pathSchema"),
+ _rdfService.GetLiteral(getTarget(newURI,"http://www.ximfmail.com/RDF#pathSchema")));
+ _dsCatalog.Assert(newResource,
_rdfService.GetResource("http://www.ximfmail.com/RDF#pathSchema"),
_rdfService.GetLiteral(instanceTag[i].getAttribute("directory")+sValue), true);
- }else{
- _dsCatalog.Change(newResource,
- _rdfService.GetResource("http://www.ximfmail.com/RDF#pathSchema"),
- _rdfService.GetLiteral(this.getTarget(newURI,"http://www.ximfmail.com/RDF#pathSchema")),
- _rdfService.GetLiteral(instanceTag[i].getAttribute("directory")+sValue));
- }
- }catch(e){
- gConsole.logStringMessage("[ximfmail - XimfCatalog.registerXimfmailProfileNode ] \n " + e + "\nfile : " + e.fileName+"\nline : "+e.lineNumber);
- }
-
- try{
- // ihm path value
- var ihmElt = instanceTag[i].getElementsByTagName("ihm");
- sValue="";
- if(ihmElt){
- sValue = ihmElt[0].textContent;
- }
- if(isNewItem){
- _dsCatalog.Assert(newResource,
+ }
+ }catch(e){
+ gConsole.logStringMessage("[ximfmail - XimfCatalog:AppendInstance] \n " + e + "\nfile : " + e.fileName+"\nline : "+e.lineNumber);
+ }
+
+ try{
+ // ihm path value
+ var ihmElt = instanceTag[i].getElementsByTagName("ihm");
+ sValue="";
+ if(ihmElt){
+ sValue = ihmElt[0].textContent;
+ }
+ if(isNewItem){
+ _dsCatalog.Assert(newResource,
+ _rdfService.GetResource("http://www.ximfmail.com/RDF#pathIhm"),
+ _rdfService.GetLiteral(instanceTag[i].getAttribute("directory")+sValue), true);
+ }else{
+ _dsCatalog.Unassert(newResource,
+ _rdfService.GetResource("http://www.ximfmail.com/RDF#pathIhm"),
+ _rdfService.GetLiteral(getTarget(newURI,"http://www.ximfmail.com/RDF#pathIhm")));
+ _dsCatalog.Assert(newResource,
_rdfService.GetResource("http://www.ximfmail.com/RDF#pathIhm"),
_rdfService.GetLiteral(instanceTag[i].getAttribute("directory")+sValue), true);
- }else{
- _dsCatalog.Change(newResource,
- _rdfService.GetResource("http://www.ximfmail.com/RDF#pathIhm"),
- _rdfService.GetLiteral(this.getTarget(newURI,"http://www.ximfmail.com/RDF#pathIhm")),
- _rdfService.GetLiteral(instanceTag[i].getAttribute("directory")+sValue));
- }
- }catch(e){
- gConsole.logStringMessage("[ximfmail - XimfCatalog.registerXimfmailProfileNode ] \n " + e + "\nfile : " + e.fileName+"\nline : "+e.lineNumber);
}
- try{
- // rules path value
- var rulesDico = instanceTag[i].getElementsByTagName("rule");
- sValue="";
- if(rulesDico){
- sValue = rulesDico[0].textContent;
- }
- if(isNewItem){
- _dsCatalog.Assert(newResource,
+ }catch(e){
+ gConsole.logStringMessage("[ximfmail - XimfCatalog:AppendInstance] \n " + e + "\nfile : " + e.fileName+"\nline : "+e.lineNumber);
+ }
+
+ try{
+ // rules path value
+ var rulesDico = instanceTag[i].getElementsByTagName("rule");
+ sValue="";
+ if(rulesDico){
+ sValue = rulesDico[0].textContent;
+ }
+ if(isNewItem){
+ _dsCatalog.Assert(newResource,
+ _rdfService.GetResource("http://www.ximfmail.com/RDF#pathRules"),
+ _rdfService.GetLiteral(instanceTag[i].getAttribute("directory")+sValue), true);
+ }else{
+ _dsCatalog.Unassert(newResource,
+ _rdfService.GetResource("http://www.ximfmail.com/RDF#pathRules"),
+ _rdfService.GetLiteral(getTarget(newURI,"http://www.ximfmail.com/RDF#pathRules")));
+ _dsCatalog.Assert(newResource,
_rdfService.GetResource("http://www.ximfmail.com/RDF#pathRules"),
_rdfService.GetLiteral(instanceTag[i].getAttribute("directory")+sValue), true);
- }else{
- _dsCatalog.Change(newResource,
- _rdfService.GetResource("http://www.ximfmail.com/RDF#pathRules"),
- _rdfService.GetLiteral(this.getTarget(newURI,"http://www.ximfmail.com/RDF#pathRules")),
- _rdfService.GetLiteral(instanceTag[i].getAttribute("directory")+sValue));
- }
- }catch(e){
- gConsole.logStringMessage("[ximfmail - XimfCatalog.registerXimfmailProfileNode ] \n " + e + "\nfile : " + e.fileName+"\nline : "+e.lineNumber);
+ }
+ }catch(e){
+ gConsole.logStringMessage("[ximfmail - XimfCatalog:AppendInstance] \n " + e + "\nfile : " + e.fileName+"\nline : "+e.lineNumber);
+ }
+
+ try{
+ // dictionary path value
+ var ihmDico = instanceTag[i].getElementsByTagName("dictionary");
+ sValue="";
+ if(ihmDico){
+ sValue = ihmDico[0].textContent;
}
-
- try{
- // dictionary path value
- var ihmDico = instanceTag[i].getElementsByTagName("dictionary");
- sValue="";
- if(ihmDico){
- sValue = ihmDico[0].textContent;
- }
- if(isNewItem){
- _dsCatalog.Assert(newResource,
+ if(isNewItem){
+ _dsCatalog.Assert(newResource,
+ _rdfService.GetResource("http://www.ximfmail.com/RDF#pathDictionary"),
+ _rdfService.GetLiteral(instanceTag[i].getAttribute("directory")+sValue), true);
+ }else{
+ _dsCatalog.Unassert(newResource,
+ _rdfService.GetResource("http://www.ximfmail.com/RDF#pathDictionary"),
+ _rdfService.GetLiteral(getTarget(newURI,"http://www.ximfmail.com/RDF#pathDictionary")));
+ _dsCatalog.Assert(newResource,
_rdfService.GetResource("http://www.ximfmail.com/RDF#pathDictionary"),
_rdfService.GetLiteral(instanceTag[i].getAttribute("directory")+sValue), true);
- }else{
- _dsCatalog.Change(newResource,
- _rdfService.GetResource("http://www.ximfmail.com/RDF#pathDictionary"),
- _rdfService.GetLiteral(this.getTarget(newURI,"http://www.ximfmail.com/RDF#pathDictionary")),
- _rdfService.GetLiteral(instanceTag[i].getAttribute("directory")+sValue));
- }
- }catch(e){
- gConsole.logStringMessage("[ximfmail - XimfCatalog.registerXimfmailProfileNode ] \n " + e + "\nfile : " + e.fileName+"\nline : "+e.lineNumber);
+ }
+ }catch(e){
+ gConsole.logStringMessage("[ximfmail - XimfCatalog:AppendInstance] \n " + e + "\nfile : " + e.fileName+"\nline : "+e.lineNumber);
+ }
+
+ if(isNewItem){
+ _dsCatalog.Assert(newResource,
+ _rdfService.GetResource("http://www.ximfmail.com/RDF#theme"),
+ _rdfService.GetLiteral(theme), true);
+ }else{
+ _dsCatalog.Unassert(newResource,
+ _rdfService.GetResource("http://www.ximfmail.com/RDF#theme"),
+ _rdfService.GetLiteral(getTarget(newURI,"http://www.ximfmail.com/RDF#theme")));
+ _dsCatalog.Assert(newResource,
+ _rdfService.GetResource("http://www.ximfmail.com/RDF#theme"),
+ _rdfService.GetLiteral(theme), true);
+ }
+
+ try{
+ // aclLevel of instance to hide/unhide it on account
+ sValue="true";
+ var iAclLevel = -1;
+ var acltag = instanceTag[i].getElementsByTagName("acl");
+ if(acltag.length>0)iAclLevel = acltag[0].textContent;
+ if(aclLevel){
+ if(parseInt(iAclLevel, 10) > parseInt(aclLevel, 10)) sValue = "false";
+ }else{
+ if(parseInt(iAclLevel, 10) > parseInt(getTarget(uriThemeDefinition,"http://www.ximfmail.com/RDF#defaultacl"), 10))sValue = "false";
}
if(isNewItem){
_dsCatalog.Assert(newResource,
- _rdfService.GetResource("http://www.ximfmail.com/RDF#theme"),
- _rdfService.GetLiteral(theme), true);
- }else{
- _dsCatalog.Change(newResource,
- _rdfService.GetResource("http://www.ximfmail.com/RDF#theme"),
- _rdfService.GetLiteral(this.getTarget(newURI,"http://www.ximfmail.com/RDF#theme")),
- _rdfService.GetLiteral(theme));
- }
-
- try{
- // aclLevel of instance to hide/unhide it on account
- sValue="true";
- var iAclLevel = -1;
- var acltag = instanceTag[i].getElementsByTagName("acl");
- if(acltag.length>0)iAclLevel = acltag[0].textContent;
- if(aclLevel){
- if(parseInt(iAclLevel, 10) > parseInt(aclLevel, 10)) sValue = "false";
- }else{
- if(parseInt(iAclLevel, 10) > parseInt(this.getTarget(uriThemeDefinition,"http://www.ximfmail.com/RDF#defaultacl"), 10))sValue = "false";
- }
-
- if(isNewItem){
- _dsCatalog.Assert(newResource,
+ _rdfService.GetResource("http://www.ximfmail.com/RDF#active"),
+ _rdfService.GetLiteral(sValue), true);
+ }else{
+ _dsCatalog.Unassert(newResource,
+ _rdfService.GetResource("http://www.ximfmail.com/RDF#active"),
+ _rdfService.GetLiteral(getTarget(newURI,"http://www.ximfmail.com/RDF#active")));
+ _dsCatalog.Assert(newResource,
_rdfService.GetResource("http://www.ximfmail.com/RDF#active"),
_rdfService.GetLiteral(sValue), true);
- }else{
- _dsCatalog.Change(newResource,
- _rdfService.GetResource("http://www.ximfmail.com/RDF#active"),
- _rdfService.GetLiteral(this.getTarget(newURI,"http://www.ximfmail.com/RDF#active")),
- _rdfService.GetLiteral(sValue));
- }
- }catch(e){
- gConsole.logStringMessage("[ximfmail - XimfCatalog.registerXimfmailProfileNode ] \n " + e + "\nfile : " + e.fileName+"\nline : "+e.lineNumber);
- }
- }
- // insert smtp entry
- if(bHasSmtpInstance){
- var smtpURI = "http://www.ximfmail.com/catalog/instance_"+theme +"/smtp";
- var smtpResource = _rdfService.GetResource(smtpURI);
+ }
+ }catch(e){
+ gConsole.logStringMessage("[ximfmail - XimfCatalog:AppendInstance] \n " + e + "\nfile : " + e.fileName+"\nline : "+e.lineNumber);
+ }
+ }
+ // insert smtp entry
+ if(bHasSmtpInstance){
+ var smtpURI = "http://www.ximfmail.com/catalog/instance_"+theme +"/smtp";
+ var smtpResource = _rdfService.GetResource(smtpURI);
+ if( RDFCI.IndexOf(smtpResource) == -1){
RDFCI.AppendElement(smtpResource);
_dsCatalog.Assert(smtpResource,_rdfService.GetResource("http://www.ximfmail.com/RDF#ximfVersion"), _rdfService.GetLiteral(smtpXimfVersion), true);
_dsCatalog.Assert(smtpResource,_rdfService.GetResource("http://www.ximfmail.com/RDF#instance"),_rdfService.GetLiteral(smtpInstance), true);
_dsCatalog.Assert(smtpResource,_rdfService.GetResource("http://www.ximfmail.com/RDF#pathDictionary"),_rdfService.GetLiteral(smtpInstance), true);
_dsCatalog.Assert(smtpResource,_rdfService.GetResource("http://www.ximfmail.com/RDF#theme"),_rdfService.GetLiteral(smtpInstance), true);
_dsCatalog.Assert(smtpResource, _rdfService.GetResource("http://www.ximfmail.com/RDF#active"), _rdfService.GetLiteral("true"), true);
- // append label of instance
- try{
- _dsCatalog.Assert(smtpResource,_rdfService.GetResource("http://www.ximfmail.com/RDF#instanceLabel"),_rdfService.GetLiteral(smtpInstanceLabel), true);
- }catch(ex){}
- }
- // save datas to file DBG
- //_dsCatalog.QueryInterface(Components.interfaces.nsIRDFRemoteDataSource);
- //var rdfXimfCatalogPath = getFilePathInProfile("extensions/{A627B834-BD9F-4b3f-9AF5-347B5A570402}/chrome/content/theme/ximfCatalogBck.rdf");
- //_dsCatalog.FlushTo("file:///" + rdfXimfCatalogPath);
- gConsole.logStringMessage("[ximfmail - XimfCatalog.registerXimfmailProfileNode ] - " + RDFC.GetCount() + " XIMF instances have been saved");
- }catch(e){
- gConsole.logStringMessage("[ximfmail - XimfCatalog.registerXimfmailProfileNode ] \n " + e + "\nfile : " + Error().fileName+"\nline : "+e.lineNumber);
- }
- };
- XimfCatalog.prototype.RemoveSeqCatalog = function(seqNode){
- try{
- // create RDF resources
-
- //var seqNode = _rdfService.GetResource("http://www.ximfmail.com/catalog");
- var rSeqCatalog = null;
- try{
- rSeqCatalog = _rdfCUtils.MakeSeq(_dsCatalog, seqNode);
- }catch(e){
- gConsole.logStringMessage("[ximfmail - XimfCatalog.registerXimfmailProfileNode ] \n " + e + "\nfile : " + Error().fileName+"\nline : "+Error().lineNumber);
+ // append label of instance
+ try{
+ _dsCatalog.Assert(smtpResource,_rdfService.GetResource("http://www.ximfmail.com/RDF#instanceLabel"),_rdfService.GetLiteral(smtpInstanceLabel), true);
+ }catch(ex){}
}
-
-
-
- if(rSeqCatalog){
- /*
- var numEntri = rSeqCatalog.GetCount();
- for (var indexCur = numEntri; indexCur >0; indexCur--){
- rSeqCatalog.RemoveElementAt(indexCur,true);
- alert("remove " + rSeqCatalog)
- }
- */
-
- var tseq = rSeqCatalog.GetElements();
- alert(seqNode.ValueUTF8+"\nnb elements to remove = " + rSeqCatalog.GetCount())
- var uriResource = "";
- while (tseq.hasMoreElements()){
- var element = tseq.getNext();
- if (element instanceof Components.interfaces.nsIRDFResource){
- uriResource = element.ValueUTF8;
- alert("remove " + uriResource)
- var resource = _rdfService.GetResource(uriResource);
- rSeqCatalog.RemoveElementAt(rSeqCatalog.IndexOf(resource),true);
- }else{
- alert("remove " + uriResource)
- }
- }
- alert("nb elements = " + rSeqCatalog.GetCount())
- }
- }catch(e){
- alert(e)
- gConsole.logStringMessage("[ximfmail - XimfCatalog - RemoveSeqCatalog ] \n " + e + "\nfile : " + Error().fileName+"\nline : "+Error().lineNumber);
- }
- };
-
- XimfCatalog.prototype.getNameInstance = function(instance){
- return this.getTarget(instance,"http://www.ximfmail.com/RDF#instance");
- };
-
- XimfCatalog.prototype.getLabelInstance = function(instance){
- return this.getTarget(instance,"http://www.ximfmail.com/RDF#instanceLabel");
- };
-
- XimfCatalog.prototype.getVersionInstance = function(instance){
- return this.getTarget(instance,"http://www.ximfmail.com/RDF#ximfVersion");
- };
-
- XimfCatalog.prototype.getDefinitonInstance = function(instance){
- return this.getTarget(instance,"http://www.ximfmail.com/RDF#theme");
- };
-
- XimfCatalog.prototype.getSchemaInstance = function(instance){
- return this.getTarget(instance,"http://www.ximfmail.com/RDF#pathSchema");
- };
-
- XimfCatalog.prototype.getDictionaryInstance = function(instance){
- return this.getTarget(instance,"http://www.ximfmail.com/RDF#pathDictionary");
- };
-
- XimfCatalog.prototype.getIDInstance = function(instance){
- return this.getTarget(instance,"http://www.ximfmail.com/RDF#id");
- };
-
- XimfCatalog.prototype.getIhmInstance = function(instance){
- return this.getTarget(instance,"http://www.ximfmail.com/RDF#pathIhm");
- };
-
- XimfCatalog.prototype.getRulesInstance = function(instance){
- return this.getTarget(instance,"http://www.ximfmail.com/RDF#pathRules");
- };
-
+ }
+ // save datas to file DBG
+ //_dsCatalog.QueryInterface(Components.interfaces.nsIRDFRemoteDataSource);
+ //var rdfXimfCatalogPath = getFilePathInProfile("extensions/{A627B834-BD9F-4b3f-9AF5-347B5A570402}/chrome/content/theme/ximfCatalogBck.rdf");
+ //_dsCatalog.FlushTo("file:///" + rdfXimfCatalogPath);
+ gConsole.logStringMessage("[ximfmail - XimfCatalog:AppendInstance] executed "+TRACE_DATE());
+ }catch(e){
+ gConsole.logStringMessage("[ximfmail - XimfCatalog.registerXimfmailProfileNode ] \n " + e + "\nfile : " + Error().fileName+"\nline : "+e.lineNumber);
+ }
+ }
+
+ /*
+ * read informations from catalog
+ */
+ function getTarget(instance,predicate){
+ try{
+ var resource = _rdfService.GetResource(instance);
+ var targets = _dsCatalog.ArcLabelsOut(resource);
+ while (targets.hasMoreElements()){
+ var newpredicate = targets.getNext();
+ if (newpredicate instanceof Components.interfaces.nsIRDFResource){
+ var target = _dsCatalog.GetTarget(resource, newpredicate, true);
+ if (target instanceof Components.interfaces.nsIRDFLiteral){
+ //alert("getTarget\n"+newpredicate.Value + " : \n\r" + target.Value);
+ if(newpredicate.Value == predicate)
+ return target.Value;
+ }
+ }
+ }
+ }catch(e){
+ gConsole.logStringMessage("[ximfmail - XimfCatalog ] \n " + e + "\nfile : " + Error().fileName+"\nline : "+ e.lineNumber);
+ }
+ return null;
+ }
+
+ function init(){
+ //
+ Create();
- XimfCatalog.prototype.getInstanceUri = function(ximfDefUri,ximfName,ximfVersion){
- try{
- /// get container of instance resources of current definition
- var RDFCUtils = Components.classes["@mozilla.org/rdf/container-utils;1"].createInstance(Components.interfaces.nsIRDFContainerUtils);
- //alert("getInstanceUri - ximfDefUri = " + ximfDefUri)
- var rs_seqInstance = _rdfService.GetResource(ximfDefUri);
- var containerInstances = RDFCUtils.MakeSeq(_dsCatalog, rs_seqInstance);
- var children = containerInstances.GetElements();
- while (children.hasMoreElements()){
- // search uri instance with ximfVersion and ximfName
- var child = children.getNext();
- if (child instanceof Components.interfaces.nsIRDFResource){
- var instance_resource = child.Value;
- //alert("instance_resource = "+instance_resource);
- var thisName = this.getNameInstance(instance_resource);
- var thisVersion = this.getVersionInstance(instance_resource);
- //alert("<"+thisName+"><"+thisVersion+">\n<"+ximfName+"><"+ximfVersion+">")
- if(thisName && thisVersion){
- thisName = String_trim(thisName).toLowerCase();
- if(thisName == String_trim(ximfName).toLowerCase()){
- /*
- if(thisVersion == ximfVersion){
- //alert("instance path found >>"+instance_resource);
- return instance_resource;
- }*/
- return instance_resource;
- }
- }
- }
- /*
- DEBUG loop : list of predicats
- var resource = _rdfService.GetResource(instance_resource);
- var targets = _dsCatalog.ArcLabelsOut(resource);
- while (targets.hasMoreElements()){
- var newpredicate = targets.getNext();
- if (newpredicate instanceof Components.interfaces.nsIRDFResource){
- alert("Resource is: " + newpredicate.Value);
- }else if (newpredicate instanceof Components.interfaces.nsIRDFLiteral){
- alert("Literal is: " + newpredicate.Value);
- }
- }*/
- }
-
- // search for instance in others definitions of catalog
- var completeCatalog = _rdfService.GetResource("http://www.ximfmail.com/catalog");
- var containerDefinitions = RDFCUtils.MakeSeq(_dsCatalog, completeCatalog);
- var children = containerDefinitions.GetElements();
- while (children.hasMoreElements()){
- try{
+ // singleton pattern here
+ return{
+ publicProperty : "test",
+ /*
+ * get datasource object
+ */
+ getDSCatalog : function(){
+ return _dsCatalog;
+ },
+ /*
+ *
+ */
+ rebuild : function(aclLevel){
+ Create(true,aclLevel);
+ gConsole.logStringMessage("[ximfmail - XimfCatalog.rebuild ] rebuild operation executed");
+ },
+ /*
+ * create catalog with profile xml informations
+ */
+ registerXimfmailProfileNode : function(domProfile,aclLevel){
+ AppendInstance(domProfile,aclLevel);
+ gConsole.logStringMessage("[ximfmail - XimfCatalog.registerXimfmailProfileNode ] registerXimfmailProfileNode operation executed");
+ },
+ RemoveSeqCatalog : function(seqNode){
+ try{
+ // create RDF resources
+
+ //var seqNode = _rdfService.GetResource("http://www.ximfmail.com/catalog");
+ var rSeqCatalog = null;
+ try{
+ rSeqCatalog = _rdfCUtils.MakeSeq(_dsCatalog, seqNode);
+ }catch(e){
+ gConsole.logStringMessage("[ximfmail - XimfCatalog.registerXimfmailProfileNode ] \n " + e + "\nfile : " + Error().fileName+"\nline : "+Error().lineNumber);
+ }
+ if(rSeqCatalog){
+ /*
+ var numEntri = rSeqCatalog.GetCount();
+ for (var indexCur = numEntri; indexCur >0; indexCur--){
+ rSeqCatalog.RemoveElementAt(indexCur,true);
+ alert("remove " + rSeqCatalog)
+ }
+ */
+
+ var tseq = rSeqCatalog.GetElements();
+ alert(seqNode.ValueUTF8+"\nnb elements to remove = " + rSeqCatalog.GetCount())
+ var uriResource = "";
+ while (tseq.hasMoreElements()){
+ var element = tseq.getNext();
+ if (element instanceof Components.interfaces.nsIRDFResource){
+ uriResource = element.ValueUTF8;
+ alert("remove " + uriResource)
+ var resource = _rdfService.GetResource(uriResource);
+ rSeqCatalog.RemoveElementAt(rSeqCatalog.IndexOf(resource),true);
+ }else{
+ alert("remove " + uriResource)
+ }
+ }
+ alert("nb elements = " + rSeqCatalog.GetCount())
+ }
+ }catch(e){
+ alert(e)
+ gConsole.logStringMessage("[ximfmail - XimfCatalog - RemoveSeqCatalog ] \n " + e + "\nfile : " + Error().fileName+"\nline : "+Error().lineNumber);
+ }
+ },
+ getNameInstance : function(instance){
+ return getTarget(instance,"http://www.ximfmail.com/RDF#instance");
+ },
+ getLabelInstance : function(instance){
+ return getTarget(instance,"http://www.ximfmail.com/RDF#instanceLabel");
+ },
+ getVersionInstance : function(instance){
+ return getTarget(instance,"http://www.ximfmail.com/RDF#ximfVersion");
+ },
+ getDefinitonInstance : function(instance){
+ return getTarget(instance,"http://www.ximfmail.com/RDF#theme");
+ },
+ getSchemaInstance : function(instance){
+ return getTarget(instance,"http://www.ximfmail.com/RDF#pathSchema");
+ },
+ getDictionaryInstance : function(instance){
+ return getTarget(instance,"http://www.ximfmail.com/RDF#pathDictionary");
+ },
+ getIDInstance : function(instance){
+ return getTarget(instance,"http://www.ximfmail.com/RDF#id");
+ },
+ getIhmInstance : function(instance){
+ return getTarget(instance,"http://www.ximfmail.com/RDF#pathIhm");
+ },
+ getRulesInstance : function(instance){
+ return getTarget(instance,"http://www.ximfmail.com/RDF#pathRules");
+ },
+ getInstanceUri : function(ximfDefUri,ximfName,ximfVersion){
+ try{
+ gConsole.logStringMessage("[ximfmail - XimfCatalog:getInstanceUri ] ximfDefUri = "+ximfDefUri+" - ximfName = "+ximfName+" - ximfVersion = " + ximfVersion );
+ /// get container of instance resources of current definition
+ var RDFCUtils = Components.classes["@mozilla.org/rdf/container-utils;1"].createInstance(Components.interfaces.nsIRDFContainerUtils);
+ //alert("getInstanceUri - ximfDefUri = " + ximfDefUri)
+ var rs_seqInstance = _rdfService.GetResource(ximfDefUri);
+ var containerInstances = RDFCUtils.MakeSeq(_dsCatalog, rs_seqInstance);
+ var children = containerInstances.GetElements();
+ while (children.hasMoreElements()){
// search uri instance with ximfVersion and ximfName
var child = children.getNext();
if (child instanceof Components.interfaces.nsIRDFResource){
- var def_resource = child.ValueUTF8;
- // get uri of definition container
- var seqUriInstance = this.getTarget(def_resource,"http://www.ximfmail.com/RDF#refSeq");
- if(seqUriInstance != ximfDefUri){
+ var instance_resource = child.Value;
+ //alert("instance_resource = "+instance_resource);
+ //var thisName = this.getNameInstance(instance_resource);
+ var thisName = getTarget(instance_resource,"http://www.ximfmail.com/RDF#instance")
+ //var thisVersion = this.getVersionInstance(instance_resource);
+ var thisVersion = getTarget(instance_resource,"http://www.ximfmail.com/RDF#ximfVersion");
+ //alert("<"+thisName+"><"+thisVersion+">\n<"+ximfName+"><"+ximfVersion+">")
+ if(thisName && thisVersion){
+ thisName = String_trim(thisName).toLowerCase();
+ if(thisName == String_trim(ximfName).toLowerCase()){
+ /*
+ if(thisVersion == ximfVersion){
+ //alert("instance path found >>"+instance_resource);
+ return instance_resource;
+ }*/
+ return instance_resource;
+ }
+ }
+ }
+ /*
+ DEBUG loop : list of predicats
+ var resource = _rdfService.GetResource(instance_resource);
+ var targets = _dsCatalog.ArcLabelsOut(resource);
+ while (targets.hasMoreElements()){
+ var newpredicate = targets.getNext();
+ if (newpredicate instanceof Components.interfaces.nsIRDFResource){
+ alert("Resource is: " + newpredicate.Value);
+ }else if (newpredicate instanceof Components.interfaces.nsIRDFLiteral){
+ alert("Literal is: " + newpredicate.Value);
+ }
+ }*/
+ }
+
+ // search for instance in others definitions of catalog
+ var completeCatalog = _rdfService.GetResource("http://www.ximfmail.com/catalog");
+ var containerDefinitions = RDFCUtils.MakeSeq(_dsCatalog, completeCatalog);
+ var children = containerDefinitions.GetElements();
+ while (children.hasMoreElements()){
+ try{
+ // search uri instance with ximfVersion and ximfName
+ var child = children.getNext();
+ if (child instanceof Components.interfaces.nsIRDFResource){
+ var def_resource = child.ValueUTF8;
+ // get uri of definition container
+ var seqUriInstance = getTarget(def_resource,"http://www.ximfmail.com/RDF#refSeq");
+ if(seqUriInstance != ximfDefUri){
+ var rs_seqInstance2 = _rdfService.GetResource(seqUriInstance);
+ var containerInstances2 = RDFCUtils.MakeSeq(_dsCatalog, rs_seqInstance2);
+ var children2 = containerInstances2.GetElements();
+ //alert("inspect uri in :\n" + def_resource+"\nref:\n"+ximfDefUri+"\n elments count = " + containerInstances2.GetCount())
+ while (children2.hasMoreElements()){
+ // search uri instance with ximfVersion and ximfName
+ var child2 = children2.getNext();
+ if (child2 instanceof Components.interfaces.nsIRDFResource){
+ var instance_resource2 = child2.ValueUTF8;
+ //var thisName2 = this.getNameInstance(instance_resource2);
+ var thisName2 = getTarget(instance_resource2,"http://www.ximfmail.com/RDF#instance")
+
+ if(thisName2){
+ thisName2 = String_trim(thisName2).toLowerCase();
+ if(thisName2 == String_trim(ximfName).toLowerCase()){
+ //alert("instance_resource matched = "+instance_resource2);
+ return instance_resource2;
+ }
+ }
+ }
+ }
+ }
+ }
+ }catch(e){
+ gConsole.logStringMessage("[ximfmail - XimfCatalog - getInstanceUri] \n " + e + "\nfile : " + Error().fileName+"\nline : "+Error().lineNumber);
+ }
+ }
+ }catch(e){
+ gConsole.logStringMessage("[ximfmail - XimfCatalog - getInstanceUri] \n " + e + "\nfile : " + Error().fileName+"\nline : "+Error().lineNumber);
+ }
+ return null;
+ },
+ // array of instances of one definition
+ getInstanceList : function(){
+ var arrayInstancesUri = [];
+ try{
+ // search for instance in others definitions of catalog
+ var RDFCUtils = Components.classes["@mozilla.org/rdf/container-utils;1"].createInstance(Components.interfaces.nsIRDFContainerUtils);
+ var completeCatalog = _rdfService.GetResource("http://www.ximfmail.com/catalog");
+ var containerDefinitions = RDFCUtils.MakeSeq(_dsCatalog, completeCatalog);
+ var children = containerDefinitions.GetElements();
+ while (children.hasMoreElements()){
+ try{
+ // search uri instance with ximfVersion and ximfName
+ var child = children.getNext();
+ if (child instanceof Components.interfaces.nsIRDFResource){
+ var def_resource = child.ValueUTF8;
+ // get uri of definition container
+ var seqUriInstance = getTarget(def_resource,"http://www.ximfmail.com/RDF#refSeq");
+ //arrayInstancesUri.push(seqUriInstance);
+
var rs_seqInstance2 = _rdfService.GetResource(seqUriInstance);
var containerInstances2 = RDFCUtils.MakeSeq(_dsCatalog, rs_seqInstance2);
var children2 = containerInstances2.GetElements();
while (children2.hasMoreElements()){
// search uri instance with ximfVersion and ximfName
var child2 = children2.getNext();
- if (child2 instanceof Components.interfaces.nsIRDFResource){
- var instance_resource2 = child2.ValueUTF8;
- var thisName2 = this.getNameInstance(instance_resource2);
- if(thisName2){
- thisName2 = String_trim(thisName2).toLowerCase();
- if(thisName2 == String_trim(ximfName).toLowerCase()){
- //alert("instance_resource matched = "+instance_resource2);
- return instance_resource2;
- }
- }
- }
- }
- }
- }
- }catch(e){
- gConsole.logStringMessage("[ximfmail - XimfCatalog - getInstanceUri] \n " + e + "\nfile : " + Error().fileName+"\nline : "+Error().lineNumber);
- }
- }
- }catch(e){
- gConsole.logStringMessage("[ximfmail - XimfCatalog - getInstanceUri] \n " + e + "\nfile : " + Error().fileName+"\nline : "+Error().lineNumber);
- }
- return null;
- }
-
- // array of instances of one definition
- XimfCatalog.prototype.getInstanceList = function(){
- var arrayInstancesUri = [];
- try{
- // search for instance in others definitions of catalog
- var RDFCUtils = Components.classes["@mozilla.org/rdf/container-utils;1"].createInstance(Components.interfaces.nsIRDFContainerUtils);
- var completeCatalog = _rdfService.GetResource("http://www.ximfmail.com/catalog");
- var containerDefinitions = RDFCUtils.MakeSeq(_dsCatalog, completeCatalog);
- var children = containerDefinitions.GetElements();
- while (children.hasMoreElements()){
- try{
- // search uri instance with ximfVersion and ximfName
- var child = children.getNext();
- if (child instanceof Components.interfaces.nsIRDFResource){
- var def_resource = child.ValueUTF8;
- // get uri of definition container
- var seqUriInstance = this.getTarget(def_resource,"http://www.ximfmail.com/RDF#refSeq");
- //arrayInstancesUri.push(seqUriInstance);
-
- var rs_seqInstance2 = _rdfService.GetResource(seqUriInstance);
- var containerInstances2 = RDFCUtils.MakeSeq(_dsCatalog, rs_seqInstance2);
- var children2 = containerInstances2.GetElements();
- //alert("inspect uri in :\n" + def_resource+"\nref:\n"+ximfDefUri+"\n elments count = " + containerInstances2.GetCount())
- while (children2.hasMoreElements()){
- // search uri instance with ximfVersion and ximfName
- var child2 = children2.getNext();
- if (child2 instanceof Components.interfaces.nsIRDFResource){
- var instance_resource2 = child2.ValueUTF8;
- arrayInstancesUri.push(instance_resource2);
- }
- }
-
- }
- }catch(e){
- gConsole.logStringMessage("[ximfmail - XimfCatalog - getInstanceUri] \n " + e + "\nfile : " + Error().fileName+"\nline : "+Error().lineNumber);
- }
+ if (child2 instanceof Components.interfaces.nsIRDFResource){
+ var instance_resource2 = child2.ValueUTF8;
+ arrayInstancesUri.push(instance_resource2);
+ }
+ }
+
+ }
+ }catch(e){
+ gConsole.logStringMessage("[ximfmail - XimfCatalog - getInstanceUri] \n " + e + "\nfile : " + Error().fileName+"\nline : "+e.lineNumber);
+ }
+ }
+ }catch(e){
+ // alert("[XimfCatalog]error instance loading...." + e);
+ gConsole.logStringMessage("[ximfmail - XimfCatalog ] \n " + e + "\nfile : " + Error().fileName+"\nline : "+e.lineNumber);
}
- }catch(e){
-// alert("[XimfCatalog]error instance loading...." + e);
- gConsole.logStringMessage("[ximfmail - XimfCatalog ] \n " + e + "\nfile : " + Error().fileName+"\nline : "+Error().lineNumber);
+
+ return arrayInstancesUri;
+ }
+ }; // end init() singleton
+ }
+ return{
+ getInstance : function(){
+ if(!instantiated){
+ instantiated = init();
}
-
- return arrayInstancesUri;
- };
-
- XimfCatalog.initialized = true;
+ return instantiated;
+ }
}
-}
\ No newline at end of file
+
+})();
\ No newline at end of file
RDFC_data = _rdfCUtils.MakeSeq(_dsCatalog, seqNode);\r
\r
}catch(e){\r
- gConsole.logStringMessage("[ximfmail - XimfTreeData.registerXimfmailProfileNode ] \n " + e + "\nfile : " + Error().fileName+"\nline : "+Error().lineNumber);\r
+ gConsole.logStringMessage("[ximfmail - CreateRdfDatasSource ] \n " + e + "\nfile : " + Error().fileName+"\nline : "+Error().lineNumber);\r
} \r
\r
var treeTag = baseTag[0].getElementsByTagName("ximf:tree"); \r
xDataSource._refDataSource = datasUri;\r
return xDataSource; \r
}catch(e){ \r
- gConsole.logStringMessage("[ximfmail - XimfTreeData.CreateRdfDatasSource ] \n " + e + "\nfile : " + Error().fileName+"\nline : "+Error().lineNumber);\r
+ gConsole.logStringMessage("[ximfmail - CreateRdfDatasSource ] \n " + e + "\nfile : " + Error().fileName+"\nline : "+Error().lineNumber);\r
} \r
}\r
\r
\r
var arrayCols = arrayDatas[i];\r
for(var j = 0; j < arrayCols.length; ++j){\r
+ var valData = arrayCols[j];\r
+ if (valData == "")\r
+ valData = " ";\r
// append description element\r
_dsCatalog.Assert(_rdfService.GetResource(newURI), \r
_rdfService.GetResource("http://www.ximfmail.com/RDF#column"+j), \r
- _rdfService.GetLiteral(arrayCols[j]), \r
+ _rdfService.GetLiteral(valData), \r
true\r
); \r
}\r
_dsCatalog = Components.classes["@mozilla.org/rdf/datasource;1?name=in-memory-datasource"].createInstance(Components.interfaces.nsIRDFDataSource);\r
//_dsCatalog = _rdfService.GetDataSource("rdf:ximfTree"); \r
}\r
- \r
- \r
//_dsCatalog = Components.classes["@mozilla.org/rdf/datasource;1?name=in-memory-datasource"].createInstance(Components.interfaces.nsIRDFDataSource);\r
\r
if(!_rdfCUtils)\r
// GLOBALS
//var relativeXimfCatalogPath = "ximf/ximfmail/chrome/content/theme/ximfCatalog.rdf";
var gConsole = Components.classes["@mozilla.org/consoleservice;1"].getService(Components.interfaces.nsIConsoleService);
-var gJSLoader = Components.classes["@mozilla.org/moz/jssubscript-loader;1"].createInstance(Components.interfaces.mozIJSSubScriptLoader);
-var gXimfCatalog = null;
-
-try{
- gJSLoader.loadSubScript("chrome://ximfmail/content/ximfCatalog.js");
- gXimfCatalog = new XimfCatalog();
-}catch(e){
- gConsole.logStringMessage("[ximfmail - Load XimfCatalog ] \n " + e + "\nfile : " + Error().fileName+"\nline : "+Error().lineNumber);
+function TRACE_DATE(){
+ var ladate=new Date();
+ var h=ladate.getHours();
+ if (h<10) {h = "0" + h}
+ var m=ladate.getMinutes();
+ if (m<10) {m = "0" + m}
+ var s=ladate.getSeconds();
+ if (s<10) {s = "0" + s};
+ return "\nDATE > "+ladate.getDate()+"/"+(ladate.getMonth()+1)+"/"+ladate.getFullYear()+" "+h+":"+m+":"+s+":"+ladate.getMilliseconds();
}
+
/*
* Load informations of ximf extensions in RDF memory
*/
+var gXimfCatalog = null;
function CreateXimfmailCatalog(aclLevel){
- try{
- if(!gXimfCatalog) gXimfCatalog = new XimfCatalog();
- var extensionPath = getFilePathInProfile("extensions/");
- var extensionList = getExtensionsList();
- var sCompletePath;
- var dir = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
-
- // search for themes extensions
- for(i = 0; i<extensionList.length; i++){
- sCompletePath = getFilePathInProfile("extensions/" + extensionList[i].id + "/chrome/content/ximfmail-profile.xml");
- dir.initWithPath( sCompletePath );
- if(dir.exists()){
- // get xml profile
- var xmlDoc = GetXmlDocument(sCompletePath);
- gXimfCatalog.registerXimfmailProfileNode(xmlDoc.documentElement,aclLevel);
- dump(sCompletePath + " : " + extensionList[i].name);
- //alert(sCompletePath + " : " + extensionList[i].name);
- }
- }
+ try{
+ if(!gXimfCatalog) gXimfCatalog = XimfCatalog.getInstance();
}catch(e){
- gConsole.logStringMessage("[ximfmail - Create XimfCatalog ] \n " + e + "\nfile : " + Error().fileName+"\nline : "+Error().lineNumber);
+ gConsole.logStringMessage("[ximfmail - Create XimfCatalog ] \n " + e + "\nfile : " + Error().fileName+"\nline : "+e.lineNumber);
}
}
//log array values
}catch(e){
- gConsole.logStringMessage("[ximfmail - CreateRulesArray ] \n " + e + "\nfile : " + Error().fileName+"\nline : "+Error().lineNumber);
+ gConsole.logStringMessage("[ximfmail - CreateRulesArray ] \n " + e + "\nfile : " + Error().fileName+"\nline : "+e.lineNumber);
}
return tabHeaders;
}
var prompts = Components.classes["@mozilla.org/embedcomp/prompt-service;1"].getService(Components.interfaces.nsIPromptService);
prompts.alert(window,title, message);
+}
+
+/*
+ * return value of array {[key][value],[key][value],...}
+ * @param key :
+ * @param array :
+ */
+function GetValueFromArrayWithInsensitiveKey(key, array){
+ var value = null;
+ try{
+ value = array[key];
+ if(value == null){
+ // try to get value of array with insensitive case key
+ for(akey in array){
+ if(akey.toLowerCase() == key.toLowerCase()){
+ value = array[akey];
+ //alert("GetValueFromArrayWithInsensitiveKey - value as insensitive case founded : " +akey+" : "+ value)
+ break;
+ }
+ }
+ }
+ }catch(e){
+ gConsole.logStringMessage("[ximfmail - GetValueFromArrayWithInsensitiveKey ] \n " + e + "\nfile : " + Error().fileName+"\nline : "+Error().lineNumber);
+ value=null;
+ }
+ return value;
}
\ No newline at end of file
</xsl:if> \r
<xsl:element name="checkbox">\r
<xsl:attribute name="id"><xsl:value-of select="$_id"/></xsl:attribute> \r
+ <xsl:attribute name="class">ximfCheckbox</xsl:attribute>\r
<xsl:attribute name="disabled">false</xsl:attribute>\r
<xsl:attribute name="ximfconcatid"><xsl:value-of select="$_newConcat"/></xsl:attribute>\r
<xsl:attribute name="label">\r
<xsl:for-each select="$_refString"> \r
<richlistitem ximfenable="true"> \r
<xsl:element name="checkbox">\r
- <xsl:attribute name="class">ximCheckbox</xsl:attribute>\r
+ <xsl:attribute name="class">ximfCheckbox</xsl:attribute>\r
<xsl:attribute name="disabled">false</xsl:attribute>\r
<xsl:attribute name="id">\r
<xsl:call-template name="GetUNID">\r
<xsl:template match="/"> \r
<xsl:for-each select="/ximf:instance/ximf:ihm/ximf:treeRcv"> \r
<xsl:for-each select="ximf:headerRef">\r
- <splitter class="tree-splitter" ximfheadtree="1"/> \r
+ <!-- <splitter class="tree-splitter" ximfheadtree="1"/> --> \r
<xsl:call-template name="CreateCol">\r
<xsl:with-param name="headerRef" select="." />\r
+ <xsl:with-param name="indexNode" select="position()" /> \r
</xsl:call-template>\r
</xsl:for-each>\r
</xsl:for-each> \r
\r
<xsl:template name="CreateCol">\r
<xsl:param name="headerRef" select="" />\r
+ <xsl:param name="indexNode" select="" /> \r
<xsl:for-each select="/ximf:instance/ximf:header[$headerRef=@id]">\r
<xsl:element name="treecol"> \r
<xsl:attribute name="id"><xsl:value-of select="@headerName"/></xsl:attribute>\r
+ <xsl:attribute name="ordinal"><xsl:value-of select="100+$indexNode"/></xsl:attribute>\r
<xsl:attribute name="label">\r
<xsl:call-template name="getInternational">\r
<xsl:with-param name="ilk" select="@ilk" /> \r
</xsl:call-template> \r
</xsl:attribute> \r
<xsl:attribute name="persist">hidden ordinal width</xsl:attribute>\r
- <xsl:attribute name="flex">1</xsl:attribute>\r
- <xsl:attribute name="hidden">false</xsl:attribute>\r
- <xsl:attribute name="ximfheadtree">1</xsl:attribute>\r
+ <xsl:attribute name="currentView">unthreaded</xsl:attribute>\r
+ <xsl:attribute name="flex">1</xsl:attribute> \r
+ <xsl:attribute name="ximfheadtree">1</xsl:attribute> \r
</xsl:element>\r
</xsl:for-each>\r
</xsl:template>\r
ximfaddress{
-moz-binding: url("chrome://ximfmail/content/ximfaddress/ximfaddress.xml#ximfaddress");
}
-\r
-\r
-\r
-/* Ximfmail Panel custom*/ \r
-#ximfmailComposeMessagePanel richlistbox{\r
- -moz-appearance: none;\r
- background-color: inherit;\r
- border: none;\r
-}\r
-\r
-#ximfmailComposeMessagePanel richlistitem textbox{\r
- -moz-appearance: none;\r
- background-color: #ffffff;\r
- color: #000000;\r
- border: none;\r
-}\r
-\r
-richlistitem[ximfenable="true"]:hover,\r
-richlistitem[ximfenable="true"][selected="true"]{ \r
- background-color: #0a246a;\r
-}\r
-\r
-\r
-checkbox[ximfchild='true'] *\r
-{ \r
- color:#b20000; \r
-}\r
-\r
-richlistitem[ximfenable="true"]:hover checkbox[disabled='false'],\r
-richlistitem[ximfenable="true"]:hover menuitem,\r
-richlistitem[ximfenable="true"]:hover button,\r
-richlistitem[ximfenable="true"][selected="true"] checkbox[disabled='false'],\r
-richlistitem[ximfenable="true"][selected="true"] menuitem, \r
-richlistitem[ximfenable="true"][selected="true"] button{\r
- color: #ffffff;\r
-}\r
-\r
-richlistitem[ximfenable="false"][selected="true"],\r
-richlistitem[ximfenable="false"][selected="true"] *\r
-{\r
- background-color:inherit; \r
- color: inherit;\r
-}\r
+
+
+
+/* Ximfmail Panel custom*/
+#ximfmailComposeMessagePanel richlistbox{
+ -moz-appearance: none;
+ background-color: inherit;
+ border: none;
+}
+
+#ximfmailComposeMessagePanel richlistitem textbox{
+ -moz-appearance: none;
+ background-color: #ffffff;
+ color: #000000;
+ border: none;
+}
+
+richlistitem[ximfenable="true"]:hover,
+richlistitem[ximfenable="true"][selected="true"]{
+ background-color: #0a246a;
+}
+
+
+checkbox[ximfchild='true'] *
+{
+ color:#b20000;
+}
+
+richlistitem[ximfenable="true"]:hover checkbox[disabled='false'],
+richlistitem[ximfenable="true"]:hover menuitem,
+richlistitem[ximfenable="true"]:hover button,
+richlistitem[ximfenable="true"][selected="true"] checkbox[disabled='false'],
+richlistitem[ximfenable="true"][selected="true"] menuitem,
+richlistitem[ximfenable="true"][selected="true"] button{
+ color: #ffffff;
+}
+
+richlistitem[ximfenable="false"][selected="true"],
+richlistitem[ximfenable="false"][selected="true"] *
+{
+ background-color:inherit;
+ color: inherit;
+}
#ximfmailComposeMessagePanel,
#ximfmailMailPanel{
padding:5px !important;
background-image : url("chrome://ximfmail/content/resource/bottom_bg.jpg");
}
-\r
+
.ximfmailFocusBar{
min-height:20px;
max-height:20px;
list-style-image:url('chrome://ximfmail/content/resource/list_over.png');
}
+/*
+.ximfCheckbox > image{
+ -moz-appearance: none;
+ margin: 0px;
+ border: 0px none transparent;
+ background-color: transparent;
+}
+*/
/* display ximf headers*/
#ximfmailMailHeadersTablist label.ximfDisplay,
.ximfDetail:hover,active{
list-style-image : url("chrome://ximfmail/content/resource/detail_text_over.png");
}
-\r
+
#ximfmail-dialog-hdrInfo{
min-width:500px;
max-width:500px;
-}\r
-\r
-#ximfheaderName{\r
- font-variant:small-caps;\r
- font-weight:bold;\r
-}\r
-\r
-#ximfheaderValue{\r
- color:#b20000; \r
+}
+
+#ximfheaderName{
+ font-variant:small-caps;
+ font-weight:bold;
+}
+
+#ximfheaderValue{
+ color:#b20000;
}
#signedHdrIcon[signed="ximfalert"]{
list-style-image : url("chrome://ximfmail/content/resource/hdr_sign_alert.png");
visibility: visible;
-}
\ No newline at end of file
+}
+
+#ximfHeadBox{width:100%;}
+.ximfImgCategory,#ximfCategoryClassificationLabelImg,#ximfSecurityClassificationLabelImg{margin-left: 2px;margin-top: 2px;}
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8" standalone="no"?><RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:em="http://www.mozilla.org/2004/em-rdf#">\r
<Description about="urn:mozilla:install-manifest">\r
<em:name>XIMFMail</em:name>\r
- <em:version>3.1.5+0.3.0d</em:version>\r
+ <em:version>betaMCO2011.1.11.0</em:version>\r
<em:id>{A627B834-BD9F-4b3f-9AF5-347B5A570402}</em:id>\r
<em:description>Xtend Internet Message Format engine</em:description>\r
\r
+trustedbird (3.1.20+0.6.8)
+* Upgrade to Thunderbird 3.1.20
+* new on secure headers : secure information panel in received messages
+* new on secure headers : check headers of received message with local settings and display missings headers
+* correctives in secure headers : simple canonicalization format
+-- Sep 07 2012
+
trustedbird (3.1.11+0.5.3)
* Upgrade to Thunderbird 3.1.11
* Corrective on blocking TrustedBird on downloading messages with big attachments
-# -*- Mode: Java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
-# ***** BEGIN LICENSE BLOCK *****
-# Version: MPL 1.1/GPL 2.0/LGPL 2.1
-#
-# The contents of this file are subject to the Mozilla Public License Version
-# 1.1 (the "License"); you may not use this file except in compliance with
-# the License. You may obtain a copy of the License at
-# http://www.mozilla.org/MPL/
-#
-# Software distributed under the License is distributed on an "AS IS" basis,
-# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
-# for the specific language governing rights and limitations under the
-# License.
-#
-# The Original Code is mozilla.org Code.
-#
-# The Initial Developer of the Original Code is
-# Netscape Communications Corporation.
-# Portions created by the Initial Developer are Copyright (C) 1998-2001
-# the Initial Developer. All Rights Reserved.
-#
-# Contributor(s):
-# Scott MacGregor <mscott@netscape.com>
-# ESS Signed Receipts: Raphael Fairise / BT Global Services / Etat francais - Ministere de la Defense
-# Copyright (c) 2010 CASSIDIAN - All rights reserved
-#
-# Alternatively, the contents of this file may be used under the terms of
-# either the GNU General Public License Version 2 or later (the "GPL"), or
-# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
-# in which case the provisions of the GPL or the LGPL are applicable instead
-# of those above. If you wish to allow use of your version of this file only
-# under the terms of either the GPL or the LGPL, and not to allow others to
-# use your version of this file under the terms of the MPL, indicate your
-# decision by deleting the provisions above and replace them with the notice
-# and other provisions required by the GPL or the LGPL. If you do not delete
-# the provisions above, a recipient may use your version of this file under
-# the terms of any one of the MPL, the GPL or the LGPL.
-#
-# ***** END LICENSE BLOCK *****
-
-const MSG_FLAG_SIGNED_RECEIPT_SENT = 0x2000000;
-const nsIMsgSMIMESecureHeader = Components.interfaces.nsIMsgSMIMESecureHeader;
-const nsIMimeConverter = Components.interfaces.nsIMimeConverter;
-const nsIMIMEHeaderParam = Components.interfaces.nsIMIMEHeaderParam;
-const nsIArray = Components.interfaces.nsIArray;
-
-var gConsole = Components.classes["@mozilla.org/consoleservice;1"].getService(Components.interfaces.nsIConsoleService);
-var gSignedUINode = null;
-var gEncryptedUINode = null;
-var gSMIMEContainer = null;
-var gStatusBar = null;
-var gSMIMEInfoMsg = null;
-var gSMIMEInfoMsgMore = null;
-
-var gEncryptedURIService = null;
-var gMyLastEncryptedURI = null;
-
-var gSMIMEBundle = null;
-//var gBrandBundle; -- defined in mailWindow.js
-
-// manipulates some globals from msgReadSMIMEOverlay.js
-const nsICMSMessageErrors = Components.interfaces.nsICMSMessageErrors;
-
-var smimeHeaderSink =
-{
- maxWantedNesting: function()
- {
- return 1;
- },
-
- signedStatus: function(aNestingLevel, aSignatureStatus, aSignerCert)
- {
- if (aNestingLevel > 1) {
- // we are not interested
- return;
- }
-
- gSignatureStatus = aSignatureStatus;
- gSignerCert = aSignerCert;
-
- gSMIMEContainer.collapsed = false;
- gSignedUINode.collapsed = false;
- //gConsole.logStringMessage("[smimeHeaderSink:smimeHeaderSink] nsICMSMessageErrors : " + aSignatureStatus);
- switch (aSignatureStatus) {
- case nsICMSMessageErrors.SUCCESS:
- gSignedUINode.setAttribute("signed", "ok");
- gStatusBar.setAttribute("signed", "ok");
- gSMIMEInfoMsg.setAttribute("value", gSMIMEBundle.getString("secureinfomsg_ok"));
- gSMIMEInfoMsgMore.value=gSMIMEBundle.getString("secureinfomsgmore_ok").replace(/<BR>/g,"\n");
- break;
-
- case nsICMSMessageErrors.VERIFY_NOT_YET_ATTEMPTED:
- gSignedUINode.setAttribute("signed", "unknown");
- gStatusBar.setAttribute("signed", "unknown");
- break;
-
- case nsICMSMessageErrors.VERIFY_CERT_WITHOUT_ADDRESS:
- case nsICMSMessageErrors.VERIFY_HEADER_MISMATCH:
- gSignedUINode.setAttribute("signed", "mismatch");
- gStatusBar.setAttribute("signed", "mismatch");
- break;
-
- default:
- gSignedUINode.setAttribute("signed", "notok");
- gStatusBar.setAttribute("signed", "notok");
- gSMIMEInfoMsg.setAttribute("value", gSMIMEBundle.getString("secureinfomsg_notok"));
- gSMIMEInfoMsgMore.value=gSMIMEBundle.getString("secureinfomsgmore_notok").replace(/<BR>/g,"\n");
- break;
- }
- },
-
- encryptionStatus: function(aNestingLevel, aEncryptionStatus, aRecipientCert)
- {
- if (aNestingLevel > 1) {
- // we are not interested
- return;
- }
-
- gEncryptionStatus = aEncryptionStatus;
- gEncryptionCert = aRecipientCert;
-
- gSMIMEContainer.collapsed = false;
- gEncryptedUINode.collapsed = false;
-
- if (nsICMSMessageErrors.SUCCESS == aEncryptionStatus)
- {
- gEncryptedUINode.setAttribute("encrypted", "ok");
- gStatusBar.setAttribute("encrypted", "ok");
- }
- else
- {
- gEncryptedUINode.setAttribute("encrypted", "notok");
- gStatusBar.setAttribute("encrypted", "notok");
- }
-
- if (gEncryptedURIService)
- {
- gMyLastEncryptedURI = gFolderDisplay.selectedMessageUris[0];
- gEncryptedURIService.rememberEncrypted(gMyLastEncryptedURI);
- }
-
- switch (aEncryptionStatus)
- {
- case nsICMSMessageErrors.SUCCESS:
- case nsICMSMessageErrors.ENCRYPT_INCOMPLETE:
- break;
- default:
- var brand = gBrandBundle.getString("brandShortName");
- var title = gSMIMEBundle.getString("CantDecryptTitle").replace(/%brand%/g,brand);
- var body = gSMIMEBundle.getString("CantDecryptBody").replace(/%brand%/g,brand);
-
- // insert our message
- msgWindow.displayHTMLInMessagePane(title,
- "<html>\n"+
- "<body bgcolor=\"#fafaee\">\n"+
- "<center><br><br><br>\n"+
- "<table>\n"+
- "<tr><td>\n"+
- "<center><strong><font size=\"+3\">\n"+
- title+"</font></center><br>\n"+
- body+"\n"+
- "</td></tr></table></center></body></html>", false);
- break;
- }
- },
-
- // Check the SMIME receipt request and send a receipt
- SMIMEReceiptRequestStatus: function(aSignedContentIdentifier,
- aSignedContentIdentifierLen,
- aReceiptsFrom,
- aReceiptsTo,
- aOriginatorSignatureValue,
- aOriginatorSignatureValueLen,
- aOriginatorContentType,
- aOriginatorContentTypeLen,
- aMsgSigDigest,
- aMsgSigDigestLen)
- {
- var msgHdr = gMessageDisplay.displayedMessage;
- var msgFolder = gFolderDisplay.displayedFolder;
-
- if (!msgFolder || !(msgFolder.isSpecialFolder(Components.interfaces.nsMsgFolderFlags.Mail, true)))
- return;
-
- if (msgFolder.isSpecialFolder(Components.interfaces.nsMsgFolderFlags.Trash, true) ||
- msgFolder.isSpecialFolder(Components.interfaces.nsMsgFolderFlags.Queue, true) ||
- msgFolder.isSpecialFolder(Components.interfaces.nsMsgFolderFlags.Junk, true) ||
- msgFolder.isSpecialFolder(Components.interfaces.nsMsgFolderFlags.Templates, true) ||
- msgFolder.isSpecialFolder(Components.interfaces.nsMsgFolderFlags.Drafts, true))
- return;
-
- // Check if message has been deleted
- if (msgHdr.flags & Components.interfaces.nsMsgMessageFlags.IMAPDeleted)
- return;
-
- // Check if message is marked as junk
- var junkScore = msgHdr.getStringProperty("junkscore");
- if (junkScore != "" && junkScore != "0")
- return;
-
- // Write S/MIME receipt request properties in message db
- if (msgHdr.getStringProperty("SMIMEReceiptType") == "") {
- msgHdr.setStringProperty("SMIMEReceiptType", "request");
- msgHdr.setStringProperty("SMIMEReceiptSignedContentIdentifier", aSignedContentIdentifier);
- msgHdr.setStringProperty("SMIMEReceiptOriginatorSignatureValue", aOriginatorSignatureValue);
- msgHdr.setStringProperty("SMIMEReceiptOriginatorContentType", aOriginatorContentType);
- msgHdr.setStringProperty("SMIMEReceiptMsgSigDigest", aMsgSigDigest);
- }
-
- // Check in local message database if this request has already been processed
- if (msgHdr.getStringProperty("SMIMEReceiptRequestProcessed") != "")
- return;
-
- // Check in IMAP if this request has already been processed
- var keywords = msgHdr.getStringProperty("keywords");
- if (keywords != "" && keywords.indexOf("smimereceiptrequestprocessed") != -1)
- {
- // If IMAP flag is set, write it in local message db
- msgHdr.setStringProperty("SMIMEReceiptRequestProcessed", "true");
- return;
- }
-
- mimeHeaders = getMessageHeaders(msgHdr);
- if (!mimeHeaders)
- return;
-
- // Create and send a receipt
- var SMIMEReceiptGenerator = Components.classes["@mozilla.org/messenger-smime/smimereceiptgenerator;1"]
- .createInstance(Components.interfaces.nsIMsgSMIMEReceiptGenerator);
- var askUser = SMIMEReceiptGenerator.process(msgWindow,
- msgFolder,
- msgHdr.messageKey,
- mimeHeaders,
- aSignedContentIdentifier,
- aSignedContentIdentifierLen,
- aReceiptsFrom,
- aReceiptsTo,
- aOriginatorSignatureValue,
- aOriginatorSignatureValueLen,
- aOriginatorContentType,
- aOriginatorContentTypeLen,
- aMsgSigDigest,
- aMsgSigDigestLen);
-
- if (askUser)
- gMessageNotificationBar.setSMIMEReceiptRequestMsg(SMIMEReceiptGenerator, aReceiptsTo);
- },
- updateSecureHeadersState: function(msgSrc){
- // parse mime msg : extract headers
- var currentMimeHeaderDataArray = {};
- // get MIME headers only
- var idxEnd = msgSrc.indexOf("\r\n\r\n",0); // * CRLF DOS : "\r\n"
- if(idxEnd == -1) idxEnd = msgSrc.indexOf("\n\n",0); // * CRLF UNIX : "\n"
- if(idxEnd == -1) idxEnd = msgSrc.indexOf("\r\r",0); //CRLF OS : "\r"
- if(idxEnd != -1) msgSrc = msgSrc.substr(0,idxEnd); //dbg gConsole.logStringMessage("[smime - MessageAnalyser - succes getting mime headers : ] \n" + msgSrc);
-
- // filter on IMF headers - append data to array
- var separator = new RegExp("\\r\\n|\\r|\\n", "i");// end line
- var tab = msgSrc.split(separator);
- var reg_folding = new RegExp("( )","g");
- var reg_folding2 = new RegExp("(\t)","g");
- for(var idxTab=0; idxTab<tab.length; ++idxTab){
- var header_line = tab[idxTab];
- // search for long header fields (folding) - RFC 2822
- if(header_line[0]!= " "){
- try{
- while( idxTab < tab.length ){
- var next_line = tab[idxTab+1];
- if(next_line){
- if(next_line[0] == " " || next_line[0] == "\t"){
- header_line += next_line; //next_line.toLowerCase();
- header_line = header_line.replace(reg_folding," ");
- header_line = header_line.replace(reg_folding2,"");
- ++idxTab;
- }else{ break; }
- }else{ break; }
- }
- }catch(e){}
- }
- //gConsole.logStringMessage("[ximfmail - createXimfHdrArray - decode header line : ] \n" + header_line);
-
- if(header_line.indexOf(":")!=-1){
- var oEntry = new Object;
- oEntry.headerName = header_line.substring(0,header_line.indexOf(": ",0));
- oEntry.headerValue = header_line.substring(header_line.indexOf(": ",header_line)+2);
- currentMimeHeaderDataArray[oEntry.headerName] = oEntry;
- //gConsole.logStringMessage("[smime - MessageAnalyser - push : ] \n" + oEntry.headerName + " :: "+ oEntry.headerValue);
- }
- }
-
- // Compute secure headers and mime headers
- //gConsole.logStringMessage("[smime - updatesecureheaders ] *** secureHeaders analysis begin *** " );
- var secStatus = true; //flag for the global secure headers status, set at true as default means all secure headers were not modified
- gSecureHeadersState=1;
- for (headerName in gSecureHeadersArray) {
- //Verify the value validity only in the case where header status is duplicated
- var headerMimeExists = false;
- var tmp_hdrName = gSecureHeadersArray[headerName].hdrName;
- var canonalgo = gSecureHeadersArray[headerName].hdrCanonAlgo;
- if(canonalgo){
- // RFC 4871 - relaxed header canonicalization algorithm - convert header field names to lowercase
- tmp_hdrName = tmp_hdrName.toLowerCase();
- }
- //gConsole.logStringMessage("secureHeadersStatus - \n check for signed header "+tmp_hdrName);
- //for(var j=0;j<hdrArray.length;++j){
- for(headerMimeName in currentMimeHeaderDataArray){
- var tmp_hdrMimeName = currentMimeHeaderDataArray[headerMimeName].headerName;
- if(canonalgo){
- // RFC 4871 - relaxed header canonicalization algorithm - convert header field names to lowercase
- tmp_hdrMimeName = tmp_hdrMimeName.toLowerCase();
- }
-
- //gConsole.logStringMessage("secureHeadersStatus - \nsigned header : "+tmp_hdrName+"\nmime header : "+tmp_hdrMimeName);
- if(tmp_hdrName == tmp_hdrMimeName){
- // compare secured value ans MIME value of header
- headerMimeExists = true; // header is in mime
- var hdrValue = gSecureHeadersArray[headerName].hdrSecureValue;
- var hdrMimeValue = currentMimeHeaderDataArray[headerMimeName].headerValue;
- var charset = getMimeValueCharset(hdrMimeValue);
-
- // body - delete SP/WPS characters before and after body
- hdrMimeValue = deleteFirstAndLastWhiteSpace(hdrMimeValue);
- hdrValue = deleteFirstAndLastWhiteSpace(hdrValue);
-
- if(canonalgo){
- hdrMimeValue = canonilizeHeaderValue(hdrMimeValue);
- hdrValue = canonilizeHeaderValue(hdrValue);
- //gConsole.logStringMessage("secureHeadersStatus - relaxed canonicalization \n mime value:\n>" +hdrMimeValue+ "<\nsigend value:\n>"+hdrValue+"<");
- }else{
- hdrMimeValue = UnfoldingMimeValue(hdrMimeValue);
- hdrMimeValue = deleteLastCRLF(hdrMimeValue);
- hdrValue = UnfoldingMimeValue(hdrValue);
- hdrValue = deleteLastCRLF(hdrValue);
- }
-
- if(hdrValue!=hdrMimeValue) //test if the header value in the signature and that one in the mime message is the same
- {
- gSecureHeadersArray[headerName].hdrSignedRes = "invalid"; //hdrValidity="invalid"; //header was modified
- secStatus=false;
- //dbg gConsole.logStringMessage("Warning - failed on verifing secured header "+tmp_hdrName+" :\n mime value:\n>" +hdrMimeValue+ "<\nsecured value:\n>"+hdrValue+"<");
- gConsole.logStringMessage("[smimeHeaderSink:updateSecureHeadersState]Warning - failed on verifing secured header ");
- }
-
- // decode values from MIME format
- var tmpDecdodedValue=null;
- var mimeEncoder = Components.classes["@mozilla.org/messenger/mimeconverter;1"].getService(Components.interfaces.nsIMimeConverter);
- tmpDecdodedValue = mimeEncoder.decodeMimeHeader(hdrMimeValue, charset, false, true);//encodeMimePartIIStr(hdrValue, false, "ISO-8859-1" , 0, 72);
- if(tmpDecdodedValue){
- gSecureHeadersArray[headerName].hdrMimeValue = tmpDecdodedValue;
- }else{
- gSecureHeadersArray[headerName].hdrMimeValue = hdrMimeValue;
- }
- tmpDecdodedValue = null;
- tmpDecdodedValue = mimeEncoder.decodeMimeHeader(hdrValue,charset,false,true);
- if(tmpDecdodedValue){
- gSecureHeadersArray[headerName].hdrSecureValue = tmpDecdodedValue;
- }else{
- gSecureHeadersArray[headerName].hdrSecureValue = hdrValue;
- }
- gSecureHeaders = "signedData in";
- //dbg gConsole.logStringMessage("secureHeadersStatus - header "+headerName+" \nmime value: >" +gSecureHeadersArray[headerName].hdrMimeValue+ "<\nsigned value:>"+gSecureHeadersArray[headerName].hdrSecureValue+"<");
- break; // header is correctly checked
- }
- }
-
- // mime header has been lost, deleted...
- if(!headerMimeExists){
- gSecureHeadersArray[headerName].hdrSignedRes ="invalid"; //header was modified
- secStatus=false;
- }
- }
-
- if((!secStatus) && (gSignatureStatus == nsICMSMessageErrors.SUCCESS))
- {
- //At least one secure header was modified, set the signed status to mismastch
- gConsole.logStringMessage("[smimeHeaderSink:updateSecureHeadersState] At least one secure header was modified ");
- gSignedUINode.setAttribute("signed", "mismatch");
- gStatusBar.setAttribute("signed", "mismatch");
- gSecureHeadersState=0;
- gSMIMEInfoMsg.setAttribute("value", gSMIMEBundle.getString("secureinfomsg_hdrnok"));
- gSMIMEInfoMsgMore.value=gSMIMEBundle.getString("secureinfomsgmore_default").replace(/<BR>/g,"\n");
- }
- },//end updateSecureHeadersState
- secureHeadersStatus: function(aSecureHeaders, aCanonAlgo){
- gSecureHeaders = "";
- gSecureHeadersArray={}; // clear array
- if(aSecureHeaders)
- {
- var secureHeadersArray=aSecureHeaders.QueryInterface(nsIArray);
- if(secureHeadersArray.length <= 0 ){
- gConsole.logStringMessage("[smimeHeaderSink:secureHeadersStatus] *** no secure headers in smime signeddata ");
- return;
- }
-
- for(var i=0;i<secureHeadersArray.length;++i)
- {
- var sHeader = secureHeadersArray.queryElementAt(i,nsIMsgSMIMESecureHeader);
- if(sHeader){
- var oEntry = new Object;
- oEntry.hdrName = sHeader.headerName; // signed header
- oEntry.hdrSecureValue = sHeader.headerValue; // Value in the signature
- oEntry.hdrMimeValue = ""; // value in the MIME message
- oEntry.hdrSignedStatus = sHeader.headerStatus;
- oEntry.hdrCanonAlgo = aCanonAlgo;
- oEntry.hdrEncryptStatus = "";
- oEntry.hdrSignedRes = "valid";
- gSecureHeadersArray[oEntry.hdrName] = oEntry;
- }
- }
- getMessageSource(gFolderDisplay.selectedMessageUris[0], this.updateSecureHeadersState);
- }
- },
- // Check the SMIME receipt with the request
- SMIMEReceiptStatus: function(aSignedContentIdentifier,
- aSignedContentIdentifierLen,
- aOriginatorSignatureValue,
- aOriginatorSignatureValueLen,
- aOriginatorContentType,
- aOriginatorContentTypeLen,
- aMsgSigDigest,
- aMsgSigDigestLen)
- {
- var msgHdr = gMessageDisplay.displayedMessage;
-
- // Write S/MIME receipt properties in message db
- if (msgHdr.getStringProperty("SMIMEReceiptType") == "") {
- msgHdr.setStringProperty("SMIMEReceiptType", "receipt");
- msgHdr.setStringProperty("SMIMEReceiptSignedContentIdentifier", aSignedContentIdentifier);
- msgHdr.setStringProperty("SMIMEReceiptOriginatorSignatureValue", aOriginatorSignatureValue);
- msgHdr.setStringProperty("SMIMEReceiptOriginatorContentType", aOriginatorContentType);
- msgHdr.setStringProperty("SMIMEReceiptMsgSigDigest", aMsgSigDigest);
- }
-
- var requestMsgHdr = null;
-
- // Find and compare the request properties with this receipt
- try {
- let allFolders = Components.classes["@mozilla.org/supports-array;1"]
- .createInstance(Components.interfaces.nsISupportsArray);
- msgHdr.folder.rootFolder.ListDescendents(allFolders);
-
- // Search the request in all folders
- for each (let folder in fixIterator(allFolders, Components.interfaces.nsIMsgFolder)) {
-
- if (folder.isSpecialFolder(Components.interfaces.nsMsgFolderFlags.Trash, true) ||
- folder.isSpecialFolder(Components.interfaces.nsMsgFolderFlags.Queue, true) ||
- folder.isSpecialFolder(Components.interfaces.nsMsgFolderFlags.Junk, true) ||
- folder.isSpecialFolder(Components.interfaces.nsMsgFolderFlags.Templates, true) ||
- folder.isSpecialFolder(Components.interfaces.nsMsgFolderFlags.Drafts, true))
- continue;
-
- var enumerator = folder.getDBFolderInfoAndDB({}).EnumerateMessages();
- while (enumerator.hasMoreElements()) {
- let itemMsgHdr = enumerator.getNext().QueryInterface(Components.interfaces.nsIMsgDBHdr);
-
- if (itemMsgHdr.getStringProperty("SMIMEReceiptType") == "request") {
- if (itemMsgHdr.getStringProperty("SMIMEReceiptSignedContentIdentifier") == aSignedContentIdentifier &&
- itemMsgHdr.getStringProperty("SMIMEReceiptOriginatorSignatureValue") == aOriginatorSignatureValue &&
- itemMsgHdr.getStringProperty("SMIMEReceiptOriginatorContentType") == aOriginatorContentType &&
- itemMsgHdr.getStringProperty("SMIMEReceiptMsgSigDigest") == aMsgSigDigest) {
- requestMsgHdr = itemMsgHdr;
- break;
- }
- }
- }
-
- if (requestMsgHdr)
- break;
-
- }
- } catch (e) {}
-
- gMessageNotificationBar.setSMIMEReceiptMsg(requestMsgHdr);
- },
- securityLabelStatus: function(aSecurityPolicyIdentifier, aSecurityClassification, aPrivacyMark, aSecurityCategories)
- {
- gSecurityPolicyIdentifier = aSecurityPolicyIdentifier;
- gSecurityClassification = aSecurityClassification;
- gPrivacyMark = aPrivacyMark;
- gSecurityCategories = aSecurityCategories;
-
- /* Add Security Label info in message database so as to be displayed in a column */
- var msgHdr = gMessageDisplay.displayedMessage;
- if (msgHdr && gSecurityPolicyIdentifier != "") {
- /* Write Security Label in message database */
- msgHdr.setStringProperty("securityLabelSecurityPolicyIdentifier", gSecurityPolicyIdentifier);
- msgHdr.setStringProperty("securityLabelSecurityClassification", gSecurityClassification);
- msgHdr.setStringProperty("securityLabelPrivacyMark", gPrivacyMark);
- msgHdr.setStringProperty("securityLabelSecurityCategories", gSecurityCategories);
- }
- },
-
- QueryInterface : function(iid)
- {
- if (iid.equals(Components.interfaces.nsIMsgSMIMEHeaderSink) || iid.equals(Components.interfaces.nsISupports))
- return this;
- throw Components.results.NS_NOINTERFACE;
- }
-};
-
-function getMessageHeaders(aMsgDBHdr) {
- if (!aMsgDBHdr) return null;
-
- try {
-
- var streamListener = Components.classes["@mozilla.org/network/sync-stream-listener;1"].createInstance(Components.interfaces.nsISyncStreamListener);
- var msgURI = aMsgDBHdr.folder.getUriForMsg(aMsgDBHdr);
- var inputStream = Components.classes["@mozilla.org/scriptableinputstream;1"].createInstance().QueryInterface(Components.interfaces.nsIScriptableInputStream);
- inputStream.init(streamListener);
- messenger.messageServiceFromURI(msgURI).streamMessage(msgURI, streamListener, null, null, false, null);
-
- var content = "";
-
- while (inputStream.available()) {
- content += inputStream.read(512);
- var p = content.indexOf("\r\n\r\n");
- var p1 = content.indexOf("\r\r");
- var p2 = content.indexOf("\n\n");
- if (p > 0) {
- content = content.substring(0, p);
- break;
- }
- if (p1 > 0) {
- content = content.substring(0, p1);
- break;
- }
- if (p2 > 0) {
- content = content.substring(0, p2);
- break;
- }
- }
- content += "\r\n";
-
- var headers = content.split(/\r\n\r\n|\r\r|\n\n/, 1)[0];
- var mimeHeaders = Components.classes["@mozilla.org/messenger/mimeheaders;1"]
- .createInstance(Components.interfaces.nsIMimeHeaders);
- mimeHeaders.initialize(headers, headers.length);
-
- return mimeHeaders;
-
- } catch (e) {
- dump("getMessageHeaders exception: " + e + "\n");
- }
-
- return null;
-}
-
-function forgetEncryptedURI()
-{
- if (gMyLastEncryptedURI && gEncryptedURIService)
- {
- gEncryptedURIService.forgetEncrypted(gMyLastEncryptedURI);
- gMyLastEncryptedURI = null;
- }
-}
-
-function onSMIMEStartHeaders()
-{
- gEncryptionStatus = -1;
- gSignatureStatus = -1;
-
- gSecurityPolicyIdentifier = null;
- gSecurityClassification = -1;
- gPrivacyMark = null;
- gSecurityCategories = null;
-
- gSignerCert = null;
- gEncryptionCert = null;
-
- gSMIMEContainer.collapsed = true;
-
- gSignedUINode.collapsed = true;
- gSignedUINode.removeAttribute("signed");
- gStatusBar.removeAttribute("signed");
-
- gEncryptedUINode.collapsed = true;
- gEncryptedUINode.removeAttribute("encrypted");
- gStatusBar.removeAttribute("encrypted");
-
- forgetEncryptedURI();
-}
-
-function onSMIMEEndHeaders()
-{
- // display secure info message panel
- var setSmimeInfoMsg = true;
- var prefBranch = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService).getBranch(null);
- try{
- if(gCurrentIdentity){
- setSmimeInfoMsg = gCurrentIdentity.getBoolAttribute("secureheaders.smimeinfomsg");
- //gConsole.logStringMessage("[msgHdrViewSMIMEOnLoad] secureheaders.smimeinfomsg pref = "+setSmimeInfoMsg);
- prefBranch.setBoolPref("smimeinfomsg_on", setSmimeInfoMsg);
- }
- }catch(e){
- //gConsole.logStringMessage("[msgHdrViewSMIMEOnLoad] smimeinfomsg error : " + e);
- var prefBranch = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService).getBranch(null);
- if(prefBranch.prefHasUserValue("smimeinfomsg_on")){
- setSmimeInfoMsg = prefBranch.getBoolPref("smimeinfomsg_on");
- //gConsole.logStringMessage("[msgHdrViewSMIMEOnLoad] smimeinfomsg used : " + setSmimeInfoMsg);
- }
- }
- if(document.getElementById("singlemessage")== undefined){
- if(setSmimeInfoMsg){
- document.getElementById("secureinfomsg2").setAttribute("collapsed","false");
- }else{
- document.getElementById("secureinfomsg2").setAttribute("collapsed","true");
- }
- }else{
- if(setSmimeInfoMsg){
- document.getElementById("secureinfomsg").setAttribute("collapsed","false");
- }else{
- document.getElementById("secureinfomsg").setAttribute("collapsed","true");
- }
- }
-
- // check if message is signed
- if(checkSignedDataMsg()){
- //gSMIMEInfoMsg.setAttribute("value", gSMIMEBundle.getString(""));
- //gSMIMEInfoMsgMore.value=gSMIMEBundle.getString("secureinfomsgmore_nok").replace(/<BR>/g,"\n");
- gSMIMEInfoMsg.setAttribute("value", gSMIMEBundle.getString("secureinfomsg_default"));
- gSMIMEInfoMsgMore.value=gSMIMEBundle.getString("secureinfomsgmore_default").replace(/<BR>/g,"\n");
- }else{
- gSMIMEInfoMsg.setAttribute("value", gSMIMEBundle.getString("secureinfomsg_unsecured"));
- gSMIMEInfoMsgMore.value=gSMIMEBundle.getString("secureinfomsgmore_default").replace(/<BR>/g,"\n");
- }
-}
-
-//
-function onSmartCardChange()
-{
- // only reload encrypted windows
- if (gMyLastEncryptedURI && gEncryptionStatus != -1) {
- ReloadMessage();
- }
-}
-
-//
-function msgHdrViewSMIMEOnLoad(event)
-{
- window.crypto.enableSmartCardEvents = true;
- document.addEventListener("smartcard-insert", onSmartCardChange, false);
- document.addEventListener("smartcard-remove", onSmartCardChange, false);
- if (!gSMIMEBundle)
- gSMIMEBundle = document.getElementById("bundle_read_smime");
-
- // we want to register our security header sink as an opaque nsISupports
- // on the msgHdrSink used by mail.....
- msgWindow.msgHeaderSink.securityInfo = smimeHeaderSink;
-
- gSignedUINode = document.getElementById('signedHdrIcon');
- gEncryptedUINode = document.getElementById('encryptedHdrIcon');
- gSMIMEContainer = document.getElementById('smimeBox');
- gStatusBar = document.getElementById('status-bar');
-
- // add ourself to the list of message display listeners so we get notified when we are about to display a
- // message.
- var listener = {};
- listener.onStartHeaders = onSMIMEStartHeaders;
- listener.onEndHeaders = onSMIMEEndHeaders;
- gMessageListeners.push(listener);
-
- gEncryptedURIService =
- Components.classes["@mozilla.org/messenger-smime/smime-encrypted-uris-service;1"]
- .getService(Components.interfaces.nsIEncryptedSMIMEURIsService);
-
- // display security information message
- gSMIMEInfoMsg = document.getElementById("secureinfomsgl");
- gSMIMEInfoMsgMore = document.getElementById("secureinfomsgd");
- if(gSMIMEInfoMsg == undefined){
- gSMIMEInfoMsg = document.getElementById("secureinfomsgl2");
- gSMIMEInfoMsgMore = document.getElementById("secureinfomsgd2");
- }
-
- try{
- if(gCurrentIdentity){
- //gConsole.logStringMessage("[msgHdrViewSMIMEOnLoad] secureheaders.smimeinfomsg pref = "+setSmimeInfoMsg);
- var prefBranch = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService).getBranch(null);
- prefBranch.setBoolPref("smimeinfomsg_on", gCurrentIdentity.getBoolAttribute("secureheaders.smimeinfomsg"));
- }
- }catch(e){gConsole.logStringMessage("[msgHdrViewSMIMEOnLoad] smimeinfomsg error : " + e);}
-
- // new folder selected : collapse gSMIMEInfoMsg container
- try{
- var el = document.getElementById("folderTree");
- el.addEventListener("select", function(){
- if(document.getElementById("singlemessage") != undefined)
- document.getElementById("secureinfomsg").setAttribute("collapsed","true");},
- false);
- }catch(e){}
-
-}
-
-function msgHdrViewSMIMEOnUnload(event)
-{
- window.crypto.enableSmartCardEvents = false;
- document.removeEventListener("smartcard-insert", onSmartCardChange, false);
- document.removeEventListener("smartcard-remove", onSmartCardChange, false);
- forgetEncryptedURI();
- removeEventListener('messagepane-loaded', msgHdrViewSMIMEOnLoad, true);
- removeEventListener('messagepane-unloaded', msgHdrViewSMIMEOnUnload, true);
- removeEventListener('messagepane-hide', msgHdrViewSMIMEOnMessagePaneHide, true);
- removeEventListener('messagepane-unhide', msgHdrViewSMIMEOnMessagePaneUnhide, true);
-}
-
-function msgHdrViewSMIMEOnMessagePaneHide()
-{
- gSMIMEContainer.collapsed = true;
- gSignedUINode.collapsed = true;
- gEncryptedUINode.collapsed = true;
-}
-
-function msgHdrViewSMIMEOnMessagePaneUnhide()
-{
- if (gEncryptionStatus != -1 || gSignatureStatus != -1)
- {
- gSMIMEContainer.collapsed = false;
-
- if (gSignatureStatus != -1)
- {
- gSignedUINode.collapsed = false;
- }
-
- if (gEncryptionStatus != -1)
- {
- gEncryptedUINode.collapsed = false;
- }
- }
-}
-
-function getMimeValueCharset(val)
-{
- var res="";
- if(val.indexOf("=?")!=-1)
- {
- val=val.substring(val.indexOf("=?")+2);
- if(val.indexOf("?")!=-1)
- {
- res=val.substring(0,val.indexOf("?"));
- }
- }
- return res;
-}
-
-
-/*
- *
- */
-function ReplaceStr(expr,a,b){
- var i=0
- while (i!=-1) {
- i=expr.indexOf(a,0);
- if (i>=0) {
- expr=expr.substring(0,i)+b+expr.substring(i+a.length);
- i+=b.length;
- }
- }
- return expr;
-}
-
-/*
- * Unfolding string from mime value
- * RFC 822 : unfolding is accomplished by removing any CRLF that is immediately followed by WSP
- */
-function UnfoldingMimeValue(str){
- // CRLF DOS : "\r\n"
- // CRLF UNIX : "\n"
- var rv = ReplaceStr(str,"\r\n\t","\t");
- rv = ReplaceStr(rv,"\n\t","\t");
- rv = ReplaceStr(rv,"\r\n "," ");
- return ReplaceStr(rv,"\n "," ");
-}
-
-
-/*
- * RFC 4871 - relaxed header canonicalization algorithm
- * Delete WSP at the begining and and of field
- */
-function deleteFirstAndLastWhiteSpace(str){
- var rv=str;
- var imax=rv.length;
- for(var i=0; i<imax; ++i){
- var nochange1=true;
- var nochange2=true;
-
- //delete all WSP at the end of each unfolded header field value
- if(rv[rv.length-1]==' ' || rv[rv.length-1]=='\t'){
- rv = rv.slice(0,rv.length-1);
- nochange1=false;
- }
-
- //delete any WSP remaining before and after the colon separating field name form value
- if(rv[0]==' ' || rv[0]=='\t'){
- rv = rv.slice(1,rv.length);
- nochange2=false;
- }
-
- if(nochange1==true && nochange2==true) break;
- }
- return rv;
-}
-
-/*
- * Delete CRLF at end of sequence str
- * CRLF DOS : "\r\n"
- * CRLF UNIX : "\n"
- * CRLF OS : "\r"
- */
-function deleteLastCRLF(str){
- var rv=str;
- var imax=rv.length;
- if(rv[imax-1] == "\n")
- rv = rv.slice(0,imax-1);
- imax=rv.length;
- if(rv[imax-1] == "\r")
- rv = rv.slice(0,imax-1);
- return rv;
-}
-
-/*
- * RFC 4871 - relaxed header canonicalization algorithm
- */
-function canonilizeHeaderValue(hdrval){
- // Unfold all header field continuation lines as described in [RFC2822]
- var val = UnfoldingMimeValue(hdrval);
-
- // Convert all sequences of one or more WSP characters to a single SP character
- val = ReplaceStr(val,"\t"," ");
- val = ReplaceStr(val," "," ");
-
- // Delete all WSP characters at the end of each unfolded value
- // Delete any WSP characters remaining before and after the colon separating header field
- val=deleteFirstAndLastWhiteSpace(val);
- return val;
-}
-
-/*
- *
- */
-function checkSignedDataMsg(){
- //
- var list="";
- var headerName;
- var regHdrName_contentype = new RegExp("content-type", "ig");
- var regHdrValue_signed = new RegExp("multipart/signed", "ig");
- for (headerName in currentHeaderData) {
- //list += currentHeaderData[headerName].headerName +":"+currentHeaderData[headerName].headerValue + " $$ ";
- if(regHdrName_contentype.test(currentHeaderData[headerName].headerName)){
- if(regHdrValue_signed.test(currentHeaderData[headerName].headerValue)){
- gConsole.logStringMessage("[checkSignedDataSmimeSelectedMsg] Msg Is Signed");
- return true;
- }
- }
- }
- gConsole.logStringMessage("[checkSignedDataSmimeSelectedMsg] Msg Is Unsigned");
- //dbg gConsole.logStringMessage("[checkSignedDataSmimeSelectedMsg] list : " + list);
- return false;
-}
-
- /**
-Get message source
-@param {nsIMsgDBHdr} header
-@param {function} callbackFunction Function to call when data are received: callbackFunction(header, receivedData, callbackParam)
-@param callbackParam Parameter of callbackFunction
-@return {string} Message source or <b>false</b> if an error occurs
-*/
-function getMessageSource(mailUri, callbackFunction, callbackParam){
- if (!mailUri) return;
- var streamListener = {
- QueryInterface: function(aIID) {
- if (aIID.equals(Components.interfaces.nsISupports)
- || aIID.equals(Components.interfaces.nsIStreamListener))
- return this;
- throw Components.results.NS_NOINTERFACE;
- },
- data: "",
- isDataComplete: false,
- onStartRequest: function(request, context) {},
- onDataAvailable: function(request, context, inputStream, offset, available) {
- if(!this.isDataComplete ){
- var stream = Components.classes["@mozilla.org/scriptableinputstream;1"].createInstance(Components.interfaces.nsIScriptableInputStream);
- stream.init(inputStream);
- this.data += stream.read(available);
- stream.close();
- stream = null;
-
- // parse headers only
- var idxEnd = this.data.indexOf("\r\n\r\n",0); // * CRLF DOS : "\r\n"
- if(idxEnd == -1) idxEnd = this.data.indexOf("\n\n",0); // * CRLF UNIX : "\n"
- if(idxEnd == -1) idxEnd = this.data.indexOf("\r\r",0); //CRLF OS : "\r"
- if(idxEnd != -1) this.isDataComplete = true; // msgSrc = msgSrc.substr(0,idxEnd); //dbg gConsole.logStringMessage("[smime - MessageAnalyser - succes getting mime headers : ] \n" + msgSrc);
- }
- },
- onStopRequest: function(request, context, status) {
- if (Components.isSuccessCode(status)) {
- callbackFunction(this.data, callbackParam);
- } else {
- srv.errorSrv("notifyListener.getMsgSrc - "+mailUri+" - Error: "+status);
- }
- }
- }
-
- var cmessenger = Components.classes["@mozilla.org/messenger;1"].createInstance(Components.interfaces.nsIMessenger);
- var msgSvc = cmessenger.messageServiceFromURI(mailUri);
- try { msgSvc.streamMessage(mailUri, streamListener, null, null, false, null); } catch (ex) { return false; }
-}
-addEventListener('messagepane-loaded', msgHdrViewSMIMEOnLoad, true);
-addEventListener('messagepane-unloaded', msgHdrViewSMIMEOnUnload, true);
-addEventListener('messagepane-hide', msgHdrViewSMIMEOnMessagePaneHide, true);
-addEventListener('messagepane-unhide', msgHdrViewSMIMEOnMessagePaneUnhide, true);
+# -*- Mode: Java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-\r
+# ***** BEGIN LICENSE BLOCK *****\r
+# Version: MPL 1.1/GPL 2.0/LGPL 2.1\r
+#\r
+# The contents of this file are subject to the Mozilla Public License Version\r
+# 1.1 (the "License"); you may not use this file except in compliance with\r
+# the License. You may obtain a copy of the License at\r
+# http://www.mozilla.org/MPL/\r
+#\r
+# Software distributed under the License is distributed on an "AS IS" basis,\r
+# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License\r
+# for the specific language governing rights and limitations under the\r
+# License.\r
+#\r
+# The Original Code is mozilla.org Code.\r
+#\r
+# The Initial Developer of the Original Code is\r
+# Netscape Communications Corporation.\r
+# Portions created by the Initial Developer are Copyright (C) 1998-2001\r
+# the Initial Developer. All Rights Reserved.\r
+#\r
+# Contributor(s):\r
+# Scott MacGregor <mscott@netscape.com>\r
+# ESS Signed Receipts: Raphael Fairise / BT Global Services / Etat francais - Ministere de la Defense\r
+# Copyright (c) 2010 CASSIDIAN - All rights reserved\r
+#\r
+# Alternatively, the contents of this file may be used under the terms of\r
+# either the GNU General Public License Version 2 or later (the "GPL"), or\r
+# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),\r
+# in which case the provisions of the GPL or the LGPL are applicable instead\r
+# of those above. If you wish to allow use of your version of this file only\r
+# under the terms of either the GPL or the LGPL, and not to allow others to\r
+# use your version of this file under the terms of the MPL, indicate your\r
+# decision by deleting the provisions above and replace them with the notice\r
+# and other provisions required by the GPL or the LGPL. If you do not delete\r
+# the provisions above, a recipient may use your version of this file under\r
+# the terms of any one of the MPL, the GPL or the LGPL.\r
+#\r
+# ***** END LICENSE BLOCK *****\r
+\r
+const MSG_FLAG_SIGNED_RECEIPT_SENT = 0x2000000;\r
+const nsIMsgSMIMESecureHeader = Components.interfaces.nsIMsgSMIMESecureHeader;\r
+const nsIMimeConverter = Components.interfaces.nsIMimeConverter;\r
+const nsIMIMEHeaderParam = Components.interfaces.nsIMIMEHeaderParam;\r
+const nsIArray = Components.interfaces.nsIArray;\r
+\r
+var gConsole = Components.classes["@mozilla.org/consoleservice;1"].getService(Components.interfaces.nsIConsoleService);\r
+var gSignedUINode = null;\r
+var gEncryptedUINode = null;\r
+var gSMIMEContainer = null;\r
+var gStatusBar = null;\r
+var gSMIMEInfoMsg = null;\r
+var gSMIMEInfoMsgMore = null;\r
+\r
+var gEncryptedURIService = null;\r
+var gMyLastEncryptedURI = null;\r
+\r
+var gSMIMEBundle = null;\r
+//var gBrandBundle; -- defined in mailWindow.js\r
+\r
+// manipulates some globals from msgReadSMIMEOverlay.js\r
+const nsICMSMessageErrors = Components.interfaces.nsICMSMessageErrors;\r
+\r
+var smimeHeaderSink = \r
+{ \r
+ maxWantedNesting: function()\r
+ {\r
+ return 1;\r
+ },\r
+\r
+ signedStatus: function(aNestingLevel, aSignatureStatus, aSignerCert)\r
+ { \r
+ if (aNestingLevel > 1) {\r
+ // we are not interested\r
+ return;\r
+ }\r
+\r
+ gSignatureStatus = aSignatureStatus;\r
+ gSignerCert = aSignerCert;\r
+\r
+ gSMIMEContainer.collapsed = false;\r
+ gSignedUINode.collapsed = false;\r
+ //gConsole.logStringMessage("[smimeHeaderSink:smimeHeaderSink] nsICMSMessageErrors : " + aSignatureStatus);\r
+ switch (aSignatureStatus) {\r
+ case nsICMSMessageErrors.SUCCESS:\r
+ gSignedUINode.setAttribute("signed", "ok");\r
+ gStatusBar.setAttribute("signed", "ok");\r
+ gSMIMEInfoMsg.setAttribute("value", gSMIMEBundle.getString("secureinfomsg_ok")); \r
+ gSMIMEInfoMsgMore.value=gSMIMEBundle.getString("secureinfomsgmore_ok").replace(/<BR>/g,"\n");\r
+ setSMIMEInfoMsg("ok");\r
+ document.getElementById("")\r
+ break;\r
+\r
+ case nsICMSMessageErrors.VERIFY_NOT_YET_ATTEMPTED:\r
+ gSignedUINode.setAttribute("signed", "unknown");\r
+ gStatusBar.setAttribute("signed", "unknown");\r
+ break;\r
+\r
+ case nsICMSMessageErrors.VERIFY_CERT_WITHOUT_ADDRESS:\r
+ case nsICMSMessageErrors.VERIFY_HEADER_MISMATCH:\r
+ gSignedUINode.setAttribute("signed", "mismatch");\r
+ gStatusBar.setAttribute("signed", "mismatch");\r
+ break;\r
+\r
+ default:\r
+ gSignedUINode.setAttribute("signed", "notok");\r
+ gStatusBar.setAttribute("signed", "notok");\r
+ gSMIMEInfoMsg.setAttribute("value", gSMIMEBundle.getString("secureinfomsg_notok"));\r
+ gSMIMEInfoMsgMore.value=gSMIMEBundle.getString("secureinfomsgmore_notok").replace(/<BR>/g,"\n");\r
+ setSMIMEInfoMsg("notok");\r
+ break;\r
+ }\r
+ },\r
+\r
+ encryptionStatus: function(aNestingLevel, aEncryptionStatus, aRecipientCert)\r
+ {\r
+ if (aNestingLevel > 1) {\r
+ // we are not interested\r
+ return;\r
+ }\r
+\r
+ gEncryptionStatus = aEncryptionStatus;\r
+ gEncryptionCert = aRecipientCert;\r
+\r
+ gSMIMEContainer.collapsed = false; \r
+ gEncryptedUINode.collapsed = false;\r
+\r
+ if (nsICMSMessageErrors.SUCCESS == aEncryptionStatus)\r
+ {\r
+ gEncryptedUINode.setAttribute("encrypted", "ok");\r
+ gStatusBar.setAttribute("encrypted", "ok");\r
+ }\r
+ else\r
+ {\r
+ gEncryptedUINode.setAttribute("encrypted", "notok");\r
+ gStatusBar.setAttribute("encrypted", "notok");\r
+ }\r
+\r
+ if (gEncryptedURIService)\r
+ {\r
+ gMyLastEncryptedURI = gFolderDisplay.selectedMessageUris[0];\r
+ gEncryptedURIService.rememberEncrypted(gMyLastEncryptedURI);\r
+ }\r
+\r
+ switch (aEncryptionStatus)\r
+ {\r
+ case nsICMSMessageErrors.SUCCESS:\r
+ case nsICMSMessageErrors.ENCRYPT_INCOMPLETE:\r
+ break;\r
+ default:\r
+ var brand = gBrandBundle.getString("brandShortName");\r
+ var title = gSMIMEBundle.getString("CantDecryptTitle").replace(/%brand%/g,brand);\r
+ var body = gSMIMEBundle.getString("CantDecryptBody").replace(/%brand%/g,brand);\r
+\r
+ // insert our message\r
+ msgWindow.displayHTMLInMessagePane(title,\r
+ "<html>\n"+\r
+ "<body bgcolor=\"#fafaee\">\n"+\r
+ "<center><br><br><br>\n"+\r
+ "<table>\n"+\r
+ "<tr><td>\n"+\r
+ "<center><strong><font size=\"+3\">\n"+\r
+ title+"</font></center><br>\n"+\r
+ body+"\n"+\r
+ "</td></tr></table></center></body></html>", false);\r
+ break;\r
+ }\r
+ },\r
+\r
+ // Check the SMIME receipt request and send a receipt\r
+ SMIMEReceiptRequestStatus: function(aSignedContentIdentifier,\r
+ aSignedContentIdentifierLen,\r
+ aReceiptsFrom,\r
+ aReceiptsTo,\r
+ aOriginatorSignatureValue,\r
+ aOriginatorSignatureValueLen,\r
+ aOriginatorContentType,\r
+ aOriginatorContentTypeLen,\r
+ aMsgSigDigest,\r
+ aMsgSigDigestLen)\r
+ {\r
+ var msgHdr = gMessageDisplay.displayedMessage;\r
+ var msgFolder = gFolderDisplay.displayedFolder;\r
+\r
+ if (!msgFolder || !(msgFolder.isSpecialFolder(Components.interfaces.nsMsgFolderFlags.Mail, true)))\r
+ return;\r
+\r
+ if (msgFolder.isSpecialFolder(Components.interfaces.nsMsgFolderFlags.Trash, true) ||\r
+ msgFolder.isSpecialFolder(Components.interfaces.nsMsgFolderFlags.Queue, true) ||\r
+ msgFolder.isSpecialFolder(Components.interfaces.nsMsgFolderFlags.Junk, true) ||\r
+ msgFolder.isSpecialFolder(Components.interfaces.nsMsgFolderFlags.Templates, true) ||\r
+ msgFolder.isSpecialFolder(Components.interfaces.nsMsgFolderFlags.Drafts, true))\r
+ return;\r
+\r
+ // Check if message has been deleted\r
+ if (msgHdr.flags & Components.interfaces.nsMsgMessageFlags.IMAPDeleted)\r
+ return;\r
+\r
+ // Check if message is marked as junk\r
+ var junkScore = msgHdr.getStringProperty("junkscore");\r
+ if (junkScore != "" && junkScore != "0")\r
+ return;\r
+\r
+ // Write S/MIME receipt request properties in message db\r
+ if (msgHdr.getStringProperty("SMIMEReceiptType") == "") {\r
+ msgHdr.setStringProperty("SMIMEReceiptType", "request");\r
+ msgHdr.setStringProperty("SMIMEReceiptSignedContentIdentifier", aSignedContentIdentifier);\r
+ msgHdr.setStringProperty("SMIMEReceiptOriginatorSignatureValue", aOriginatorSignatureValue);\r
+ msgHdr.setStringProperty("SMIMEReceiptOriginatorContentType", aOriginatorContentType);\r
+ msgHdr.setStringProperty("SMIMEReceiptMsgSigDigest", aMsgSigDigest);\r
+ }\r
+\r
+ // Check in local message database if this request has already been processed\r
+ if (msgHdr.getStringProperty("SMIMEReceiptRequestProcessed") != "")\r
+ return;\r
+\r
+ // Check in IMAP if this request has already been processed\r
+ var keywords = msgHdr.getStringProperty("keywords");\r
+ if (keywords != "" && keywords.indexOf("smimereceiptrequestprocessed") != -1)\r
+ {\r
+ // If IMAP flag is set, write it in local message db\r
+ msgHdr.setStringProperty("SMIMEReceiptRequestProcessed", "true");\r
+ return;\r
+ }\r
+\r
+ mimeHeaders = getMessageHeaders(msgHdr);\r
+ if (!mimeHeaders)\r
+ return;\r
+\r
+ // Create and send a receipt\r
+ var SMIMEReceiptGenerator = Components.classes["@mozilla.org/messenger-smime/smimereceiptgenerator;1"]\r
+ .createInstance(Components.interfaces.nsIMsgSMIMEReceiptGenerator);\r
+ var askUser = SMIMEReceiptGenerator.process(msgWindow,\r
+ msgFolder,\r
+ msgHdr.messageKey,\r
+ mimeHeaders,\r
+ aSignedContentIdentifier,\r
+ aSignedContentIdentifierLen,\r
+ aReceiptsFrom,\r
+ aReceiptsTo,\r
+ aOriginatorSignatureValue,\r
+ aOriginatorSignatureValueLen,\r
+ aOriginatorContentType,\r
+ aOriginatorContentTypeLen,\r
+ aMsgSigDigest,\r
+ aMsgSigDigestLen);\r
+\r
+ if (askUser)\r
+ gMessageNotificationBar.setSMIMEReceiptRequestMsg(SMIMEReceiptGenerator, aReceiptsTo);\r
+ },\r
+ updateSecureHeadersState: function(msgSrc){\r
+ var mimeEncoder = Components.classes["@mozilla.org/messenger/mimeconverter;1"].getService(Components.interfaces.nsIMimeConverter);\r
+ // parse mime msg : extract headers\r
+ //get MIME headers only\r
+ var currentMimeHeaderDataArray = {}; \r
+ var idxEnd = msgSrc.indexOf("\r\n\r\n",0); // * CRLF DOS : "\r\n"\r
+ if(idxEnd == -1) idxEnd = msgSrc.indexOf("\n\n",0); // * CRLF UNIX : "\n"\r
+ if(idxEnd == -1) idxEnd = msgSrc.indexOf("\r\r",0); //CRLF OS : "\r"\r
+ if(idxEnd != -1) msgSrc = msgSrc.substr(0,idxEnd); //dbg gConsole.logStringMessage("[smime - MessageAnalyser - succes getting mime headers : ] \n" + msgSrc);\r
+ \r
+ // extract IMF headers - append data to array\r
+ var isnewLine = false;\r
+ var header_line = "";\r
+ var strTraceline="";\r
+ for(var i=0 ; i<msgSrc.length ; ++i){\r
+ header_line += msgSrc[i];\r
+ // is CRLF separator\r
+ if(msgSrc[i] === '\r' || msgSrc[i] === '\n'){\r
+ if(i+1 < msgSrc.length){\r
+ if(msgSrc[i+1] !== '\r' && msgSrc[i+1] !== '\n'){ \r
+ isnewLine = true;\r
+ }\r
+ // is folding CRLF\r
+ if(msgSrc[i+1] === '\t' || msgSrc[i+1] === ' '){ \r
+ isnewLine = false;\r
+ }\r
+ }\r
+ }\r
+ \r
+ // last line\r
+ if( i === (msgSrc.length-1) ){ \r
+ isnewLine = true;\r
+ }\r
+ \r
+ // save new line if IMF header\r
+ if(isnewLine){\r
+ //gConsole.logStringMessage("[ximfmail - createXimfHdrArray - decode header line : ] \n" + header_line);\r
+ if(header_line.indexOf(":")!=-1){\r
+ let oEntry = new Object;\r
+ oEntry.headerName = header_line.substring(0,header_line.indexOf(": ",0)); \r
+ oEntry.headerValue = header_line.substring(header_line.indexOf(": ",header_line)+2);\r
+ if(oEntry.headerName !== ""){ \r
+ currentMimeHeaderDataArray[oEntry.headerName] = oEntry;\r
+ //gConsole.logStringMessage("[smime - MessageAnalyser - push : ] \n[" + oEntry.headerName + "]["+ oEntry.headerValue+"]");\r
+ strTraceline += "[" + oEntry.headerName + " : " + oEntry.headerValue + "]"; \r
+ } \r
+ }\r
+ header_line = "";\r
+ isnewLine = false;\r
+ }\r
+ }\r
+ \r
+ gConsole.logStringMessage("[smime - updateSecureHeadersState - MIME HEADERS : \n" + strTraceline);\r
+ \r
+ \r
+ // Compute secure headers and mime headers\r
+ //gConsole.logStringMessage("[smime - updatesecureheaders ] *** secureHeaders analysis begin *** " );\r
+ var secStatus = true; //flag for the global secure headers status, set at true as default means all secure headers were not modified\r
+ gSecureHeadersState=1; \r
+ for (headerName in gSecureHeadersArray) { \r
+ //Verify the value validity only in the case where header status is duplicated\r
+ var headerMimeExists = false;\r
+ var tmp_hdrName = gSecureHeadersArray[headerName].hdrName;\r
+ var canonalgo = gSecureHeadersArray[headerName].hdrCanonAlgo;\r
+ if(canonalgo){\r
+ // RFC 4871 - relaxed header canonicalization algorithm - convert header field names to lowercase\r
+ tmp_hdrName = tmp_hdrName.toLowerCase();\r
+ }\r
+ gConsole.logStringMessage("secureHeadersStatus - \n check for signed header "+tmp_hdrName);\r
+ for(headerMimeName in currentMimeHeaderDataArray){\r
+ var tmp_hdrMimeName = currentMimeHeaderDataArray[headerMimeName].headerName;\r
+ if(canonalgo){\r
+ // RFC 4871 - relaxed header canonicalization algorithm - convert header field names to lowercase\r
+ tmp_hdrMimeName = tmp_hdrMimeName.toLowerCase();\r
+ } \r
+ \r
+ //gConsole.logStringMessage("secureHeadersStatus - canonalgo : "+ canonalgo +" \nsigned header : "+tmp_hdrName+"\nmime header : "+tmp_hdrMimeName); \r
+ if(tmp_hdrName == tmp_hdrMimeName){\r
+ // compare secured value ans MIME value of header\r
+ headerMimeExists = true; // header is in mime \r
+ var hdrValue = gSecureHeadersArray[headerName].hdrSecureValue; \r
+ var hdrMimeValue = currentMimeHeaderDataArray[headerMimeName].headerValue; \r
+ var charset = getMimeValueCharset(hdrMimeValue); \r
+ \r
+ // body - delete SP/WPS characters before and after body\r
+ hdrMimeValue = deleteFirstAndLastWhiteSpace(hdrMimeValue);\r
+ hdrValue = deleteFirstAndLastWhiteSpace(hdrValue);\r
+ \r
+ if(canonalgo){\r
+ // relaxed canonicalization algorithm\r
+ hdrMimeValue = canonilizeHeaderValue(hdrMimeValue);\r
+ hdrValue = canonilizeHeaderValue(hdrValue);\r
+ gConsole.logStringMessage("secureHeadersStatus - relaxed canonicalization \n mime value:\n>" +hdrMimeValue+ "<\nsecured value:\n>"+hdrValue+"<");\r
+ }else{\r
+ // simple canonicalization algorithm\r
+ //hdrMimeValue = UnfoldingMimeValue(hdrMimeValue);\r
+ hdrMimeValue = deleteLastCRLF(hdrMimeValue);\r
+ //hdrValue = UnfoldingMimeValue(hdrValue);\r
+ hdrValue = deleteLastCRLF(hdrValue);\r
+ gConsole.logStringMessage("secureHeadersStatus - simple canonicalization \n mime value:\n>" +hdrMimeValue+ "<\nsecured value:\n>"+hdrValue+"<");\r
+ }\r
+ \r
+ if(hdrValue!==hdrMimeValue) //test if the header value in the signature and that one in the mime message is the same\r
+ {\r
+ gSecureHeadersArray[headerName].hdrSignedRes = "invalid"; //hdrValidity="invalid"; //header was modified\r
+ secStatus=false;\r
+ //dbg gConsole.logStringMessage("Warning - failed on verifing secured header "+tmp_hdrName+" :\n mime value:\n>" +hdrMimeValue+ "<\nsecured value:\n>"+hdrValue+"<");\r
+ gConsole.logStringMessage("[smimeHeaderSink:updateSecureHeadersState]Warning - failed on verifing secured header ");\r
+ }\r
+ \r
+ // decode values from MIME format\r
+ var tmpDecdodedValue=null;\r
+ tmpDecdodedValue = mimeEncoder.decodeMimeHeader(hdrMimeValue, charset, false, true);//encodeMimePartIIStr(hdrValue, false, "ISO-8859-1" , 0, 72);\r
+ if(tmpDecdodedValue){\r
+ gSecureHeadersArray[headerName].hdrMimeValue = tmpDecdodedValue;\r
+ }else{\r
+ gSecureHeadersArray[headerName].hdrMimeValue = hdrMimeValue;\r
+ }\r
+ tmpDecdodedValue = null;\r
+ tmpDecdodedValue = mimeEncoder.decodeMimeHeader(hdrValue,charset,false,true);\r
+ if(tmpDecdodedValue){\r
+ gSecureHeadersArray[headerName].hdrSecureValue = tmpDecdodedValue;\r
+ }else{\r
+ gSecureHeadersArray[headerName].hdrSecureValue = hdrValue;\r
+ }\r
+ gSecureHeaders = "signedData in";\r
+ //dbg gConsole.logStringMessage("secureHeadersStatus - header "+headerName+" \nmime value: >" +gSecureHeadersArray[headerName].hdrMimeValue+ "<\nsigned value:>"+gSecureHeadersArray[headerName].hdrSecureValue+"<"); \r
+ break; // header is correctly checked\r
+ } \r
+ }\r
+ \r
+ // mime header has been lost, deleted...\r
+ if(!headerMimeExists){ \r
+ gSecureHeadersArray[headerName].hdrSignedRes = "invalid"; //header was modified\r
+ secStatus=false; \r
+ } \r
+ \r
+ }\r
+ \r
+ // display result to user\r
+ if((!secStatus) && (gSignatureStatus == nsICMSMessageErrors.SUCCESS))\r
+ {\r
+ //At least one secure header was modified, set the signed status to mismastch\r
+ gConsole.logStringMessage("[smimeHeaderSink:updateSecureHeadersState] At least one secure header was modified ");\r
+ gSignedUINode.setAttribute("signed", "mismatch");\r
+ gStatusBar.setAttribute("signed", "mismatch");\r
+ gSecureHeadersState=0;\r
+ gSMIMEInfoMsg.setAttribute("value", gSMIMEBundle.getString("secureinfomsg_hdrnok"));\r
+ gSMIMEInfoMsgMore.value=gSMIMEBundle.getString("secureinfomsgmore_default").replace(/<BR>/g,"\n");\r
+ setSMIMEInfoMsg("notok");\r
+ }\r
+ \r
+ // check signed headers with local rules of secure headers\r
+ // Calls ReadXmlHeadersToSign (see msgCompSMIMESecureHeaders.js) to load the secureHeaders.xml configuration file\r
+ // For each header in the message:\r
+ // 1. check if the header is in the configuration file\r
+ // 2. In this case, check that it was secured in signature\r
+ // 3. If the header was not secured, raise a warning (status change ?)\r
+ try{\r
+ UpdateLocalSecureHeaderList();\r
+ for(localheader in gLocalSecureHeaderList){\r
+ try{\r
+ var oHeader = gSecureHeadersArray[localheader];\r
+ if(!oHeader){\r
+ // try with relaxed canon algo\r
+ oHeader = gSecureHeadersArray[localheader.toLowerCase()];\r
+ }\r
+ if(!oHeader){\r
+ // check if message contains this header\r
+ var oMimeHeader = currentMimeHeaderDataArray[localheader];\r
+ if(oMimeHeader){\r
+ gConsole.logStringMessage(" missing signed header compared to local rules security : " + gLocalSecureHeaderList[localheader].hdrName + " ("+localheader+")");\r
+ \r
+ // decode value from MIME format\r
+ let tmpDecdodedValue="";\r
+ let tmphdrValue=currentMimeHeaderDataArray[localheader].headerValue;\r
+ let charset = getMimeValueCharset(tmphdrValue); \r
+ tmpDecdodedValue = mimeEncoder.decodeMimeHeader(tmphdrValue, charset, false, true);//encodeMimePartIIStr(hdrValue, false, "ISO-8859-1" , 0, 72);\r
+ \r
+ var oEntry = new Object;\r
+ oEntry.hdrName = localheader.toLowerCase(); // signed header\r
+ oEntry.hdrSecureValue = gSMIMEBundle.getString("securevalue_warning"); \r
+ oEntry.hdrMimeValue = tmpDecdodedValue; // value in the MIME message\r
+ oEntry.hdrSignedStatus = "";\r
+ oEntry.hdrCanonAlgo = "";\r
+ oEntry.hdrEncryptStatus = "";\r
+ oEntry.hdrSignedRes = "unsigned";\r
+ gSecureHeadersArray[oEntry.hdrName] = oEntry;\r
+ \r
+ // set to user warning informations \r
+ if((secStatus) && (gSignatureStatus == nsICMSMessageErrors.SUCCESS)){\r
+ gSignedUINode.setAttribute("signed", "mismatch");\r
+ gStatusBar.setAttribute("signed", "mismatch");\r
+ gSMIMEInfoMsg.setAttribute("value", gSMIMEBundle.getString("secureinfomsg_hdrwarning"));\r
+ gSMIMEInfoMsgMore.value=gSMIMEBundle.getString("secureinfomsgmore_warning").replace(/<BR>/g,"\n");\r
+ setSMIMEInfoMsg("warning");\r
+ }\r
+ }\r
+ }\r
+ /*\r
+ // TODO ???\r
+ // No secure headers: mismatch\r
+ // No secure header was found: Trustedbird's security policy is to have secure headers\r
+ // => Set signed status to mismatch\r
+ //gConsole.logStringMessage("****** No secure header ******"); \r
+ */\r
+ }catch(e){\r
+ gConsole.logStringMessage(" CLR_575 HEADER ERROR : " + e + "\n " + e.fileName + "\nline : " + e.lineNumber); \r
+ }\r
+ }\r
+ }catch(e){\r
+ gConsole.logStringMessage(" CLR_575 ERROR : " + e + "\n "+ e.fileName + "\nline : " + e.lineNumber); \r
+ } \r
+\r
+ \r
+ },//end updateSecureHeadersState \r
+ secureHeadersStatus: function(aSecureHeaders, aCanonAlgo){ \r
+ gSecureHeaders = ""; \r
+ gSecureHeadersArray={}; // clear array \r
+ if(aSecureHeaders)\r
+ {\r
+ var secureHeadersArray=aSecureHeaders.QueryInterface(nsIArray);\r
+ if(secureHeadersArray.length <= 0 ){\r
+ gConsole.logStringMessage("[smimeHeaderSink:secureHeadersStatus] *** no secure headers in smime signeddata ");\r
+ return;\r
+ } \r
+ \r
+ for(var i=0;i<secureHeadersArray.length;++i)\r
+ {\r
+ var sHeader = secureHeadersArray.queryElementAt(i,nsIMsgSMIMESecureHeader);\r
+ if(sHeader){ \r
+ var oEntry = new Object;\r
+ oEntry.hdrName = sHeader.headerName; // signed header\r
+ oEntry.hdrSecureValue = sHeader.headerValue; // Value in the signature\r
+ oEntry.hdrMimeValue = ""; // value in the MIME message\r
+ oEntry.hdrSignedStatus = sHeader.headerStatus;\r
+ oEntry.hdrCanonAlgo = aCanonAlgo;\r
+ oEntry.hdrEncryptStatus = "";\r
+ oEntry.hdrSignedRes = "valid";\r
+ gSecureHeadersArray[oEntry.hdrName] = oEntry; \r
+ }\r
+ } \r
+ getMessageSource(gFolderDisplay.selectedMessageUris[0], this.updateSecureHeadersState); \r
+ } \r
+ },\r
+ // Check the SMIME receipt with the request\r
+ SMIMEReceiptStatus: function(aSignedContentIdentifier,\r
+ aSignedContentIdentifierLen,\r
+ aOriginatorSignatureValue,\r
+ aOriginatorSignatureValueLen,\r
+ aOriginatorContentType,\r
+ aOriginatorContentTypeLen,\r
+ aMsgSigDigest,\r
+ aMsgSigDigestLen)\r
+ {\r
+ var msgHdr = gMessageDisplay.displayedMessage;\r
+\r
+ // Write S/MIME receipt properties in message db\r
+ if (msgHdr.getStringProperty("SMIMEReceiptType") == "") {\r
+ msgHdr.setStringProperty("SMIMEReceiptType", "receipt");\r
+ msgHdr.setStringProperty("SMIMEReceiptSignedContentIdentifier", aSignedContentIdentifier);\r
+ msgHdr.setStringProperty("SMIMEReceiptOriginatorSignatureValue", aOriginatorSignatureValue);\r
+ msgHdr.setStringProperty("SMIMEReceiptOriginatorContentType", aOriginatorContentType);\r
+ msgHdr.setStringProperty("SMIMEReceiptMsgSigDigest", aMsgSigDigest);\r
+ }\r
+\r
+ var requestMsgHdr = null;\r
+\r
+ // Find and compare the request properties with this receipt\r
+ try {\r
+ let allFolders = Components.classes["@mozilla.org/supports-array;1"]\r
+ .createInstance(Components.interfaces.nsISupportsArray);\r
+ msgHdr.folder.rootFolder.ListDescendents(allFolders);\r
+\r
+ // Search the request in all folders\r
+ for each (let folder in fixIterator(allFolders, Components.interfaces.nsIMsgFolder)) {\r
+\r
+ if (folder.isSpecialFolder(Components.interfaces.nsMsgFolderFlags.Trash, true) ||\r
+ folder.isSpecialFolder(Components.interfaces.nsMsgFolderFlags.Queue, true) ||\r
+ folder.isSpecialFolder(Components.interfaces.nsMsgFolderFlags.Junk, true) ||\r
+ folder.isSpecialFolder(Components.interfaces.nsMsgFolderFlags.Templates, true) ||\r
+ folder.isSpecialFolder(Components.interfaces.nsMsgFolderFlags.Drafts, true))\r
+ continue;\r
+\r
+ var enumerator = folder.getDBFolderInfoAndDB({}).EnumerateMessages();\r
+ while (enumerator.hasMoreElements()) {\r
+ let itemMsgHdr = enumerator.getNext().QueryInterface(Components.interfaces.nsIMsgDBHdr);\r
+\r
+ if (itemMsgHdr.getStringProperty("SMIMEReceiptType") == "request") {\r
+ if (itemMsgHdr.getStringProperty("SMIMEReceiptSignedContentIdentifier") == aSignedContentIdentifier &&\r
+ itemMsgHdr.getStringProperty("SMIMEReceiptOriginatorSignatureValue") == aOriginatorSignatureValue &&\r
+ itemMsgHdr.getStringProperty("SMIMEReceiptOriginatorContentType") == aOriginatorContentType &&\r
+ itemMsgHdr.getStringProperty("SMIMEReceiptMsgSigDigest") == aMsgSigDigest) {\r
+ requestMsgHdr = itemMsgHdr;\r
+ break;\r
+ }\r
+ }\r
+ }\r
+\r
+ if (requestMsgHdr)\r
+ break;\r
+\r
+ }\r
+ } catch (e) {}\r
+\r
+ gMessageNotificationBar.setSMIMEReceiptMsg(requestMsgHdr);\r
+ },\r
+ securityLabelStatus: function(aSecurityPolicyIdentifier, aSecurityClassification, aPrivacyMark, aSecurityCategories)\r
+ {\r
+ gSecurityPolicyIdentifier = aSecurityPolicyIdentifier;\r
+ gSecurityClassification = aSecurityClassification;\r
+ gPrivacyMark = aPrivacyMark;\r
+ gSecurityCategories = aSecurityCategories;\r
+\r
+ /* Add Security Label info in message database so as to be displayed in a column */\r
+ var msgHdr = gMessageDisplay.displayedMessage;\r
+ if (msgHdr && gSecurityPolicyIdentifier != "") {\r
+ /* Write Security Label in message database */\r
+ msgHdr.setStringProperty("securityLabelSecurityPolicyIdentifier", gSecurityPolicyIdentifier);\r
+ msgHdr.setStringProperty("securityLabelSecurityClassification", gSecurityClassification);\r
+ msgHdr.setStringProperty("securityLabelPrivacyMark", gPrivacyMark);\r
+ msgHdr.setStringProperty("securityLabelSecurityCategories", gSecurityCategories);\r
+ }\r
+ },\r
+\r
+ QueryInterface : function(iid)\r
+ {\r
+ if (iid.equals(Components.interfaces.nsIMsgSMIMEHeaderSink) || iid.equals(Components.interfaces.nsISupports))\r
+ return this;\r
+ throw Components.results.NS_NOINTERFACE;\r
+ }\r
+};\r
+\r
+function getMessageHeaders(aMsgDBHdr) {\r
+ if (!aMsgDBHdr) return null;\r
+\r
+ try {\r
+\r
+ var streamListener = Components.classes["@mozilla.org/network/sync-stream-listener;1"].createInstance(Components.interfaces.nsISyncStreamListener);\r
+ var msgURI = aMsgDBHdr.folder.getUriForMsg(aMsgDBHdr);\r
+ var inputStream = Components.classes["@mozilla.org/scriptableinputstream;1"].createInstance().QueryInterface(Components.interfaces.nsIScriptableInputStream);\r
+ inputStream.init(streamListener);\r
+ messenger.messageServiceFromURI(msgURI).streamMessage(msgURI, streamListener, null, null, false, null);\r
+\r
+ var content = "";\r
+\r
+ while (inputStream.available()) {\r
+ content += inputStream.read(512);\r
+ var p = content.indexOf("\r\n\r\n");\r
+ var p1 = content.indexOf("\r\r");\r
+ var p2 = content.indexOf("\n\n");\r
+ if (p > 0) {\r
+ content = content.substring(0, p);\r
+ break;\r
+ }\r
+ if (p1 > 0) {\r
+ content = content.substring(0, p1);\r
+ break;\r
+ }\r
+ if (p2 > 0) {\r
+ content = content.substring(0, p2);\r
+ break;\r
+ }\r
+ }\r
+ content += "\r\n";\r
+\r
+ var headers = content.split(/\r\n\r\n|\r\r|\n\n/, 1)[0];\r
+ var mimeHeaders = Components.classes["@mozilla.org/messenger/mimeheaders;1"]\r
+ .createInstance(Components.interfaces.nsIMimeHeaders);\r
+ mimeHeaders.initialize(headers, headers.length);\r
+\r
+ return mimeHeaders;\r
+\r
+ } catch (e) {\r
+ dump("getMessageHeaders exception: " + e + "\n");\r
+ }\r
+\r
+ return null;\r
+}\r
+\r
+function forgetEncryptedURI()\r
+{\r
+ if (gMyLastEncryptedURI && gEncryptedURIService)\r
+ {\r
+ gEncryptedURIService.forgetEncrypted(gMyLastEncryptedURI);\r
+ gMyLastEncryptedURI = null;\r
+ }\r
+}\r
+\r
+function onSMIMEStartHeaders()\r
+{\r
+ gEncryptionStatus = -1;\r
+ gSignatureStatus = -1;\r
+\r
+ gSecurityPolicyIdentifier = null;\r
+ gSecurityClassification = -1;\r
+ gPrivacyMark = null;\r
+ gSecurityCategories = null;\r
+\r
+ gSignerCert = null;\r
+ gEncryptionCert = null;\r
+ \r
+ gSMIMEContainer.collapsed = true;\r
+\r
+ gSignedUINode.collapsed = true;\r
+ gSignedUINode.removeAttribute("signed");\r
+ gStatusBar.removeAttribute("signed");\r
+\r
+ gEncryptedUINode.collapsed = true;\r
+ gEncryptedUINode.removeAttribute("encrypted");\r
+ gStatusBar.removeAttribute("encrypted");\r
+\r
+ forgetEncryptedURI();\r
+}\r
+\r
+\r
+function onSMIMEEndHeaders()\r
+{\r
+ // display secure info message panel\r
+ var setSmimeInfoMsg = true;\r
+ var prefBranch = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService).getBranch(null);\r
+ try{ \r
+ if(gCurrentIdentity){\r
+ setSmimeInfoMsg = gCurrentIdentity.getBoolAttribute("secureheaders.smimeinfomsg");\r
+ //gConsole.logStringMessage("[msgHdrViewSMIMEOnLoad] secureheaders.smimeinfomsg pref = "+setSmimeInfoMsg);\r
+ prefBranch.setBoolPref("smimeinfomsg_on", setSmimeInfoMsg); \r
+ } \r
+ }catch(e){\r
+ //gConsole.logStringMessage("[msgHdrViewSMIMEOnLoad] smimeinfomsg error : " + e);\r
+ var prefBranch = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService).getBranch(null);\r
+ if(prefBranch.prefHasUserValue("smimeinfomsg_on")){\r
+ setSmimeInfoMsg = prefBranch.getBoolPref("smimeinfomsg_on");\r
+ //gConsole.logStringMessage("[msgHdrViewSMIMEOnLoad] smimeinfomsg used : " + setSmimeInfoMsg);\r
+ }\r
+ }\r
+ if(document.getElementById("singlemessage")== undefined){\r
+ if(setSmimeInfoMsg){\r
+ document.getElementById("secureinfomsg2").setAttribute("collapsed","false");\r
+ }else{\r
+ document.getElementById("secureinfomsg2").setAttribute("collapsed","true");\r
+ }\r
+ }else{\r
+ if(setSmimeInfoMsg){\r
+ document.getElementById("secureinfomsg").setAttribute("collapsed","false");\r
+ }else{\r
+ document.getElementById("secureinfomsg").setAttribute("collapsed","true");\r
+ }\r
+ }\r
+ \r
+ // check if message is signed\r
+ if(checkSignedDataMsg()){\r
+ //gSMIMEInfoMsg.setAttribute("value", gSMIMEBundle.getString(""));\r
+ //gSMIMEInfoMsgMore.value=gSMIMEBundle.getString("secureinfomsgmore_nok").replace(/<BR>/g,"\n");\r
+ gSMIMEInfoMsg.setAttribute("value", gSMIMEBundle.getString("secureinfomsg_default")); \r
+ gSMIMEInfoMsgMore.value=gSMIMEBundle.getString("secureinfomsgmore_default").replace(/<BR>/g,"\n");\r
+ setSMIMEInfoMsg("notok");\r
+ }else{\r
+ gSMIMEInfoMsg.setAttribute("value", gSMIMEBundle.getString("secureinfomsg_unsecured")); \r
+ gSMIMEInfoMsgMore.value=gSMIMEBundle.getString("secureinfomsgmore_default").replace(/<BR>/g,"\n");\r
+ setSMIMEInfoMsg("");\r
+ }\r
+}\r
+\r
+//\r
+function onSmartCardChange()\r
+{\r
+ // only reload encrypted windows\r
+ if (gMyLastEncryptedURI && gEncryptionStatus != -1) {\r
+ ReloadMessage();\r
+ }\r
+}\r
+\r
+//\r
+function msgHdrViewSMIMEOnLoad(event)\r
+{\r
+ window.crypto.enableSmartCardEvents = true;\r
+ document.addEventListener("smartcard-insert", onSmartCardChange, false);\r
+ document.addEventListener("smartcard-remove", onSmartCardChange, false);\r
+ if (!gSMIMEBundle)\r
+ gSMIMEBundle = document.getElementById("bundle_read_smime");\r
+\r
+ // we want to register our security header sink as an opaque nsISupports\r
+ // on the msgHdrSink used by mail.....\r
+ msgWindow.msgHeaderSink.securityInfo = smimeHeaderSink;\r
+\r
+ gSignedUINode = document.getElementById('signedHdrIcon');\r
+ gEncryptedUINode = document.getElementById('encryptedHdrIcon');\r
+ gSMIMEContainer = document.getElementById('smimeBox');\r
+ gStatusBar = document.getElementById('status-bar');\r
+ \r
+ // add ourself to the list of message display listeners so we get notified when we are about to display a\r
+ // message.\r
+ var listener = {};\r
+ listener.onStartHeaders = onSMIMEStartHeaders;\r
+ listener.onEndHeaders = onSMIMEEndHeaders;\r
+ gMessageListeners.push(listener);\r
+\r
+ gEncryptedURIService = \r
+ Components.classes["@mozilla.org/messenger-smime/smime-encrypted-uris-service;1"]\r
+ .getService(Components.interfaces.nsIEncryptedSMIMEURIsService);\r
+ \r
+ // display security information message \r
+ gSMIMEInfoMsg = document.getElementById("secureinfomsgl");\r
+ gSMIMEInfoMsgMore = document.getElementById("secureinfomsgd");\r
+ if(gSMIMEInfoMsg == undefined){\r
+ gSMIMEInfoMsg = document.getElementById("secureinfomsgl2");\r
+ gSMIMEInfoMsgMore = document.getElementById("secureinfomsgd2");\r
+ }\r
+ \r
+ try{\r
+ if(gCurrentIdentity){ \r
+ //gConsole.logStringMessage("[msgHdrViewSMIMEOnLoad] secureheaders.smimeinfomsg pref = "+setSmimeInfoMsg);\r
+ // save datas of current account for extern windows\r
+ var prefBranch = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService).getBranch(null);\r
+ prefBranch.setBoolPref("smimeinfomsg_on", gCurrentIdentity.getBoolAttribute("secureheaders.smimeinfomsg"));\r
+ prefBranch.setCharPref("smimeinfomsg_localsecurehdrpath", gCurrentIdentity.getCharAttribute(PREF_SECURE_HEADERS_FOLDER_DATAS));\r
+ } \r
+ }catch(e){gConsole.logStringMessage("[msgHdrViewSMIMEOnLoad] smimeinfomsg error : " + e);}\r
+ \r
+ // new folder selected : collapse gSMIMEInfoMsg container \r
+ try{\r
+ var el = document.getElementById("folderTree");\r
+ el.addEventListener("select", function(){\r
+ if(document.getElementById("singlemessage") != undefined)\r
+ document.getElementById("secureinfomsg").setAttribute("collapsed","true");},\r
+ false);\r
+ }catch(e){}\r
+ \r
+}\r
+\r
+function msgHdrViewSMIMEOnUnload(event)\r
+{\r
+ window.crypto.enableSmartCardEvents = false;\r
+ document.removeEventListener("smartcard-insert", onSmartCardChange, false);\r
+ document.removeEventListener("smartcard-remove", onSmartCardChange, false);\r
+ forgetEncryptedURI();\r
+ removeEventListener('messagepane-loaded', msgHdrViewSMIMEOnLoad, true);\r
+ removeEventListener('messagepane-unloaded', msgHdrViewSMIMEOnUnload, true);\r
+ removeEventListener('messagepane-hide', msgHdrViewSMIMEOnMessagePaneHide, true);\r
+ removeEventListener('messagepane-unhide', msgHdrViewSMIMEOnMessagePaneUnhide, true);\r
+}\r
+\r
+function msgHdrViewSMIMEOnMessagePaneHide()\r
+{\r
+ gSMIMEContainer.collapsed = true;\r
+ gSignedUINode.collapsed = true;\r
+ gEncryptedUINode.collapsed = true;\r
+}\r
+\r
+function msgHdrViewSMIMEOnMessagePaneUnhide()\r
+{\r
+ if (gEncryptionStatus != -1 || gSignatureStatus != -1)\r
+ {\r
+ gSMIMEContainer.collapsed = false;\r
+\r
+ if (gSignatureStatus != -1)\r
+ {\r
+ gSignedUINode.collapsed = false;\r
+ }\r
+\r
+ if (gEncryptionStatus != -1)\r
+ {\r
+ gEncryptedUINode.collapsed = false;\r
+ }\r
+ }\r
+}\r
+\r
+function getMimeValueCharset(val)\r
+{\r
+ var res="";\r
+ if(val.indexOf("=?")!=-1)\r
+ {\r
+ val=val.substring(val.indexOf("=?")+2);\r
+ if(val.indexOf("?")!=-1)\r
+ {\r
+ res=val.substring(0,val.indexOf("?"));\r
+ }\r
+ }\r
+ return res;\r
+}\r
+\r
+\r
+/*\r
+ * \r
+ */\r
+function ReplaceStr(expr,a,b){\r
+ var i=0\r
+ while (i!=-1) {\r
+ i=expr.indexOf(a,0);\r
+ if (i>=0) {\r
+ expr=expr.substring(0,i)+b+expr.substring(i+a.length);\r
+ i+=b.length;\r
+ }\r
+ }\r
+ return expr;\r
+}\r
+\r
+/*\r
+ * Unfolding string from mime value\r
+ * RFC 822 : unfolding is accomplished by removing any CRLF that is immediately followed by WSP\r
+ */\r
+function UnfoldingMimeValue(str){\r
+ // CRLF DOS : "\r\n"\r
+ // CRLF UNIX : "\n"\r
+ var rv = ReplaceStr(str,"\r\n\t","\t");\r
+ rv = ReplaceStr(rv,"\n\t","\t");\r
+ rv = ReplaceStr(rv,"\r\n "," "); \r
+ return ReplaceStr(rv,"\n "," ");\r
+}\r
+\r
+\r
+/*\r
+ * RFC 4871 - relaxed header canonicalization algorithm\r
+ * Delete WSP at the begining and and of field\r
+ */\r
+function deleteFirstAndLastWhiteSpace(str){\r
+ var rv=str; \r
+ var imax=rv.length;\r
+ for(var i=0; i<imax; ++i){\r
+ var nochange1=true;\r
+ var nochange2=true;\r
+ \r
+ //delete all WSP at the end of each unfolded header field value \r
+ if(rv[rv.length-1]==' ' || rv[rv.length-1]=='\t'){\r
+ rv = rv.slice(0,rv.length-1); \r
+ nochange1=false;\r
+ }\r
+ \r
+ //delete any WSP remaining before and after the colon separating field name form value\r
+ if(rv[0]==' ' || rv[0]=='\t'){\r
+ rv = rv.slice(1,rv.length);\r
+ nochange2=false;\r
+ }\r
+ \r
+ if(nochange1==true && nochange2==true) break; \r
+ } \r
+ return rv;\r
+}\r
+\r
+/*\r
+ * Delete CRLF at end of sequence str\r
+ * CRLF DOS : "\r\n"\r
+ * CRLF UNIX : "\n"\r
+ * CRLF OS : "\r"\r
+ */\r
+function deleteLastCRLF(str){\r
+ var rv=str; \r
+ var imax=rv.length;\r
+ if(rv[imax-1] == "\n")\r
+ rv = rv.slice(0,imax-1);\r
+ imax=rv.length;\r
+ if(rv[imax-1] == "\r")\r
+ rv = rv.slice(0,imax-1); \r
+ return rv; \r
+}\r
+\r
+/*\r
+ * RFC 4871 - relaxed header canonicalization algorithm\r
+ */\r
+function canonilizeHeaderValue(hdrval){ \r
+ // Unfold all header field continuation lines as described in [RFC2822]\r
+ var val = UnfoldingMimeValue(hdrval);\r
+ \r
+ // Convert all sequences of one or more WSP characters to a single SP character\r
+ val = ReplaceStr(val,"\t"," ");\r
+ val = ReplaceStr(val," "," ");\r
+ \r
+ // Delete all WSP characters at the end of each unfolded value\r
+ // Delete any WSP characters remaining before and after the colon separating header field\r
+ val=deleteFirstAndLastWhiteSpace(val);\r
+ val = deleteLastCRLF(val);\r
+ return val;\r
+}\r
+\r
+/*\r
+ * \r
+ */\r
+function checkSignedDataMsg(){\r
+ // \r
+ var list="";\r
+ var headerName;\r
+ var regHdrName_contentype = new RegExp("content-type", "ig");\r
+ var regHdrValue_signed = new RegExp("multipart/signed", "ig");\r
+ for (headerName in currentHeaderData) {\r
+ //list += currentHeaderData[headerName].headerName +":"+currentHeaderData[headerName].headerValue + " $$ ";\r
+ if(regHdrName_contentype.test(currentHeaderData[headerName].headerName)){\r
+ if(regHdrValue_signed.test(currentHeaderData[headerName].headerValue)){\r
+ gConsole.logStringMessage("[checkSignedDataSmimeSelectedMsg] Msg Is Signed");\r
+ return true;\r
+ }\r
+ }\r
+ }\r
+ gConsole.logStringMessage("[checkSignedDataSmimeSelectedMsg] Msg Is Unsigned");\r
+ //dbg gConsole.logStringMessage("[checkSignedDataSmimeSelectedMsg] list : " + list); \r
+ return false;\r
+}\r
+\r
+ /**\r
+Get message source\r
+@param {nsIMsgDBHdr} header\r
+@param {function} callbackFunction Function to call when data are received: callbackFunction(header, receivedData, callbackParam)\r
+@param callbackParam Parameter of callbackFunction\r
+@return {string} Message source or <b>false</b> if an error occurs\r
+*/\r
+function getMessageSource(mailUri, callbackFunction, callbackParam){\r
+ if (!mailUri) return; \r
+ var streamListener = {\r
+ QueryInterface: function(aIID) {\r
+ if (aIID.equals(Components.interfaces.nsISupports)\r
+ || aIID.equals(Components.interfaces.nsIStreamListener))\r
+ return this;\r
+ throw Components.results.NS_NOINTERFACE;\r
+ },\r
+ data: "",\r
+ isDataComplete: false,\r
+ onStartRequest: function(request, context) {},\r
+ onDataAvailable: function(request, context, inputStream, offset, available) {\r
+ if(!this.isDataComplete ){\r
+ var stream = Components.classes["@mozilla.org/scriptableinputstream;1"].createInstance(Components.interfaces.nsIScriptableInputStream);\r
+ stream.init(inputStream);\r
+ this.data += stream.read(available);\r
+ stream.close();\r
+ stream = null;\r
+ \r
+ // parse headers only\r
+ var idxEnd = this.data.indexOf("\r\n\r\n",0); // * CRLF DOS : "\r\n"\r
+ if(idxEnd == -1) idxEnd = this.data.indexOf("\n\n",0); // * CRLF UNIX : "\n"\r
+ if(idxEnd == -1) idxEnd = this.data.indexOf("\r\r",0); //CRLF OS : "\r"\r
+ if(idxEnd != -1) this.isDataComplete = true; // msgSrc = msgSrc.substr(0,idxEnd); //dbg gConsole.logStringMessage("[smime - MessageAnalyser - succes getting mime headers : ] \n" + msgSrc); \r
+ }\r
+ },\r
+ onStopRequest: function(request, context, status) {\r
+ if (Components.isSuccessCode(status)) {\r
+ callbackFunction(this.data, callbackParam);\r
+ } else {\r
+ gConsole.logStringMessage("[getMessageSource - streamListener.onStopRequest ] - Error: "+ status); \r
+ if(this.isDataComplete == true){\r
+ // all mime headers have been parsed \r
+ gConsole.logStringMessage("[getMessageSource - streamListener.isDataComplete ] all mime headers have been parsed !"); \r
+ callbackFunction( this.data, callbackParam);\r
+ }\r
+ }\r
+ }\r
+ }\r
+\r
+ var cmessenger = Components.classes["@mozilla.org/messenger;1"].createInstance(Components.interfaces.nsIMessenger);\r
+ var msgSvc = cmessenger.messageServiceFromURI(mailUri);\r
+ try { msgSvc.streamMessage(mailUri, streamListener, null, null, false, null); } catch (ex) { return false; }\r
+}\r
+\r
+/*\r
+ * set status signature for displaying panel \r
+ */\r
+function setSMIMEInfoMsg(status){\r
+ //#secureinfomsgh[signed="ok"],\r
+ //#secureinfomsgh2[signed="ok"]\r
+ try{document.getElementById("secureinfomsgh").setAttribute("signed",status)}catch(e){}\r
+ try{document.getElementById("secureinfomsgh2").setAttribute("signed",status)}catch(e){}\r
+}\r
+\r
+/*\r
+ * UpdateLocalSecureHeaderList\r
+ * Read the XML secure headers configuration file\r
+ * Add headers to sign with local rules in gLocalSecureHeaderList array {[headername][objectEntry],[headername][objectEntry],...}\r
+*/\r
+var PREF_SECURE_HEADERS_FOLDER_DATAS="secureheaders.folderdata";\r
+var DEFAULT_SECUREHEADERS_XML_DIR = "secureHeaders"\r
+var DEFAULT_SECUREHEADERS_XML_FILE = "secureHeadersDefault.xml"\r
+var gLocalSecureHeaderList = []; // {headerName,headerName,...}\r
+var gPrefLocalSecureheaderXmlPath = "";\r
+var gPrefLocalSecureheaderXmlDate = ""\r
+function UpdateLocalSecureHeaderList(){\r
+ try{\r
+ var strLocalList = ""; // trace list \r
+ \r
+ // get xml file path\r
+ var file = null;\r
+ //var pref_data = gCurrentIdentity.getCharAttribute(PREF_SECURE_HEADERS_FOLDER_DATAS);\r
+ var pref_data = "";\r
+ try{\r
+ if(gCurrentIdentity){ \r
+ //gConsole.logStringMessage("[msgHdrViewSMIMEOnLoad] secureheaders.smimeinfomsg pref = "+setSmimeInfoMsg);\r
+ // save datas of current account for extern windows\r
+ var prefBranch = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService).getBranch(null);\r
+ pref_data = gCurrentIdentity.getCharAttribute(PREF_SECURE_HEADERS_FOLDER_DATAS);\r
+ prefBranch.setCharPref("smimeinfomsg_localsecurehdrpath", pref_data);\r
+ gConsole.logStringMessage("[_secure_headers - UpdateLocalSecureHeaderList] smimeinfomsg_localsecurehdrpath pref = " + pref_data);\r
+ } \r
+ }catch(e){\r
+ // try to get path from current prefs\r
+ var prefBranch = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService).getBranch(null);\r
+ pref_data = prefBranch.getCharPref("smimeinfomsg_localsecurehdrpath");\r
+ gConsole.logStringMessage("[_secure_headers - UpdateLocalSecureHeaderList] e : "+ e + " line " + e.lineNumber + " \n smimeinfomsg_localsecurehdrpath pref = " + pref_data);\r
+ } \r
+ \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
+ if(!file.exists()){\r
+ gConsole.logStringMessage("[_secure_headers - UpdateLocalSecureHeaderList] Error loading schema file : " + completePath);\r
+ return;\r
+ }\r
+ \r
+ // is list modified \r
+ if(gPrefLocalSecureheaderXmlPath === pref_data)\r
+ if(file.lastModifiedTime === gPrefLocalSecureheaderXmlDate) \r
+ return;\r
+ gPrefLocalSecureheaderXmlPath = pref_data;\r
+ gPrefLocalSecureheaderXmlDate = file.lastModifiedTime;\r
+ gLocalSecureHeaderList = [];\r
+ gConsole.logStringMessage("[_secure_headers - UpdateLocalSecureHeaderList] last modified time file : " + gPrefLocalSecureheaderXmlDate + "\npath :" + gPrefLocalSecureheaderXmlPath);\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 compatibleTag = xmlDoc.getElementsByTagName("ximf:headers");\r
+ var sValue=""; \r
+ if(compatibleTag.length>0){\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
+ //var header_encrypted = -1;\r
+ if(childNodes[j].localName == "header"){\r
+ header_name = childNodes[j].getAttribute("name");\r
+ if(childNodes[j].hasAttribute("status")) header_status = parseInt(childNodes[j].getAttribute("status"));\r
+ /*if(childNodes[j].hasAttribute("encrypted")) header_encrypted = parseInt(childNodes[j].getAttribute("encrypted"));*/\r
+ \r
+ var oEntry = new Object;\r
+ oEntry.hdrName = header_name;\r
+ oEntry.hdrSecureValue = "";\r
+ oEntry.hdrMimeValue = "";\r
+ oEntry.hdrSignedStatus = header_status;\r
+ oEntry.hdrCanonAlgo = ""; //TODO\r
+ oEntry.hdrEncryptStatus = "";\r
+ oEntry.hdrSignedRes = "";\r
+ gLocalSecureHeaderList[oEntry.hdrName] = oEntry; \r
+ //gConsole.logStringMessage("[CLR_575] local rule header " + header_name);\r
+ strLocalList += header_name + "\n";\r
+ }\r
+ }\r
+ }else{\r
+ gConsole.logStringMessage("[_secure_headers - UpdateLocalSecureHeaderList] no headers tag in file " + completePath);\r
+ }\r
+ } catch (e) {\r
+ gConsole.logStringMessage("[_secure_headers - UpdateLocalSecureHeaderList ] \n " + e + "\nfile : " + e.fileName+"\nline : "+ e.lineNumber);\r
+ }\r
+ gConsole.logStringMessage("[_secure_headers - UpdateLocalSecureHeaderList ] new local list of secure headers : \n " + strLocalList);\r
+ return gLocalSecureHeaderList;\r
+}\r
+\r
+addEventListener('messagepane-loaded', msgHdrViewSMIMEOnLoad, true);\r
+addEventListener('messagepane-unloaded', msgHdrViewSMIMEOnUnload, true);\r
+addEventListener('messagepane-hide', msgHdrViewSMIMEOnMessagePaneHide, true);\r
+addEventListener('messagepane-unhide', msgHdrViewSMIMEOnMessagePaneUnhide, true);\r
-<?xml version="1.0"?>
-<!-- ***** BEGIN LICENSE BLOCK *****
- - Version: MPL 1.1/GPL 2.0/LGPL 2.1
- -
- - The contents of this file are subject to the Mozilla Public License Version
- - 1.1 (the "License"); you may not use this file except in compliance with
- - the License. You may obtain a copy of the License at
- - http://www.mozilla.org/MPL/
- -
- - Software distributed under the License is distributed on an "AS IS" basis,
- - WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
- - for the specific language governing rights and limitations under the
- - License.
- -
- - The Original Code is Mozilla Communicator client code, released
- - March 31, 1998.
- -
- - The Initial Developer of the Original Code is
- - Netscape Communications Corporation.
- - Portions created by the Initial Developer are Copyright (C) 1999
- - the Initial Developer. All Rights Reserved.
- -
- - Contributor(s):
- - Scott MacGregor <mscott@netscape.com>
- -
- - Alternatively, the contents of this file may be used under the terms of
- - either of the GNU General Public License Version 2 or later (the "GPL"),
- - or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
- - in which case the provisions of the GPL or the LGPL are applicable instead
- - of those above. If you wish to allow use of your version of this file only
- - under the terms of either the GPL or the LGPL, and not to allow others to
- - use your version of this file under the terms of the MPL, indicate your
- - decision by deleting the provisions above and replace them with the notice
- - and other provisions required by the GPL or the LGPL. If you do not delete
- - the provisions above, a recipient may use your version of this file under
- - the terms of any one of the MPL, the GPL or the LGPL.
- -
- - ***** END LICENSE BLOCK ***** -->
-
-<?xml-stylesheet href="chrome://messenger/skin/smime/msgHdrViewSMIMEOverlay.css" type="text/css"?>
-
-<overlay xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-
- <script type="application/javascript" src="chrome://messenger-smime/content/msgHdrViewSMIMEOverlay.js"/>
-<!-- These stringbundles are already defined in msgReadSMIMEOverlay.xul!
- <stringbundleset id="stringbundleset">
- <stringbundle id="bundle_read_smime" src="chrome://messenger-smime/locale/msgReadSMIMEOverlay.properties"/>
- <stringbundle id="bundle_brand" src="chrome://branding/locale/brand.properties"/>
- </stringbundleset>
--->
-
- <hbox id="dateValueBox">
- <hbox id="smimeBox" insertbefore="dateLabel" collapsed="true">
- <image id="signedHdrIcon"
- onclick="showMessageReadSecurityInfo();" collapsed="true"/>
- <image id="encryptedHdrIcon"
- onclick="showMessageReadSecurityInfo();" collapsed="true"/>
- </hbox>
+<?xml version="1.0"?>\r
+<!-- ***** BEGIN LICENSE BLOCK *****\r
+ - Version: MPL 1.1/GPL 2.0/LGPL 2.1\r
+ -\r
+ - The contents of this file are subject to the Mozilla Public License Version\r
+ - 1.1 (the "License"); you may not use this file except in compliance with\r
+ - the License. You may obtain a copy of the License at\r
+ - http://www.mozilla.org/MPL/\r
+ -\r
+ - Software distributed under the License is distributed on an "AS IS" basis,\r
+ - WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License\r
+ - for the specific language governing rights and limitations under the\r
+ - License.\r
+ -\r
+ - The Original Code is Mozilla Communicator client code, released\r
+ - March 31, 1998.\r
+ -\r
+ - The Initial Developer of the Original Code is\r
+ - Netscape Communications Corporation.\r
+ - Portions created by the Initial Developer are Copyright (C) 1999\r
+ - the Initial Developer. All Rights Reserved.\r
+ -\r
+ - Contributor(s):\r
+ - Scott MacGregor <mscott@netscape.com>\r
+ -\r
+ - Alternatively, the contents of this file may be used under the terms of\r
+ - either of the GNU General Public License Version 2 or later (the "GPL"),\r
+ - or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),\r
+ - in which case the provisions of the GPL or the LGPL are applicable instead\r
+ - of those above. If you wish to allow use of your version of this file only\r
+ - under the terms of either the GPL or the LGPL, and not to allow others to\r
+ - use your version of this file under the terms of the MPL, indicate your\r
+ - decision by deleting the provisions above and replace them with the notice\r
+ - and other provisions required by the GPL or the LGPL. If you do not delete\r
+ - the provisions above, a recipient may use your version of this file under\r
+ - the terms of any one of the MPL, the GPL or the LGPL.\r
+ -\r
+ - ***** END LICENSE BLOCK ***** -->\r
+\r
+<?xml-stylesheet href="chrome://messenger/skin/smime/msgHdrViewSMIMEOverlay.css" type="text/css"?>\r
+\r
+<overlay xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">\r
+\r
+ <script type="application/javascript" src="chrome://messenger-smime/content/msgHdrViewSMIMEOverlay.js"/>\r
+<!-- These stringbundles are already defined in msgReadSMIMEOverlay.xul!\r
+ <stringbundleset id="stringbundleset">\r
+ <stringbundle id="bundle_read_smime" src="chrome://messenger-smime/locale/msgReadSMIMEOverlay.properties"/>\r
+ <stringbundle id="bundle_brand" src="chrome://branding/locale/brand.properties"/>\r
+ </stringbundleset>\r
+-->\r
+\r
+ <hbox id="dateValueBox">\r
+ <hbox id="smimeBox" insertbefore="dateLabel" collapsed="true">\r
+ <image id="signedHdrIcon"\r
+ onclick="showMessageReadSecurityInfo();" collapsed="true"/>\r
+ <image id="encryptedHdrIcon"\r
+ onclick="showMessageReadSecurityInfo();" collapsed="true"/>\r
+ </hbox>\r
</hbox>\r
\r
<vbox id="singlemessage">\r
</vbox>\r
</hbox> \r
</vbox>\r
- </vbox>
-</overlay>
-
+ </vbox>\r
+</overlay>\r
+\r
secureinfomsg_notok=The message signature is corrupted
secureinfomsgmore_notok=several reasons: body message has been changed or signature has been changed or sender message has been changed
secureinfomsg_hdrnok=A header has been changed
-secureinfomsg_unsecured=this message is unsecured
\ No newline at end of file
+secureinfomsg_unsecured=this message is unsecured
+secureinfomsg_hdrwarning=Signature of this message is valid but its integrity is unguaranteed
+secureinfomsgmore_warning=According to Secured Headers settings of local account, headers should be secured
+securevalue_warning=This header should be secured
\ No newline at end of file
margin-bottom:2px;
padding-left:5px;
background-color:#ffffcc;
-
}
+
+#secureinfomsgh[signed="notok"],#secureinfomsgh2[signed="notok"]{background-color:#ff5959;}
+#secureinfomsgh[signed="ok"],#secureinfomsgh2[signed="ok"]{background-color:#CAFF70;}
+#secureinfomsgh[signed="warning"],#secureinfomsgh2[signed="warning"]{background-color:#E76914;}
+
#secureinfomsg label,\r
#secureinfomsg2 label{
font-weight: bold;
}
#secureinfomsg label:hover,\r
#secureinfomsg2 label:hover{
- color: #ffffff;\r
- background-color:#000080;\r
- -moz-border-radius:3px;
+ color: #00007f;
}
\ No newline at end of file
visibility: visible;
}
\r
-#secureinfomsgh,\r
-#secureinfomsgh2{\r
- margin-top:2px; \r
- margin-bottom:2px;\r
- padding-left:5px;\r
- background-color:#ffffcc;\r
- \r
-}\r
+#secureinfomsgh,
+#secureinfomsgh2{
+ margin-top:2px;
+ margin-bottom:2px;
+ padding-left:5px;
+ background-color:#ffffcc;
+}
+
+#secureinfomsgh[signed="notok"],#secureinfomsgh2[signed="notok"]{background-color:#ff5959;}
+#secureinfomsgh[signed="ok"],#secureinfomsgh2[signed="ok"]{background-color:#CAFF70;}
+#secureinfomsgh[signed="warning"],#secureinfomsgh2[signed="warning"]{background-color:#E76914;}
+\r
#secureinfomsg label,\r
#secureinfomsg2 label{\r
font-weight: bold;\r
}\r
#secureinfomsg label:hover,\r
#secureinfomsg2 label:hover{\r
- color: #ffffff;\r
- background-color:#000080;\r
- -moz-border-radius:3px;\r
+ color: #00007f; \r
}
\ No newline at end of file
visibility: visible;
}
\r
-#secureinfomsgh,\r
-#secureinfomsgh2{\r
- margin-top:2px; \r
- margin-bottom:2px;\r
- padding-left:5px;\r
- background-color:#ffffcc;\r
- \r
-}\r
+#secureinfomsgh,
+#secureinfomsgh2{
+ margin-top:2px;
+ margin-bottom:2px;
+ padding-left:5px;
+ background-color:#ffffcc;
+}
+
+#secureinfomsgh[signed="notok"],#secureinfomsgh2[signed="notok"]{background-color:#ff5959;}
+#secureinfomsgh[signed="ok"],#secureinfomsgh2[signed="ok"]{background-color:#CAFF70;}
+#secureinfomsgh[signed="warning"],#secureinfomsgh2[signed="warning"]{background-color:#E76914;}
+\r
#secureinfomsg label,\r
#secureinfomsg2 label{\r
font-weight: bold;\r
}\r
#secureinfomsg label:hover,\r
#secureinfomsg2 label:hover{\r
- color: #ffffff;\r
- background-color:#000080;\r
- -moz-border-radius:3px;\r
+ color: #00007f; \r
}
\ No newline at end of file
document.getElementById("hostname").value = ldapUrl.host;
document.getElementById("basedn").value = ldapUrl.dn;
document.getElementById("search").value = ldapUrl.filter;
-
+
var sub = document.getElementById("sub");
switch(ldapUrl.scope) {
case Components.interfaces.nsILDAPURL.SCOPE_ONELEVEL:
<checkbox id="secure" label="&directorySecure.label;"
accesskey="&directorySecure.accesskey;"
oncommand="onSecure();" disableiflocked="true"/>
-
</vbox>
<vbox>
<description>&offlineText.label;</description>
onCheckItem("nntp.maxArticles", "nntp.notifyOn");
setupMailOnServerUI();
setupFixedUI();
-
if (document.getElementById("server.type").getAttribute("value") == "imap")
setupImapDeleteUI(aServerId);
-
+
// "STARTTLS, if available" is vulnerable to MITM attacks so we shouldn't
// allow users to choose it anymore. Hide the option unless the user already
// has it set.
//currentFolderTextBox.value = file.path + DEFAULT_SECUREHEADERS_XML_DIR+DEFAULT_SECUREHEADERS_XML_FILE;\r
gCurrentIdentity.setCharAttribute(PREF_SECUREHEADERS_FOLDER_DATAS,currentFolderTextBox.value);\r
}\r
- } \r
+ }\r
\r
if(gCurrentIdentity.getBoolAttribute(PREF_SECUREHEADERS_SMIMEINFO)){\r
document.getElementById("smimeinfomsgcheck").setAttribute("checked", "true");\r
if(arrayHeaderToSign){\r
var secHeader = null;\r
\r
- for(i=0;i<arrayHeaderToSign.length;++i){ \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
var canonizcell=document.createElement("treecell"); \r
var valueMimecell=document.createElement("treecell");\r
//var encryptedcell=document.createElement("treecell");\r
- \r
+ \r
//set the header name, value and status\r
namecell.setAttribute("label",cSecureHeadersArray[headerName].hdrName);\r
valuecell.setAttribute("label",cSecureHeadersArray[headerName].hdrSecureValue); // signed value\r
classic.jar:
skin/classic/messenger/smime/msgReadSecureHeaders.css (resources/CSS/msgReadSecureHeaders.css)
skin/classic/messenger/smime/icons/check_sign.png (resources/icons/check_sign.png)
- skin/classic/messenger/smime/icons/cross_sign.png (resources/icons/cross_sign.png)
+ skin/classic/messenger/smime/icons/cross_sign.png (resources/icons/cross_sign.png)
+ skin/classic/messenger/smime/icons/unsign.png (resources/icons/unsign.png)
+
\r
@namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");\r
\r
-treechildren::-moz-tree-row(selected){ \r
+#secHeader_treechild_id::-moz-tree-row(selected){ \r
background-color: DarkGray;\r
}\r
\r
-treechildren::-moz-tree-row(odd){ \r
+#secHeader_treechild_id::-moz-tree-row(odd){ \r
background-color: #EEEEEE;\r
}\r
\r
-treechildren::-moz-tree-row(odd, selected){ \r
+#secHeader_treechild_id::-moz-tree-row(odd, selected){ \r
background-color: DarkGray;\r
}\r
\r
-treechildren::-moz-tree-cell-text(valid){ \r
+#secHeader_treechild_id::-moz-tree-cell-text(valid){ \r
color: green;\r
}\r
-treechildren::-moz-tree-cell-text(invalid){ \r
+#secHeader_treechild_id::-moz-tree-cell-text(invalid){ \r
color: #b10000;\r
font-weight: bold;\r
}\r
\r
-treechildren::-moz-tree-image(valid){\r
+#secHeader_treechild_id::-moz-tree-cell-text(unsigned){ \r
+ color: #E76914; \r
+}\r
+\r
+#secHeader_treechild_id::-moz-tree-image(valid){\r
list-style-image: url("chrome://messenger/skin/smime/icons/check_sign.png");\r
}\r
\r
-treechildren::-moz-tree-image(invalid){\r
+#secHeader_treechild_id::-moz-tree-image(invalid){\r
list-style-image: url("chrome://messenger/skin/smime/icons/cross_sign.png");\r
}\r
+\r
+#secHeader_treechild_id::-moz-tree-image(unsigned){\r
+ list-style-image: url("chrome://messenger/skin/smime/icons/unsign.png");\r
+}
\ No newline at end of file
\r
//create string with gSecureHeadersArray\r
var arraySecureHeadersString = "";\r
- for (headerName in gSecureHeadersArray) { \r
+ for (headerName in gSecureHeadersArray) { \r
arraySecureHeadersString+=gSecureHeadersArray[headerName].hdrName+HEADER_VAL_SEPARATOR;\r
arraySecureHeadersString+=gSecureHeadersArray[headerName].hdrSecureValue+HEADER_VAL_SEPARATOR; //put the value decoded instead of the value in the signature (encoded RFC2047) for the diplay\r
arraySecureHeadersString+=gSecureHeadersArray[headerName].hdrMimeValue+HEADER_VAL_SEPARATOR;\r
*/\r
nsAutoString& onlyOneWhiteSpace(nsAutoString& s){\r
s.ReplaceSubstring(NS_LITERAL_STRING("\t"), NS_LITERAL_STRING(" "));\r
- s.ReplaceSubstring(NS_LITERAL_STRING(" "), NS_LITERAL_STRING(" "));\r
- \r
+ s.ReplaceSubstring(NS_LITERAL_STRING(" "), NS_LITERAL_STRING(" ")); \r
return s;\r
}\r
\r
\r
-nsAutoString& canonilizeHeaderValue(nsAutoString &hdrval)\r
+nsAutoString& canonilizeHeaderValue(nsAutoString &hdrval, PRInt32 iCanonAlgorithme)\r
{\r
- removeJumpSymb(hdrval);\r
- onlyOneWhiteSpace(hdrval);\r
- hdrval.CompressWhitespace(PR_TRUE,PR_TRUE);\r
+ if(iCanonAlgorithme){\r
+ // relaxed canonicalization algorithm\r
+ removeJumpSymb(hdrval);\r
+ onlyOneWhiteSpace(hdrval);\r
+ hdrval.CompressWhitespace(PR_TRUE,PR_TRUE);\r
+ }else{\r
+ // simple canonicalization algorithm\r
+ hdrval.StripChar(PRUnichar('\n'), hdrval.Length()-4);\r
+ hdrval.StripChar(PRUnichar('\r'), hdrval.Length()-4);\r
+ }\r
return hdrval;\r
}\r
\r
-nsAutoString& canonilizeHeaderName(nsAutoString &hdrname)\r
+nsAutoString& canonilizeHeaderName(nsAutoString &hdrname, PRInt32 iCanonAlgorithme)\r
{\r
- nsCAutoString utf8str = NS_ConvertUTF16toUTF8(hdrname);\r
- ToLowerCase(utf8str);\r
- hdrname = NS_ConvertUTF8toUTF16(utf8str);\r
- onlyOneWhiteSpace(hdrname);\r
- hdrname.CompressWhitespace(PR_TRUE,PR_TRUE);\r
+ if(iCanonAlgorithme){\r
+ // relaxed canonicalization algorithm\r
+ nsCAutoString utf8str = NS_ConvertUTF16toUTF8(hdrname);\r
+ ToLowerCase(utf8str);\r
+ hdrname = NS_ConvertUTF8toUTF16(utf8str);\r
+ onlyOneWhiteSpace(hdrname);\r
+ hdrname.CompressWhitespace(PR_TRUE,PR_TRUE);\r
+ }\r
return hdrname;\r
}\r
\r
_secureHeader->GetHeaderName(_headerName);\r
GetValueHeader(_headerName,aComposeFields,_headerValue);\r
if(!_headerValue.IsEmpty()){\r
-\r
- if(mCanonAlgorithme){\r
- canonilizeHeaderName(_headerName);\r
- canonilizeHeaderValue(_headerValue);\r
- }\r
+ \r
+ canonilizeHeaderName(_headerName, mCanonAlgorithme);\r
+ canonilizeHeaderValue(_headerValue, mCanonAlgorithme);\r
+ \r
_secureHeader->SetHeaderName(_headerName);\r
_secureHeader->SetHeaderValue(_headerValue);\r
mSecureHeaders->AppendElement(_secureHeader,PR_FALSE);\r
interface nsIClientAuthUserDecision : nsISupports
{
attribute boolean rememberClientAuthCertificate;
- //EADS save user login
+ // save user login
attribute ACString clientLogin;
};
mAllowTLSIntoleranceTimeout(PR_TRUE),\r
mRememberClientAuthCertificate(PR_FALSE),\r
mHandshakeStartTime(0),\r
- mPort(0)\r
+ mPort(0),\r
+ mIsCertIssuerBlacklisted(PR_FALSE)\r
{\r
mThreadData = new nsSSLSocketThreadData;\r
}\r
static SECStatus\r
nsNSSBadCertHandler(void *arg, PRFileDesc *sslSocket)\r
{\r
+ // cert was revoked, don't do anything else\r
+ // Calling cancel_and_failure is not necessary, and would be wrong,\r
+ // [for errors other than the ones explicitly handled below,] \r
+ // because it suppresses error reporting.\r
+ if (PR_GetError() == SEC_ERROR_REVOKED_CERTIFICATE)\r
+ return SECFailure;\r
+\r
nsNSSShutDownPreventionLock locker;\r
nsNSSSocketInfo* infoObject = (nsNSSSocketInfo *)arg;\r
if (!infoObject)\r
PR_Now(), (void*)infoObject, \r
verify_log, NULL);\r
\r
+ if (infoObject->IsCertIssuerBlacklisted()) {\r
+ collected_errors |= nsICertOverrideService::ERROR_UNTRUSTED;\r
+ }\r
+\r
// We ignore the result code of the cert verification.\r
// Either it is a failure, which is expected, and we'll process the\r
// verify log below.\r
\r
PRStatus CloseSocketAndDestroy();\r
\r
+ PRBool IsCertIssuerBlacklisted() const {\r
+ return mIsCertIssuerBlacklisted;\r
+ }\r
+ void SetCertIssuerBlacklisted() {\r
+ mIsCertIssuerBlacklisted = PR_TRUE;\r
+ }\r
protected:\r
nsCOMPtr<nsIInterfaceRequestor> mCallbacks;\r
PRFileDesc* mFd;\r
PRIntervalTime mHandshakeStartTime;\r
PRInt32 mPort;\r
nsXPIDLCString mHostName;\r
+ PRErrorCode mIsCertIssuerBlacklisted;\r
\r
/* SSL Status */\r
nsRefPtr<nsSSLStatus> mSSLStatus;\r
NSS_CMSSignerInfo_AddSMIMECaps;
NSS_CMSSignerInfo_AddSMIMEEncKeyPrefs;
NSS_CMSSignerInfo_AddSigningTime;
-;+# Add Function for the Secure headers EADS
+;+# Add Function for the Secure headers
NSS_CMSSignerInfo_AddSecureHeader;
NSS_CMSSignerInfo_GetSecureHeader;
;+# End signed headers
secureinfomsgmore_notok=plusieurs causes possibles : le contenu du message a \u00E9t\u00E9 modifi\u00E9, la signature a \u00E9t\u00E9 modifi\u00E9e, l\u0027\u00E9metteur du message a pu \u00eatre modifi\u00E9
secureinfomsg_hdrnok=Un des champs d\u0027ent\u00eate a \u00E9t\u00E9 modifi\u00E9
secureinfomsg_unsecured=Ce message n\u0027est pas s\u00E9curis\u00E9
+secureinfomsg_hdrwarning=La signature de ce message est valide mais son int\u00E9grit\u00E9 n\u0027est pas compl\u00E8tement assur\u00E9e
+secureinfomsgmore_warning=Selon la configuration des ent\u00eates s\u00E9curis\u00E9s du compte local, certains ent\u00eates devraient \u00eatre sign\u00E9s
+securevalue_warning=Cet ent\u00eate devrait \u00eatre sign\u00E9
\ No newline at end of file