diff options
-rw-r--r-- | include/bbcode.php | 7 | ||||
-rw-r--r-- | js/crypto.js | 18 | ||||
-rw-r--r-- | version.inc | 2 | ||||
-rwxr-xr-x | view/tpl/jot-header.tpl | 36 |
4 files changed, 58 insertions, 5 deletions
diff --git a/include/bbcode.php b/include/bbcode.php index de71eb4e3..271cace73 100644 --- a/include/bbcode.php +++ b/include/bbcode.php @@ -121,7 +121,9 @@ function bb_parse_crypt($match) { if ($matches[1] != "") $hint = html_entity_decode($matches[1],ENT_QUOTES,'UTF-8'); - $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 />'; + $x = random_string(); + + $Text = '<br/><div id="' . $x . '"><img src="' . z_root() . '/images/lock_icon.gif" onclick="red_decrypt(\'' . $algorithm . '\',\'' . $hint . '\',\'' . $match[2] . '\',\'#' . $x . '\');" alt="' . t('Encrypted content') . '" title="' . t('Encrypted content') . '" /></div><br />'; return $Text; @@ -496,7 +498,8 @@ 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" onclick="red_decrypt(\'rot13\',\'\',\'$1\');" alt="' . t('Encrypted content') . '" title="' . t('Encrypted content') . '" /><br />', $Text); + $x = random_string(); + $Text = preg_replace("/\[crypt\](.*?)\[\/crypt\]/ism",'<br/><div id="' . $x . '"><img src="' .$a->get_baseurl() . '/images/lock_icon.gif" onclick="red_decrypt(\'rot13\',\'\',\'$1\',\'#' . $x . '\');" alt="' . t('Encrypted content') . '" title="' . t('Encrypted content') . '" /><br /></div>', $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 index bed1525cd..6970229ce 100644 --- a/js/crypto.js +++ b/js/crypto.js @@ -33,14 +33,23 @@ function red_encrypt(alg, elem,text) { var text = $(elem).val(); + // key and hint need to be localised + var enc_key = prompt('key'); + // If you don't provide a key you get rot13, which doesn't need a key + // but consequently isn't secure. + if(! enc_key) alg = 'rot13'; if((alg == 'rot13') || (alg == 'triple-rot13')) newdiv = "[crypt alg='rot13']" + str_rot13(text) + '[/crypt]'; else if(alg == 'aes256') { + + // This is the prompt we're going to use when the receiver tries to open it. + // Maybe "Grandma's maiden name" or "our secret place" or something. + var enc_hint = prompt('hint'); enc_text = CryptoJS.AES.encrypt(text,enc_key); @@ -66,7 +75,7 @@ function red_encrypt(alg, elem,text) { // } } -function red_decrypt(alg,hint,text) { +function red_decrypt(alg,hint,text,elem) { var enc_text = ''; @@ -78,8 +87,13 @@ function red_decrypt(alg,hint,text) { enc_text = CryptoJS.AES.decrypt(text,enc_key); } - alert(enc_text.toString(CryptoJS.enc.Utf8)); + // Not sure whether to drop this back in the conversation display. + // It probably needs a lightbox or popup window because any conversation + // updates could + // wipe out the text and make you re-enter the key if it was in the + // conversation. For now we do that so you can read it. + $(elem).html(b2h(enc_text.toString(CryptoJS.enc.Utf8))); } diff --git a/version.inc b/version.inc index ee9cd8d7a..e352254ae 100644 --- a/version.inc +++ b/version.inc @@ -1 +1 @@ -2013-11-10.493 +2013-11-11.494 diff --git a/view/tpl/jot-header.tpl b/view/tpl/jot-header.tpl index 05928bc32..4457a6d52 100755 --- a/view/tpl/jot-header.tpl +++ b/view/tpl/jot-header.tpl @@ -361,6 +361,42 @@ function enableOnUser(){ }; + function b2h(s) { + var y = s; + function rep(re, str) { + y = y.replace(re,str); + }; + + rep(/\n/gi,"<br />"); + rep(/\[b\]/gi,"<strong>"); + rep(/\[\/b\]/gi,"</strong>"); + rep(/\[i\]/gi,"<em>"); + rep(/\[\/i\]/gi,"</em>"); + rep(/\[u\]/gi,"<u>"); + rep(/\[\/u\]/gi,"</u>"); + rep(/\[hr\]/gi,"<hr />"); + rep(/\[url=([^\]]+)\](.*?)\[\/url\]/gi,"<a href=\"$1\">$2</a>"); + rep(/\[url\](.*?)\[\/url\]/gi,"<a href=\"$1\">$1</a>"); + rep(/\[img=(.*?)x(.*?)\](.*?)\[\/img\]/gi,"<img width=\"$1\" height=\"$2\" src=\"$3\" />"); + rep(/\[img\](.*?)\[\/img\]/gi,"<img src=\"$1\" />"); + + rep(/\[list\](.*?)\[\/list\]/gi, '<ul class="listbullet" style="list-style-type: circle;">$1</ul>'); + rep(/\[list=\](.*?)\[\/list\]/gi, '<ul class="listnone" style="list-style-type: none;">$1</ul>'); + rep(/\[list=1\](.*?)\[\/list\]/gi, '<ul class="listdecimal" style="list-style-type: decimal;">$1</ul>'); + rep(/\[list=i\](.*?)\[\/list\]/gi,'<ul class="listlowerroman" style="list-style-type: lower-roman;">$1</ul>'); + rep(/\[list=I\](.*?)\[\/list\]/gi, '<ul class="listupperroman" style="list-style-type: upper-roman;">$1</ul>'); + rep(/\[list=a\](.*?)\[\/list\]/gi, '<ul class="listloweralpha" style="list-style-type: lower-alpha;">$1</ul>'); + rep(/\[list=A\](.*?)\[\/list\]/gi, '<ul class="listupperalpha" style="list-style-type: upper-alpha;">$1</ul>'); + rep(/\[li\](.*?)\[\/li\]/gi, '<li>$1</li>'); + rep(/\[color=(.*?)\](.*?)\[\/color\]/gi,"<span style=\"color: $1;\">$2</span>"); + rep(/\[size=(.*?)\](.*?)\[\/size\]/gi,"<span style=\"font-size: $1;\">$2</span>"); + rep(/\[code\](.*?)\[\/code\]/gi,"<code>$1</code>"); + rep(/\[quote.*?\](.*?)\[\/quote\]/gi,"<blockquote>$1</blockquote>"); + + return y; + }; + + {{$geotag}} </script> |