From 3ec7df67da7493c97782a7b0485052b09cd6a64e Mon Sep 17 00:00:00 2001 From: "daniel.boelzle%sun.com" Date: Fri, 4 Aug 2006 10:27:13 +0000 Subject: [PATCH] Bug 340949: saving insecure login confirmation, minor string review --- .../en-US/chrome/calendar/wcap.properties | 6 +- .../providers/wcap/calWcapCalendarItems.js | 15 ++-- calendar/providers/wcap/calWcapSession.js | 71 ++++++++++++------- calendar/providers/wcap/calWcapUtils.js | 31 ++++++-- 4 files changed, 86 insertions(+), 37 deletions(-) diff --git a/calendar/locales/en-US/chrome/calendar/wcap.properties b/calendar/locales/en-US/chrome/calendar/wcap.properties index df6a4910a67..4feb99df7c9 100644 --- a/calendar/locales/en-US/chrome/calendar/wcap.properties +++ b/calendar/locales/en-US/chrome/calendar/wcap.properties @@ -44,7 +44,8 @@ accessingServerFailedError.text=Cannot access server %1$S! mandatoryHttpsError.text=Server %1$S needs to support HTTPS! # args: host -noHttpsConfirmation.text=Insecure login on %1$S. Continue? +noHttpsConfirmation.text=Insecure login on %1$S! Server does not support HTTPS. Continue? +noHttpsConfirmation.check=Don't ask again. noHttpsConfirmation.label=Warning! # args: host @@ -59,5 +60,6 @@ loginDialog.text=Server: %1$S (%2$S, v%3$S, WCAP v%4$S) loginDialog.savePW.label=Save Password loginDialog.label=Sun Java System Calendar Server WCAP login -privateItem.title=Private/Confidential +privateItem.title=Private +confidentialItem.title=Confidential busyItem.title=Busy diff --git a/calendar/providers/wcap/calWcapCalendarItems.js b/calendar/providers/wcap/calWcapCalendarItems.js index aaa3e763440..6049767949a 100644 --- a/calendar/providers/wcap/calWcapCalendarItems.js +++ b/calendar/providers/wcap/calWcapCalendarItems.js @@ -787,12 +787,17 @@ calWcapCalendar.prototype.parseItems = function( excItems.push( item ); } - if (item.title == null && - (item.privacy == "PRIVATE" || - item.privacy == "CONFIDENTIAL")) { + if (item.title == null) { // assumed to look at a subscribed calendar, // so patch title for private items: - item.title = g_privateItemTitle; + switch (item.privacy) { + case "PRIVATE": + item.title = g_privateItemTitle; + break; + case "CONFIDENTIAL": + item.title = g_confidentialItemTitle; + break; + } } } }, @@ -936,7 +941,7 @@ calWcapCalendar.prototype.getItems_resp = function( var items = []; for each ( var entry in entries ) { var item = new CalEvent(); - item.id = (g_busyItemUuidPrefix + + item.id = (g_busyPhantomItemUuidPrefix + entry.dtRangeStart.icalString); item.calendar = this_.superCalendar; item.title = g_busyItemTitle; diff --git a/calendar/providers/wcap/calWcapSession.js b/calendar/providers/wcap/calWcapSession.js index 18d48f55f91..472331c5425 100644 --- a/calendar/providers/wcap/calWcapSession.js +++ b/calendar/providers/wcap/calWcapSession.js @@ -364,12 +364,14 @@ calWcapSession.prototype = { if (!this_.m_bNoLoginsAnymore) this_.getSessionId_(); - this_.getSupportedTimezones(true /* refresh */); - this_.getServerTimeDiff(true /* refresh */); - // preread calprops for subscribed calendars: - var cals = this_.getSubscribedCalendars({}); - for each ( cal in cals ) { - cal.getCalProps_(true /* async */); + if (this_.m_sessionId != null) { + this_.getSupportedTimezones(true /* refresh */); + this_.getServerTimeDiff(true /* refresh */); + // preread calprops for subscribed calendars: + var cals = this_.getSubscribedCalendars({}); + for each ( cal in cals ) { + cal.getCalProps_(true /* async */); + } } } } @@ -421,7 +423,7 @@ calWcapSession.prototype = { else { // user has specified a specific port, but no https: // => leave it to her whether to connect... - if (!confirmUnsecureLogin( loginUri )) { + if (!confirmInsecureLogin( loginUri )) { this.m_bNoLoginsAnymore = true; this.log( "user rejected unsecure login." ); return null; @@ -468,7 +470,7 @@ calWcapSession.prototype = { [loginUri.hostPort], 1 ) ); } // http possible, ask for it: - if (confirmUnsecureLogin( loginUri )) { + if (confirmInsecureLogin( loginUri )) { if (outPW.value != null) { // user/pw has been found previously, // but no login was possible, @@ -760,14 +762,7 @@ calWcapSession.prototype = { this.m_sessionId = null; } this.m_userId = null; - // ask next time we log in: this.m_bNoLoginsAnymore = false; - if (this.uri != null) { - var this_ = this; - g_httpHosts = g_httpHosts.filter( - function(hostEntry) { - return (hostEntry.m_host != this_.uri.hostPort); } ); - } }, getWcapErrorString: @@ -1032,23 +1027,47 @@ calWcapSession.prototype = { } }; -var g_httpHosts = []; -function confirmUnsecureLogin( uri ) +var g_confirmedHttpLogins = null; +function confirmInsecureLogin( uri ) { - var host = uri.hostPort; - for each ( var hostEntry in g_httpHosts ) { - if (hostEntry.m_host == host) { - return hostEntry.m_bConfirmed; + if (g_confirmedHttpLogins == null) { + g_confirmedHttpLogins = {}; + var confirmedHttpLogins = getPref( + "calendar.wcap.confirmedHttpLogins", ""); + var tuples = confirmedHttpLogins.split(','); + for each ( var tuple in tuples ) { + var ar = tuple.split(':'); + g_confirmedHttpLogins[ar[0]] = ar[1]; } } + + var host = uri.hostPort; + var encodedHost = encodeURIComponent(host); + var confirmedEntry = g_confirmedHttpLogins[encodedHost]; + if (confirmedEntry) + return (confirmedEntry == "1" ? true : false); + var prompt = getWindowWatcher().getNewPrompter(null); var bundle = getWcapBundle(); - var bConfirmed = prompt.confirm( + var dontAskAgain = { value: false }; + var bConfirmed = prompt.confirmCheck( bundle.GetStringFromName("noHttpsConfirmation.label"), - bundle.formatStringFromName("noHttpsConfirmation.text", [host], 1) ); - // save decision for all calendars: - g_httpHosts.push( - { m_host: host, m_bConfirmed: bConfirmed } ); + bundle.formatStringFromName("noHttpsConfirmation.text", [host], 1), + bundle.GetStringFromName("noHttpsConfirmation.check"), + dontAskAgain ); + + if (dontAskAgain.value) { + // save decision for all running calendars and all future confirmations: + var confirmedHttpLogins = getPref( + "calendar.wcap.confirmedHttpLogins", ""); + if (confirmedHttpLogins.length > 0) + confirmedHttpLogins += ","; + confirmedEntry = (bConfirmed ? "1" : "0"); + confirmedHttpLogins += (encodedHost + ":" + confirmedEntry); + setPref("calendar.wcap.confirmedHttpLogins", confirmedHttpLogins); + g_confirmedHttpLogins[encodedHost] = confirmedEntry; + } + return bConfirmed; } diff --git a/calendar/providers/wcap/calWcapUtils.js b/calendar/providers/wcap/calWcapUtils.js index e5079a20ba0..613573a5f96 100644 --- a/calendar/providers/wcap/calWcapUtils.js +++ b/calendar/providers/wcap/calWcapUtils.js @@ -213,10 +213,10 @@ function getDatetimeFromIcalProp( prop ) function getPref(prefName, defaultValue) { + const nsIPrefBranch = Components.interfaces.nsIPrefBranch; + var prefBranch = Components.classes["@mozilla.org/preferences-service;1"] + .getService(nsIPrefBranch); try { - const nsIPrefBranch = Components.interfaces.nsIPrefBranch; - var prefBranch =Components.classes["@mozilla.org/preferences-service;1"] - .getService(nsIPrefBranch); switch (prefBranch.getPrefType(prefName)) { case nsIPrefBranch.PREF_BOOL: return prefBranch.getBoolPref(prefName); @@ -233,6 +233,27 @@ function getPref(prefName, defaultValue) } } +function setPref(prefName, value) +{ + const nsIPrefBranch = Components.interfaces.nsIPrefBranch; + var prefBranch = Components.classes["@mozilla.org/preferences-service;1"] + .getService(nsIPrefBranch); + switch (typeof(value)) { + case "boolean": + prefBranch.setBoolPref(prefName, value); + break; + case "number": + prefBranch.setIntPref(prefName, value); + break; + case "string": + prefBranch.setCharPref(prefName, value); + break; + default: + throw new Error("unsupported pref value: " + typeof(value)); + } +} + + // // init code for globals, prefs: // @@ -327,6 +348,8 @@ catch (exc) { // some string resources: var g_privateItemTitle = getWcapBundle().GetStringFromName("privateItem.title"); +var g_confidentialItemTitle = getWcapBundle().GetStringFromName( + "confidentialItem.title"); var g_busyItemTitle = getWcapBundle().GetStringFromName("busyItem.title"); -var g_busyItemUuidPrefix = ("uuid" + getTime().icalString); +var g_busyPhantomItemUuidPrefix = ("PHANTOM_uuid" + getTime().icalString);