summaryrefslogtreecommitdiffstats
path: root/toolkit/identity/IdentityStore.jsm
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/identity/IdentityStore.jsm')
-rw-r--r--toolkit/identity/IdentityStore.jsm97
1 files changed, 97 insertions, 0 deletions
diff --git a/toolkit/identity/IdentityStore.jsm b/toolkit/identity/IdentityStore.jsm
new file mode 100644
index 000000000..1827a839e
--- /dev/null
+++ b/toolkit/identity/IdentityStore.jsm
@@ -0,0 +1,97 @@
+/* -*- js-indent-level: 2; indent-tabs-mode: nil -*- */
+/* vim: set ft=javascript ts=2 et sw=2 tw=80: */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this file,
+ * You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+"use strict";
+
+const Cu = Components.utils;
+const Ci = Components.interfaces;
+const Cc = Components.classes;
+const Cr = Components.results;
+
+Cu.import("resource://gre/modules/XPCOMUtils.jsm");
+Cu.import("resource://gre/modules/Services.jsm");
+
+this.EXPORTED_SYMBOLS = ["IdentityStore"];
+
+// the data store for IDService
+// written as a separate thing so it can easily be mocked
+function IDServiceStore() {
+ this.reset();
+}
+
+// Note: eventually these methods may be async, but we haven no need for this
+// for now, since we're not storing to disk.
+IDServiceStore.prototype = {
+ addIdentity: function addIdentity(aEmail, aKeyPair, aCert) {
+ this._identities[aEmail] = {keyPair: aKeyPair, cert: aCert};
+ },
+ fetchIdentity: function fetchIdentity(aEmail) {
+ return aEmail in this._identities ? this._identities[aEmail] : null;
+ },
+ removeIdentity: function removeIdentity(aEmail) {
+ let data = this._identities[aEmail];
+ delete this._identities[aEmail];
+ return data;
+ },
+ getIdentities: function getIdentities() {
+ // XXX - should clone?
+ return this._identities;
+ },
+ clearCert: function clearCert(aEmail) {
+ // XXX - should remove key from store?
+ this._identities[aEmail].cert = null;
+ this._identities[aEmail].keyPair = null;
+ },
+
+ /**
+ * set the login state for a given origin
+ *
+ * @param aOrigin
+ * (string) a web origin
+ *
+ * @param aState
+ * (boolean) whether or not the user is logged in
+ *
+ * @param aEmail
+ * (email) the email address the user is logged in with,
+ * or, if not logged in, the default email for that origin.
+ */
+ setLoginState: function setLoginState(aOrigin, aState, aEmail) {
+ if (aState && !aEmail) {
+ throw "isLoggedIn cannot be set to true without an email";
+ }
+ return this._loginStates[aOrigin] = {isLoggedIn: aState, email: aEmail};
+ },
+ getLoginState: function getLoginState(aOrigin) {
+ return aOrigin in this._loginStates ? this._loginStates[aOrigin] : null;
+ },
+ clearLoginState: function clearLoginState(aOrigin) {
+ delete this._loginStates[aOrigin];
+ },
+
+ reset: function Store_reset() {
+ // _identities associates emails with keypairs and certificates
+ this._identities = {};
+
+ // _loginStates associates. remote origins with a login status and
+ // the email the user has chosen as his or her identity when logging
+ // into that origin.
+ this._loginStates = {};
+ },
+
+ QueryInterface: XPCOMUtils.generateQI([Ci.nsISupports, Ci.nsIObserver]),
+
+ observe: function observe(aSubject, aTopic, aData) {
+ switch (aTopic) {
+ case "quit-application-granted":
+ Services.obs.removeObserver(this, "quit-application-granted");
+ this.reset();
+ break;
+ }
+ },
+};
+
+this.IdentityStore = new IDServiceStore();