commit ab2f51513a8a0ed707792fc80cdf8cb63baae9d1
Author: Alexandre Correia <alexandrecorreia@celepar.pr.gov.br>
Date:   Wed Sep 1 17:48:18 2021 -0300

    Issue #905 - Scripts para importação do sieve

diff --git a/app/Console/Commands/Expresso/CyrusCredentialFile.php b/app/Console/Commands/Expresso/CyrusCredentialFile.php
new file mode 100644
index 0000000..50730b6
--- /dev/null
+++ b/app/Console/Commands/Expresso/CyrusCredentialFile.php
@@ -0,0 +1,52 @@
+<?php
+
+namespace App\Console\Commands\Expresso;
+
+use Illuminate\Console\Command;
+use Illuminate\Support\Facades\DB;
+use Illuminate\Support\Facades\File;
+
+class CyrusCredentialFile extends Command
+{
+    /**
+     * The name and signature of the console command.
+     *
+     * @var string
+     */
+    protected $signature = 'expresso:get-cyrus-credentials';
+
+    /**
+     * The console command description.
+     *
+     * @var string
+     */
+    protected $description = 'lista credenciais do cyrus';
+
+    /**
+     * Create a new command instance.
+     *
+     * @return void
+     */
+    public function __construct()
+    {
+        parent::__construct();
+    }
+
+    /**
+     * Execute the console command.
+     *
+     * @return mixed
+     */
+    public function handle()
+    {
+        $configEAdmin = DB::connection('pgsql-expresso')->table('phpgw_emailadmin')
+                ->where('description', env('KEY_EMAILADMIN_SOGO') )
+                ->first();
+
+        File::put( 'credential', $configEAdmin->imapadminusername . ":" . $configEAdmin->imapadminpw );
+        
+        $this->info( 'Arquivo de credenciais cyrus criado com sucesso' );
+    }
+
+}
+
diff --git a/app/Console/Commands/Expresso/GetUsersOULdap.php b/app/Console/Commands/Expresso/GetUsersOULdap.php
index 0a5ebc3..2a1d340 100755
--- a/app/Console/Commands/Expresso/GetUsersOULdap.php
+++ b/app/Console/Commands/Expresso/GetUsersOULdap.php
@@ -4,8 +4,7 @@ namespace App\Console\Commands\Expresso;
 
 use App\Commons\Ldap;
 use Illuminate\Console\Command;
-use Illuminate\Support\Facades\DB;
-use Storage;
+use Illuminate\Support\Facades\File;
 
 class GetUsersOULdap extends Command
 {
@@ -14,14 +13,14 @@ class GetUsersOULdap extends Command
      *
      * @var string
      */
-    protected $signature = 'expresso:get-users-organizations {--ou=} {cmd?}';
+    protected $signature = 'expresso:get-organization-users {--ou=} {cmd?}';
 
     /**
      * The console command description.
      *
      * @var string
      */
-    protected $description = 'Lista os usuarios de uma organização ( OU )';
+    protected $description = 'lista os usuários de uma organizacao ldap ( OU )';
 
     /**
      * Create a new command instance.
@@ -44,36 +43,28 @@ class GetUsersOULdap extends Command
 
         $organization = $this->option('ou') ?? null;
 
-        if( isset($arguments['cmd']) && $arguments['cmd'] == 'help' )
-        {
-            $this->help();
-
-        } else {
-
-            if( !is_null($organization) ){
-
-                $users      = $this->getUsersOu($organization);
-                $fileName   = $arguments['cmd'] ?? null;
-
-                if( is_null($fileName) ) {
-                    foreach( $users as $user )
-                    {
-                        $line  = "" ;
-                        $line .= "cn        : " . ( $user['cn'][0] ?? "" ) . PHP_EOL;
-                        $line .= "uid       : " . ( $user['uid'][0] ?? "" ) . PHP_EOL ;
-                        $line .= "uidnumber : " . ( $user['uidnumber'][0] ?? "" ) . PHP_EOL ;
-                        $line .= "----------------------------------------------------------------------------" . PHP_EOL;
-                        
-                        print_r( $line );
-                    }
-                }else {
-                    $this->writeFile( $users, $fileName );
+        if( !is_null($organization) ){
+
+            $users      = $this->getUsersOu($organization);
+            $fileName   = $arguments['cmd'] ?? null;
+
+            if( is_null($fileName) ) {
+                foreach( $users as $user )
+                {
+                    $line  = "" ;
+                    $line .= "cn        : " . ( $user['cn'][0] ?? "" ) . PHP_EOL;
+                    $line .= "uid       : " . ( $user['uid'][0] ?? "" ) . PHP_EOL ;
+                    $line .= "uidnumber : " . ( $user['uidnumber'][0] ?? "" ) . PHP_EOL ;
+                    $line .= "----------------------------------------------------------------------------" . PHP_EOL;
+                    
+                    print_r( $line );
                 }
-
+            }else {
+                $this->writeFile( $users, $fileName );
             }
-        }
 
-        $this->newLine();
+        }
+        
     }
 
     private function getUsersOu( $organization )
@@ -83,18 +74,8 @@ class GetUsersOULdap extends Command
         return $result->getUsersOu( $organization );
     }
 
-    private function help()
-    {
-        $this->newLine();
-        $this->info('EXEMPLO DE UTILIZACAO : ');
-        $this->info('Ex: php artisan get-users-organizations --ou=<ORGANIZATION> { print | file }');
-        $this->newLine();
-    }
-
     private function writeFile( array $users, string $fileName )
     {
-        $this->newLine();
-        
         if( is_array($users) && count($users) > 0 ){
          
             $line  = "";
@@ -104,10 +85,10 @@ class GetUsersOULdap extends Command
                 $line .= ( $user['uid'][0] ?? "" ) . ";" ;
                 $line .= ( $user['uidnumber'][0] ?? "" ) . PHP_EOL ;
 
-                Storage::put('/EXPRESSO/'.$fileName, $line );
+                File::put( $fileName , $line );
             }
         }
 
-        $this->info('Arquivo gerado com sucesso : /EXPRESSO/'. $fileName );
+        $this->info('Arquivo gerado com sucesso : ' . $fileName );
     }
 }
\ No newline at end of file
diff --git a/app/Console/Commands/Expresso/SieveGetListFile.php b/app/Console/Commands/Expresso/SieveGetListFile.php
new file mode 100755
index 0000000..d885a52
--- /dev/null
+++ b/app/Console/Commands/Expresso/SieveGetListFile.php
@@ -0,0 +1,97 @@
+<?php
+
+namespace App\Console\Commands\Expresso;
+
+use Illuminate\Console\Command;
+use Illuminate\Support\Facades\DB;
+use Illuminate\Support\Facades\File;
+
+class SieveGetListFile extends Command
+{
+    /**
+     * The name and signature of the console command.
+     *
+     * @var string
+     */
+    protected $signature = 'expresso:get-user-sieve-filters-from-file {--f|file=} {cmd?}';
+
+    /**
+     * The console command description.
+     *
+     * @var string
+     */
+    protected $description = 'lista os filtros de usuarios ( entrada: usuários em arquivo )';
+
+    /**
+     * Create a new command instance.
+     *
+     * @return void
+     */
+    public function __construct()
+    {
+        parent::__construct();
+    }
+
+    /**
+     * Execute the console command.
+     *
+     * @return mixed
+     */
+    public function handle()
+    {
+        $arguments = $this->arguments();
+
+        $fileName = $this->option('file') ?? null;
+
+        if( !is_null($fileName) ){
+
+            if( file_exists($fileName) ){
+                File::delete( "sieve_" . $fileName );
+            }
+
+            $handle = fopen( $fileName, "r");
+            if ($handle) {
+                while ( ($line = fgets($handle)) !== false) {
+
+                    // cn; uid; uidnumber
+                    $cn         = "";
+                    $uid        = "";
+                    $uidnumber  = "";
+
+                    list( $cn ,$uid, $uidnumber) = explode( ";", $line );
+
+                    $sieveRules = $this->getSieveRules( $uidnumber );
+
+                    $this->writeFile( $uid, $sieveRules, $fileName );
+                }
+                
+                fclose($handle);
+                
+                $this->info( "Arquivo gerado com sucesso : " . "sieve_". $fileName );
+
+            } else {
+                $this->error("Arquivo não encontrado");
+            }                 
+        }
+        
+    }
+
+    private function getSieveRules( $user )
+    {
+        $sieveRules = DB::connection('pgsql-expresso')
+                            ->table('phpgw_sieve_rules')
+                            ->where('fk_sieve_owner', $user )
+                            ->get();
+
+        return $sieveRules;
+    }
+
+    private function writeFile( $uid, $sieveRules, $fileName )
+    {
+        foreach( $sieveRules as $rule ){ 
+            $line = "";
+            $line .= $uid . "|" . $rule->rule . "|" . ( $rule->is_enabled  == "1" ? "1" : "0" ) . PHP_EOL; 
+            File::append( "sieve_". $fileName, $line );
+        }
+    }
+}
\ No newline at end of file
diff --git a/app/Console/Commands/Expresso/SieveGetUid.php b/app/Console/Commands/Expresso/SieveGetUid.php
index 5f498e7..7f698f5 100755
--- a/app/Console/Commands/Expresso/SieveGetUid.php
+++ b/app/Console/Commands/Expresso/SieveGetUid.php
@@ -13,14 +13,14 @@ class SieveGetUid extends Command
      *
      * @var string
      */
-    protected $signature = 'expresso:sieve-get {--u|uid=} {cmd?}';
+    protected $signature = 'expresso:get-user-sieve-filters-by-line {--u|uid=} {cmd?}';
 
     /**
      * The console command description.
      *
      * @var string
      */
-    protected $description = 'Lista os scripts sieve do usuario';
+    protected $description = 'lista os filtros de usuários ( entrada: usuários separados por vírgula )';
 
     /**
      * Create a new command instance.
@@ -43,50 +43,42 @@ class SieveGetUid extends Command
 
         $uid = $this->option('uid') ?? null;
 
-        if( isset($arguments['cmd']) && $arguments['cmd'] == 'help' )
-        {
-            $this->help();
-
-        } else {
-
-            if( !is_null($uid) ){
-
-                $sieveRules = $this->getSieveRules($uid);
-                
-                if( isset($arguments['cmd']) && $arguments['cmd'] == 'print' )
-                {
-                    $rules      = [];
-                    foreach( $sieveRules as $key => $sieve ){
-                        $rules[$key]['regra']       = unserialize( $sieve->rule );
-                        $rules[$key]['habilitada']  = $sieve->is_enabled;
-                        $rules[$key]['dt_criacao']  = date('d/m/Y', strtotime($sieve->created_dt));
-                        
-                        print_r( $rules[$key] );
-                    }
-                }
-
-                if( isset($arguments['cmd']) && $arguments['cmd'] == 'file' )
-                {
-                    $lines = "Usuario : " . $uid . PHP_EOL;
 
-                    foreach( $sieveRules as $key => $sieve ){
-                        $lines .= "regra      : " . $sieve->rule . PHP_EOL;
-                        $lines .= "habilitada : " . $sieve->is_enabled . PHP_EOL;
-                        $lines .= "dt_criacao : " . date('d/m/Y', strtotime($sieve->created_dt)) . PHP_EOL;
-                        $lines .= "************************************************************************" . PHP_EOL . PHP_EOL;
-                    }
+        if( !is_null($uid) ){
 
-                    Storage::put('file/file_'.$uid.'.txt', $lines );
+            $sieveRules = $this->getSieveRules($uid);
+            
+            if( isset($arguments['cmd']) && $arguments['cmd'] == 'print' )
+            {
+                $rules      = [];
+                foreach( $sieveRules as $key => $sieve ){
+                    $rules[$key]['regra']       = unserialize( $sieve->rule );
+                    $rules[$key]['habilitada']  = $sieve->is_enabled;
+                    $rules[$key]['dt_criacao']  = date('d/m/Y', strtotime($sieve->created_dt));
+                    
+                    print_r( $rules[$key] );
                 }
+            }
 
-                if( isset($arguments['cmd']) && $arguments['cmd'] == 'fileSogo' )
-                {
-                    print_r( storage_path('fileSogo') );
+            if( isset($arguments['cmd']) && $arguments['cmd'] == 'file' )
+            {
+                $lines = "Usuario : " . $uid . PHP_EOL;
+
+                foreach( $sieveRules as $key => $sieve ){
+                    $lines .= "regra      : " . $sieve->rule . PHP_EOL;
+                    $lines .= "habilitada : " . $sieve->is_enabled . PHP_EOL;
+                    $lines .= "dt_criacao : " . date('d/m/Y', strtotime($sieve->created_dt)) . PHP_EOL;
+                    $lines .= "************************************************************************" . PHP_EOL . PHP_EOL;
                 }
+
+                Storage::put('file/file_'.$uid.'.txt', $lines );
             }
-        }
 
-        $this->newLine();
+            if( isset($arguments['cmd']) && $arguments['cmd'] == 'fileSogo' )
+            {
+                print_r( storage_path('fileSogo') );
+            }
+        }
     }
 
     private function getSieveRules( $user )
@@ -98,12 +90,4 @@ class SieveGetUid extends Command
 
         return $sieveRules;
     }
-
-    private function help()
-    {
-        $this->newLine();
-        $this->info('EXEMPLO DE UTILIZACAO : ');
-        $this->info('Ex: php artisan expresso:sieve-get --uid=<000000> { print | file | fileSogo }');
-        $this->newLine();
-    }
 }
\ No newline at end of file
diff --git a/app/Console/Commands/Sogo/Preferences.php b/app/Console/Commands/Sogo/Preferences.php
index c45a368..d7efb93 100755
--- a/app/Console/Commands/Sogo/Preferences.php
+++ b/app/Console/Commands/Sogo/Preferences.php
@@ -13,14 +13,14 @@ class Preferences extends Command
      *
      * @var string
      */
-    protected $signature = 'sogo:preferences-get {--u|user=} {cmd?}';
+    protected $signature = 'sogo:get-user-preferences {--u|user=}';
 
     /**
      * The console command description.
      *
      * @var string
      */
-    protected $description = 'Lista as preferencias sogo do usuario';
+    protected $description = 'lista preferências sogo do usuário';
 
     /**
      * Create a new command instance.
@@ -43,18 +43,11 @@ class Preferences extends Command
 
         $user = $this->option('user') ?? null;
 
-        if( isset($arguments['cmd']) && $arguments['cmd'] == 'help' )
-        {
-            $this->help();
-            
-        } else {
+        if( !is_null($user) ){
 
-            if( !is_null($user) ){
+            $preferences =  $this->getPreferences($user);
 
-                $preferences =  $this->getPreferences($user);
-
-                print_r( json_decode($preferences->c_defaults) );
-            }
+            print_r( json_decode($preferences->c_defaults) );
         }
 
         $this->newLine();
@@ -69,12 +62,4 @@ class Preferences extends Command
 
         return $preferences;
     }
-
-    private function help()
-    {
-        $this->newLine();
-        $this->info('EXEMPLO DE UTILIZACAO : ');
-        $this->info('Ex: php artisan sogo:preferences-get --user=<usuario> { print | file }');
-        $this->newLine();
-    }
 }
\ No newline at end of file
diff --git a/app/Console/Commands/Sogo/SieveSetListFile.php b/app/Console/Commands/Sogo/SieveSetListFile.php
new file mode 100755
index 0000000..c81d453
--- /dev/null
+++ b/app/Console/Commands/Sogo/SieveSetListFile.php
@@ -0,0 +1,206 @@
+<?php
+
+namespace App\Console\Commands\Sogo;
+
+use Illuminate\Console\Command;
+use Illuminate\Support\Facades\DB;
+use Illuminate\Support\Facades\File;
+use Illuminate\Support\Facades\Storage;
+
+class SieveSetListFile extends Command
+{
+    /**
+     * The name and signature of the console command.
+     *
+     * @var string
+     */
+    protected $signature = 'sogo:set-user-sieve-script {--f|file=} {cmd?}';
+
+    /**
+     * The console command description.
+     *
+     * @var string
+     */
+    protected $description = 'cria script(s) sieve para usuario(s) sogo';
+
+    /**
+     * Create a new command instance.
+     *
+     * @return void
+     */
+    public function __construct()
+    {
+        parent::__construct();
+    }
+
+    /**
+     * Execute the console command.
+     *
+     * @return mixed
+     */
+    public function handle()
+    {
+        $arguments = $this->arguments();
+
+        $fileName = $this->option('file') ?? null;
+
+        if( !file_exists('credential') ){
+            $this->error(' Crie o arquivo de CREDENCIAIS  do cyrus.');
+            die();
+        }
+
+        if( !is_null($fileName) ){
+
+            $handle = fopen( $fileName, "r");
+            
+            if ($handle) {
+                
+                while ( ($line = fgets($handle)) !== false) {
+
+                    // user | rule | is_active
+                    $user     = "";
+                    $rule     = "";
+                    $isActive = "";
+
+                    list( $user, $rule, $isActive ) = explode("|", $line );
+
+                    // error offset
+                    $ruleText = preg_replace_callback ( '!s:(\d+):"(.*?)";!', function($match) {      
+                        return ($match[1] == strlen($match[2])) ? $match[0] : 's:' . strlen($match[2]) . ':"' . $match[2] . '";';
+                    }, $rule );
+
+                    $this->writeFile( $user, $ruleText, $isActive );
+                }
+                
+                fclose($handle);
+                
+                $sieveFiles = Storage::files( 'sieve' );
+
+                foreach( $sieveFiles as $file )
+                {
+                    $user = preg_replace('/sieve\/sieve_/', '', $file );
+
+                    $content = Storage::get( $file ) ;
+                    $content = preg_replace('/\n/',',', $content );
+                    $content = '{"SOGOSieveFilters":['.$content.']}';
+
+                    File::put('fileSogoSieveFilter.json', $content );
+                    
+                    $commandSogoTool = "sogo-tool user-preferences set defaults {$user} -p credential SOGoSieveFilters -f fileSogoSieveFilter.json";
+
+                    exec( $commandSogoTool );
+                }
+
+                if( file_exists('fileSogoSieveFilter.json') ){
+                    File::delete('fileSogoSieveFilter.json');
+                }
+
+                if( file_exists('credential') ){
+                    File::delete('credential');
+                }
+        
+            } else {
+                $this->error("Arquivo não encontrado");
+            }                 
+        }
+        
+    }
+
+    private function writeFile( $user, $content, $isActive )
+    {
+        $rule = unserialize($content);
+
+        $isActiveRule = ( intval($isActive) === 1 ? "1" : "0" );
+
+        $newRule = '{"actions": [%actions%], "name": %name%, "rules": [%rules%], "match": %match%, "active": '.$isActiveRule.'}';
+
+        // actions, name
+        if( isset($rule['action']) ){
+
+            $actions        = "";
+            $name           = "";
+
+            if( preg_match('/fileinto/', $rule['action']) ){
+                $folderName = preg_replace('/fileinto:/','',$rule['action']);
+                $actions = '{"argument": "'.$this->_toISO88591($folderName).'", "method": "fileinto"}';
+                $name   .= 'ARQUIVAR em ' . $this->_toISO88591($folderName);
+            }
+
+            if( preg_match('/rejectText/', $rule['action']) ){
+                $message = preg_replace('/rejectText:/','',$rule['action']);
+                $message = $this->_toISO88591($message);
+                $actions = '{"argument": "'. $message .'", "method": "reject"}';
+                $name   .= 'REJEITAR com a mensagem : ' . $message;
+            }
+
+            if( preg_match('/flagged/', $rule['action']) ){
+                $actions = '{"argument": "$label1", "method": "addflag"}';
+                $name   .= 'MARCAR COMO IMPORTANTE ';
+            }
+
+            if( preg_match('/redirect/', $rule['action']) ){
+                $emails = explode(';', preg_replace('/redirect:/','', $this->_toISO88591($rule['action'])));
+                foreach( $emails as $email ){
+                    $actions .= '{"argument": "'.$email.'", "method": "redirect"},';
+                }
+                $actions = rtrim($actions, ",");
+                $name   .= 'REDIRECIONAR para ' . implode(', ', $emails );
+            }
+
+            if( preg_match('/discard/', $rule['action']) ){
+                $actions = '{"argument": "", "method": "discard"}';
+                $name   .= 'APAGAR mensagem ';
+            }
+
+            $newRule = preg_replace('/%actions%/', $actions, $newRule );
+            $newRule = preg_replace('/%name%/', '"'.$name.'"', $newRule );
+        }
+
+        // match
+        if( isset($rule['condition']) ){
+            if($rule['condition'] === "anyof"){
+                $newRule = preg_replace('/%match%/', '"any"', $newRule );
+            }
+            if($rule['condition'] === "allof"){
+                $newRule = preg_replace('/%match%/', '"all"', $newRule );
+            }
+        }
+
+        // fields from, to, subject
+        $fieldFrom     = "";
+        $fieldTo       = "";
+        $fieldSubject  = "";
+        
+        if( isset($rule['from']) ){ $fieldFrom = '{"field": "from", "operator": "contains", "value": "'.$this->_toISO88591($rule['from']).'"}'; }
+        if( isset($rule['to']) ){ $fieldTo = '{"field": "to", "operator": "contains", "value": "'.$this->_toISO88591($rule['to']).'"}'; }
+        if( isset($rule['subject']) ){ $fieldSubject = '{"field": "subject", "operator": "contains", "value": "'.$this->_toISO88591($rule['subject']).'"}'; }
+
+        $fields  = $fieldFrom;
+        $fields .= ",".$fieldTo;
+        $fields .= ",".$fieldSubject;
+
+        if( trim($fields) !== "" ){ 
+            $fields = preg_replace("/^\,{1,2}/","",$fields);
+            $fields = preg_replace("/\,{1,2}$/","",$fields);
+            $newRule = preg_replace('/%rules%/', $fields, $newRule );
+        }
+
+        Storage::append( 'sieve/sieve_'.$user, $newRule );
+    }
+
+	private function _toMailBox( $folder )
+	{
+		return $this->_toUTF8( $folder, false, 'UTF7-IMAP' );
+	}
+
+	private function _toUTF8( $str, $charset = false, $to = 'UTF-8' )
+	{
+		return mb_convert_encoding( $str, 'UTF-8', ( $charset === false? mb_detect_encoding( $str, 'UTF-8, ISO-8859-1', true ) : $charset ) );
+    }
+
+    private function _toISO88591( $str, $charset = false )
+	{
+		return mb_convert_encoding( $str, 'ISO-8859-1', ( $charset === false? mb_detect_encoding( $str, 'UTF-8, ISO-8859-1', true ) : $charset ) );
+    }
+
+}
\ No newline at end of file
diff --git a/app/Console/Commands/Teste.php b/app/Console/Commands/Teste.php
index c8ea900..91d37a3 100644
--- a/app/Console/Commands/Teste.php
+++ b/app/Console/Commands/Teste.php
@@ -2,11 +2,9 @@
 
 namespace App\Console\Commands;
 
-use App\Commons\Ldap;
 use Illuminate\Console\Command;
-use Illuminate\Support\Facades\DB;
-use LdapRecord\Connection;
-use Storage;
+use Illuminate\Support\Facades\Storage;
+use Illuminate\Support\Facades\File;
 
 class Teste extends Command
 {
@@ -15,6 +13,7 @@ class Teste extends Command
      *
      * @var string
      */
+    //protected $signature = 'teste:comando {--o1|opt1=} {--o2|opt2=}';
     protected $signature = 'teste:comando';
 
     /**
@@ -41,14 +40,15 @@ class Teste extends Command
      */
     public function handle()
     {
-        $ldap = new Ldap();
+        // $opt1 = $this->option('opt1') ?? null;
+        // $opt2 = $this->option('opt2') ?? null;
 
-        //print_r( $ldap->getUidNumber("alexandrecorreia") );
-
-        //print_r( $ldap->getUid("500074") );
-
-        print_r( $ldap->getUsersOu("celepar") );
+        // if( !is_null($opt1) )
+        //     print_r( 'opt1 : ' . $opt1 . PHP_EOL);
 
+        // if( !is_null($opt2) )
+        //     print_r( 'opt2 : ' . $opt2 . PHP_EOL );
     }
+
 }
 
diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php
index 1ef0058..ad99846 100755
--- a/app/Console/Kernel.php
+++ b/app/Console/Kernel.php
@@ -17,9 +17,12 @@ class Kernel extends ConsoleKernel
         // Commands Expresso
         \App\Console\Commands\Expresso\GetUsersOULdap::class,
         \App\Console\Commands\Expresso\SieveGetUid::class,
+        \App\Console\Commands\Expresso\SieveGetListFile::class,
+        \App\Console\Commands\Expresso\CyrusCredentialFile::class,
         
         // Commands SOGO
         \App\Console\Commands\Sogo\Preferences::class,
+        \App\Console\Commands\Sogo\SieveSetListFile::class,
         
         // TESTE
         \App\Console\Commands\Teste::class
