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

Commit

Permalink
third useable alpha version
Browse files Browse the repository at this point in the history
* adds new feature: adds filled-in credentials if none exist
* updates version Info.plist and Update.plist
* removes unused start.js
  • Loading branch information
mmichaa committed Oct 30, 2014
1 parent bcf6bcb commit 2b6838c
Show file tree
Hide file tree
Showing 5 changed files with 148 additions and 38 deletions.
4 changes: 2 additions & 2 deletions Info.plist
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,9 @@
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleShortVersionString</key>
<string>1.0.alpha2</string>
<string>1.0.alpha3</string>
<key>CFBundleVersion</key>
<string>0.8.2</string>
<string>0.8.3</string>
<key>Chrome</key>
<dict>
<key>Global Page</key>
Expand Down
6 changes: 3 additions & 3 deletions Update.plist
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,11 @@
<key>Developer Identifier</key>
<string>897X8SYVFR</string>
<key>CFBundleVersion</key>
<string>1.0.alpha2</string>
<string>1.0.alpha3</string>
<key>CFBundleShortVersionString</key>
<string>0.8.2</string>
<string>0.8.3</string>
<key>URL</key>
<string>https://github.com/mmichaa/passafari.safariextension/releases/download/v1.0.alpha2/passafari-v1.0.alpha2.safariextz</string>
<string>https://github.com/mmichaa/passafari.safariextension/releases/download/v1.0.alpha3/passafari-v1.0.alpha3.safariextz</string>
</dict>
</array>
</dict>
Expand Down
37 changes: 34 additions & 3 deletions end.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,21 @@ function passafari_injected_message_handler(event) {

if(name === "passafari_credentials") {
passafari_injected_credentials_handler(name, data);
} else if(name === "passafari_retrieve") {
passafari_injected_retrieve_handler(name, data);
} else {
console.log(data);
}

return undefined;
}

if(window.parent === window) {
console.log('passafari: window.top');
safari.self.addEventListener("message", passafari_injected_message_handler, false);
}

// CALLED by passafari_injected_message_handler
function passafari_injected_credentials_handler(event_name, event_data) {
if(event_data.length === 1) {
var credentials = event_data[0];
Expand All @@ -35,11 +45,32 @@ function passafari_injected_credentials_handler(event_name, event_data) {
return undefined;
}

if(window.parent === window) {
console.log('passafari: window.top');
safari.self.addEventListener("message", passafari_injected_message_handler, false);
// CALLED by passafari_injected_message_handler
function passafari_injected_retrieve_handler(event_name, event_data) {
var input_candidates = passafari_input_candidates();

if(input_candidates.length === 1) {
var inputs = input_candidates[0];

var username = inputs.username.value;
var password = inputs.password.value;

passafari_notify_global_page("passafari_save", {"Login": username, "Password": password});
} else {
console.log("passafari_injected_retrieve_handler: more than one inputs found.")
console.log(inputs);
}

return undefined;
}

// UTILS end.js related
function passafari_notify_global_page(msg_name, msg_data) {
safari.self.tab.dispatchMessage(msg_name, msg_data);
return undefined;
}

// UTILS end.js related
function passafari_input_candidates() {
var candidates = [];

Expand Down
134 changes: 109 additions & 25 deletions global.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ function passafari_command_handler(event) {
passafari_open(event);
} else if (event.command === "passafari_select_credentials") {
passafari_select_credentials(event);
} else if (event.command === "passafari_select_save") {
passafari_select_save(event);
} else {
console.log(event);
}
Expand All @@ -12,24 +14,28 @@ function passafari_command_handler(event) {

function passafari_message_handler(event) {
console.log("passafari_message_handler: " + event.name);
if (event.name == "passafari_associate") {
passafari_associate(event);
if (event.name == "passafari_save") {
passafari_save(event);
} else {
console.log(event);
}
return undefined;
};

safari.application.addEventListener("command", passafari_command_handler, false);
safari.application.addEventListener("message", passafari_message_handler, false);
safari.application.addEventListener("command", passafari_command_handler, false);
safari.application.addEventListener("message", passafari_message_handler, false);


// CALLED by passafari_command_handler
function passafari_open(event) {
passafari_associate();
passafari_credentials_cache(null);

passafari_retrieve_credentials(function(credentials) {
if (credentials.length === 0) {
passafari_notify_injected("passafari_retrieve");
} else if (credentials.length === 1) {
passafari_notify_injected(credentials);
passafari_notify_injected("passafari_credentials", credentials);
} else {
passafari_display_credentials(credentials);
}
Expand All @@ -38,6 +44,99 @@ function passafari_open(event) {
return undefined;
}

// CALLED by passafari_command_handler
function passafari_select_credentials(event) {
var idx = parseInt( event.target.identifier.split("_").pop() );
var credentials = passafari_credentials_cache(null);

if (credentials.length === 0) {
// NOOP
} else if (credentials.length === 1) {
passafari_notify_injected("passafari_credentials", credentials);
} else {
passafari_notify_injected("passafari_credentials", [ credentials[idx] ]);
}

return undefined;
}

// CALLED by passafari_command_handler
function passafari_select_save(event) {
var idx = parseInt( event.target.identifier.split("_").pop() );
var credentials = passafari_credentials_cache(null);
var credential = credentials[idx];

if(credential) {
var callback = function(code) { console.log("passafari_save: response code '" + code + "'.") };
var tab = undefined;
var entryId = credential.Uuid;
var username = credential.Login;
var password = credential.Password;
var url = safari.application.activeBrowserWindow.activeTab.url;

keepass.updateCredentials(callback, tab, entryId, username, password, url);
} else {
console.log("passafari_select_save: no credential found in cache for index '" + idx + "'.");
}

return undefined;
}

// CALLED by passafari_message_handler
function passafari_save(event) {
console.log("passafari_save:");
console.log(event);

var credentials = passafari_credentials_cache(null) || [];
var credential = event.message;

if (credentials.length === 0) {
if (credential && credential.Login.length > 0) {
var toolbarItem = passafari_toolbar_item();

safari.extension.removeMenu("passafari_save");
var menu = safari.extension.createMenu("passafari_save");

menu.appendMenuItem("passafari_credentials_0", credential.Login + " | Add", "passafari_select_save");

passafari_credentials_cache([credential]);

toolbarItem.menu = menu;
toolbarItem.showMenu();
}
} else if (credentials.length === 1) {
// NOOP
} else {
// NOOP
}
}

// UTILS global.js related
function passafari_toolbar_item() {
return safari.extension.toolbarItems[0];
}

// UTILS global.js related
function passafari_notify_injected(msg_name, msg_data) {
safari.application.activeBrowserWindow.activeTab.page.dispatchMessage(msg_name, msg_data);
return undefined;
}

// UTILS global.js related
function passafari_credentials_cache(credentials) {
if (credentials === undefined) {
credentials = safari.extension.secureSettings['credentials_cache'];
} else if (credentials === null) {
credentials = safari.extension.secureSettings['credentials_cache'];
delete safari.extension.secureSettings['credentials_cache'];
} else {
safari.extension.secureSettings['credentials_cache'] = credentials;
}

return credentials;
}

// UTILS global.js related
function passafari_associate(event) {
if(keepass.isConfigured()) {
if(keepass.isAssociated()) {
Expand All @@ -55,6 +154,7 @@ function passafari_associate(event) {
return undefined;
}

// UTILS global.js related
function passafari_retrieve_credentials(callback) {
var tab = undefined;
var url = safari.application.activeBrowserWindow.activeTab.url;
Expand All @@ -69,8 +169,9 @@ function passafari_retrieve_credentials(callback) {
return undefined;
}

// UTILS global.js related
function passafari_display_credentials(credentials) {
var toolbarItem = safari.extension.toolbarItems[0];
var toolbarItem = passafari_toolbar_item();

safari.extension.removeMenu("passafari_credentials");
var menu = safari.extension.createMenu("passafari_credentials");
Expand All @@ -81,27 +182,10 @@ function passafari_display_credentials(credentials) {
menu.appendMenuItem("passafari_credentials_" + idx, credential.Login + " | " + credential.Name, "passafari_select_credentials");
}

passafari_credentials_cache(credentials);

toolbarItem.menu = menu;
toolbarItem.showMenu();

return undefined;
}

function passafari_select_credentials(event) {
var idx = parseInt( event.target.identifier.split("_").pop() );

passafari_retrieve_credentials(function(credentials) {
if (credentials.length === 0) {
} else if (credentials.length === 1) {
passafari_notify_injected(credentials);
} else {
passafari_notify_injected([ credentials[idx] ]);
}
});

return undefined;
}

function passafari_notify_injected(credentials) {
safari.application.activeBrowserWindow.activeTab.page.dispatchMessage("passafari_credentials", credentials);
}
5 changes: 0 additions & 5 deletions start.js

This file was deleted.

0 comments on commit 2b6838c

Please sign in to comment.