@ -611,23 +611,26 @@ $(function() {
} ,
} ,
/ * *
/ * *
* ask the user for the password and return it
* ask the user for the password and set it
*
* @ throws error when dialog canceled
* @ return string password
* /
* /
requestPassword : function ( )
requestPassword : function ( )
{
{
var password = prompt ( i18n . _ ( 'Please enter the password for this paste:' ) , '' ) ;
if ( this . passwordModal . length === 0 ) {
if ( password === null )
var password = prompt ( i18n . _ ( 'Please enter the password for this paste:' ) , '' ) ;
{
if ( password === null )
throw 'password prompt canceled' ;
{
}
throw 'password prompt canceled' ;
if ( password . length === 0 )
}
{
if ( password . length === 0 )
return this . requestPassword ( ) ;
{
this . requestPassword ( ) ;
} else {
this . passwordInput . val ( password ) ;
this . displayMessages ( ) ;
}
} else {
this . passwordModal . modal ( ) ;
}
}
return password ;
} ,
} ,
/ * *
/ * *
@ -688,14 +691,15 @@ $(function() {
/ * *
/ * *
* Show decrypted text in the display area , including discussion ( if open )
* Show decrypted text in the display area , including discussion ( if open )
*
*
* @ param string key : decryption key
* @ param object paste ( optional ) object including comments to display ( items = array with keys ( 'data' , 'meta' )
* @ param object paste : paste object including comments to display ( items = array with keys ( 'data' , 'meta' )
* /
* /
displayMessages : function ( key, paste)
displayMessages : function ( paste)
{
{
// Try to decrypt the paste.
paste = paste || $ . parseJSON ( this . cipherData . text ( ) ) ;
var key = this . pageKey ( ) ;
var password = this . passwordInput . val ( ) ;
var password = this . passwordInput . val ( ) ;
if ( ! this . prettyPrint . hasClass ( 'prettyprinted' ) ) {
if ( ! this . prettyPrint . hasClass ( 'prettyprinted' ) ) {
// Try to decrypt the paste.
try
try
{
{
if ( paste . attachment )
if ( paste . attachment )
@ -705,7 +709,8 @@ $(function() {
{
{
if ( password . length === 0 )
if ( password . length === 0 )
{
{
password = this . requestPassword ( ) ;
this . requestPassword ( ) ;
return ;
}
}
attachment = filter . decipher ( key , password , paste . attachment ) ;
attachment = filter . decipher ( key , password , paste . attachment ) ;
}
}
@ -740,8 +745,8 @@ $(function() {
var cleartext = filter . decipher ( key , password , paste . data ) ;
var cleartext = filter . decipher ( key , password , paste . data ) ;
if ( cleartext . length === 0 && password . length === 0 && ! paste . attachment )
if ( cleartext . length === 0 && password . length === 0 && ! paste . attachment )
{
{
password = this . requestPassword ( ) ;
this . requestPassword ( ) ;
cleartext = filter . decipher ( key , password , paste . data ) ;
return ;
}
}
if ( cleartext . length === 0 && ! paste . attachment )
if ( cleartext . length === 0 && ! paste . attachment )
{
{
@ -942,7 +947,7 @@ $(function() {
{
{
if ( data . status === 0 )
if ( data . status === 0 )
{
{
privatebin . displayMessages ( privatebin. pageKey ( ) , data) ;
privatebin . displayMessages ( data) ;
}
}
else if ( data . status === 1 )
else if ( data . status === 1 )
{
{
@ -1161,7 +1166,7 @@ $(function() {
/ * *
/ * *
* Put the screen in "Existing paste" mode .
* Put the screen in "Existing paste" mode .
*
*
* @ param boolean preview ( optional ) : tell if the preview tabs should be displayed , defaults to false .
* @ param boolean preview ( optional ) tell if the preview tabs should be displayed , defaults to false .
* /
* /
stateExistingPaste : function ( preview )
stateExistingPaste : function ( preview )
{
{
@ -1420,6 +1425,34 @@ $(function() {
this . fileWrap . removeClass ( 'hidden' ) ;
this . fileWrap . removeClass ( 'hidden' ) ;
} ,
} ,
/ * *
* Focus on the modal password dialog .
* /
focusPasswordModal : function ( )
{
this . passwordDecrypt . focus ( ) ;
} ,
/ * *
* Decrypt using the password from the modal dialog .
* /
decryptPasswordModal : function ( )
{
this . passwordInput . val ( this . passwordDecrypt . val ( ) ) ;
this . displayMessages ( ) ;
} ,
/ * *
* Submit a password in the modal dialog .
*
* @ param Event event
* /
submitPasswordModal : function ( event )
{
event . preventDefault ( ) ;
this . passwordModal . modal ( 'hide' ) ;
} ,
/ * *
/ * *
* Display an error message
* Display an error message
* ( We use the same function for paste and reply to comments )
* ( We use the same function for paste and reply to comments )
@ -1507,6 +1540,11 @@ $(function() {
// page template drop down
// page template drop down
$ ( '#language select option' ) . click ( $ . proxy ( this . setLanguage , this ) ) ;
$ ( '#language select option' ) . click ( $ . proxy ( this . setLanguage , this ) ) ;
// handle modal password request on decryption
this . passwordModal . on ( 'shown.bs.modal' , $ . proxy ( this . focusPasswordModal , this ) ) ;
this . passwordModal . on ( 'hidden.bs.modal' , $ . proxy ( this . decryptPasswordModal , this ) ) ;
this . passwordForm . submit ( $ . proxy ( this . submitPasswordModal , this ) ) ;
} ,
} ,
/ * *
/ * *
@ -1543,6 +1581,9 @@ $(function() {
this . openDiscussion = $ ( '#opendiscussion' ) ;
this . openDiscussion = $ ( '#opendiscussion' ) ;
this . password = $ ( '#password' ) ;
this . password = $ ( '#password' ) ;
this . passwordInput = $ ( '#passwordinput' ) ;
this . passwordInput = $ ( '#passwordinput' ) ;
this . passwordModal = $ ( '#passwordmodal' ) ;
this . passwordForm = $ ( '#passwordform' ) ;
this . passwordDecrypt = $ ( '#passworddecrypt' ) ;
this . pasteResult = $ ( '#pasteresult' ) ;
this . pasteResult = $ ( '#pasteresult' ) ;
this . prettyMessage = $ ( '#prettymessage' ) ;
this . prettyMessage = $ ( '#prettymessage' ) ;
this . prettyPrint = $ ( '#prettyprint' ) ;
this . prettyPrint = $ ( '#prettyprint' ) ;
@ -1573,13 +1614,9 @@ $(function() {
return ;
return ;
}
}
// List of messages to display.
var data = $ . parseJSON ( this . cipherData . text ( ) ) ;
// Show proper elements on screen.
// Show proper elements on screen.
this . stateExistingPaste ( ) ;
this . stateExistingPaste ( ) ;
this . displayMessages ( ) ;
this . displayMessages ( this . pageKey ( ) , data ) ;
}
}
// Display error message from php code.
// Display error message from php code.
else if ( this . errorMessage . text ( ) . length > 1 )
else if ( this . errorMessage . text ( ) . length > 1 )