X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=jappixmini%2Flib.js;h=31302732874ea9c6bf186c4e981442f34ec2cd57;hb=83425a7f269e57cf9d3959da59bfd4191e86ee91;hp=6b7031e6bc6bab8e723760f175181f5ae00318a3;hpb=fb7f2b1122c19eae058482ac4c86cf0d9f55d082;p=friendica-addons.git diff --git a/jappixmini/lib.js b/jappixmini/lib.js index 6b7031e6..31302732 100644 --- a/jappixmini/lib.js +++ b/jappixmini/lib.js @@ -1,9 +1,15 @@ +// +// Copyright 2012 "Leberwurscht" +// +// This file is dual-licensed under the MIT license (see MIT.txt) and the AGPL license (see jappix/COPYING). +// + function jappixmini_addon_xor(str1, str2) { if (str1.length != str2.length) throw "not same length"; - encoded = ""; + var encoded = ""; - for (i=0; iRetype your Friendica password for chatting:
'); + div = $('
Retype your Friendica password for chatting:
'); - input = $('') + var input = $('') div.append(input); - button = $(''); + var button = $(''); div.append(button); $("body").append(div); } button.click(function(){ - password = $("#jappixmini-password-query-input").val(); + var password = $("#jappixmini-password-query-input").val(); jappixmini_addon_set_client_secret(password); div.remove(); - client_secret = getPersistent('jappix-mini', 'client-secret'); + var client_secret = getPersistent('jappix-mini', 'client-secret'); callback(client_secret); }); } @@ -68,7 +74,7 @@ function jappixmini_addon_encrypt_password(password, callback) { } // 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) callback(encrypted_password); @@ -80,10 +86,10 @@ function jappixmini_addon_decrypt_password(encrypted_password, callback) { jappixmini_addon_get_client_secret(function(client_secret){ // xor password with secret - password = jappixmini_addon_xor(client_secret, encrypted_password); + var password = jappixmini_addon_xor(client_secret, encrypted_password); // remove \0 - first_null = password.indexOf("\0") + var first_null = password.indexOf("\0") if (first_null==-1) throw "Decrypted password does not contain \\0"; password = password.substr(0, first_null); @@ -101,6 +107,8 @@ function jappixmini_manage_roster(contacts, contacts_hash, autoapprove, autosubs var xid = bareXID(from); var pstatus = presence.getStatus(); + var approve; + if (autoapprove && contacts[xid]!==undefined) { // approve known address approve = true; @@ -117,7 +125,7 @@ function jappixmini_manage_roster(contacts, contacts_hash, autoapprove, autosubs } else { // 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; approve = confirm(message); @@ -126,19 +134,19 @@ function jappixmini_manage_roster(contacts, contacts_hash, autoapprove, autosubs } if (approve) { - name = contacts[xid]; + var name = contacts[xid]; if (!name) name = xid; - acceptSubscribe(xid, contacts[xid]); - console.log("Accepted "+xid+" for chat."); + acceptSubscribe(xid, name); + console.log("Accepted "+xid+" ("+name+") for chat."); } }); // autosubscribe if (!autosubscribe) return; - stored_hash = getPersistent("jappix-mini", "contacts-hash"); - contacts_changed = (stored_hash != contacts_hash); // stored_hash gets updated later if everything was successful + var stored_hash = getPersistent("jappix-mini", "contacts-hash"); + var contacts_changed = (stored_hash != contacts_hash); // stored_hash gets updated later if everything was successful if (!contacts_changed) return; console.log("Start autosubscribe."); @@ -152,24 +160,29 @@ function jappixmini_manage_roster(contacts, contacts_hash, autoapprove, autosubs // filter out contacts that are already in the roster $(handleXML).find('item').each(function() { - xid = $(this).attr("jid"); - name = $(this).attr("name"); - subscription = $(this).attr("subscription"); + var node = $(this); + var xid = node.attr("jid"); + 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; - // add to Friendica group if necessary - groups = []; - $(this).find('group').each(function() { + // add to Friendica group or change name if necessary + var groups = []; + var group_missing = false; + node.find('group').each(function() { var group_text = $(this).text(); - if(group_text) groups.push(group_text); + if (group_text) groups.push(group_text); }); - if ($.inArray("Friendica", groups)==-1) { + group_missing = true; groups.push("Friendica"); - sendRoster(xid, null, null, groups); - console.log("Added "+xid+" to Friendica group."); + } + + if (group_missing || name!=contacts[xid]) { + sendRoster(xid, null, contacts[xid], groups); + console.log("Added "+xid+" to Friendica group and set name to "+contacts[xid]+"."); } // authorize if necessary @@ -204,7 +217,7 @@ function jappixmini_manage_roster(contacts, contacts_hash, autoapprove, autosubs item.setAttribute('name', contacts[xid]); item.appendChild(iq.buildNode('group', {'xmlns': NS_ROSTER}, "Friendica")); con.send(iq); - console.log("Added "+xid+" to roster."); + console.log("Added "+xid+" ("+contacts[xid]+") to roster."); } setPersistent("jappix-mini", "contacts-hash", contacts_hash); @@ -219,21 +232,21 @@ function jappixmini_addon_subscribe() { return; } - xid = prompt("Jabber address"); + var xid = prompt("Jabber address"); sendSubscribe(xid, "subscribe"); } -function jappixmini_addon_start(server, username, proxy, bosh, encrypted, password, nickname, contacts, contacts_hash, autoapprove, autosubscribe) { - handler = function(password){ +function jappixmini_addon_start(server, username, proxy, bosh, encrypted, password, nickname, contacts, contacts_hash, autoapprove, autosubscribe, groupchats) { + var handler = function(password){ // 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(proxy); settings_identifier += str_sha1(bosh); settings_identifier += str_sha1(password); 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) { disconnectMini(); removeDB('jappix-mini', 'dom'); @@ -241,19 +254,20 @@ function jappixmini_addon_start(server, username, proxy, bosh, encrypted, passwo } setDB("jappix-mini", "settings-identifier", settings_identifier); - // set HOST_BOSH - if (proxy) - HOST_BOSH = proxy+"?host_bosh="+encodeURI(bosh); - else - HOST_BOSH = bosh; + // set HOST_BOSH + if (proxy) + HOST_BOSH = proxy+"?host_bosh="+encodeURI(bosh); + else + HOST_BOSH = bosh; // start jappix mini + MINI_GROUPCHATS = groupchats; MINI_NICKNAME = nickname; LOCK_HOST = "off"; launchMini(true, false, server, username, password); // increase priority over other Jabber clients - does not seem to work? - priority = 101; + var priority = 101; presenceMini(null,null,priority); jappixmini_manage_roster(contacts, contacts_hash, autoapprove, autosubscribe)