Exemplo n.º 1
0
 public function update_ipblacklist()
 {
     $db = Loader::db();
     if ($this->token->validate("update_ipblacklist")) {
         Loader::model('user_banned_ip');
         //configs from top part form
         $ip_ban_lock_ip_enable = 1 == $this->post('ip_ban_lock_ip_enable') ? 1 : 0;
         Config::save('IP_BAN_LOCK_IP_ENABLE', $ip_ban_lock_ip_enable);
         Config::save('IP_BAN_LOCK_IP_ATTEMPTS', $this->post('ip_ban_lock_ip_attempts'));
         Config::Save('IP_BAN_LOCK_IP_TIME', $this->post('ip_ban_lock_ip_time'));
         if (self::IP_BAN_LOCK_IP_HOW_LONG_TYPE_FOREVER != $this->post('ip_ban_lock_ip_how_long_type')) {
             Config::Save('IP_BAN_LOCK_IP_HOW_LONG_MIN', $this->post('ip_ban_lock_ip_how_long_min'));
         } else {
             Config::Save('IP_BAN_LOCK_IP_HOW_LONG_MIN', 0);
         }
         //ip table actions
         //use a single sql query, more efficient than active record
         $ip_ban_changes = $this->post('ip_ban_changes');
         if (count($ip_ban_changes) > 0) {
             $ip_ban_change_to = $this->post('ip_ban_change_to');
             $q = 'UPDATE UserBannedIPs SET expires = ? WHERE ';
             $v = array();
             switch ($ip_ban_change_to) {
                 case self::IP_BLACKLIST_CHANGE_MAKEPERM:
                     $v[] = 0;
                     //expires 0 is a perma-ban
                     break;
                 case self::IP_BLACKLIST_CHANGE_REMOVE:
                     $v[] = 1;
                     //expires 1 is really far in past, defacto expire
                     break;
             }
             $utility = new UserBannedIP();
             foreach ($ip_ban_changes as $key) {
                 $q .= '(ipFrom = ? AND ipTo = ?) OR';
                 $ids = $utility->parseUniqueID($key);
                 $v[] = $ids['ipFrom'];
                 $v[] = $ids['ipTo'];
             }
             $q = substr($q, 0, strlen($q) - 3);
             $db->execute($q, $v);
         }
         //textarea actions
         $ip_ranges = $this->parseIPBlacklistIntoRanges();
         $db = Loader::db();
         $db->StartTrans();
         $q = 'DELETE FROM UserBannedIPs WHERE isManual = 1';
         $db->execute($q);
         //no batch insert in adodb? :(
         foreach ($ip_ranges as $ip_range) {
             $ip = new UserBannedIP();
             $ip->ipFrom = ip2long($ip_range['ipFrom']);
             $ip->ipTo = $ip_range['ipTo'];
             if ($ip->ipTo != 0) {
                 echo $ip->ipTo . "\n";
                 $ip->ipTo = ip2long($ip_range['ipTo']);
             }
             $ip->banCode = UserBannedIP::IP_BAN_CODE_REGISTRATION_THROTTLE;
             $ip->expires = 0;
             $ip->isManual = 1;
             try {
                 $ip->save();
             } catch (Exception $e) {
                 //silently discard duplicates
             }
         }
         $db->CompleteTrans();
         $this->redirect('/dashboard/settings', 'set_permissions', 'saved_ipblacklist');
     } else {
         $this->set('error', array($this->token->getErrorMessage()));
     }
 }