Skip to content
This repository was archived by the owner on Aug 27, 2020. It is now read-only.

Commit bcf6bcb

Browse files
committed
second useable alpha version
* adds new feature: focus username or password field to fill-in * adds new feature: shows menu with entries to select for fill-in * removes popover related code and templates * sets a "Update Manifest URL" in Info.plist * updates Update.plist :D * deactivates start.js injection, but keeps file
1 parent 158d401 commit bcf6bcb

File tree

7 files changed

+65
-91
lines changed

7 files changed

+65
-91
lines changed

Info.plist

+6-19
Original file line numberDiff line numberDiff line change
@@ -13,26 +13,13 @@
1313
<key>CFBundleInfoDictionaryVersion</key>
1414
<string>6.0</string>
1515
<key>CFBundleShortVersionString</key>
16-
<string>1.0.alpha1</string>
16+
<string>1.0.alpha2</string>
1717
<key>CFBundleVersion</key>
18-
<string>0.8.1</string>
18+
<string>0.8.2</string>
1919
<key>Chrome</key>
2020
<dict>
2121
<key>Global Page</key>
2222
<string>global.html</string>
23-
<key>Popovers</key>
24-
<array>
25-
<dict>
26-
<key>Filename</key>
27-
<string>popovers/credentials.html</string>
28-
<key>Height</key>
29-
<string></string>
30-
<key>Identifier</key>
31-
<string>passafari_credentials</string>
32-
<key>Width</key>
33-
<string></string>
34-
</dict>
35-
</array>
3623
<key>Toolbar Items</key>
3724
<array>
3825
<dict>
@@ -46,6 +33,8 @@
4633
<true/>
4734
<key>Label</key>
4835
<string>passafari</string>
36+
<key>Menu</key>
37+
<string></string>
4938
<key>Popover</key>
5039
<string></string>
5140
</dict>
@@ -59,10 +48,6 @@
5948
<array>
6049
<string>end.js</string>
6150
</array>
62-
<key>Start</key>
63-
<array>
64-
<string>start.js</string>
65-
</array>
6651
</dict>
6752
</dict>
6853
<key>Description</key>
@@ -81,6 +66,8 @@
8166
<string>All</string>
8267
</dict>
8368
</dict>
69+
<key>Update Manifest URL</key>
70+
<string>https://raw.githubusercontent.com/mmichaa/passafari.safariextension/master/Update.plist</string>
8471
<key>Website</key>
8572
<string>https://github.com/mmichaa/passafari.safariextension/</string>
8673
</dict>

Update.plist

+3-3
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,11 @@
1010
<key>Developer Identifier</key>
1111
<string>897X8SYVFR</string>
1212
<key>CFBundleVersion</key>
13-
<string>1.0.alpha1</string>
13+
<string>1.0.alpha2</string>
1414
<key>CFBundleShortVersionString</key>
15-
<string>0.8.1</string>
15+
<string>0.8.2</string>
1616
<key>URL</key>
17-
<string>https://github.com/mmichaa/passafari.safariextension/releases/download/v1.0.alpha1/passafari-v1.0.alpha1.safariextz</string>
17+
<string>https://github.com/mmichaa/passafari.safariextension/releases/download/v1.0.alpha2/passafari-v1.0.alpha2.safariextz</string>
1818
</dict>
1919
</array>
2020
</dict>

end.js

+14-7
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,17 @@
11
console.log('passafari: end.js');
22

3-
var passafari_injected_end;
4-
53
function passafari_injected_message_handler(event) {
64
var name = event.name;
75
var data = event.message;
86

97
console.log("passafari_injected_message_handler: " + name);
108

11-
if(name === "credentials") {
9+
if(name === "passafari_credentials") {
1210
passafari_injected_credentials_handler(name, data);
1311
}
1412

1513
return undefined;
16-
};
14+
}
1715

1816
function passafari_injected_credentials_handler(event_name, event_data) {
1917
if(event_data.length === 1) {
@@ -37,10 +35,9 @@ function passafari_injected_credentials_handler(event_name, event_data) {
3735
return undefined;
3836
}
3937

40-
if(!passafari_injected_end && window.parent === window) {
41-
console.log('passafari: passafari_injected_end');
38+
if(window.parent === window) {
39+
console.log('passafari: window.top');
4240
safari.self.addEventListener("message", passafari_injected_message_handler, false);
43-
passafari_injected_end = true;
4441
}
4542

4643
function passafari_input_candidates() {
@@ -78,5 +75,15 @@ function passafari_input_candidates() {
7875
}
7976
}
8077

78+
for(var candidate_idx=0; candidate_idx < candidates.length; candidate_idx++) {
79+
var inputs = candidates[candidate_idx];
80+
81+
if (inputs.username === document.activeElement || inputs.password === document.activeElement) {
82+
console.log("passafari_input_candidates: using focused fields.")
83+
candidates = [ inputs ];
84+
break;
85+
}
86+
}
87+
8188
return candidates;
8289
}

global.js

+31-37
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
function passafari_command_handler(event) {
22
console.log("passafari_command_handler: " + event.command);
3-
if (event.command == "passafari_open") {
3+
if (event.command === "passafari_open") {
44
passafari_open(event);
5-
} else if (event.command == "passafari-associate") {
6-
passafari_associate(event);
5+
} else if (event.command === "passafari_select_credentials") {
6+
passafari_select_credentials(event);
7+
} else {
8+
console.log(event);
79
}
810
return undefined;
911
};
@@ -12,26 +14,14 @@ function passafari_message_handler(event) {
1214
console.log("passafari_message_handler: " + event.name);
1315
if (event.name == "passafari_associate") {
1416
passafari_associate(event);
17+
} else {
18+
console.log(event);
1519
}
1620
return undefined;
1721
};
1822

19-
function passafari_popover_handler(event) {
20-
console.log("passafari_popover_handler: " + event.target.identifier);
21-
22-
return undefined;
23-
}
24-
25-
function passafari_validate_handler(event) {
26-
console.log("passafari_validate_handler: " + event.command);
27-
return undefined;
28-
}
29-
3023
safari.application.addEventListener("command", passafari_command_handler, false);
3124
safari.application.addEventListener("message", passafari_message_handler, false);
32-
safari.application.addEventListener("popover", passafari_popover_handler, true);
33-
safari.application.addEventListener("validate", passafari_validate_handler, true);
34-
3525

3626
function passafari_open(event) {
3727
passafari_associate();
@@ -41,7 +31,7 @@ function passafari_open(event) {
4131
} else if (credentials.length === 1) {
4232
passafari_notify_injected(credentials);
4333
} else {
44-
//passafari_display_credentials(credentials);
34+
passafari_display_credentials(credentials);
4535
}
4636
});
4737

@@ -69,7 +59,7 @@ function passafari_retrieve_credentials(callback) {
6959
var tab = undefined;
7060
var url = safari.application.activeBrowserWindow.activeTab.url;
7161
var submiturl = undefined;
72-
var forceCallback = function() {};
62+
var forceCallback = false;
7363
var triggerUnlock = true;
7464

7565
if(callback && url) {
@@ -80,34 +70,38 @@ function passafari_retrieve_credentials(callback) {
8070
}
8171

8272
function passafari_display_credentials(credentials) {
83-
var toolbar_item = safari.extension.toolbarItems[0];
73+
var toolbarItem = safari.extension.toolbarItems[0];
8474

85-
if(!toolbar_item.popover) {
86-
var width = 300;
87-
var height = 400;
75+
safari.extension.removeMenu("passafari_credentials");
76+
var menu = safari.extension.createMenu("passafari_credentials");
8877

89-
var popover = safari.extension.createPopover("credentials", safari.extension.baseURI + "popovers/credentials.html", width, height);
78+
for(var idx = 0; idx < credentials.length; idx++) {
79+
var credential = credentials[idx];
9080

91-
toolbar_item.popover = popover;
81+
menu.appendMenuItem("passafari_credentials_" + idx, credential.Login + " | " + credential.Name, "passafari_select_credentials");
9282
}
9383

94-
var popover_document = toolbar_item.popover.contentWindow.document;
95-
var ul = popover_document.getElementById("credentials-list");
96-
ul.innerHTML = "";
84+
toolbarItem.menu = menu;
85+
toolbarItem.showMenu();
9786

98-
for(var idx = 0; idx < credentials.length; idx++) {
99-
var credential = credentials[idx];
100-
var li = popover_document.createElement("li");
101-
var li_text = popover_document.createTextNode(credential.Login + ' | ' + credential.Name);
102-
li.appendChild(li_text);
103-
ul.appendChild(li);
104-
}
87+
return undefined;
88+
}
89+
90+
function passafari_select_credentials(event) {
91+
var idx = parseInt( event.target.identifier.split("_").pop() );
10592

106-
toolbar_item.showPopover();
93+
passafari_retrieve_credentials(function(credentials) {
94+
if (credentials.length === 0) {
95+
} else if (credentials.length === 1) {
96+
passafari_notify_injected(credentials);
97+
} else {
98+
passafari_notify_injected([ credentials[idx] ]);
99+
}
100+
});
107101

108102
return undefined;
109103
}
110104

111105
function passafari_notify_injected(credentials) {
112-
safari.application.activeBrowserWindow.activeTab.page.dispatchMessage("credentials", credentials);
106+
safari.application.activeBrowserWindow.activeTab.page.dispatchMessage("passafari_credentials", credentials);
113107
}

javascripts/keepass.js

+8-7
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ keepass.updateCredentials = function(callback, tab, entryId, username, password,
4949

5050
// is browser associated to keepass?
5151
if(!keepass.testAssociation(tab)) {
52-
browserAction.showDefault(null, tab);
52+
//browserAction.showDefault(null, tab);
5353
callback("error");
5454
return;
5555
}
@@ -102,7 +102,7 @@ keepass.retrieveCredentials = function (callback, tab, url, submiturl, forceCall
102102

103103
// is browser associated to keepass?
104104
if(!keepass.testAssociation(tab, triggerUnlock)) {
105-
browserAction.showDefault(null, tab);
105+
//browserAction.showDefault(null, tab);
106106
if(forceCallback) {
107107
callback([]);
108108
}
@@ -146,15 +146,16 @@ keepass.retrieveCredentials = function (callback, tab, url, submiturl, forceCall
146146
keepass.updateLastUsed(keepass.databaseHash);
147147
if(entries.length == 0) {
148148
//questionmark-icon is not triggered, so we have to trigger for the normal symbol
149-
browserAction.showDefault(null, tab);
149+
//browserAction.showDefault(null, tab);
150+
console.log("No credentials found for " + url + ".");
150151
}
151152
}
152153
else {
153-
console.log("RetrieveCredentials for " + url + " rejected");
154+
console.log("Retrieve credentials for " + url + " rejected.");
154155
}
155156
}
156157
else {
157-
browserAction.showDefault(null, tab);
158+
//browserAction.showDefault(null, tab);
158159
}
159160

160161
//page.debug("keepass.retrieveCredentials() => entries.length = {1}", entries.length);
@@ -166,7 +167,7 @@ keepass.retrieveCredentials = function (callback, tab, url, submiturl, forceCall
166167
keepass.generatePassword = function (callback, tab, forceCallback) {
167168
// is browser associated to keepass?
168169
if(!keepass.testAssociation(tab)) {
169-
browserAction.showDefault(null, tab);
170+
//browserAction.showDefault(null, tab);
170171
if(forceCallback) {
171172
callback([]);
172173
}
@@ -217,7 +218,7 @@ keepass.generatePassword = function (callback, tab, forceCallback) {
217218
}
218219
}
219220
else {
220-
browserAction.showDefault(null, tab);
221+
//browserAction.showDefault(null, tab);
221222
}
222223

223224
callback(passwords);

popovers/credentials.html

-10
This file was deleted.

start.js

+3-8
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,5 @@
1-
/*
21
console.log('passafari: start.js');
32

4-
var passafari_injected_start;
5-
6-
if(!passafari_injected_start && window.parent === window) {
7-
console.log('passafari: passafari_injected_start');
8-
passafari_injected_start = true;
9-
}
10-
*/
3+
if(window.parent === window) {
4+
console.log('passafari: window.top');
5+
}

0 commit comments

Comments
 (0)