Skip to content

Commit

Permalink
Merge branch 'jb54076' into 'master'
Browse files Browse the repository at this point in the history
Add a helper for managing logins

See merge request mer-core/embedlite-components!126
  • Loading branch information
llewelld committed May 19, 2021
2 parents a4fb35d + df2a8ca commit d347c95
Show file tree
Hide file tree
Showing 4 changed files with 121 additions and 0 deletions.
4 changes: 4 additions & 0 deletions embedlite-components.pro
Expand Up @@ -7,8 +7,12 @@ OTHER_FILES += \
jsscripts/*.jsm \
jsscripts/*.xml \
jsscripts/sync/*.js \
jsscripts/*.manifest \
jsscripts/*.am \
jscomps/*.js \
jscomps/*.jsm \
jscomps/*.manifest \
jscomps/*.am \
overrides/*.* \
overrides/images/* \
configure.ac
5 changes: 5 additions & 0 deletions jscomps/EmbedLiteJSComponents.manifest
Expand Up @@ -106,3 +106,8 @@ category app-startup EmbedliteDownloadManager service,@mozilla.org/embedlite/dow
component {86d354c6-81bc-4eb5-82c3-4c9859586165} ContentPermissionManager.js
contract @mozilla.org/content-permission/manager;1 {86d354c6-81bc-4eb5-82c3-4c9859586165}
category app-startup ContentPermissionManager service,@mozilla.org/content-permission/manager;1

# LoginsHelper.js
component {aa0eeee6-5e1e-46a1-8b54-fbdd7cdb6e81} LoginsHelper.js
contract @mozilla.org/embedlite-loginshelper-component;1 {aa0eeee6-5e1e-46a1-8b54-fbdd7cdb6e81}
category app-startup LoginsHelper service,@mozilla.org/embedlite-loginshelper-component;1
111 changes: 111 additions & 0 deletions jscomps/LoginsHelper.js
@@ -0,0 +1,111 @@
/* 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/.
*
* Copyright (c) 2021 Open Mobile Platform LLC.
*/

const Cc = Components.classes;
const Ci = Components.interfaces;
const Cu = Components.utils;

Cu.import("resource://gre/modules/XPCOMUtils.jsm");
Cu.import("resource://gre/modules/Services.jsm");

XPCOMUtils.defineLazyServiceGetter(Services, "embedlite",
"@mozilla.org/embedlite-app-service;1",
"nsIEmbedAppService");

Services.scriptloader.loadSubScript("chrome://embedlite/content/Logger.js");

const LoginInfo = Components.Constructor("@mozilla.org/login-manager/loginInfo;1",
"nsILoginInfo", "init");

function LoginsHelper() {
Logger.debug("JSComp: LoginsHelper.js loaded");
}

LoginsHelper.prototype = {
classID: Components.ID("{aa0eeee6-5e1e-46a1-8b54-fbdd7cdb6e81}"),

QueryInterface: XPCOMUtils.generateQI([Ci.nsIObserver]),

__pwmgr : null, // Password Manager service
get _pwmgr() {
if (!this.__pwmgr)
this.__pwmgr = Cc["@mozilla.org/login-manager;1"].
getService(Ci.nsILoginManager);
return this.__pwmgr;
},

observe: function(aSubject, aTopic, aData) {
switch (aTopic) {
case "app-startup":
Services.obs.addObserver(this, "embedui:logins", false);
break;
case "embedui:logins":
var data = JSON.parse(aData);
switch (data.action) {
case "getall":
this._getAllLogins();
break;
case "modify":
this._modifyLogin(data);
break;
case "remove":
this._removeLogin(data);
break;
}
break;
}
},

_loginFromJson: function (aJson) {
return new LoginInfo(aJson.hostname,
aJson.formSubmitURL,
aJson.httpRealm,
aJson.username,
aJson.password,
aJson.usernameField,
aJson.passwordField);
},

_getAllLogins: function () {
Logger.debug("LoginsHelper, requested all logins");

// getAllLogins() returns {nsILoginInfo[]}
// If there are no logins, the array is empty.
var users = this._pwmgr.getAllLogins();
var allLogins = [];
for (var i = 0; i < users.length; ++i) {
allLogins.push({
hostname: users[i].hostname,
formSubmitURL: users[i].formSubmitURL,
httpRealm: users[i].httpRealm,
username: users[i].username,
password: users[i].password,
usernameField: users[i].usernameField,
passwordField: users[i].passwordField
});
}
Services.obs.notifyObservers(null, "embed:all-logins",
JSON.stringify(allLogins));
},

_modifyLogin: function (aData) {
Logger.debug("LoginsHelper, modify login");

var oldInfo = this._loginFromJson(aData.oldinfo);
var newInfo = this._loginFromJson(aData.newinfo);
this._pwmgr.modifyLogin(oldInfo, newInfo);
},

_removeLogin: function (aData) {
Logger.debug("LoginsHelper, remove login");

var loginInfo = this._loginFromJson(aData.login);
this._pwmgr.removeLogin(loginInfo);
},
};

this.NSGetFactory = XPCOMUtils.generateNSGetFactory([LoginsHelper]);
1 change: 1 addition & 0 deletions jscomps/Makefile.am
Expand Up @@ -22,6 +22,7 @@ jscomps_manifest_DATA = \
PromptService.js \
PrivateDataManager.js \
EmbedliteDownloadManager.js \
LoginsHelper.js \
$(NULL)

AM_CPPFLAGS = $(DEPS_CFLAGS)

0 comments on commit d347c95

Please sign in to comment.