mirror of
https://git.friendi.ca/friendica/friendica-addons.git
synced 2024-11-29 18:53:21 +00:00
jappixmini: wait for client secret to be set
This commit is contained in:
parent
cc1f35c61b
commit
6034ba3263
2 changed files with 77 additions and 57 deletions
|
@ -270,7 +270,9 @@ function jappixmini_settings(&$a, &$s) {
|
||||||
|
|
||||||
if (friendica_password) {
|
if (friendica_password) {
|
||||||
jappixmini_addon_set_client_secret(friendica_password.value);
|
jappixmini_addon_set_client_secret(friendica_password.value);
|
||||||
password.value = jappixmini_addon_encrypt_password(clear_password.value);
|
jappixmini_addon_encrypt_password(clear_password.value, function(encrypted_password){
|
||||||
|
password.value = encrypted_password;
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
@ -283,7 +285,9 @@ function jappixmini_settings(&$a, &$s) {
|
||||||
password = document.getElementById('jappixmini-password');
|
password = document.getElementById('jappixmini-password');
|
||||||
clear_password = document.getElementById('jappixmini-clear-password');
|
clear_password = document.getElementById('jappixmini-clear-password');
|
||||||
if (encrypt) {
|
if (encrypt) {
|
||||||
clear_password.value = jappixmini_addon_decrypt_password(password.value);
|
jappixmini_addon_decrypt_password(password.value, function(decrypted_password){
|
||||||
|
clear_password.value = decrypted_password;
|
||||||
|
});
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
clear_password.value = password.value;
|
clear_password.value = password.value;
|
||||||
|
|
|
@ -24,33 +24,43 @@ function jappixmini_addon_set_client_secret(password) {
|
||||||
client_secret2 = str_sha1(salt2+password);
|
client_secret2 = str_sha1(salt2+password);
|
||||||
client_secret = client_secret1 + client_secret2;
|
client_secret = client_secret1 + client_secret2;
|
||||||
|
|
||||||
setDB('jappix-mini', 'client_secret', client_secret);
|
setDB('jappix-mini', 'client-secret', client_secret);
|
||||||
console.log("client secret set");
|
console.log("client secret set");
|
||||||
}
|
}
|
||||||
|
|
||||||
function jappixmini_addon_get_client_secret() {
|
function jappixmini_addon_get_client_secret(callback) {
|
||||||
client_secret = getDB('jappix-mini', 'client_secret');
|
client_secret = getDB('jappix-mini', 'client-secret');
|
||||||
if (client_secret===null) {
|
if (client_secret===null) {
|
||||||
div = $('<div style="position:fixed;padding:1em;background-color:#F00;color:#fff;top:50px;left:50px;">Retype your Friendica password for chatting:</div>');
|
div = document.getElementById("#jappixmini-password-query-div");
|
||||||
div.append($("<br>"));
|
|
||||||
input = $('<input type="password">')
|
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>');
|
||||||
|
|
||||||
|
input = $('<input type="password" id="jappixmini-password-query-input">')
|
||||||
div.append(input);
|
div.append(input);
|
||||||
button = $('<input type="button" value="OK">');
|
|
||||||
button.click(function(){
|
button = $('<input type="button" value="OK" id="jappixmini-password-query-button">');
|
||||||
password = input.val();
|
|
||||||
jappixmini_addon_set_client_secret(password);
|
|
||||||
div.remove();
|
|
||||||
});
|
|
||||||
div.append(button);
|
div.append(button);
|
||||||
|
|
||||||
$("body").append(div);
|
$("body").append(div);
|
||||||
}
|
}
|
||||||
|
|
||||||
return client_secret;
|
button.click(function(){
|
||||||
|
password = $("#jappixmini-password-query-input").val();
|
||||||
|
jappixmini_addon_set_client_secret(password);
|
||||||
|
div.remove();
|
||||||
|
|
||||||
|
client_secret = getDB('jappix-mini', 'client-secret');
|
||||||
|
callback(client_secret);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
callback(client_secret);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function jappixmini_addon_encrypt_password(password) {
|
function jappixmini_addon_encrypt_password(password, callback) {
|
||||||
client_secret = jappixmini_addon_get_client_secret();
|
jappixmini_addon_get_client_secret(function(client_secret){
|
||||||
|
|
||||||
// add \0 to password until it has the same length as secret
|
// add \0 to password until it has the same length as secret
|
||||||
if (password.length>client_secret.length-1) throw "password too long";
|
if (password.length>client_secret.length-1) throw "password too long";
|
||||||
while (password.length<client_secret.length) {
|
while (password.length<client_secret.length) {
|
||||||
|
@ -61,22 +71,24 @@ function jappixmini_addon_encrypt_password(password) {
|
||||||
encrypted_password = jappixmini_addon_xor(client_secret, password);
|
encrypted_password = jappixmini_addon_xor(client_secret, password);
|
||||||
|
|
||||||
encrypted_password = encodeURI(encrypted_password)
|
encrypted_password = encodeURI(encrypted_password)
|
||||||
return encrypted_password;
|
callback(encrypted_password);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function jappixmini_addon_decrypt_password(encrypted_password) {
|
function jappixmini_addon_decrypt_password(encrypted_password, callback) {
|
||||||
encrypted_password = decodeURI(encrypted_password);
|
encrypted_password = decodeURI(encrypted_password);
|
||||||
|
|
||||||
client_secret = jappixmini_addon_get_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);
|
password = jappixmini_addon_xor(client_secret, encrypted_password);
|
||||||
|
|
||||||
// remove \0
|
// remove \0
|
||||||
first_null = password.indexOf("\0")
|
first_null = password.indexOf("\0")
|
||||||
|
// TODO: check first_null==null
|
||||||
password = password.substr(0, first_null);
|
password = password.substr(0, first_null);
|
||||||
|
|
||||||
return password;
|
callback(password);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function jappixmini_manage_roster(contacts, autoapprove, autosubscribe) {
|
function jappixmini_manage_roster(contacts, autoapprove, autosubscribe) {
|
||||||
|
@ -119,10 +131,7 @@ function jappixmini_addon_subscribe() {
|
||||||
}
|
}
|
||||||
|
|
||||||
function jappixmini_addon_start(server, username, bosh, encrypted, password, nickname) {
|
function jappixmini_addon_start(server, username, bosh, encrypted, password, nickname) {
|
||||||
// decrypt password
|
handler = function(password){
|
||||||
if (encrypted)
|
|
||||||
password = jappixmini_addon_decrypt_password(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);
|
settings_identifier = str_sha1(server);
|
||||||
settings_identifier += str_sha1(username);
|
settings_identifier += str_sha1(username);
|
||||||
|
@ -142,3 +151,10 @@ function jappixmini_addon_start(server, username, bosh, encrypted, password, nic
|
||||||
MINI_NICKNAME = nickname;
|
MINI_NICKNAME = nickname;
|
||||||
launchMini(true, false, server, username, password);
|
launchMini(true, false, server, username, password);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// decrypt password if necessary
|
||||||
|
if (encrypted)
|
||||||
|
jappixmini_addon_decrypt_password(password, handler);
|
||||||
|
else
|
||||||
|
handler(password);
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue