aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xboot.php3
-rw-r--r--include/bbcode.php11
-rw-r--r--js/crypto.js181
-rw-r--r--view/php/theme_init.php2
-rwxr-xr-xview/tpl/head.tpl1
5 files changed, 188 insertions, 10 deletions
diff --git a/boot.php b/boot.php
index 96b73eaaa..c3a10f300 100755
--- a/boot.php
+++ b/boot.php
@@ -990,7 +990,8 @@ class App {
'$icon' => head_get_icon(),
'$head_css' => head_get_css(),
'$head_js' => head_get_js(),
- '$js_strings' => js_strings()
+ '$js_strings' => js_strings(),
+ '$zid' => get_my_address(),
)) . $this->page['htmlhead'];
}
diff --git a/include/bbcode.php b/include/bbcode.php
index 14d0ce14a..de71eb4e3 100644
--- a/include/bbcode.php
+++ b/include/bbcode.php
@@ -121,14 +121,7 @@ function bb_parse_crypt($match) {
if ($matches[1] != "")
$hint = html_entity_decode($matches[1],ENT_QUOTES,'UTF-8');
- // Next we really should link to a JS routine based on the algorithm which prompts for a key
- // something like zdecrypt_{algorithm}, which will be a no-op if the decryption algorithm is not present
- // We can either pass the text or pass a message ID and let the decryption module call /viewsrc or something
- // to get the text. The text might be large so the message ID might be preferable. But if we pass the
- // text directly we won't have to do a network fetch; and can potentially display the results in a popup.
-
-
- $Text = '<br/><img src="' . z_root() . '/images/lock_icon.gif" alt="' . t('Encrypted content') . '" title="' . t('Encrypted content') . '" /><br />' . t('Algorithm: ') . $algorithm . '<br />' . t('Key hint: ') . $hint . '<br />';
+ $Text = '<br/><img src="' . z_root() . '/images/lock_icon.gif" onclick="red_decrypt(\'' . $algorithm . '\',\'' . $hint . '\',\'' . $match[2] . '\');" alt="' . t('Encrypted content') . '" title="' . t('Encrypted content') . '" /><br />';
return $Text;
@@ -503,7 +496,7 @@ function bbcode($Text,$preserve_nl = false, $tryoembed = true) {
}
if (strpos($Text,'[/crypt]') !== false) {
- $Text = preg_replace("/\[crypt\](.*?)\[\/crypt\]/ism",'<br/><img src="' .$a->get_baseurl() . '/images/lock_icon.gif" alt="' . t('Encrypted content') . '" title="' . t('Encrypted content') . '" /><br />', $Text);
+ $Text = preg_replace("/\[crypt\](.*?)\[\/crypt\]/ism",'<br/><img src="' .$a->get_baseurl() . '/images/lock_icon.gif" onclick="red_decrypt(\'rot13\',\'\',\'$1\');" alt="' . t('Encrypted content') . '" title="' . t('Encrypted content') . '" /><br />', $Text);
$Text = preg_replace_callback("/\[crypt (.*?)\](.*?)\[\/crypt\]/ism", 'bb_parse_crypt', $Text);
}
// Try to Oembed
diff --git a/js/crypto.js b/js/crypto.js
new file mode 100644
index 000000000..022613128
--- /dev/null
+++ b/js/crypto.js
@@ -0,0 +1,181 @@
+
+
+function str_rot13 (str) {
+ // http://kevin.vanzonneveld.net
+ // + original by: Jonas Raoni Soares Silva (http://www.jsfromhell.com)
+ // + improved by: Ates Goral (http://magnetiq.com)
+ // + bugfixed by: Onno Marsman
+ // + improved by: Rafa? Kukawski (http://blog.kukawski.pl)
+ // * example 1: str_rot13('Kevin van Zonneveld');
+ // * returns 1: 'Xriva ina Mbaariryq'
+ // * example 2: str_rot13('Xriva ina Mbaariryq');
+ // * returns 2: 'Kevin van Zonneveld'
+ // * example 3: str_rot13(33);
+ // * returns 3: '33'
+ return (str + '').replace(/[a-z]/gi, function (s) {
+ return String.fromCharCode(s.charCodeAt(0) + (s.toLowerCase() < 'n' ? 13 : -13));
+ });
+}
+
+
+function red_encrypt(alg, elem,text) {
+ var enc_text = '';
+ var newdiv = '';
+
+ if(! alg)
+ alg = 'rot13';
+
+ if((alg == 'rot13') || (alg == 'triple-rot13'))
+ newdiv = "[crypt alg='rot13']" + str_rot13(text) + '[/crypt]';
+ else if(alg == 'aes256') {
+ var enc_key = prompt('key');
+ var enc_hint = prompt('hint');
+
+ enc_text = base64_encode(CryptoJS.AES.encrypt(text,key));
+
+ newdiv = "[crypt alg='aes256' hint=' + hint + ']" + enc_text + '[/crypt]';
+ }
+
+ alert(newdiv);
+
+
+ textarea = document.getElementById(elem);
+ if (document.selection) {
+ textarea.focus();
+ selected = document.selection.createRange();
+ selected.text = newdiv;
+ } else if (textarea.selectionStart || textarea.selectionStart == "0") {
+ var start = textarea.selectionStart;
+ var end = textarea.selectionEnd;
+ textarea.value = textarea.value.substring(0, start) + newdiv + textarea.value.substring(end, textarea.value.length);
+ }
+}
+
+function red_decrypt(alg,hint,text) {
+
+ var enc_text = '';
+
+ if(alg == 'rot13' || alg == 'triple-rot13')
+ enc_text = str_rot13(text);
+
+ if(alg == 'aes256') {
+ var enc_key = prompt(hint);
+ enc_text = CryptoJS.AES.decrypt(base64_decode(text),enc_key);
+ }
+
+ alert(enc_text);
+
+}
+
+
+
+
+
+function base64_encode (data) {
+ // http://kevin.vanzonneveld.net
+ // + original by: Tyler Akins (http://rumkin.com)
+ // + improved by: Bayron Guevara
+ // + improved by: Thunder.m
+ // + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
+ // + bugfixed by: Pellentesque Malesuada
+ // + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
+ // + improved by: Rafa? Kukawski (http://kukawski.pl)
+ // * example 1: base64_encode('Kevin van Zonneveld');
+ // * returns 1: 'S2V2aW4gdmFuIFpvbm5ldmVsZA=='
+ // mozilla has this native
+ // - but breaks in 2.0.0.12!
+ //if (typeof this.window['btoa'] === 'function') {
+ // return btoa(data);
+ //}
+ var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
+ var o1, o2, o3, h1, h2, h3, h4, bits, i = 0,
+ ac = 0,
+ enc = "",
+ tmp_arr = [];
+
+ if (!data) {
+ return data;
+ }
+
+ do { // pack three octets into four hexets
+ o1 = data.charCodeAt(i++);
+ o2 = data.charCodeAt(i++);
+ o3 = data.charCodeAt(i++);
+
+ bits = o1 << 16 | o2 << 8 | o3;
+
+ h1 = bits >> 18 & 0x3f;
+ h2 = bits >> 12 & 0x3f;
+ h3 = bits >> 6 & 0x3f;
+ h4 = bits & 0x3f;
+
+ // use hexets to index into b64, and append result to encoded string
+ tmp_arr[ac++] = b64.charAt(h1) + b64.charAt(h2) + b64.charAt(h3) + b64.charAt(h4);
+ } while (i < data.length);
+
+ enc = tmp_arr.join('');
+
+ var r = data.length % 3;
+
+ return (r ? enc.slice(0, r - 3) : enc) + '==='.slice(r || 3);
+
+}
+
+
+function base64_decode (data) {
+ // http://kevin.vanzonneveld.net
+ // + original by: Tyler Akins (http://rumkin.com)
+ // + improved by: Thunder.m
+ // + input by: Aman Gupta
+ // + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
+ // + bugfixed by: Onno Marsman
+ // + bugfixed by: Pellentesque Malesuada
+ // + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
+ // + input by: Brett Zamir (http://brett-zamir.me)
+ // + bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
+ // * example 1: base64_decode('S2V2aW4gdmFuIFpvbm5ldmVsZA==');
+ // * returns 1: 'Kevin van Zonneveld'
+ // mozilla has this native
+ // - but breaks in 2.0.0.12!
+ //if (typeof this.window['atob'] === 'function') {
+ // return atob(data);
+ //}
+ var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
+ var o1, o2, o3, h1, h2, h3, h4, bits, i = 0,
+ ac = 0,
+ dec = "",
+ tmp_arr = [];
+
+ if (!data) {
+ return data;
+ }
+
+ data += '';
+
+ do { // unpack four hexets into three octets using index points in b64
+ h1 = b64.indexOf(data.charAt(i++));
+ h2 = b64.indexOf(data.charAt(i++));
+ h3 = b64.indexOf(data.charAt(i++));
+ h4 = b64.indexOf(data.charAt(i++));
+
+ bits = h1 << 18 | h2 << 12 | h3 << 6 | h4;
+
+ o1 = bits >> 16 & 0xff;
+ o2 = bits >> 8 & 0xff;
+ o3 = bits & 0xff;
+
+ if (h3 == 64) {
+ tmp_arr[ac++] = String.fromCharCode(o1);
+ } else if (h4 == 64) {
+ tmp_arr[ac++] = String.fromCharCode(o1, o2);
+ } else {
+ tmp_arr[ac++] = String.fromCharCode(o1, o2, o3);
+ }
+ } while (i < data.length);
+
+ dec = tmp_arr.join('');
+
+ return dec;
+}
+
+
diff --git a/view/php/theme_init.php b/view/php/theme_init.php
index 8b75bc940..0cb5d4d68 100644
--- a/view/php/theme_init.php
+++ b/view/php/theme_init.php
@@ -25,9 +25,11 @@ head_add_js('library/jquery_ac/friendica.complete.js');
head_add_js('library/tiptip/jquery.tipTip.minified.js');
head_add_js('library/jgrowl/jquery.jgrowl_minimized.js');
head_add_js('library/tinymce/jscripts/tiny_mce/tiny_mce_src.js');
+head_add_js('library/cryptojs/rollups/aes.js');
head_add_js('js/acl.js');
head_add_js('js/webtoolkit.base64.js');
head_add_js('js/main.js');
+head_add_js('js/crypto.js');
head_add_js('library/jslider/bin/jquery.slider.min.js');
head_add_js('docready.js');
head_add_js('library/prettyphoto/js/jquery.prettyPhoto.js');
diff --git a/view/tpl/head.tpl b/view/tpl/head.tpl
index 4211eeab3..eb4c6c2ad 100755
--- a/view/tpl/head.tpl
+++ b/view/tpl/head.tpl
@@ -23,6 +23,7 @@
var updateInterval = {{$update_interval}};
var localUser = {{if $local_user}}{{$local_user}}{{else}}false{{/if}};
+ var zid = {{if $zid}}'{{$zid}}'{{else}}null{{/if}};
</script>