<?php /** * Lgging user activity * * @category PHP * @package VenoFileManager * @author Nicola Franchini <info@veno.it> * @license Exclusively sold on CodeCanyon * @link http://filemanager.veno.it/ */ use PHPMailer\PHPMailer\PHPMailer; require_once dirname(__DIR__).'/assets/mail/vendor/autoload.php'; if (!class_exists('Logger', false)) { /** * Class Logger * * @category PHP * @package VenoFileManager * @author Nicola Franchini <info@veno.it> * @license Exclusively sold on CodeCanyon * @link http://filemanager.veno.it/ */ class Logger { /** * Print log file * * @param string $message the message to log * @param string $relpath relative path of log file // DROPPED in favor of dirname() * * @return $message */ public static function log($message, $relpath = 'vfm-admin/') { global $setUp; if ($setUp->getConfig('log_file') == true) { $logjson = dirname(__DIR__).'/_content/log/'.date('Y-m-d').'.json'; if (Utils::isFileWritable($logjson)) { $message['time'] = date('H:i:s'); if (file_exists($logjson)) { $oldlog = json_decode(file_get_contents($logjson), true); } else { $oldlog = array(); } $daily = date('Y-m-d'); $oldlog[$daily][] = $message; $f = fopen($logjson, 'a'); if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') { file_put_contents($logjson, json_encode($oldlog, JSON_FORCE_OBJECT)); } else { if (flock($f, LOCK_EX | LOCK_NB)) { file_put_contents($logjson, json_encode($oldlog, JSON_FORCE_OBJECT)); flock($f, LOCK_UN); } } fclose($f); } else { Utils::setError('The script does not have permissions to write inside "/_content/log/" folder. check CHMOD'.$logjson); return; } } } /** * Log user login * * @return $message */ public static function logAccess() { global $gateKeeper; global $setUp; $message = array( 'user' => $gateKeeper->getUserInfo('name'), 'action' => 'log_in', 'type' => '', 'item' => 'IP: '.Logger::getClientIP(), ); Logger::log($message); if ($setUp->getConfig('notify_login')) { Logger::emailNotification('--', 'login'); } } /** * Get user IP * * @return $ipaddress */ public static function getClientIP() { if (!empty($_SERVER['HTTP_CLIENT_IP'])) { // check ip from share internet $ip = $_SERVER['HTTP_CLIENT_IP']; } elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) { // check ip is pass from proxy $ip = $_SERVER['HTTP_X_FORWARDED_FOR']; } elseif (!empty($_SERVER['REMOTE_ADDR'])) { $ip = $_SERVER['REMOTE_ADDR']; } else { $ip = 'UNKNOWN'; } return $ip; } /** * Log user creation of folders and files * * @param string $path the path to set * @param string $isDir may be 'dir' or 'file' * * @return $message */ public static function logCreation($path, $isDir) { global $gateKeeper; global $setUp; $path = addslashes($path); $message = array( 'user' => $gateKeeper->getUserInfo('name'), 'action' => 'ADD', 'type' => $isDir ? 'folder':'file', 'item' => ltrim($path, './'), ); Logger::log($message); // Moved to /ajax/sendupnotif.php // if (!$isDir && $setUp->getConfig('notify_upload')) { // Logger::emailNotification($path, 'upload'); // } if ($isDir && $setUp->getConfig('notify_newfolder')) { Logger::emailNotification($path, 'newdir'); } } /** * Log user deletion of folders and files * * @param string $path the path to set * @param boolean $isDir file or directory * @param boolean $remote true if called inside vfm-admin * * @return $message */ public static function logDeletion($path, $isDir, $remote = false) { global $gateKeeper; $path = addslashes($path); $message = array( 'user' => $gateKeeper->getUserInfo('name'), 'action' => 'REMOVE', 'type' => $isDir ? 'folder':'file', 'item' => ltrim($path, './'), ); Logger::log($message); } /** * Log download of single files * * @param string $path the path to set * @param bool $folder if is folder * @param string $relative relative path to /log/ folder * * @return $message */ public static function logDownload($path, $folder = false, $relative = '') { global $gateKeeper; global $setUp; $user = $gateKeeper->getUserName(); $mailmessage = ''; $type = $folder ? 'folder' : 'file'; if (is_array($path)) { foreach ($path as $value) { $path = addslashes($value); $message = array( 'user' => $user, 'action' => 'DOWNLOAD', 'type' => $type, 'item' => ltrim($path, './'), ); $mailmessage .= $path."\n"; Logger::log($message, $relative); } } else { $path = addslashes($path); $message = array( 'user' => $user, 'action' => 'DOWNLOAD', 'type' => $type, 'item' => ltrim($path, './'), ); $mailmessage = $path; Logger::log($message, $relative); } if ($setUp->getConfig('notify_download')) { Logger::emailNotification($mailmessage, 'download'); } } /** * Log play of single track * * @param string $path the path to set * * @return $message */ public static function logPlay($path) { global $gateKeeper; $path = addslashes($path); $message = array( 'user' => $gateKeeper->getUserInfo('name') ? $gateKeeper->getUserInfo('name') : '--', 'action' => 'PLAY', 'type' => 'file', 'item' => ltrim($path, './'), ); Logger::log($message, ''); } /** * Send email notfications for activity logs * * @param string $path the path to set * @param string $action can be 'download' | 'upload' | 'newdir' | 'login' | 'newuser' * @param string $data json_encoded additional message * * @return $message */ public static function emailNotification($path = false, $action = false, $data = false) { global $setUp; global $gateKeeper; if (strlen($setUp->getConfig('upload_email')) > 5) { $time = $setUp->formatModTime(time()); $message = $time."<br><br>"; $alt_message = $time."\n\n"; $message .= "IP : ".Logger::getClientIP()."<br>"; $alt_message .= "IP : ".Logger::getClientIP()."\n"; switch ($action) { case 'download': $title = $setUp->getString('new_download'); break; case 'upload': $title = $setUp->getString('new_upload'); break; case 'newdir': $title = $setUp->getString('new_directory'); break; case 'login': $title = $setUp->getString('new_access'); break; case 'newuser': $title = $setUp->getString('new_user_has_been_created'); break; default: $title = $setUp->getString('new_activity'); break; } $name = $gateKeeper->getUserInfo('name'); if ($name) { $message .= $setUp->getString('user')." : ".$name."<br>"; $alt_message .= $setUp->getString('user')." : ".$name."\n"; } if ($path) { $message .= $setUp->getString('path')." :<br>".nl2br($path)."<br>"; $alt_message .= $setUp->getString('path')." :\n".$path."\n"; } if ($data) { $get_data = json_decode($data); $message .= nl2br($get_data); $alt_message .= $get_data; } $sendTo = $setUp->getConfig('upload_email'); Logger::sendMail(false, $sendTo, $title, $message, $alt_message); // OLD Method // mail( // $sendTo, // "=?UTF-8?B?".base64_encode($title)."?=", // $message, // "Content-type: text/plain; charset=UTF-8\r\n". // "From: ".$from." <noreply@{$_SERVER['SERVER_NAME']}>\r\n". // "Reply-To: ".$from." <noreply@{$_SERVER['SERVER_NAME']}>" // ); } } /** * Send email notfications * * @param string $from from * @param string $to to * @param string $subject subject * @param string $content content * @param string $altmessage altmessage * * @return $message */ public static function sendMail($from = false, $to = false, $subject = false, $content = false, $altmessage = false) { global $setUp; $mail = new PHPMailer(); $mail->CharSet = 'UTF-8'; $mail->setLanguage($setUp->lang); $appname = html_entity_decode($setUp->getConfig('appname')); if ($setUp->getConfig('smtp_enable')) { $mail->isSMTP(); $mail->SMTPDebug = 0; // $mail->Debugoutput = 'html'; $smtp_auth = $setUp->getConfig('smtp_auth'); $mail->Host = $setUp->getConfig('smtp_server'); $mail->Port = (int)$setUp->getConfig('port'); $mail->SMTPOptions = array( 'ssl' => array( 'verify_peer' => false, 'verify_peer_name' => false, 'allow_self_signed' => true, ) ); if ($setUp->getConfig('secure_conn') !== "none") { $mail->SMTPSecure = $setUp->getConfig('secure_conn'); } $mail->SMTPAuth = $smtp_auth; if ($smtp_auth == true) { $mail->Username = $setUp->getConfig('email_login'); $mail->Password = $setUp->getConfig('email_pass'); } } if (!$from) { $setfrom = $setUp->getConfig('email_from'); if (!$setfrom) { return $setUp->getString("setup_email_application"); } $mail->setFrom($setfrom, $appname); } else { $mail->setFrom($from, '<'.$from.'>'); } if (!$to) { return $setUp->getString("missing_recipient"); } $mail->addAddress($to, '<'.$to.'>'); if (!$subject) { return $setUp->getString("missing_subject"); } $mail->Subject = html_entity_decode($subject); $email_logo = $setUp->getConfig('email_logo', false) ? dirname(__DIR__).'/_content/uploads/'.$setUp->getConfig('email_logo') : dirname(__DIR__).'/images/px.png'; $mail->AddEmbeddedImage($email_logo, 'logoimg'); // Retrieve the email template required $message = file_get_contents(Template::getMailTemplate('template-blank')); $app_url = $setUp->getConfig('script_url'); // Replace the % with the actual information $message = str_replace('%app_url%', $app_url, $message); $message = str_replace('%app_name%', $appname, $message); $message = str_replace('%content%', $content, $message); $mail->msgHTML($message); $mail->AltBody = $altmessage; if (!$mail->send()) { return $mail->ErrorInfo; } else { return 'success'; } } } }