- Timestamp:
- 10/14/10 11:23:45 (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2.2/expressoMail1_2/inc/class.imap_functions.inc.php
r3298 r3352 1258 1258 function get_signature($msg, $msg_number, $msg_folder) 1259 1259 { 1260 include_once(dirname( __FILE__ ) ."/../../security/classes/CertificadoB.php"); 1261 include_once("class.db_functions.inc.php"); 1262 foreach ($msg->file_type[$msg_number] as $index => $file_type) 1263 { 1264 $sign = array(); 1265 $temp = $this->get_info_head_msg($msg_number); 1266 if($temp['ContentType'] =='normal') return $sign; 1267 $file_type = strtolower($file_type); 1268 if(strtolower($msg->encoding[$msg_number][$index]) == 'base64') 1260 include_once(dirname( __FILE__ ) ."/../../security/classes/CertificadoB.php"); 1261 include_once("class.db_functions.inc.php"); 1262 foreach ($msg->file_type[$msg_number] as $index => $file_type) 1263 { 1264 $sign = array(); 1265 $temp = $this->get_info_head_msg($msg_number); 1266 if($temp['ContentType'] =='normal') return $sign; 1267 $file_type = strtolower($file_type); 1268 if(strtolower($msg->encoding[$msg_number][$index]) == 'base64') 1269 { 1270 if ($file_type == 'application/x-pkcs7-signature' || $file_type == 'application/pkcs7-signature') 1271 { 1272 if(!$this->mbox || !is_resource($this->mbox)) 1273 $this->mbox = $this->open_mbox($msg_folder); 1274 1275 $header = @imap_headerinfo($this->mbox, imap_msgno($this->mbox, $msg_number), 80, 255); 1276 1277 $imap_msg = @imap_fetchheader($this->mbox, $msg_number, FT_UID); 1278 $imap_msg .= @imap_body($this->mbox, $msg_number, FT_UID); 1279 1280 $certificado = new certificadoB(); 1281 $validade = $certificado->verificar($imap_msg); 1282 1283 if ($certificado->apresentado) 1269 1284 { 1270 if ($file_type == 'application/x-pkcs7-signature' || $file_type == 'application/pkcs7-signature') 1271 { 1272 if(!$this->mbox || !is_resource($this->mbox)) 1273 $this->mbox = $this->open_mbox($msg_folder); 1274 1275 $header = @imap_headerinfo($this->mbox, imap_msgno($this->mbox, $msg_number), 80, 255); 1276 1277 $imap_msg = @imap_fetchheader($this->mbox, $msg_number, FT_UID); 1278 $imap_msg .= @imap_body($this->mbox, $msg_number, FT_UID); 1279 1280 $certificado = new certificadoB(); 1281 $validade = $certificado->verificar($imap_msg); 1282 1283 if ($certificado->apresentado) 1284 { 1285 $from = $header->from; 1286 foreach ($from as $id => $object) { 1287 $fromname = $object->personal; 1288 $fromaddress = $object->mailbox . "@" . $object->host; 1289 } 1290 $sign_alert = ''; 1291 foreach ($certificado->erros_ssl as $item) 1292 { 1293 $check_error_msg = $this->functions->getLang($item); 1294 /* 1295 * Desabilite o teste abaixo para mostrar todas as mensagem 1296 * de erro. 1297 */ 1298 //if (!strpos($check_error_msg,'*',strlen($check_error_msg-1))) 1299 //{ 1300 $sign[] = "<span style=color:red>" . $check_error_msg . " </span>"; 1301 //} 1302 } 1303 if (count($certificado->erros_ssl) < 1) 1304 { 1305 $check_msg = $this->functions->getLang('Message untouched') . " "; 1306 if(strtoupper($fromaddress) != strtoupper($certificado->dados['EMAIL'])) 1307 { 1308 $check_msg .= $this->functions->getLang('and') . " "; 1309 $check_msg .= $this->functions->getLang('authentic'); 1310 } 1311 $sign[] = "<strong>".$check_msg."</strong>"; 1312 } 1313 if(strtoupper($fromaddress) != strtoupper($certificado->dados['EMAIL'])) 1314 { 1315 $sign[] = "<span style=color:red>" . 1316 $this->functions->getLang('message') . " " . 1317 $this->functions->getLang('with signer different from sender') . 1318 " </span>"; 1319 } 1320 $sign[] = "<strong>" . $this->functions->getLang('Message signed by: ') . "</strong>" . $certificado->dados['NOME']; 1321 $sign[] = "<strong>" . $this->functions->getLang('Certificate email: ') . "</strong>" . $certificado->dados['EMAIL']; 1322 $sign[] = "<strong>" . $this->functions->getLang('Mail from: ') . "</strong>" . $fromaddress; 1323 $sign[] = "<strong>" . $this->functions->getLang('Certificate Authority: ') . "</strong>" . $certificado->dados['EMISSOR']; 1324 $sign[] = "<strong>" . $this->functions->getLang('Validity of certificate: ') . "</strong>" . gmdate('r',openssl_to_timestamp($certificado->dados['FIM_VALIDADE'])); 1325 $sign[] = "<strong>" . $this->functions->getLang('Message date: ') . "</strong>" . $header->Date; 1326 1327 $cert = openssl_x509_parse($certificado->cert_assinante); 1328 /* 1329 $sign[] = '<table>'; 1330 $sign[] = '<tr><td colspan=1><b>Expedido para:</b></td></tr>'; 1331 $sign[] = '<tr><td>Nome Comum (CN) </td><td>' . $cert[subject]['CN'] . '</td></tr>'; 1332 $X = substr($certificado->dados['NASCIMENTO'] ,0,2) . '-' . substr($certificado->dados['NASCIMENTO'] ,2,2) . '-' . substr($certificado->dados['NASCIMENTO'] ,4,4); 1333 $sign[] = '<tr><td>Data de nascimento </td><td>' . $certificado->dados['NASCIMENTO'] . '</td></tr>'; 1334 $sign[] = '<tr><td>CPF </td><td>' . $certificado->dados['CPF'] . '</td></tr>'; 1335 $sign[] = '<tr><td>Documento identidade </td><td>' . $certificado->dados['RG'] . '</td></tr>'; 1336 $sign[] = '<tr><td>Empresa (O) </td><td>' . $cert[subject]['O'] . '</td></tr>'; 1337 $sign[] = '<tr><td>Unidade Organizacional (OU) </td><td>' . $cert[subject]['OU'][0] . '</td></tr>'; 1338 //$sign[] = '<tr><td>Numero de serie </td><td>' . $cert['serialNumber'] . '</td></tr>'; 1339 $sign[] = '<tr><td colspan=1> </td></tr>'; 1340 $sign[] = '<tr><td colspan=1><b>Expedido por:</b></td></tr>'; 1341 $sign[] = '<tr><td>Nome Comum (CN) </td><td>' . $cert[issuer]['CN'] . '</td></tr>'; 1342 $sign[] = '<tr><td>Empresa (O) </td><td>' . $cert[issuer]['O'] . '</td></tr>'; 1343 $sign[] = '<tr><td>Unidade Organizacional (OU) </td><td>' . $cert[issuer]['OU'][0] . '</td></tr>'; 1344 $sign[] = '<tr><td colspan=1> </td></tr>'; 1345 $sign[] = '<tr><td colspan=1><b>Validade:</b></td></tr>'; 1346 $H = data_hora($cert[validFrom]); 1347 $X = substr($H,6,2) . '-' . substr($H,4,2) . '-' . substr($H,0,4); 1348 $sign[] = '<tr><td>Expedido em </td><td>' . $X . '</td></tr>'; 1349 $H = data_hora($cert[validTo]); 1350 $X = substr($H,6,2) . '-' . substr($H,4,2) . '-' . substr($H,0,4); 1351 $sign[] = '<tr><td>Valido ate </td><td>' . $X . '</td></tr>'; 1352 $sign[] = '<tr><td colspan=1> </td></tr>'; 1353 $sign[] = '</table>'; 1354 */ 1355 $sign_alert .= 'Expedido para:\n'; 1356 $sign_alert .= 'Nome Comum (CN) ' . $cert[subject]['CN'] . '\n'; 1357 $X = substr($certificado->dados['NASCIMENTO'] ,0,2) . '-' . substr($certificado->dados['NASCIMENTO'] ,2,2) . '-' . substr($certificado->dados['NASCIMENTO'] ,4,4); 1358 $sign_alert .= 'Data de nascimento ' . $X . '\n'; 1359 $sign_alert .= 'CPF ' . $certificado->dados['CPF'] . '\n'; 1360 $sign_alert .= 'Documento identidade ' . $certificado->dados['RG'] . '\n'; 1361 $sign_alert .= 'Empresa (O) ' . $cert[subject]['O'] . '\n'; 1362 $sign_alert .= 'Unidade Organizacional (OU) ' . $cert[subject]['OU'][0] . '\n'; 1363 //$sign_alert[] = '<tr><td>Numero de serie </td><td>' . $cert['serialNumber'] . '</td></tr>'; 1364 $sign_alert .= '\n'; 1365 $sign_alert .= 'Expedido por:\n'; 1366 $sign_alert .= 'Nome Comum (CN) ' . $cert[issuer]['CN'] . '\n'; 1367 $sign_alert .= 'Empresa (O) ' . $cert[issuer]['O'] . '\n'; 1368 $sign_alert .= 'Unidade Organizacional (OU) ' . $cert[issuer]['OU'][0] . '\n'; 1369 $sign_alert .= '\n'; 1370 $sign_alert .= 'Validade:\n'; 1371 $H = data_hora($cert[validFrom]); 1372 $X = substr($H,6,2) . '-' . substr($H,4,2) . '-' . substr($H,0,4); 1373 $sign_alert .= 'Expedido em ' . $X . '\n'; 1374 $H = data_hora($cert[validTo]); 1375 $X = substr($H,6,2) . '-' . substr($H,4,2) . '-' . substr($H,0,4); 1376 $sign_alert .= 'Valido ate ' . $X . '\n'; 1377 1378 $sign[] = "<a onclick=\"javascript:alert('" . $sign_alert . "')\"><b><font color=\"#0000FF\">".$this->functions->getLang("More")."...</font></b></a>"; 1379 $this->db = new db_functions(); 1380 1381 // TODO: testar se existe um certificado no banco e verificar qual ï¿œ o mais atual. 1382 if(!$certificado->dados['EXPIRADO'] && !$certificado->dados['REVOGADO'] && count($certificado->erros_ssl) < 1) 1383 $this->db->insert_certificate(strtolower($certificado->dados['EMAIL']), $certificado->cert_assinante, $certificado->dados['SERIALNUMBER'], $certificado->dados['AUTHORITYKEYIDENTIFIER']); 1384 } 1385 else 1386 { 1387 $sign[] = "<span style=color:red>" . $this->functions->getLang('Invalid signature') . "</span>"; 1388 foreach($certificado->erros_ssl as $item) 1389 $sign[] = "<span style=color:red>" . $this->functions->getLang($item) . "</span>"; 1285 $from = $header->from; 1286 foreach ($from as $id => $object) 1287 { 1288 $fromname = $object->personal; 1289 $fromaddress = $object->mailbox . "@" . $object->host; 1290 } 1291 foreach ($certificado->erros_ssl as $item) 1292 { 1293 $sign[] = $item . "#@#"; 1294 } 1295 1296 if (count($certificado->erros_ssl) < 1) 1297 { 1298 $check_msg = 'Message untouched'; 1299 if(strtoupper($fromaddress) == strtoupper($certificado->dados['EMAIL'])) 1300 { 1301 $check_msg .= ' and authentic###'; 1302 } 1303 else 1304 { 1305 $check_msg .= ' with signer different from sender#@#'; 1306 } 1307 $sign[] = $check_msg; 1308 } 1309 1310 $sign[] = 'Message signed by: ###' . $certificado->dados['NOME']; 1311 $sign[] = 'Certificate email: ###' . $certificado->dados['EMAIL']; 1312 $sign[] = 'Mail from: ###' . $fromaddress; 1313 $sign[] = 'Certificate Authority: ###' . $certificado->dados['EMISSOR']; 1314 $sign[] = 'Validity of certificate: ###' . gmdate('r',openssl_to_timestamp($certificado->dados['FIM_VALIDADE'])); 1315 $sign[] = 'Message date: ###' . $header->Date; 1316 1317 $cert = openssl_x509_parse($certificado->cert_assinante); 1318 1319 $sign_alert = array(); 1320 $sign_alert[] = 'Certificate Owner###:\n'; 1321 $sign_alert[] = 'Common Name (CN)### ' . $cert[subject]['CN'] . '\n'; 1322 $X = substr($certificado->dados['NASCIMENTO'] ,0,2) . '-' . substr($certificado->dados['NASCIMENTO'] ,2,2) . '-' . substr($certificado->dados['NASCIMENTO'] ,4,4); 1323 $sign_alert[]= 'Organization (O)### ' . $cert[subject]['O'] . '\n'; 1324 $sign_alert[]= 'Organizational Unit (OU)### ' . $cert[subject]['OU'][0] . '\n'; 1325 //$sign_alert[] = 'Serial Number### ' . $cert['serialNumber'] . '\n'; 1326 $sign_alert[] = 'Personal Data###:' . '\n'; 1327 $sign_alert[] = 'Birthday### ' . $X . '\n'; 1328 $sign_alert[]= 'Fiscal Id### ' . $certificado->dados['CPF'] . '\n'; 1329 $sign_alert[]= 'Identification### ' . $certificado->dados['RG'] . '\n\n'; 1330 $sign_alert[]= 'Certificate Issuer###:\n'; 1331 $sign_alert[]= 'Common Name (CN)### ' . $cert[issuer]['CN'] . '\n'; 1332 $sign_alert[]= 'Organization (O)### ' . $cert[issuer]['O'] . '\n'; 1333 $sign_alert[]= 'Organizational Unit (OU)### ' . $cert[issuer]['OU'][0] . '\n\n'; 1334 $sign_alert[]= 'Validity###:\n'; 1335 $H = data_hora($cert[validFrom]); 1336 $X = substr($H,6,2) . '-' . substr($H,4,2) . '-' . substr($H,0,4); 1337 $sign_alert[]= 'Valid From### ' . $X . '\n'; 1338 $H = data_hora($cert[validTo]); 1339 $X = substr($H,6,2) . '-' . substr($H,4,2) . '-' . substr($H,0,4); 1340 $sign_alert[]= 'Valid Until### ' . $X; 1341 $sign[] = $sign_alert; 1342 1343 $this->db = new db_functions(); 1344 1345 // TODO: testar se existe um certificado no banco e verificar qual ï¿œ o mais atual. 1346 if(!$certificado->dados['EXPIRADO'] && !$certificado->dados['REVOGADO'] && count($certificado->erros_ssl) < 1) 1347 $this->db->insert_certificate(strtolower($certificado->dados['EMAIL']), $certificado->cert_assinante, $certificado->dados['SERIALNUMBER'], $certificado->dados['AUTHORITYKEYIDENTIFIER']); 1348 } 1349 else 1350 { 1351 $sign[] = "<span style=color:red>" . $this->functions->getLang('Invalid signature') . "</span>"; 1352 foreach($certificado->erros_ssl as $item) 1353 $sign[] = "<span style=color:red>" . $this->functions->getLang($item) . "</span>"; 1354 } 1390 1355 } 1391 } 1392 } 1393 } 1394 return $sign; 1356 } 1357 } 1358 return $sign; 1395 1359 } 1396 1360 … … 1502 1466 * não preciso reimplementar o método utilizando o fetchheader. 1503 1467 */ 1468 1504 1469 $tempHeader = @imap_fetchheader($this->mbox, imap_msgno($this->mbox, $msg_number)); 1505 1470 $flag = preg_match('/importance *: *(.*)\r/i', $tempHeader, $importance);
Note: See TracChangeset
for help on using the changeset viewer.