fix links
This commit is contained in:
		| @@ -7,7 +7,10 @@ | ||||
|  a.php?g=l~k => zip | ||||
|  a.php?s=mel@domain.org => send status e-mail | ||||
| */ | ||||
|  | ||||
| use PHPMailer\PHPMailer\PHPMailer; | ||||
| use PHPMailer\PHPMailer\SMTP; | ||||
| use PHPMailer\PHPMailer\Exception; | ||||
| require 'vendor/autoload.php'; | ||||
|  | ||||
| define ('JIRAFEAU_ROOT', dirname (__FILE__) . '/'); | ||||
|  | ||||
| @@ -15,6 +18,43 @@ require(JIRAFEAU_ROOT . 'lib/settings.php'); | ||||
| require (JIRAFEAU_ROOT . 'lib/functions.php'); | ||||
| require (JIRAFEAU_ROOT . 'lib/lang.php'); | ||||
|  | ||||
| define ('A_GET', 'g'); | ||||
| define ('A_HASH', 'h'); | ||||
| define ('A_SENDER', 's'); | ||||
| define ('A_UPDATE', 'u'); | ||||
| define ('A_OPEN_TOKEN', 'o'); | ||||
| define ('E_BAD_SENDER_NAME', 'mèl incorrect : '); | ||||
| define ('E_BAD_ARCHIVE_NAME', 'bad archive name format : '); | ||||
| define ('E_CREATE_ZIP', "Impossible de créer l'archive."); | ||||
| define ('E_OPEN_ZIP', "Impossible d'ouvrir l'archive."); | ||||
| define ('M_BAD_KEY', "Mauvaise clef pour "); | ||||
| define ('M_FILE', " fichier."); | ||||
| define ('M_FILES', " fichiers."); | ||||
| define ('M_FILES_NOT_FOUND', " fichiers sont expirés."); | ||||
| define ('M_FILES_RENAMED', " fichiers renommés."); | ||||
| define ('M_FILE_NOT_FOUND', " fichier est expiré."); | ||||
| define ('M_FILE_RENAMED', " fichier renommé."); | ||||
| define ('M_NO_FILENAME', 'SansNom'); | ||||
| define ('M_NO_SENDER', 'kaz'); | ||||
| define ('M_OLD_ATTACHEMENT_DIRNAME', "RappelHistorique"); | ||||
| define ('M_INTRO_FORM', "Où sont les dernières pièces jointe que j'ai envoyé ?"); | ||||
| define ('M_SEND_TOKEN', "Vous allez recevoir un lien d'accès temporaire à vos données."); | ||||
| define ('T_BAD_PASW', 'bad_psw'); | ||||
| define ('T_CRYPTED', 'crypted'); | ||||
| define ('T_CRYPT_KEY', 'crypt_key'); | ||||
| define ('T_ENTRIES', 'entries'); | ||||
| define ('T_FILENAME', 'file_name'); | ||||
| define ('T_HASH', 'hash'); | ||||
| define ('T_NEW', 'new'); | ||||
| define ('T_NOT_FOUND', 'not_found'); | ||||
| define ('T_OLD', 'old'); | ||||
| define ('T_RENAME', 'rename'); | ||||
| define ('T_SENDER', 'sender'); | ||||
| define ('T_TIMESTAMP', 'timestamp'); | ||||
| define ('T_WARNING_FILENAME', "-Avertissement.txt"); | ||||
| define ('T_ZIP_EXT', ".zip"); | ||||
|  | ||||
|  | ||||
| /* Operations may take a long time. | ||||
|  * Be sure PHP's safe mode is off. | ||||
|  */ | ||||
| @@ -23,12 +63,12 @@ require(JIRAFEAU_ROOT . 'lib/lang.php'); | ||||
| @error_reporting (0); | ||||
|  | ||||
| $do_update = false; | ||||
| if (isset ($_REQUEST['u']) && !empty ($_REQUEST['u'])) { | ||||
| if (isset ($_REQUEST[A_UPDATE]) && !empty ($_REQUEST[A_UPDATE])) { | ||||
|     $do_update = true; | ||||
| } | ||||
|  | ||||
| $do_download = false; | ||||
| if (isset ($_REQUEST['g']) && !empty ($_REQUEST['g'])) { | ||||
| if (isset ($_REQUEST[A_GET]) && !empty ($_REQUEST[A_GET])) { | ||||
|     $do_download = true; | ||||
| } | ||||
|  | ||||
| @@ -72,16 +112,16 @@ function read_archive_info ($link) { | ||||
|     foreach (file (VAR_FILES . $p . $link ['hash']) as $line) { | ||||
|         switch (true) { | ||||
|         case preg_match ("/^\s*src:\s*(([a-z0-9\+_\-]+)(\.[a-z0-9\+_\-]+)*@([a-z0-9\-]+\.)+[a-z]{2,6})\s*$/i", $line, $matches): | ||||
|             $result['sender'] = $matches[1]; | ||||
|             $result[T_SENDER] = $matches[1]; | ||||
|             break; | ||||
|         case preg_match ("/^\s*time:\s*(\d{4}([:-]\d{2}){5})\s*$/i", $line, $matches): | ||||
|             $result['timestamp'] = $matches[1]; | ||||
|             $result[T_TIMESTAMP] = $matches[1]; | ||||
|             break; | ||||
|         case preg_match ("/^\s*old:\s*([0-9a-zA-Z_-]+)\s+([0-9a-zA-Z_-]+)\s*$/", $line, $matches): | ||||
|             $result['old'][] = [$matches[1], $matches[2]]; | ||||
|             $result[T_OLD][] = [$matches[1], $matches[2]]; | ||||
|             break; | ||||
|         case preg_match ("/^\s*new:\s*([0-9a-zA-Z_-]+)\s+([0-9a-zA-Z_-]+)\s*$/", $line, $matches): | ||||
|             $result['new'][] = [$matches[1], $matches[2]]; | ||||
|             $result[T_NEW][] = [$matches[1], $matches[2]]; | ||||
|             break; | ||||
|         default: | ||||
|             break; | ||||
| @@ -90,11 +130,40 @@ function read_archive_info ($link) { | ||||
|     return $result; | ||||
| } | ||||
|  | ||||
| // ======================================== | ||||
| function send_email($receiver, $receiver_name,  $subject, $body_string){ | ||||
|     // SERVER SETTINGS | ||||
|     $mail = new PHPMailer (true); | ||||
|     $mail->isSMTP (); | ||||
|     $mail->Host       = 'smtp'; | ||||
|     $mail->SMTPAuth   = false; | ||||
|     $mail->SMTPAutoTLS = false; | ||||
|     $mail->SMTPSecure = "none"; | ||||
|     $mail->Port       = 25; | ||||
|  | ||||
|     //Recipients (change this for every project) | ||||
|     $mail->setFrom ('no-reply@kaz.local', ''); | ||||
|     $mail->addAddress ($receiver, $receiver_name); | ||||
|  | ||||
|     //Content | ||||
|     $mail->isHTML (false); | ||||
|     $mail->Subject = $subject; | ||||
|     $mail->Body    = $body_string; | ||||
|  | ||||
|     //send the message, check for errors | ||||
|     if (!$mail->send ()) { | ||||
|         //echo 'Mailer Error: ' . $mail->ErrorInfo; | ||||
|         return 0; | ||||
|     } else { | ||||
|         //echo 'Message sent!'; | ||||
|         return 1; | ||||
|     } | ||||
| } | ||||
|  | ||||
| // ======================================== | ||||
| if ($do_update) { | ||||
|     $update_period = JIRAFEAU_MONTH; | ||||
|     switch ($_REQUEST['u']) { | ||||
|     switch ($_REQUEST[A_UPDATE]) { | ||||
|     case 'minute': | ||||
|         $update_period = JIRAFEAU_MINUTE; | ||||
|         break; | ||||
| @@ -119,7 +188,7 @@ if ($do_update) { | ||||
|     default: | ||||
|         return_error (t ('ERR_OCC') . ' (update_period)'); | ||||
|     } | ||||
|     $link_name = $_GET['h']; | ||||
|     $link_name = $_REQUEST[A_HASH]; | ||||
|     if (!preg_match ('/[0-9a-zA-Z_-]+$/', $link_name)) | ||||
|         return_error (t ('FILE_404')); | ||||
|     $link = jirafeau_get_link ($link_name); | ||||
| @@ -137,12 +206,12 @@ if ($do_update) { | ||||
| // ======================================== | ||||
| if ($do_download) { | ||||
|     // check archive exist | ||||
|     $couple = explode ("~", $_REQUEST['g'], 2); | ||||
|     $couple = explode ("~", $_REQUEST[A_GET], 2); | ||||
|     if (count ($couple) == 0) | ||||
|         return_error ("bad archive name format : ".$_REQUEST['g']); | ||||
|         return_error (E_BAD_ARCHIVE_NAME.$_REQUEST [A_GET]); | ||||
|     $link_name = $couple [0]; | ||||
|     if (!$link_name || !preg_match ('/[0-9a-zA-Z_-]+$/', $link_name)) | ||||
|         return_error ("bad archive name format : ".$_REQUEST['g']); | ||||
|         return_error (E_BAD_ARCHIVE_NAME.$_REQUEST [A_GET]); | ||||
|     $crypt_key = count ($couple) == 2 ? $couple [1] : ""; | ||||
|     $link = jirafeau_get_link ($link_name); | ||||
|     if (count ($link) == 0) | ||||
| @@ -156,80 +225,79 @@ if ($do_download) { | ||||
|     // check entries | ||||
|     $archive_content = []; | ||||
|     $modif = false; | ||||
|     foreach (["old", "new"] as $cat) { | ||||
|     $single_name = []; | ||||
|     foreach ([T_OLD, T_NEW] as $cat) | ||||
|         if (isset ($archive_info[$cat])) | ||||
|             foreach ($archive_info[$cat] as [$link_name, $crypt_key]) { | ||||
|                 $link = jirafeau_get_link ($link_name); | ||||
|                 if (count ($link) == 0) { | ||||
|                     ++$archive_content[$cat]['not_found']; | ||||
|                     if (isset ($archive_content[T_NOT_FOUND])) | ||||
|                         ++$archive_content[T_NOT_FOUND]; | ||||
|                     else | ||||
|                         $archive_content[T_NOT_FOUND] = 1; | ||||
|                     $modif = true; | ||||
|                     continue; | ||||
|                 } | ||||
|                 $key = $link ['key']; | ||||
|                 if ($key && (empty ($crypt_key) || $key != $crypt_key)) { | ||||
|                     ++$archive_content[$cat]['bad_pass']; | ||||
|                     if (isset ($archive_content[T_BAD_PASW])) | ||||
|                         ++$archive_content[T_BAD_PASW]; | ||||
|                     else | ||||
|                         $archive_content[T_BAD_PASW] = 1; | ||||
|                     $modif = true; | ||||
|                     continue; | ||||
|                 } | ||||
|                 $src_name = $dst_name = $link['file_name']; | ||||
|                 $src_name = $dst_name = ($link ['file_name'] ? $link ['file_name'] : M_NO_FILENAME); | ||||
|                 if (in_array ($src_name, $single_name)) | ||||
|                     for ($i = 0; $i < 10000; ++$i) { | ||||
|                         $dst_name = sprintf ("%s-%2d", $src_name, $i); | ||||
|                         if (!in_array ($dst_name, $single_name)) { | ||||
|                             ++$archive_content[$cat]['rename']; | ||||
|                             if (isset ($archive_content[T_RENAME])) | ||||
|                                 ++$archive_content[T_RENAME]; | ||||
|                             else | ||||
|                                 $archive_content[T_RENAME] = 1;     | ||||
|                             $modif = true; | ||||
|                             break; | ||||
|                         } | ||||
|                     } | ||||
|                 $single_name [] = $dst_name; | ||||
|                 $archive_content[$cat]['entries'][] = ['hash' => $link['hash'], 'file_name' => $dst_name, 'crypt_key' => $crypt_key, 'crypted' => $link['crypted']]; | ||||
|             } | ||||
|                 $archive_content[$cat][T_ENTRIES][] = [T_HASH => $link ['hash'], T_FILENAME => $dst_name, T_CRYPT_KEY => $crypt_key, T_CRYPTED => $link['crypted']]; | ||||
|             } | ||||
|  | ||||
|     // build zip | ||||
|     $dirname = (isset ($archive_info['sender']) && !empty ($archive_info['sender'])) | ||||
|              ? $archive_info['sender'] : "kaz"; | ||||
|     $dirname .= "-" . (isset ($archive_info['timestamp']) && !empty ($archive_info['timestamp'])) | ||||
|              ? $archive_info['timestamp'] : date ("Ymd-His"); | ||||
|     $dirname = (isset ($archive_info[T_SENDER]) && !empty ($archive_info[T_SENDER])) | ||||
|              ? $archive_info[T_SENDER] : M_NO_SENDER; | ||||
|     $dirname .= "-" . (isset ($archive_info[T_TIMESTAMP]) && !empty ($archive_info[T_TIMESTAMP])) | ||||
|              ? $archive_info[T_TIMESTAMP] : date ("Ymd-His"); | ||||
|     $tmpFileName = tempnam (sys_get_temp_dir (), $dirname."-"); | ||||
|     $zip = new ZipArchive; | ||||
|     if (!$zip) | ||||
|         return_error ("can't create zip"); | ||||
|     if ($zip->open ($tmpFileName.".zip", ZipArchive::CREATE) !== TRUE) | ||||
|         return_error ("can't open zip"); | ||||
|         return_error (E_CREATE_ZIP); | ||||
|     if ($zip->open ($tmpFileName.T_ZIP_EXT, ZipArchive::CREATE) !== TRUE) | ||||
|         return_error (E_OPEN_ZIP); | ||||
|  | ||||
|     // create info XXX | ||||
|     if ($modif) { | ||||
|         $info = ''; | ||||
|         $not_found = $bad_pass = $rename = 0; | ||||
|         foreach (["old", "new"] as $cat) { | ||||
|             if (isset ($archive_info[$cat]['not_found'])) | ||||
|                 $not_found += $archive_info[$cat]['not_found']; | ||||
|             if (isset ($archive_info[$cat]['bad_pass'])) | ||||
|                 $bad_pass += $archive_info[$cat]['bad_pass']; | ||||
|             if (isset ($archive_info[$cat]['rename'])) | ||||
|                 $rename += $archive_info[$cat]['rename']; | ||||
|         if (isset ($archive_info[T_NOT_FOUND])) | ||||
|             $info .= $archive_info[T_NOT_FOUND]. ($archive_info[T_NOT_FOUND] ? M_FILE_NOT_FOUND : M_FILES_NOT_FOUND).NL; | ||||
|         if (isset ($archive_info[T_BAD_PASW])) | ||||
|             $info .= M_BAD_KEY. $archive_info[T_BAD_PASW]. ($archive_info[T_BAD_PASW] ? M_FILE : M_FILES).NL; | ||||
|         if (isset ($archive_info[$cat][T_RENAME])) | ||||
|             $info .= $archive_info[$cat][T_RENAME]. ($archive_info[$cat][T_RENAME] ? M_FILE_RENAMED : M_FILES_RENAMED).NL; | ||||
|         $zip->addFromString ($dirname.T_WARNING_FILENAME, $info); | ||||
|     } | ||||
|         if ($not_found) | ||||
|             $info .= $not_found. ($not_found ? " fichier est expiré." : " fichiers sont expirés.").NL; | ||||
|         if ($bad_pass) | ||||
|             $info .= "Mauvaise clef pour ". $bad_pass. ($bad_pass ? " fichier" : " fichiers.").NL; | ||||
|         if ($rename) | ||||
|             $info .= $rename. ($rename ? " fichier renommé." : " fichiers sont renommés.").NL; | ||||
|         $zip->addFromString ($dirname."-Avertissement.txt", $info); | ||||
|     } | ||||
|     foreach (["old", "new"] as $cat) | ||||
|     foreach ([T_OLD, T_NEW] as $cat) | ||||
|         if (isset ($archive_info [$cat])) { | ||||
|             $subdir = $dirname . ($cat == "new" ? "" : "/origine"); | ||||
|             foreach ($archive_content [$cat]['entries'] as $entry) { | ||||
|                 $p = s2p ($entry ['hash']); | ||||
|                 if ($entry['crypted']) { | ||||
|             $subdir = $dirname . ($cat == T_NEW ? "" : "/".M_OLD_ATTACHEMENT_DIRNAME); | ||||
|             foreach ($archive_content [$cat][T_ENTRIES] as $entry) { | ||||
|                 $p = s2p ($entry [T_HASH]); | ||||
|                 if ($entry [T_CRYPTED]) { | ||||
|                     $m = mcrypt_module_open ('rijndael-256', '', 'ofb', ''); | ||||
|                     $md5_key = md5 ($entry['crypt_key']); | ||||
|                     $md5_key = md5 ($entry [T_CRYPT_KEY]); | ||||
|                     $iv = jirafeau_crypt_create_iv ($md5_key, mcrypt_enc_get_iv_size ($m)); | ||||
|                     mcrypt_generic_init ($m, $md5_key, $iv); | ||||
|                     $r = fopen (VAR_FILES . $p . $entry['hash'], 'r'); | ||||
|                     $r = fopen (VAR_FILES . $p . $entry [T_HASH], 'r'); | ||||
|                     $content = ""; | ||||
|                     while (!feof ($r)) { | ||||
|                         $dec = mdecrypt_generic ($m, fread ($r, 1024)); | ||||
| @@ -237,19 +305,19 @@ if ($do_download) { | ||||
|                         ob_flush (); | ||||
|                     } | ||||
|                     fclose ($r); | ||||
|                     $zip->addFromString ($subdir."/".$entry['file_name'], $content); | ||||
|                     $zip->addFromString ($subdir."/".$entry [T_FILENAME], $content); | ||||
|                     mcrypt_generic_deinit ($m); | ||||
|                     mcrypt_module_close ($m); | ||||
|                     continue; | ||||
|                 } | ||||
|                 $zip->addFile (VAR_FILES.$p.$entry['hash'], $subdir."/".$entry['file_name']); | ||||
|                 $zip->addFile (VAR_FILES.$p.$entry [T_HASH], $subdir."/".$entry [T_FILENAME]); | ||||
|             } | ||||
|         } | ||||
|     $zip->close (); | ||||
|  | ||||
|      | ||||
|     if (!is_file ($tmpFileName.".zip")) | ||||
|         return_error ("can't retreive tmp"); | ||||
|     if (!is_file ($tmpFileName.T_ZIP_EXT,)) | ||||
|         return_error (E_OPEN_ZIP); | ||||
|  | ||||
|     if (false) { | ||||
|         // log | ||||
| @@ -281,14 +349,98 @@ if ($do_download) { | ||||
| // XXX form send | ||||
| $content = "TODO send form".NL; | ||||
|  | ||||
| if (isset ($_REQUEST['s']) && !empty ($_REQUEST['s'])) { | ||||
|     $sender=$_REQUEST ['s']; | ||||
| $sender = ''; | ||||
| if (isset ($_REQUEST [A_SENDER]) && !empty ($_REQUEST [A_SENDER])) { | ||||
|     $sender=$_REQUEST [A_SENDER]; | ||||
|     if (!preg_match ("/^([a-z0-9\+_\-]+)(\.[a-z0-9\+_\-]+)*@([a-z0-9\-]+\.)+[a-z]{2,6}$/ix", $sender)) | ||||
|         return_error ("bad dir name format : ".$sender); | ||||
|  | ||||
|         return_error (E_BAD_SENDER_NAME.$sender); | ||||
|     $content = "${sender}".NL; | ||||
| } | ||||
|  | ||||
| if (!$sender) { | ||||
|     require (JIRAFEAU_ROOT . 'lib/template/header.php'); | ||||
|     echo M_INTRO_FORM; | ||||
|     ?> | ||||
|     <Form method="post" class="form login"> | ||||
|     <fieldset> | ||||
|     <table> | ||||
|     <tr> | ||||
|     <td class = "label"><label for = "enter_password"><?php echo "votre mèl" . ':'; ?></label> | ||||
|     </td> | ||||
|     </tr> | ||||
|     <tr> | ||||
|     <td class = "field"><input type = "text" name = "s" id = "s" size = "40" /> | ||||
|     </td> | ||||
|     </tr> | ||||
|     <tr class = "nav"> | ||||
|     <td class = "nav next"> | ||||
|     <input type = "submit" name = "key" value ="<?php echo t ('LOGIN'); ?>" /> | ||||
|     </td> | ||||
|     </tr> | ||||
|     </table> | ||||
|     </fieldset> | ||||
|     </form> | ||||
| <?php | ||||
|     require (JIRAFEAU_ROOT.'lib/template/footer.php'); | ||||
|     exit; | ||||
| } | ||||
|  | ||||
| $open_service = ''; | ||||
| if (!isset ($_REQUEST [A_OPEN_TOKEN]) || empty ($_REQUEST [A_OPEN_TOKEN])) | ||||
|     $open_service=$_REQUEST [A_OPEN_TOKEN]; | ||||
|  | ||||
| if (!isset ($open_service)) { | ||||
|     // send e-mail | ||||
|     //preg_match ("%^http.*//depot.([^/]+)/?$%i", $cfg ['web_root'], $matches); | ||||
|     // $domain = $matches[1]; | ||||
|     // $to      = $sender; | ||||
|     // $subject = 'Lien de consultation des envoies de pièces jointes'; | ||||
|     // $message = 'Bonjour !'; | ||||
|     // $headers = | ||||
|     //          'From: no-reply@'.$domain.'' . "\r\n" . | ||||
|     //          'X-Mailer: PHP/' . phpversion(); | ||||
|     // mail ($to, $subject, $message, $headers); | ||||
|  | ||||
|     $result = send_email ($sender, "",  "Lien de consultation des envoies de pièces jointes", "Bonjour!"); | ||||
|  | ||||
|     require (JIRAFEAU_ROOT . 'lib/template/header.php'); | ||||
|     echo M_SEND_TOKEN; | ||||
|     require (JIRAFEAU_ROOT.'lib/template/footer.php'); | ||||
|     exit; | ||||
| } | ||||
|  | ||||
| $found = []; | ||||
| $stack = array (VAR_LINKS); | ||||
| while ( ($d = array_shift ($stack)) && $d != null) { | ||||
|     $dir = scandir ($d); | ||||
|     foreach ($dir as $node) { | ||||
|         if (strcmp ($node, '.') == 0 || strcmp ($node, '..') == 0 || | ||||
|             preg_match ('/\.tmp/i', "$node")) { | ||||
|             continue; | ||||
|         } | ||||
|         if (is_dir ($d . $node)) { | ||||
|             /* Push new found directory. */ | ||||
|             $stack[] = $d . $node . '/'; | ||||
|         } elseif (is_file ($d . $node)) { | ||||
|             /* Read link informations. */ | ||||
|             $l = jirafeau_get_link ($node); | ||||
|             if (!count ($l)) { | ||||
|                 continue; | ||||
|             } | ||||
|             if (!@preg_match ("/archive_content/", jirafeau_escape ($l ['file_name'])) || jirafeau_escape ($l ['mime_type']) != "text/plain") { | ||||
|                 continue; | ||||
|             } | ||||
|             $archive_info = read_archive_info ($l); | ||||
|             if ($sender != $archive_info [T_SENDER]) | ||||
|                 continue; | ||||
|             if (isset ($archive_info [T_NEW])) | ||||
|                 foreach ($archive_info [T_NEW] as [$link_name, $crypt_key]) | ||||
|                     $found [$link_name] = $crypt_key; | ||||
|         } | ||||
|     } | ||||
| } | ||||
| foreach ($found as $link_name => $crypt_key) | ||||
|     $content .= $link_name . " - " . $crypt_key . NL; | ||||
|  | ||||
| // XXX find | ||||
| // add link : name / time / download / delete | ||||
|   | ||||
| @@ -163,7 +163,7 @@ void | ||||
| MainAttachment::addLink (string &plain, string &html, const string &url, const string &name) const { | ||||
|   string plainNewOneLink (templatePlainAddLink); | ||||
|   replaceAll (plainNewOneLink, TMPL_DOWNLOAD, url); | ||||
|   replaceAll (plainNewOneLink, TMPL_FILENAME, name); | ||||
|   replaceAll (plainNewOneLink, TMPL_FILENAME, "\""+name+"\""); | ||||
|   plain += plainNewOneLink; | ||||
|   string htmlNewOneLink (templateHtmlAddLink); | ||||
|   string codedUrl (url); | ||||
| @@ -211,7 +211,7 @@ MainAttachment::getDisclaim (string &plain, string &html) const { | ||||
|   plain = "\r\n"+KAZ_PLAIN_START+"\r\n"+KAZ_PLAIN_HR+"\r\n"+KAZ_PLAIN_DONT_TOUCH+"\r\n\r\n"+KAZ_PLAIN_WARNING+"\r\n\r\n"+KAZ_PLAIN_DOWLOAD_ONE+"\r\n"+plainNewLinks; | ||||
|   html = templateHtmlHeader+htmlNewLinks; | ||||
|   if (previousLinks.size ()) { | ||||
|     plain += KAZ_PLAIN_DOWLOAD_OTHER+"\r\n"+plainOldLinks; | ||||
|     plain += "\r\n"+KAZ_PLAIN_DOWLOAD_OTHER+"\r\n"+plainOldLinks; | ||||
|     html += templateHtmlOtherLink+htmlOldLinks; | ||||
|   } | ||||
|   if (linkCount > 1 && archiveDownloadURL.length ()) { | ||||
| @@ -239,7 +239,7 @@ MainAttachment::addPrevious (const string &href, const string &name, const bool | ||||
|   if (oldVal.length () && name.length () && !trust) | ||||
|     return; | ||||
|   previousLinks.erase (href); | ||||
|   previousLinks [href] = name; | ||||
|   previousLinks [href] = regex_replace (name, regex (R"([\t\r\n\"]+|(\\\")|(>\s*))"), ""); | ||||
|   LOG ("inserted: " << href << ": " << previousLinks[href]); | ||||
| } | ||||
|  | ||||
| @@ -255,7 +255,7 @@ MainAttachment::extractLinks (const string &extractedPlainKAZ) { | ||||
|     const string href (extractedPlainKAZ.substr (startPos, stopPos-startPos)); | ||||
|     LOG ("plain href: " << href); | ||||
|  | ||||
|     if (extractedPlainKAZ [stopPos] && extractedPlainKAZ [stopPos] != '\n') | ||||
|     if (extractedPlainKAZ [stopPos]) | ||||
|       ++stopPos; | ||||
|     startPos = stopPos; | ||||
|     // get all href but KAZ_WEB_SITE | ||||
| @@ -266,11 +266,11 @@ MainAttachment::extractLinks (const string &extractedPlainKAZ) { | ||||
|     string::size_type nextPos = extractedPlainKAZ.find ("http", startPos); | ||||
|     string name (extractedPlainKAZ, startPos, (nextPos == string::npos ? extractedPlainKAZ.length () : nextPos) - startPos); | ||||
|     // skip [> \r\n\t] | ||||
|     nextPos = name.find_first_not_of ("[> \t\r\n]"); | ||||
|     nextPos = name.find_first_not_of ("[> \t\r\n\"]"); | ||||
|     if (nextPos != string::npos) | ||||
|       name.erase (0, nextPos); | ||||
|     // stop before [>\r\n\t] | ||||
|     nextPos = name.find_first_of ("[>\t\r\n]"); | ||||
|     nextPos = name.find_first_of ("[\"]"); | ||||
|     if (nextPos != string::npos) | ||||
|       name.erase (nextPos); | ||||
|     LOG ("plain name: " << name); | ||||
| @@ -354,7 +354,8 @@ void | ||||
| MainAttachment::removePreviousArchive () { | ||||
|   vector<string> toRemove; | ||||
|   for (map <string, string>::const_iterator it = previousLinks.begin (); it != previousLinks.end (); ++it) | ||||
|     if (it->first.find ("&l=/") != string::npos) | ||||
|     if (it->first.find ("&g=") != string::npos || | ||||
| 	it->first.find ("&l=/") != string::npos) // v1 compatibility | ||||
|       toRemove.push_back (it->first); | ||||
|   for (string old : toRemove) | ||||
|     previousLinks.erase (old); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user