diff --git a/src/Jirafeau/a.php b/src/Jirafeau/a.php
index 2c33c39..65c40e1 100644
--- a/src/Jirafeau/a.php
+++ b/src/Jirafeau/a.php
@@ -2,7 +2,6 @@
/*
* Kaz addon (see https://git.kaz.bzh/KAZ/depollueur for information)
* create un archive for a set of file or update file deadline
- * version : 2.22 (2024-12-09)
a.php?r=email => track
a.php?p=email => period
@@ -14,118 +13,7 @@
action: a=login a=logout a=r[on|off] a=p[minute|hour|day|week|month|quarter|semester]
*/
-use PHPMailer\PHPMailer\PHPMailer;
-use PHPMailer\PHPMailer\SMTP;
-use PHPMailer\PHPMailer\Exception;
-require 'vendor/autoload.php';
-
-define ('JIRAFEAU_ROOT', dirname (__FILE__) . '/');
-
-require (JIRAFEAU_ROOT . 'lib/settings.php');
-require (JIRAFEAU_ROOT . 'lib/functions.php');
-require (JIRAFEAU_ROOT . 'lib/lang.php');
-
-define ('VAR_TOKENS', $cfg ['var_root'].'tokens/');
-define ('VAR_MODE', $cfg ['var_root'].'mode/');
-define ('VAR_TRACKS', $cfg ['var_root'].'tracks/');
-define ('VAR_PERIOD', $cfg ['var_root'].'period/');
-define ('VAR_LANG', $cfg ['var_root'].'lang/');
-define ('VAR_FAKE', $cfg ['var_root'].'fake/');
-define ('VAR_ADMIN', $cfg ['var_root'].'admin/');
-define ('VAR_CONFIG', $cfg ['var_root'].'config/');
-define ('FILE_CONFIG', VAR_CONFIG.'default.php');
-
-$domain="kaz.local";
-if (preg_match ("%^.*//([^/]*)/?.*$%", $cfg ['web_root'], $matches))
- $domain = $matches [1];
-
-define ('MAX_VALID_UPLOAD_TIME', 60);
-define ('TOKEN_USE_LIMIT', "-2 hours");
-define ('TOKEN_LOGIN_LIMIT', "-15 minutes");
-define ('TOKEN_LOGOUT_LIMIT', "-8 hours");
-if (!file_exists (VAR_CONFIG))
- mkdir (VAR_CONFIG, 0755);
-if (!file_exists (FILE_CONFIG)) {
- file_put_contents (FILE_CONFIG, "
Ceci est un message automatique, car vous venez de cliquer sur une demande de consultation de vos pièces jointes.
!!! Si vous n'êtes pas à l'origine de cette demande, ne cliquez sur aucun lien de ce message. !!!
Le lien de connexion suivant est valable 15 minutes.
___LINK___
Vous pouvez signaler des abus auprès de Kaz en faisant suivre ce message qui contient les traces de son émetteur (___IP___, ___DATE___).
Bonne navigation.
.");
-define ('M_DOWNLOAD', "Télécharger");
-define ('M_UPDATE', "Prolonger");
-define ('M_EMAIL_SUBJECT', "Lien de consultation des envois sur ".$domain.".");
-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_INTRO_FORM', "Quelles sont les informations me concernant ?");
-define ('M_MEL', "votre mél");
-define ('M_NO_FILENAME', 'SansNom');
-define ('M_NO_SENDER', 'kaz-');
-define ('M_NEW_ATTACHEMENT_DIRNAME', "nouveau");
-define ('M_OLD_ATTACHEMENT_DIRNAME', "ancien");
-define ('M_SEND', "Connexion");
-define ('M_LOGOUT', 'Deconnecter');
-define ('M_REFRESH', 'Actualiser');
-define ('M_LOGOUT_TOKEN', "Vous n'êtes plus connecté.");
-define ('M_SEND_TOKEN', "
Vous allez recevoir un lien d'accès temporaire à vos données.
");
-define ('M_WELCOME', "Informations concernant le compte : ___SENDER______ADMIN___
(page actualisée à ___DATE___)
");
-define ('M_INCONSISTENT_DATES',
- " (dates incohéantes avec ___FILENAME___ : ___DIRTIME___ != ___FILETIME___)");
-
-define ('A_ACTION', 'a'); // action : T_LOGIN, T_LOGOUT, A_MODE(none|footer|attachment|both), A_RECORD+(on|off), A_PERIOD(minute|hour|day|week|month|quarter|semester), A_LANG(fr|en|br)
-define ('A_GET', 'g'); // get archive
-define ('A_HASH', 'h'); // file to update or delete
-define ('A_OPEN_TOKEN', 'o'); // ask token
-define ('A_SENDER', 's'); // session sender
-define ('A_TOKEN', 't'); // session token
-define ('A_UPDATE', 'u'); // update perriod for file or archive
-define ('A_MODE', 'm'); // get mode status
-define ('A_RECORD', 'r'); // get track status
-define ('A_PERIOD', 'p'); // get period status
-define ('A_LANG', 'l'); // get lang status
-define ('A_DELETE', 'd'); // delete file ou archive + (sender+token)
-define ('T_BAD_PASW', 'bad_psw');
-define ('T_CREATE', "create");
-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_LOGGED', "logged");
-define ('T_NEW', 'new');
-define ('T_SIGN', 'sign');
-define ('T_NOT_FOUND', 'not_found');
-define ('T_OLD', 'old');
-define ('T_RENAME', 'rename');
-define ('T_LOGIN', 'login');
-define ('T_LOGOUT', 'logout');
-define ('T_SENDER', 'sender');
-define ('T_TIME', 'time');
-define ('T_ID', 'id');
-define ('T_TOKEN', "token");
-define ('T_WARNING_FILENAME', "-Avertissement.txt");
-define ('T_ZIP_EXT', ".zip");
-define ('T_ARCHIVE_TITLE', "archive_content");
-define ('T_ARCHIVE_MIME', "text/kaz_email_archive");
-
+require ("lib/attach-setup.php");
$modeText = ['none' => "sans", 'footer' => "pied de page", 'attachment' => "pièce jointe", 'both' => "les deux"];
$trackText = ['on' => "oui", 'off' => "non"];
@@ -139,14 +27,6 @@ $periodButton = ['hour' => ["🕐", ">1 heure"], // 1F550
];
$langText = ['fr' => "Francais", 'br' => "Breton", 'en' => "english"];
$doLogout = '';
-$message = '';
-
-/* Operations may take a long time.
- * Be sure PHP's safe mode is off.
- */
-@set_time_limit (0);
-/* Remove errors. */
-@error_reporting (0);
// ========================================
if (isset ($_REQUEST [A_MODE]) && !empty ($_REQUEST [A_MODE])) {
@@ -213,9 +93,9 @@ if (isset ($_REQUEST [A_GET]) && !empty ($_REQUEST [A_GET])) {
// ========================================
function returnError ($msg) {
- require (JIRAFEAU_ROOT.'lib/template/header.php');
- echo '';
- require (JIRAFEAU_ROOT.'lib/template/footer.php');
+ displayHeadPage ("Gestion des pièces jointes");
+ echo '' . $msg . '
';
+ displayFootPage ();
exit;
}
@@ -343,49 +223,6 @@ function getSenderLang ($sender) {
return DEFAULT_LANG;
}
-// ========================================
-function setSenderFake ($error, $sender, $owner, $dirLink, $fileLink) {
- global $doLogout;
-
- if (!file_exists (VAR_FAKE))
- mkdir (VAR_FAKE, 0755);
- $dirTime = $fileTime = $fileName = $fileType = $ip = '';
- if (count ($dirLink) != 0) {
- $dirTime = $dirLink ['upload_date'].date (" Y-m-d H:i:s", $dirLink ['upload_date']);
- $ip = $dirLink ['ip'];
- }
- if (!$sender)
- return;
- if (count ($fileLink) != 0) {
- $fileTime = $fileLink ['upload_date'].date (" Y-m-d H:i:s", $fileLink ['upload_date']);
- $fileName = $link ['file_name'];
- $fileType = $link ['mime_type'];
- }
- $content =
- "time : ".time ().NL.
- "date : ".date ("Y-m-d H:i:s").NL.
- "error : ".$error.NL.
- "sender : <".$sender.">".NL.
- "owner : <".$owner.">".NL.
- "dirLink : <".$dirLink.">".NL.
- "dirTime : ".$dirTime.NL.
- "dirIp : ".$ip.NL.
- "fileTime: ".$fileTime.NL.
- "fileType: <".$fileType.">".NL.
- "fileName: <".$fileName.">".NL;
-
- $log = $ip.$sender;
- if ($log)
- file_put_contents (VAR_FAKE.$log, $content);
-
- // $doLogout = true;
- // rmToken ($sender);
-}
-function getSenderFake ($sender) {
- return false;
- // return $sender && file_exists (VAR_FAKE.$sender);
-}
-
// ========================================
function isKazArchive ($link) {
return
@@ -474,98 +311,6 @@ function updateLink ($link_name, $link, $maxLimit) {
return $time_more;
}
-// ========================================
-function sendEMail ($receiver, $receiver_name, $subject, $body_string){
- try {
- // SERVER SETTINGS
- $mail = new PHPMailer (true);
- $mail->isSMTP ();
- $mail->Host = 'smtp';
- $mail->SMTPAuth = false;
- $mail->SMTPAutoTLS = false;
- $mail->SMTPSecure = "none";
- $mail->Port = 25;
- $mail->charSet = "UTF-8";
- $mail->ContentType = 'text/html';
-
- global $domain;
- //Recipients (change this for every project)
- $mail->setFrom ('no-reply@'.$domain, '');
- $mail->addAddress ($receiver, $receiver_name);
-
- //Content
- $mail->isHTML (true);
- $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;
- }
- } catch (Exception $e) {
- return 0;
- }
-}
-
-// ========================================
-function cleanToken () {
- if (!file_exists (VAR_TOKENS))
- mkdir (VAR_TOKENS, 0755);
- $d = dir (VAR_TOKENS);
- $oldest = strtotime (TOKEN_USE_LIMIT);
- foreach (glob (VAR_TOKENS."*") as $file) {
- if (filemtime ($file) <= $oldest)
- unlink ($file);
- }
-}
-function rmToken ($sender) {
- if (!$sender)
- return;
- if (file_exists (VAR_TOKENS.$sender))
- unlink (VAR_TOKENS.$sender);
-}
-function setToken ($sender) {
- if (!$sender)
- return;
- $token = md5 (rand ());
- if (file_put_contents (VAR_TOKENS.$sender, T_CREATE.": ".time ().NL.T_TOKEN.": ".$token.NL))
- return $token;
- return false;
-}
-function setLoggedToken ($sender, $token) {
- if (!$sender || !$token)
- return;
- file_put_contents (VAR_TOKENS.$sender, T_CREATE.": ".time ().NL.T_TOKEN.": ".$token.NL.T_LOGGED.": ok".NL);
-}
-function getTokenVar ($sender, $varName) {
- if (!$sender)
- return;
- if (!file_exists (VAR_TOKENS.$sender))
- return false;
- $content = file_get_contents (VAR_TOKENS.$sender);
- if (preg_match ("/\b".$varName.":\s*([^\s]+)\n/", $content, $matches))
- return $matches [1];
- return false;
-}
-function getToken ($sender) {
- return getTokenVar ($sender, T_TOKEN,);
-}
-function getCreateToken ($sender) {
- return getTokenVar ($sender, T_CREATE);
-}
-function getLoggedToken ($sender) {
- return getTokenVar ($sender, T_LOGGED);
-}
-function getTimeToken ($sender) {
- if (!$sender || !file_exists (VAR_TOKENS.$sender))
- return false;
- return filemtime (VAR_TOKENS.$sender);
-}
-
// ========================================
function setAdmin ($sender) {
if (!$sender)
@@ -707,6 +452,8 @@ function deleteAction ($linkName) {
}
}
+// ========================================
+// main
// ========================================
if ($doUpdate) {
$maxTime = time ()+period2seconds ($_REQUEST [A_UPDATE]);
@@ -736,19 +483,6 @@ if ($doUpdate) {
exit;
}
-$sender = '';
-$senderError = false;
-if (isset ($_REQUEST [A_SENDER]) && !empty ($_REQUEST [A_SENDER])) {
- // XXX
- //if (!preg_match ("/^([a-z0-9\+_\-]+)(\.[a-z0-9\+_\-]+)*@([a-z0-9\-]+\.)+[a-z]{2,6}$/i", $_REQUEST [A_SENDER]))
- if (!preg_match ("/^([a-z0-9\+_\-]+)(\.[a-z0-9\+_\-]+)*@([a-z0-9\-]+\.)+[a-z]{2,6}$/i", $_REQUEST [A_SENDER]))
- $senderError = true;
- else {
- cleanToken ();
- $sender = $_REQUEST [A_SENDER];
- }
-}
-
// ========================================
if ($doDownload) {
// check archive exist
@@ -900,75 +634,26 @@ if ($doDownload) {
// ========================================
// form
-$token = '';
-if (isset ($_REQUEST [A_TOKEN]) && !empty ($_REQUEST [A_TOKEN])) {
- if (!preg_match ("/^([0-9a-zA-Z_-]+)$/", $_REQUEST [A_TOKEN]))
- return false;
- $token = $_REQUEST [A_TOKEN];
-}
-
-$refToken = getToken ($sender);
-$urlBase = $_SERVER ['HTTP_X_FORWARDED_PROTO']."://".$_SERVER ['HTTP_HOST'];
-if (isset ($_REQUEST [A_ACTION]) && $_REQUEST [A_ACTION] == T_LOGIN && $sender) {
- require (JIRAFEAU_ROOT . 'lib/template/header.php');
- if (getSenderFake ($sender))
- echo "Ce compte ne peut plus se connecter. Veuillez contacter les administrateurs.";
- else {
- $token = setToken ($sender);
- // XXX test token
- $url = $urlBase.$_SERVER ['SCRIPT_NAME']."?".A_SENDER."=".$sender."&".A_TOKEN."=".$token;
- $result = sendEMail ($sender, "", M_EMAIL_SUBJECT,
- str_replace (["___LINK___", "___IP___", "___DATE___"],
- [$url, $_SERVER ['HTTP_X_REAL_IP'] , date ("Y-m-d H:i:s")], M_EMAIL_CONTENT));
- if ($result)
- echo M_SEND_TOKEN;
- else
- echo
- "Erreur dans l'envoi. Véritiez votre mél.";
- }
- echo "
";
- require (JIRAFEAU_ROOT.'lib/template/footer.php');
- exit;
-}
if (! ($sender && $token && $token == $refToken &&
(getLoggedToken ($sender) || (getTimeToken ($sender) >= strtotime (TOKEN_LOGIN_LIMIT))) &&
(getCreateToken ($sender) >= strtotime (TOKEN_LOGOUT_LIMIT)))) {
// XXX temps de connexion
- require (JIRAFEAU_ROOT . 'lib/template/header.php');
- echo M_INTRO_FORM;
+ displayHeadPage ("Gestion des pièces jointes");
if ($senderError)
- echo "".M_BAD_SENDER_NAME."
";
+ $message .= ''.M_BAD_SENDER_NAME.'
'.NL;
else if (($token && !$refToken) || !getLoggedToken ($sender))
- echo "".M_TOO_LONG_BEFORE_LOGGED."
";
+ $message .= ''.M_TOO_LONG_BEFORE_LOGGED.'
'.NL;
else if ($token && $token != $refToken)
- echo "".M_BAD_TOKEN."
";
+ $message .= ''.M_BAD_TOKEN.'
'.NL;
else if (getCreateToken ($sender) < strtotime (TOKEN_LOGOUT_LIMIT))
- echo "".M_TOO_LONG_LOGGED."
";
+ $message .= ''.M_TOO_LONG_LOGGED.'
'.NL;
- ?>
-
-Info : ".$message."";
+ echo 'Info : '.$message.'
';
echo M_LOGOUT;
- require (JIRAFEAU_ROOT.'lib/template/footer.php');
+ displayFootPage ();
exit;
}
@@ -1009,7 +694,7 @@ if (isset ($_REQUEST [A_ACTION])) {
switch (true) {
case preg_match ("/^".A_MODE."(".implode ("|", array_keys ($modeText)).")$/i", $_REQUEST [A_ACTION], $matches):
setSenderMode ($sender, $matches [1]);
- $message .= "Votre mode à été mise à jour.";
+ $message .= 'Votre mode à été mise à jour.';
break;
case preg_match ("/^".A_RECORD."(on|off)$/i", $_REQUEST [A_ACTION], $matches):
if ($matches [1] == "on")
@@ -1060,12 +745,12 @@ while ( ($d = array_shift ($stack)) && $d != null) {
$archives [] = $archiveInfo;
}
}
-require (JIRAFEAU_ROOT . 'lib/template/header.php');
+displayHeadPage ("Gestion des pièces jointes");
echo str_replace (["___SENDER___", "___ADMIN___", "___DATE___"],
[$sender, ($admin ? " (admin)" : ""), jirafeau_get_datetimefield (time ())],
M_WELCOME);
if ($message)
- echo "Info : ".$message."
";
+ echo 'Info : '.$message.'
';
echo '
+
+