HEX
Server: Apache/2.4.25
System: Linux ion14 4.9.0-8-amd64 #1 SMP Debian 4.9.144-3.1 (2019-02-19) x86_64
User: (10087)
PHP: 7.4.30
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,system, exec, shell_exec, passthru, popen, proc_open
Upload Files
File: /home/www/web115/wordpress/wp-content/plugins/digimember/system/model/data/ip_lock.php
<?php

class ncore_IpLockData extends ncore_BaseData
{
    const store_log_days = 7;

    public function isLocked( $key, $limit_count=10, $limit_time_seconds=86400, $do_set_locked=true, $ip='current' )
    {
        $key = ncore_washText( $key );

        $ip = $this->resolveIp( $ip );

        $count = $this->count( $key, $limit_time_seconds, $ip );

        $is_locked = $count > $limit_count;

        if ($do_set_locked)
        {
            $data = array();
            $data[ 'ip']       = $ip;
            $data[ 'code' ]    = $key;
            $data[ 'created' ] = ncore_dbDate();
            $this->create( $data );
        }

        return $is_locked;
    }

    private function count( $key, $limit_time_seconds=86400, $ip='current' )
    {
        $key = ncore_washText( $key );

        $db = $this->db();

        $ip = $this->resolveIp( $ip );

        $table = $this->sqlTableName();

        $from = ncore_dbDate( time()-$limit_time_seconds );

        $sql = "SELECT COUNT(1) AS count
                FROM `$table`
                WHERE ip = '$ip'
                  AND created >= '$from'
                  AND code     = '$key'";

        $query = $db->query( $sql );

        $row = $query[0];

        return $row->count;
    }

    public function cronDaily()
    {
        $db = $this->db();

        $table = $this->sqlTableName();

        $days = self::store_log_days;

        $from = ncore_dbDate( time()-86400 );

        $sql = "DELETE FROM `$table` WHERE created < '$from'";

        $db->query( $sql );
    }

    //
    // protected section
    //
    protected function sqlBaseTableName()
    {
        return 'ip_lock';
    }

    protected function isUniqueInBlog()
    {
        return true;
    }

    protected function sqlTableMeta()
    {
       $columns = array(
        'ip'   => 'string[47]',
        'code' => 'string[15]',
       );

       $indexes = array( 'ip' );

       $meta = array(
        'columns' => $columns,
        'indexes' => $indexes,
       );

       return $meta;
    }

    protected function protectedColumns( $method )
    {
        $columns = parent::protectedColumns( $method );

        $index = array_search( 'created', $columns );

        if ($index !== false)
        {
            unset( $columns[ $index ] );
            $columns = array_values( $columns );
        }

        return $columns;
    }

    //
    // private
    //
    private function resolveIp( $ip )
    {
        if ($ip === 'current')
        {
            $ip = ncore_clientIp( 'localhost' );
        }

        $ip = ncore_washText( $ip );

        return $ip;
    }

}