jappixmini: spare global js namespace
parent
6846c0658b
commit
2fef298b3e
|
@ -1,9 +1,9 @@
|
||||||
function jappixmini_addon_xor(str1, str2) {
|
function jappixmini_addon_xor(str1, str2) {
|
||||||
if (str1.length != str2.length) throw "not same length";
|
if (str1.length != str2.length) throw "not same length";
|
||||||
|
|
||||||
encoded = "";
|
var encoded = "";
|
||||||
|
|
||||||
for (i=0; i<str1.length;i++) {
|
for (var i=0; i<str1.length;i++) {
|
||||||
var a = str1.charCodeAt(i);
|
var a = str1.charCodeAt(i);
|
||||||
var b = str2.charCodeAt(i);
|
var b = str2.charCodeAt(i);
|
||||||
var c = a ^ b;
|
var c = a ^ b;
|
||||||
|
@ -17,40 +17,40 @@ function jappixmini_addon_xor(str1, str2) {
|
||||||
function jappixmini_addon_set_client_secret(password) {
|
function jappixmini_addon_set_client_secret(password) {
|
||||||
if (!password) return;
|
if (!password) return;
|
||||||
|
|
||||||
salt1 = "h8doCRekWto0njyQohKpdx6BN0UTyC6N";
|
var salt1 = "h8doCRekWto0njyQohKpdx6BN0UTyC6N";
|
||||||
salt2 = "jdX8OwFC1kWAq3s9uOyAcE8g3UNNO5t3";
|
var salt2 = "jdX8OwFC1kWAq3s9uOyAcE8g3UNNO5t3";
|
||||||
|
|
||||||
client_secret1 = str_sha1(salt1+password);
|
var client_secret1 = str_sha1(salt1+password);
|
||||||
client_secret2 = str_sha1(salt2+password);
|
var client_secret2 = str_sha1(salt2+password);
|
||||||
client_secret = client_secret1 + client_secret2;
|
var client_secret = client_secret1 + client_secret2;
|
||||||
|
|
||||||
setPersistent('jappix-mini', 'client-secret', client_secret);
|
setPersistent('jappix-mini', 'client-secret', client_secret);
|
||||||
console.log("client secret set");
|
console.log("client secret set");
|
||||||
}
|
}
|
||||||
|
|
||||||
function jappixmini_addon_get_client_secret(callback) {
|
function jappixmini_addon_get_client_secret(callback) {
|
||||||
client_secret = getPersistent('jappix-mini', 'client-secret');
|
var client_secret = getPersistent('jappix-mini', 'client-secret');
|
||||||
if (client_secret===null) {
|
if (client_secret===null) {
|
||||||
div = document.getElementById("#jappixmini-password-query-div");
|
var div = document.getElementById("#jappixmini-password-query-div");
|
||||||
|
|
||||||
if (!div) {
|
if (!div) {
|
||||||
div = $('<div id="jappixmini-password-query-div" style="position:fixed;padding:1em;background-color:#F00;color:#fff;top:50px;left:50px;">Retype your Friendica password for chatting:<br></div>');
|
div = $('<div id="jappixmini-password-query-div" style="position:fixed;padding:1em;background-color:#F00;color:#fff;top:50px;left:50px;">Retype your Friendica password for chatting:<br></div>');
|
||||||
|
|
||||||
input = $('<input type="password" id="jappixmini-password-query-input">')
|
var input = $('<input type="password" id="jappixmini-password-query-input">')
|
||||||
div.append(input);
|
div.append(input);
|
||||||
|
|
||||||
button = $('<input type="button" value="OK" id="jappixmini-password-query-button">');
|
var button = $('<input type="button" value="OK" id="jappixmini-password-query-button">');
|
||||||
div.append(button);
|
div.append(button);
|
||||||
|
|
||||||
$("body").append(div);
|
$("body").append(div);
|
||||||
}
|
}
|
||||||
|
|
||||||
button.click(function(){
|
button.click(function(){
|
||||||
password = $("#jappixmini-password-query-input").val();
|
var password = $("#jappixmini-password-query-input").val();
|
||||||
jappixmini_addon_set_client_secret(password);
|
jappixmini_addon_set_client_secret(password);
|
||||||
div.remove();
|
div.remove();
|
||||||
|
|
||||||
client_secret = getPersistent('jappix-mini', 'client-secret');
|
var client_secret = getPersistent('jappix-mini', 'client-secret');
|
||||||
callback(client_secret);
|
callback(client_secret);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -68,7 +68,7 @@ function jappixmini_addon_encrypt_password(password, callback) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// xor password with secret
|
// xor password with secret
|
||||||
encrypted_password = jappixmini_addon_xor(client_secret, password);
|
var encrypted_password = jappixmini_addon_xor(client_secret, password);
|
||||||
|
|
||||||
encrypted_password = encodeURI(encrypted_password)
|
encrypted_password = encodeURI(encrypted_password)
|
||||||
callback(encrypted_password);
|
callback(encrypted_password);
|
||||||
|
@ -80,10 +80,10 @@ function jappixmini_addon_decrypt_password(encrypted_password, callback) {
|
||||||
|
|
||||||
jappixmini_addon_get_client_secret(function(client_secret){
|
jappixmini_addon_get_client_secret(function(client_secret){
|
||||||
// xor password with secret
|
// xor password with secret
|
||||||
password = jappixmini_addon_xor(client_secret, encrypted_password);
|
var password = jappixmini_addon_xor(client_secret, encrypted_password);
|
||||||
|
|
||||||
// remove \0
|
// remove \0
|
||||||
first_null = password.indexOf("\0")
|
var first_null = password.indexOf("\0")
|
||||||
if (first_null==-1) throw "Decrypted password does not contain \\0";
|
if (first_null==-1) throw "Decrypted password does not contain \\0";
|
||||||
password = password.substr(0, first_null);
|
password = password.substr(0, first_null);
|
||||||
|
|
||||||
|
@ -101,6 +101,8 @@ function jappixmini_manage_roster(contacts, contacts_hash, autoapprove, autosubs
|
||||||
var xid = bareXID(from);
|
var xid = bareXID(from);
|
||||||
var pstatus = presence.getStatus();
|
var pstatus = presence.getStatus();
|
||||||
|
|
||||||
|
var approve;
|
||||||
|
|
||||||
if (autoapprove && contacts[xid]!==undefined) {
|
if (autoapprove && contacts[xid]!==undefined) {
|
||||||
// approve known address
|
// approve known address
|
||||||
approve = true;
|
approve = true;
|
||||||
|
@ -117,7 +119,7 @@ function jappixmini_manage_roster(contacts, contacts_hash, autoapprove, autosubs
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
// In all other cases, ask the user.
|
// In all other cases, ask the user.
|
||||||
message = "Accept "+xid+" for chat?";
|
var message = "Accept "+xid+" for chat?";
|
||||||
if (pstatus) message += "\n\nStatus:\n"+pstatus;
|
if (pstatus) message += "\n\nStatus:\n"+pstatus;
|
||||||
approve = confirm(message);
|
approve = confirm(message);
|
||||||
|
|
||||||
|
@ -126,10 +128,10 @@ function jappixmini_manage_roster(contacts, contacts_hash, autoapprove, autosubs
|
||||||
}
|
}
|
||||||
|
|
||||||
if (approve) {
|
if (approve) {
|
||||||
name = contacts[xid];
|
var name = contacts[xid];
|
||||||
if (!name) name = xid;
|
if (!name) name = xid;
|
||||||
|
|
||||||
acceptSubscribe(xid, contacts[xid]);
|
acceptSubscribe(xid, name);
|
||||||
console.log("Accepted "+xid+" for chat.");
|
console.log("Accepted "+xid+" for chat.");
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -137,8 +139,8 @@ function jappixmini_manage_roster(contacts, contacts_hash, autoapprove, autosubs
|
||||||
// autosubscribe
|
// autosubscribe
|
||||||
if (!autosubscribe) return;
|
if (!autosubscribe) return;
|
||||||
|
|
||||||
stored_hash = getPersistent("jappix-mini", "contacts-hash");
|
var stored_hash = getPersistent("jappix-mini", "contacts-hash");
|
||||||
contacts_changed = (stored_hash != contacts_hash); // stored_hash gets updated later if everything was successful
|
var contacts_changed = (stored_hash != contacts_hash); // stored_hash gets updated later if everything was successful
|
||||||
if (!contacts_changed) return;
|
if (!contacts_changed) return;
|
||||||
|
|
||||||
console.log("Start autosubscribe.");
|
console.log("Start autosubscribe.");
|
||||||
|
@ -152,18 +154,19 @@ function jappixmini_manage_roster(contacts, contacts_hash, autoapprove, autosubs
|
||||||
|
|
||||||
// filter out contacts that are already in the roster
|
// filter out contacts that are already in the roster
|
||||||
$(handleXML).find('item').each(function() {
|
$(handleXML).find('item').each(function() {
|
||||||
xid = $(this).attr("jid");
|
var node = $(this);
|
||||||
name = $(this).attr("name");
|
var xid = node.attr("jid");
|
||||||
subscription = $(this).attr("subscription");
|
var name = node.attr("name");
|
||||||
|
var subscription = node.attr("subscription");
|
||||||
|
|
||||||
// ignore accounts not in the list
|
// ignore accounts that are not in the list
|
||||||
if (contacts[xid]===undefined) return;
|
if (contacts[xid]===undefined) return;
|
||||||
|
|
||||||
// add to Friendica group if necessary
|
// add to Friendica group if necessary
|
||||||
groups = [];
|
var groups = [];
|
||||||
$(this).find('group').each(function() {
|
node.find('group').each(function() {
|
||||||
var group_text = $(this).text();
|
var group_text = $(this).text();
|
||||||
if(group_text) groups.push(group_text);
|
if (group_text) groups.push(group_text);
|
||||||
});
|
});
|
||||||
|
|
||||||
if ($.inArray("Friendica", groups)==-1) {
|
if ($.inArray("Friendica", groups)==-1) {
|
||||||
|
@ -219,21 +222,21 @@ function jappixmini_addon_subscribe() {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
xid = prompt("Jabber address");
|
var xid = prompt("Jabber address");
|
||||||
sendSubscribe(xid, "subscribe");
|
sendSubscribe(xid, "subscribe");
|
||||||
}
|
}
|
||||||
|
|
||||||
function jappixmini_addon_start(server, username, proxy, bosh, encrypted, password, nickname, contacts, contacts_hash, autoapprove, autosubscribe) {
|
function jappixmini_addon_start(server, username, proxy, bosh, encrypted, password, nickname, contacts, contacts_hash, autoapprove, autosubscribe) {
|
||||||
handler = function(password){
|
var handler = function(password){
|
||||||
// check if settings have changed, reinitialize jappix mini if this is the case
|
// check if settings have changed, reinitialize jappix mini if this is the case
|
||||||
settings_identifier = str_sha1(server);
|
var settings_identifier = str_sha1(server);
|
||||||
settings_identifier += str_sha1(username);
|
settings_identifier += str_sha1(username);
|
||||||
settings_identifier += str_sha1(proxy);
|
settings_identifier += str_sha1(proxy);
|
||||||
settings_identifier += str_sha1(bosh);
|
settings_identifier += str_sha1(bosh);
|
||||||
settings_identifier += str_sha1(password);
|
settings_identifier += str_sha1(password);
|
||||||
settings_identifier += str_sha1(nickname);
|
settings_identifier += str_sha1(nickname);
|
||||||
|
|
||||||
saved_identifier = getDB("jappix-mini", "settings-identifier");
|
var saved_identifier = getDB("jappix-mini", "settings-identifier");
|
||||||
if (saved_identifier != settings_identifier) {
|
if (saved_identifier != settings_identifier) {
|
||||||
disconnectMini();
|
disconnectMini();
|
||||||
removeDB('jappix-mini', 'dom');
|
removeDB('jappix-mini', 'dom');
|
||||||
|
@ -241,11 +244,11 @@ function jappixmini_addon_start(server, username, proxy, bosh, encrypted, passwo
|
||||||
}
|
}
|
||||||
setDB("jappix-mini", "settings-identifier", settings_identifier);
|
setDB("jappix-mini", "settings-identifier", settings_identifier);
|
||||||
|
|
||||||
// set HOST_BOSH
|
// set HOST_BOSH
|
||||||
if (proxy)
|
if (proxy)
|
||||||
HOST_BOSH = proxy+"?host_bosh="+encodeURI(bosh);
|
HOST_BOSH = proxy+"?host_bosh="+encodeURI(bosh);
|
||||||
else
|
else
|
||||||
HOST_BOSH = bosh;
|
HOST_BOSH = bosh;
|
||||||
|
|
||||||
// start jappix mini
|
// start jappix mini
|
||||||
MINI_NICKNAME = nickname;
|
MINI_NICKNAME = nickname;
|
||||||
|
@ -253,7 +256,7 @@ function jappixmini_addon_start(server, username, proxy, bosh, encrypted, passwo
|
||||||
launchMini(true, false, server, username, password);
|
launchMini(true, false, server, username, password);
|
||||||
|
|
||||||
// increase priority over other Jabber clients - does not seem to work?
|
// increase priority over other Jabber clients - does not seem to work?
|
||||||
priority = 101;
|
var priority = 101;
|
||||||
presenceMini(null,null,priority);
|
presenceMini(null,null,priority);
|
||||||
|
|
||||||
jappixmini_manage_roster(contacts, contacts_hash, autoapprove, autosubscribe)
|
jappixmini_manage_roster(contacts, contacts_hash, autoapprove, autosubscribe)
|
||||||
|
|
Loading…
Reference in New Issue