@ -1,5 +1,7 @@
const Lang = imports . lang ;
const Main = imports . ui . main ;
const Meta = imports . gi . Meta ;
const Shell = imports . gi . Shell ;
@ -87,6 +89,7 @@ const FirewallPromptHandler = new Lang.Class({
this . _dbusImpl . export ( Gio . DBus . system , '/com/subgraph/FirewallPrompt' ) ;
Gio . bus _own _name _on _connection ( Gio . DBus . system , 'com.subgraph.FirewallPrompt' , Gio . BusNameOwnerFlags . REPLACE , null , null ) ;
this . _dialogs = new Array ( ) ;
this . _dialog = null ;
this . _initKeybindings ( ) ;
} ,
@ -118,23 +121,23 @@ const FirewallPromptHandler = new Lang.Class({
} ,
_handleKeybinding : function ( a , b , c , d , binding ) {
if ( this . _dialog s. length <= 0 ) {
if ( this . _dialog === null || this . _dialog === undefined ) {
return false ;
}
let fname = binding . replace ( /-([a-z])/g , function ( g ) { return g [ 1 ] . toUpperCase ( ) ; } ) ;
let fname = "_on" + fname [ 0 ] . toUpperCase ( ) + fname . substr ( 1 ) ;
if ( ! ( fname in this . _dialog s[ 0 ] ) ) {
if ( ! ( fname in this . _dialog ) ) {
log ( "SGFW: Invalid key binding (1)... " + fname ) ;
return true ;
}
let fn = this . _dialog s[ 0 ] [ fname ] ;
let fn = this . _dialog [ fname ] ;
if ( typeof fn !== "function" ) {
log ( "SGFW: Invalid key binding (2)... " + fname + " " + ( typeof fn ) ) ;
return true ;
}
Lang . bind ( this . _dialog s[ 0 ] , fn ) ( ) ;
Lang . bind ( this . _dialog , fn ) ( ) ;
return true ;
} ,
@ -146,32 +149,53 @@ const FirewallPromptHandler = new Lang.Class({
_closeDialogs : function ( ) {
log ( "SGFW: Closing all dialogs" ) ;
if ( this . _dialog !== null && this . _dialog !== undefined ) {
this . _dialog . close ( ) ;
}
while ( this . _dialogs . length > 0 ) {
dialog = this . _dialogs . shift ( ) ;
dialog . close ( ) ;
this . _dialogs . shift ( ) ;
}
} ,
RequestPromptAsync : function ( params , invocation ) {
let [ app , icon , path , address , port , ip , origin , proto , uid , gid , user , group , pid , sandbox , tlsguard , optstring , expanded , expert , action ] = params ;
log ( "SGFW: Requesting new dialog prompt..." ) ;
try {
params . push ( invocation )
this . _dialogs . push ( params ) ;
log ( "SGFW: DERP: " + this . _dialogs ) ;
if ( this . _dialog === null || this . _dialog === undefined ) {
this . _dialog = true ;
this . _createDialog ( ) ;
}
} catch ( err ) {
log ( "SGFW: Error while requesting prompt: " + err ) ;
}
} ,
_createDialog : function ( ) {
log ( "SGFW: Creating next available dialog..." ) ;
try {
let params = this . _dialogs . shift ( ) ;
log ( "SGFW: " + params ) ;
let [ app , icon , path , address , port , ip , origin , proto , uid , gid , user , group , pid , sandbox , tlsguard , optstring , expanded , expert , action , invocation ] = params ;
let cbfn = function ( self ) {
return function ( ) { return self . onCloseDialog ( ) ; }
} ( this )
let l = this . _dialogs . push ( new Dialog . PromptDialog ( invocation , ( pid >= 0 ) , ( sandbox != "" ) , tlsguard , cbfn ) ) ;
let dialog = this . _dialogs [ l - 1 ]
dialog . update ( app , icon , path , address , port , ip , origin , uid , gid , user , group , pid , proto , tlsguard , optstring , sandbox , expanded , expert , action ) ;
if ( this . _dialogs . length == 1 ) {
dialog . open ( ) ;
this . _dialog = new Dialog . PromptDialog ( invocation , ( pid >= 0 ) , ( sandbox != "" ) , tlsguard , cbfn ) ;
this . _dialog . update ( app , icon , path , address , port , ip , origin , uid , gid , user , group , pid , proto , tlsguard , optstring , sandbox , expanded , expert , action ) ;
this . _dialog . open ( ) ;
} catch ( err ) {
log( "SGFW: Error while creating prompt: " + err ) ;
}
} ,
onCloseDialog : function ( ) {
log ( "SGFW: Closed dialog" ) ;
this . _dialogs . shift ( ) ;
this . _dialog = null ;
if ( this . _dialogs . length > 0 ) {
log ( "SGFW: Opening next dialogs (remaining: " + this . _dialogs . length + ")" ) ;
this . _dialogs [ 0 ] . open ( ) ;
this . _ createDialog ( ) ;
}
} ,