@ -511,6 +511,8 @@ function rcube_webmail()
// initialize HTML editor
// initialize HTML editor
this . editor _init ( this . env . editor _config , 'rcmfd_signature' ) ;
this . editor _init ( this . env . editor _config , 'rcmfd_signature' ) ;
this . check _mailvelope ( this . env . action ) ;
}
}
else if ( this . env . action == 'folders' ) {
else if ( this . env . action == 'folders' ) {
this . enable _command ( 'subscribe' , 'unsubscribe' , 'create-folder' , 'rename-folder' , true ) ;
this . enable _command ( 'subscribe' , 'unsubscribe' , 'create-folder' , 'rename-folder' , true ) ;
@ -3638,6 +3640,8 @@ function rcube_webmail()
if ( args . ret && args . action == 'toggle-editor' )
if ( args . ret && args . action == 'toggle-editor' )
ref . enable _command ( 'compose-encrypted' , ! args . props . html ) ;
ref . enable _command ( 'compose-encrypted' , ! args . props . html ) ;
} ) ;
} ) ;
} else if ( action == 'edit-identity' ) {
ref . mailvelope _identity _keygen ( ) ;
}
}
} ;
} ;
@ -4000,6 +4004,127 @@ function rcube_webmail()
} ;
} ;
// enable key management for identity
this . mailvelope _identity _keygen = function ( )
{
var container = $ ( this . gui _objects . editform ) . find ( '.identity-encryption' ) . first ( ) ;
var identity _email = $ . trim ( $ ( this . gui _objects . editform ) . find ( '.ff_email' ) . val ( ) ) ;
if ( ! container . length || ! identity _email || ! this . mailvelope _keyring . createKeyGenContainer )
return ;
var key _fingerprint ;
this . mailvelope _keyring . validKeyForAddress ( [ identity _email ] )
. then ( function ( keys ) {
var private _keys = [ ] ;
if ( keys && keys [ identity _email ] && Array . isArray ( keys [ identity _email ] . keys ) ) {
var checks = [ ] ;
for ( var j = 0 ; j < keys [ identity _email ] . keys . length ; j ++ ) {
checks . push ( ( function ( key ) {
return ref . mailvelope _keyring . hasPrivateKey ( key . fingerprint )
. then ( function ( found ) {
if ( found ) {
private _keys . push ( key ) ;
}
} ) ;
} ) ( keys [ identity _email ] . keys [ j ] ) ) ;
}
return Promise . all ( checks )
. then ( function ( ) {
return private _keys ;
} ) ;
}
return private _keys ;
} ) . then ( function ( private _keys ) {
var content = container . find ( '.identity-encryption-block' ) . empty ( ) ;
if ( private _keys && private _keys . length ) {
// show private key information
$ ( '<p>' ) . text ( ref . get _label ( 'encryptionprivkeysinmailvelope' ) . replace ( '$nr' , private _keys . length ) ) . appendTo ( content ) ;
var ul = $ ( '<ul>' ) . addClass ( 'keylist' ) . appendTo ( content ) ;
$ . each ( private _keys , function ( i , key ) {
$ ( '<li>' ) . appendTo ( ul )
. append ( $ ( '<span>' ) . addClass ( 'identity' ) . text ( '<' + identity _email + '> ' ) )
. append ( $ ( '<strong>' ) . addClass ( 'fingerprint' ) . text ( String ( key . fingerprint ) . toUpperCase ( ) ) ) ;
} ) ;
} else {
$ ( '<p>' ) . text ( ref . get _label ( 'encryptionnoprivkeysinmailvelope' ) ) . appendTo ( content ) ;
}
// show button to create a new key
$ ( '<button>' )
. attr ( 'type' , 'button' )
. addClass ( 'button create' )
. text ( ref . get _label ( 'encryptioncreatekey' ) )
. appendTo ( content )
. on ( 'click' , function ( ) { ref . mailvelope _show _keygen _container ( content , identity _email ) ; } ) ;
$ ( '<button>' )
. attr ( 'type' , 'button' )
. addClass ( 'button settings' )
. text ( ref . get _label ( 'openmailvelopesettings' ) )
. appendTo ( content )
. on ( 'click' , function ( ) { ref . mailvelope _keyring . openSettings ( ) ; } ) ;
container . show ( ) ;
} )
. catch ( function ( err ) {
console . error ( 'Mailvelope keyring error' , err ) ;
} )
} ;
// start pgp key generation using Mailvelope
this . mailvelope _show _keygen _container = function ( container , identity _email )
{
var cid = new Date ( ) . getTime ( ) ;
var user _id = { email : identity _email , fullName : $ . trim ( $ ( ref . gui _objects . editform ) . find ( '.ff_name' ) . val ( ) ) } ;
var options = { userIds : [ user _id ] , keySize : 4096 } ;
$ ( '<div>' ) . attr ( 'id' , 'mailvelope-keygen-container-' + cid )
. css ( { height : '245px' , marginBottom : '10px' } )
. appendTo ( container . empty ( ) ) ;
this . mailvelope _keyring . createKeyGenContainer ( '#mailvelope-keygen-container-' + cid , options )
. then ( function ( generator ) {
if ( generator instanceof Error ) {
throw generator ;
}
// append button to start key generation
$ ( '<button>' )
. attr ( 'type' , 'button' )
. addClass ( 'button mainaction generate' )
. text ( ref . get _label ( 'generate' ) )
. appendTo ( container )
. on ( 'click' , function ( ) {
var btn = $ ( this ) . prop ( 'disabled' , true ) ;
generator . generate ( )
. then ( function ( result ) {
if ( typeof result === 'string' && result . indexOf ( 'BEGIN PGP' ) > 0 ) {
ref . display _message ( ref . get _label ( 'keypaircreatesuccess' ) . replace ( '$identity' , identity _email ) , 'confirmation' ) ;
// reset keygen view
ref . mailvelope _identity _keygen ( ) ;
}
} )
. catch ( function ( err ) {
debugger ;
ref . display _message ( err . message || 'errortitle' , 'error' ) ;
btn . prop ( 'disabled' , false ) ;
} ) ;
} ) ;
$ ( '<button>' )
. attr ( 'type' , 'button' )
. addClass ( 'button cancel' )
. text ( ref . get _label ( 'cancel' ) )
. appendTo ( container )
. on ( 'click' , function ( ) { ref . mailvelope _identity _keygen ( ) ; } ) ;
} )
. catch ( function ( err ) {
ref . display _message ( 'errortitle' , 'error' ) ;
// start over
ref . mailvelope _identity _keygen ( ) ;
} ) ;
} ;
/*********************************************************/
/*********************************************************/
/********* mailbox folders methods *********/
/********* mailbox folders methods *********/