Changeset 3394


Ignore:
Timestamp:
10/21/10 15:52:45 (14 years ago)
Author:
rafaelraymundo
Message:

Ticket #1265 - Tratamento de mensagens encapsuladas do Outlook.

Location:
branches/2.2
Files:
10 edited

Legend:

Unmodified
Added
Removed
  • branches/2.2/expressoMail1_2/inc/class.imap_functions.inc.php

    r3392 r3394  
    5252        function open_mbox($folder = False,$force_die=true) 
    5353        { 
     54                $folder = mb_convert_encoding($folder, "UTF7-IMAP","ISO_8859-1"); 
    5455                if (is_resource($this->mbox)) 
    55                         return $this->mbox; 
    56                 $folder = mb_convert_encoding($folder, "UTF7-IMAP","ISO_8859-1"); 
    57                                 if($force_die)  
    58                         $this->mbox = @imap_open("{".$this->imap_server.":".$this->imap_port.$this->imap_options."}".$folder, $this->username, $this->password) or die(serialize(array('imap_error' => $this->parse_error(imap_last_error())))); 
    59                 else  
    60                         $this->mbox = @imap_open("{".$this->imap_server.":".$this->imap_port.$this->imap_options."}".$folder, $this->username, $this->password); 
    61                 return $this->mbox; 
     56                { 
     57                     if ($force_die) 
     58                     { 
     59                        @imap_reopen($this->mbox, "{".$this->imap_server.":".$this->imap_port.$this->imap_options."}".$folder) or die(serialize(array('imap_error' => $this->parse_error(imap_last_error())))); 
     60                     } 
     61                     else 
     62                        { 
     63                            @imap_reopen($this->mbox, "{".$this->imap_server.":".$this->imap_port.$this->imap_options."}".$folder); 
     64                        } 
     65                } 
     66                else 
     67                    { 
     68                        if($force_die) 
     69                        { 
     70                            $this->mbox = @imap_open("{".$this->imap_server.":".$this->imap_port.$this->imap_options."}".$folder, $this->username, $this->password) or die(serialize(array('imap_error' => $this->parse_error(imap_last_error())))); 
     71                        } 
     72                        else 
     73                            { 
     74                                $this->mbox = @imap_open("{".$this->imap_server.":".$this->imap_port.$this->imap_options."}".$folder, $this->username, $this->password); 
     75                            } 
     76                         
     77                    } 
     78                    return $this->mbox; 
    6279         } 
    6380 
     
    493510                if(!$this->mbox || !is_resource($this->mbox)) 
    494511                        $this->mbox = $this->open_mbox($msg_folder); 
    495  
    496512                $header = $this->get_header($msg_number); 
    497513                if (!$header) { 
     
    753769                $return['login'] = $_SESSION['phpgw_info']['expressomail']['user']['account_id'];//$GLOBALS['phpgw_info']['user']['account_id']; 
    754770                $return['reply_toaddress'] = $header->reply_toaddress; 
     771                 
     772                if($return_get_body['body']=='isSigned'){ 
     773                    imap_close($this->mbox); 
     774                    $new_mail = $this->show_decript($return_get_body,$dec = 1); 
     775                    //$new_mail['signature'] =  $return_get_body['signature']; 
     776                    $return['body']             = $new_mail['body']; 
     777                    $return['attachments']      = $new_mail['attachments']; 
     778                    $return['thumbs']           = $new_mail['thumbs']; 
     779                    $return['folder'] = $return['msg_folder']; 
     780                    $return['original_ID'] =  $return['msg_number']; 
     781                    $return['msg_folder']       = 'INBOX'.$this->imap_delimiter.'decifradas'; 
     782                    $return['msg_number']       = $new_mail['msg_no']; 
     783                    //$return['signature']      = $return_get_body['signature']; 
     784                } 
    755785                return $return; 
    756786        } 
     
    817847                if(!$msg->structure[$msg_number]->parts) //Simple message, only 1 piece 
    818848                { 
    819                         if(strtolower($msg->structure[$msg_number]->subtype) == 'x-pkcs7-mime'){ 
     849                        if((strtolower($msg->structure[$msg_number]->subtype) == 'x-pkcs7-mime') && (count($return['signature']) == 0 ) ){ 
    820850                                $return['body']='isCripted'; 
    821851                                return $return; 
     
    824854                        $attachment = array(); //No attachments 
    825855 
    826                         if(strtolower($msg->structure[$msg_number]->subtype) == 'x-pkcs7-mime'){ 
    827                                 $return['body']='isCripted'; 
    828                                 return $return; 
     856                        if (strtolower($msg->structure[$msg_number]->subtype) == "x-pkcs7-mime") 
     857                        { 
     858                                $return['body']='isSigned'; 
     859                                $headers = imap_fetchheader($this->mbox, imap_msgno($this->mbox, $msg_number)); 
     860                                $header_body_array = explode('MIME-Version: 1.0', $headers); 
     861                                $show_pkcs7 = $header_body_array[0] . 'MIME-Version: 1.0' . chr(0x0D) .chr(0x0A). $return['signature'][0]; 
     862                                $return['source']=$show_pkcs7; 
     863                                array_shift($return['signature']); 
     864                                $return['signature']; 
     865                                //$return['signature'] = $this->get_signature($msg,$msg_number,$msg_folder); 
     866                                imap_close($this->mbox); 
     867                                return $return; 
    829868                        } 
    830869 
     
    860899                        $has_multipart = true; 
    861900                        $this->has_cid = false; 
    862  
     901                        array_shift($return['signature']); 
    863902                        if (strtolower($msg->structure[$msg_number]->subtype) == "related") 
    864903                                $this->has_cid = true; 
     
    13071346                if(strtolower($msg->encoding[$msg_number][$index]) == 'base64') 
    13081347                { 
    1309                     if ($file_type == 'application/x-pkcs7-signature' || $file_type == 'application/pkcs7-signature') 
     1348                    if ($temp['ContentType'] == 'signature') 
    13101349                    { 
    1311                         if(!$this->mbox || !is_resource($this->mbox)) 
    1312                             $this->mbox = $this->open_mbox($msg_folder); 
     1350                        if(!$this->mbox || !is_resource($this->mbox)) 
     1351                        $this->mbox = $this->open_mbox($msg_folder); 
    13131352 
    13141353                        $header = @imap_headerinfo($this->mbox, imap_msgno($this->mbox, $msg_number), 80, 255); 
     
    13191358                        $certificado = new certificadoB(); 
    13201359                        $validade = $certificado->verificar($imap_msg); 
    1321  
     1360                                        $sign[] = $certificado->msg_sem_assinatura; 
    13221361                        if ($certificado->apresentado) 
    13231362                        { 
     
    15841623     */ 
    15851624    function getMessageType($msg_number, $headers = false){ 
    1586  
     1625            include_once(dirname( __FILE__ ) ."/../../security/classes/CertificadoB.php"); 
    15871626            $contentType = "normal"; 
    15881627            if (!$headers){ 
    15891628                $headers = imap_fetchheader($this->mbox, imap_msgno($this->mbox, $msg_number)); 
    15901629            } 
    1591             //$header2 = imap_fetchheader($this->mbox, imap_msgno($this->mbox, $msg_number)); 
    1592             if (preg_match("/Content-Type:.*pkcs7-signature/i", $headers) == 1){ 
     1630             
     1631            if (preg_match("/pkcs7-signature/i", $headers) == 1){ 
    15931632                $contentType = "signature"; 
    1594             } else if (preg_match("/Content-Type:.*x-pkcs7-mime/i", $headers) == 1){ 
    1595                 $contentType = "cipher"; 
     1633            } else if (preg_match("/pkcs7-mime/i", $headers) == 1){ 
     1634                $contentType = testa_p7m( imap_body($this->mbox, imap_msgno($this->mbox, $msg_number)) ); 
    15961635            } 
    15971636 
     
    36773716    } 
    36783717 
    3679     function show_decript($params){ 
     3718    function show_decript($params,$dec=0){ 
     3719         
    36803720        $source = $params['source']; 
    36813721        //error_log("source: $source\nversao: " . PHP_VERSION, 3, '/tmp/teste.log'); 
    3682         $source = str_replace(" ", "+", $source,$i); 
    3683  
    3684         if (version_compare(PHP_VERSION, '5.2.0', '>=')){ 
    3685             if(!$source = base64_decode($source,true)) 
    3686                 return "error ".$source."Espaços ".$i; 
    3687  
     3722 
     3723        if ($dec == 0) 
     3724        { 
     3725            $source = str_replace(" ", "+", $source,$i); 
     3726            if (version_compare(PHP_VERSION, '5.2.0', '>=')){ 
     3727                if(!$source = base64_decode($source,true)) 
     3728                    return "error ".$source."Espaços ".$i; 
     3729 
     3730            } 
     3731            else { 
     3732                if(!$source = base64_decode($source)) 
     3733                    return "error ".$source."Espaços ".$i; 
     3734            } 
    36883735        } 
    3689         else { 
    3690             if(!$source = base64_decode($source)) 
    3691                 return "error ".$source."Espaços ".$i; 
    3692         } 
    3693  
    36943736        $insert = $this->insert_email($source,'INBOX'.$this->imap_delimiter.'decifradas'); 
    36953737 
  • branches/2.2/expressoMail1_2/js/draw_api.js

    r3393 r3394  
    11661166        img_next_msg.style.cursor = 'pointer'; 
    11671167 
    1168         var folder_id = 0; 
    1169         folder_id = info_msg.original_ID ? info_msg.original_ID: info_msg.msg_number; 
    1170         var folder = document.getElementById(folder_id); 
     1168        var folder_id = ID.match(/\d+/)[0]; 
     1169        var folder; 
     1170 
     1171        //Correção para fazer funcionar e-mails assinados no formato encapsulado. 
     1172       // folder_id = info_msg.original_ID ? info_msg.original_ID: info_msg.msg_number; 
     1173        if ((folder = document.getElementById(info_msg.original_ID)) == null) 
     1174        //if ((folder = document.getElementById(info_msg.msg_number)) == null) 
     1175            folder = document.getElementById(info_msg.msg_number); 
    11711176        if (!folder){ 
    11721177                delete_border(ID); 
  • branches/2.2/security/ExpressoCert/src/br/gov/serpro/cert/DigitalCertificate.java

    r3232 r3394  
    5555import br.gov.serpro.ui.DialogBuilder; 
    5656import br.gov.serpro.util.Base64Utils; 
    57 import com.sun.mail.util.BASE64DecoderStream; 
    58 import java.io.InputStreamReader; 
    5957import java.io.OutputStream; 
    6058import java.io.OutputStreamWriter; 
    61 import java.io.PipedInputStream; 
    62 import java.io.PipedOutputStream; 
    6359import java.security.AlgorithmParameters; 
     60import java.util.regex.Matcher; 
     61import java.util.regex.Pattern; 
    6462import javax.activation.CommandMap; 
    6563import javax.activation.MailcapCommandMap; 
    66 import javax.mail.BodyPart; 
    6764import javax.mail.internet.ContentType; 
    6865import javax.mail.internet.MimeUtility; 
    6966import javax.mail.internet.PreencodedMimeBodyPart; 
    70 import org.bouncycastle.asn1.ASN1InputStream; 
    71 import org.bouncycastle.asn1.DERObject; 
    7267import org.bouncycastle.cms.CMSException; 
    7368import org.bouncycastle.cms.RecipientId; 
     
    623618            } 
    624619 
     620            // Corrige problemas com e-mails vindos do Outlook 
     621            // Corrige linhas que são terminadas por \n (\x0A) e deveriam ser terminadas por \r\n (\x0D\x0A) 
     622            Pattern p = Pattern.compile("(?<!\\r)\\n"); 
     623            Matcher matcher = p.matcher(retorno); 
     624            retorno = matcher.replaceAll(CRLF); 
     625 
    625626            return retorno; 
    626627        } else { 
  • branches/2.2/security/ExpressoCert/src/br/gov/serpro/setup/Setup.java

    r3232 r3394  
    11package br.gov.serpro.setup; 
     2 
    23import java.applet.Applet; 
    34import java.util.HashMap; 
     
    89import java.util.ResourceBundle; 
    910 
    10  
    1111public class Setup { 
    1212 
    13         /** 
    14          * 
    15          */ 
    16         private static final long serialVersionUID = -8164125429139606589L; 
    17  
    18         private Properties parameters; 
    19         private Properties preferences; 
     13    /** 
     14     * 
     15     */ 
     16    private static final long serialVersionUID = -8164125429139606589L; 
     17    private Properties parameters; 
     18    private Properties preferences; 
    2019    private Map<String, ResourceBundle> langResources; 
    2120    Locale currentLocale; 
    22         private Applet currentApplet; 
    23          
     21    private Applet currentApplet; 
    2422    private static final String PREFERENCES_PATH; 
    2523    private static final String EPASS_2000; 
     
    2725    static { 
    2826 
    29         //PrintStream ps = new PrintStream(System.out); 
    30                 //System.getProperties().list(System.out); 
    31  
    32         if (System.getProperty("os.name").equalsIgnoreCase("linux")){ 
    33                         EPASS_2000 = "/usr/lib/libepsng_p11.so"; 
    34                 } 
    35                 else { 
    36                         EPASS_2000 = System.getenv("SystemRoot").replaceAll("\\\\", "/")+"/system32/ngp11v211.dll"; 
    37             //EPASS_2000 = System.getenv("ProgramFiles")+"\\Gemplus\\GemSafe Libraries\\BIN\\gclib.dll"; 
    38                 } 
     27        if (System.getProperty("os.name").equalsIgnoreCase("linux")) { 
     28            EPASS_2000 = "/usr/lib/libepsng_p11.so"; 
     29        } else { 
     30            EPASS_2000 = System.getenv("SystemRoot").replaceAll("\\\\", "/") + "/system32/ngp11v211.dll"; 
     31        } 
    3932 
    4033 
    41                 PREFERENCES_PATH = "TESTE"; 
     34        PREFERENCES_PATH = "TESTE"; 
    4235 
    43         } 
     36    } 
    4437 
    45         public Setup(Applet applet){ 
     38    public Setup(Applet applet) { 
    4639 
    47                 this.currentApplet = applet; 
    48                 parameters = new Properties(); 
    49                 //preferences = Do arquivo apontado por preferences_path 
     40        this.currentApplet = applet; 
     41        parameters = new Properties(); 
     42        //preferences = Do arquivo apontado por preferences_path 
    5043 
    51                 // Pega os parâmetros da applet 
    52                 for (String[] parameter: getParameterInfo()){ 
    53                         String parameterName = parameter[0]; 
    54                         String parameterValue; 
     44        // Pega os parâmetros da applet 
     45        for (String[] parameter : getParameterInfo()) { 
     46            String parameterName = parameter[0]; 
     47            String parameterValue; 
    5548 
    56                         if (this.currentApplet.isActive()){ 
    57                             parameterValue = this.currentApplet.getParameter(parameterName); 
    58                         } 
    59                         else { 
    60                             parameterValue = null; 
    61                         } 
     49            parameterValue = this.currentApplet.getParameter(parameterName); 
    6250 
    63                         //System.out.println("Parameter a ser adicionado - " + parameterName + "= " + parameterValue); 
     51            System.out.println("parameter: "+parameterName+" value: "+parameterValue); 
    6452 
    65                         if (parameterValue != null && !parameterValue.equals("")){ 
    66                                 parameters.setProperty(parameterName.toLowerCase(), parameterValue); 
    67                 if (parameterName.equalsIgnoreCase("locale")){ 
     53            if (parameterValue != null && !parameterValue.equals("")) { 
     54                parameters.setProperty(parameterName.toLowerCase(), parameterValue); 
     55                if (parameterName.equalsIgnoreCase("locale")) { 
    6856                    System.out.println("Locale recebido."); 
    6957                } 
    70                         } 
    71             else { 
     58            } else { 
    7259                //Defaults 
    73                 if (parameterName.equalsIgnoreCase("debug")){ 
     60                if (parameterName.equalsIgnoreCase("debug")) { 
    7461                    parameters.setProperty(parameterName.toLowerCase(), "false"); 
    7562                } 
    76                 if (parameterName.equalsIgnoreCase("token")){ 
    77                     parameters.setProperty(parameterName.toLowerCase(), "Epass2000;"+EPASS_2000); 
     63                if (parameterName.equalsIgnoreCase("token")) { 
     64                    parameters.setProperty(parameterName.toLowerCase(), "Epass2000;" + EPASS_2000); 
    7865                } 
    79                 if (parameterName.equalsIgnoreCase("locale")){ 
     66                if (parameterName.equalsIgnoreCase("locale")) { 
    8067                    System.out.println("Locale não recebido, definindo valor default."); 
    8168                    parameters.setProperty(parameterName.toLowerCase(), "pt_BR"); 
    8269                } 
    8370            } 
    84                 } 
     71        } 
    8572 
    86                 //TODO: Pega as preferências do arquivo de preferências se encontrado; 
     73        //TODO: Pegar as preferências do arquivo de preferências se encontrado; 
    8774 
    8875        // Lang Resources 
     
    9178        langResources.put("ExpressoCertMessages", ResourceBundle.getBundle("ExpressoCertMessages", currentLocale)); 
    9279 
    93         } 
     80    } 
    9481 
    95         public String[][] getParameterInfo(){ 
     82    public String[][] getParameterInfo() { 
    9683 
    97                 String[][] info = { 
    98                         {"debug", "boolean", "Habilita mensagens de debug"}, 
     84        String[][] info = { 
     85            {"debug", "boolean", "Habilita mensagens de debug"}, 
    9986            {"token", "string", "Lista de tokens suportados. Formato: nome1;caminho1,nome2;caminho2"}, 
    10087            {"locale", "string", "Locale do sistema"} 
    101                 }; 
     88        }; 
    10289 
    103                 return info; 
    104         } 
     90        return info; 
     91    } 
    10592 
    106         public String[][] getPreferencesInfo(){ 
     93    public String[][] getPreferencesInfo() { 
    10794 
    108                 String[][] info = { 
    109                         {"preferedToken", "string", "Token preferencial do usuário. Formato: nome;caminho"} 
    110                 }; 
     95        String[][] info = { 
     96            {"preferedToken", "string", "Token preferencial do usuário. Formato: nome;caminho"} 
     97        }; 
    11198 
    112                 return info; 
     99        return info; 
    113100 
    114         } 
     101    } 
    115102 
    116         public String getParameter(String key){ 
    117                 return parameters.getProperty(key); 
    118         } 
     103    public String getParameter(String key) { 
     104        return parameters.getProperty(key); 
     105    } 
    119106 
    120         public String getPreference(String key){ 
    121                 return getPreference(key); 
    122         } 
     107    public String getPreference(String key) { 
     108        return getPreference(key); 
     109    } 
    123110 
    124         //TODO: implementar PreferenceNotRegisteredException 
    125         public void setPreference(String key, String value){ 
     111    //TODO: implementar PreferenceNotRegisteredException 
     112    public void setPreference(String key, String value) { 
    126113 
    127                 boolean exists = false; 
    128                 while (!exists){ 
    129                         for (String[] preference: getPreferencesInfo()){ 
    130                                 if (key.equalsIgnoreCase(preference[1])){ 
    131                                         exists = true; 
    132                                         preferences.setProperty(key, value); 
    133                                 } 
    134                         } 
    135                 } 
     114        boolean exists = false; 
     115        while (!exists) { 
     116            for (String[] preference : getPreferencesInfo()) { 
     117                if (key.equalsIgnoreCase(preference[1])) { 
     118                    exists = true; 
     119                    preferences.setProperty(key, value); 
     120                } 
     121            } 
     122        } 
    136123 
    137                 if (!exists){ 
     124        if (!exists) { 
    138125//                       throws PreferenceNotRegisteredException(); 
    139126            System.out.println("Preferência não existe!"); 
    140                 } 
    141         } 
     127        } 
     128    } 
    142129 
    143     Locale buildLocale(String localeCode){ 
     130    Locale buildLocale(String localeCode) { 
    144131 
    145132        String[] localeItems = localeCode.split("_"); 
    146133        Locale locale; 
    147          
    148         switch (localeItems.length){ 
    149             case 1: locale = new Locale(localeItems[0]); 
    150                     break; 
    151             case 2: locale = new Locale(localeItems[0], localeItems[1]); 
    152                     break; 
    153             case 3: locale = new Locale(localeItems[0], localeItems[1], localeItems[2]); 
    154                     break; 
    155             default: locale = new Locale("pt", "BR"); 
    156                     System.out.println("Locale code error, setting default locale: " + locale.toString()); 
     134 
     135        switch (localeItems.length) { 
     136            case 1: 
     137                locale = new Locale(localeItems[0]); 
     138                break; 
     139            case 2: 
     140                locale = new Locale(localeItems[0], localeItems[1]); 
     141                break; 
     142            case 3: 
     143                locale = new Locale(localeItems[0], localeItems[1], localeItems[2]); 
     144                break; 
     145            default: 
     146                locale = new Locale("pt", "BR"); 
     147                System.out.println("Locale code error, setting default locale: " + locale.toString()); 
    157148        } 
    158149 
     
    160151    } 
    161152 
    162     public void addLanguageResource(String langResource){ 
    163         System.out.println("registrando recusro de linguagem " + langResource); 
     153    public void addLanguageResource(String langResource) { 
     154        System.out.println("registrando recurso de linguagem " + langResource); 
    164155        langResources.put(langResource, ResourceBundle.getBundle(langResource, currentLocale)); 
    165156    } 
    166157 
    167     public String getLang(String langResource, String message){ 
     158    public String getLang(String langResource, String message) { 
    168159 
    169160        ResourceBundle resource = langResources.get(langResource); 
     
    172163        try { 
    173164            i18nText = resource.getString(message); 
    174         } 
    175         catch (MissingResourceException e){ 
     165        } catch (MissingResourceException e) { 
    176166            e.printStackTrace(); 
    177167        } 
     
    182172    } 
    183173 
    184         // TODO: Not Implemented Yet 
    185         public boolean savePreferences(){ 
    186                 return false; 
    187         } 
    188  
     174    // TODO: Not Implemented Yet 
     175    public boolean savePreferences() { 
     176        return false; 
     177    } 
    189178} 
Note: See TracChangeset for help on using the changeset viewer.