| <?php |
| /******************************************************************************* |
| * Copyright (c) 2014, 2015 Eclipse Foundation and others. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * Matt Ward (Eclipse Foundation) - initial API and implementation |
| * Christopher Guindon (Eclipse Foundation) |
| *******************************************************************************/ |
| |
| require_once(realpath(dirname(__FILE__) . "/../../system/app.class.php")); |
| require_once(realpath(dirname(__FILE__) . "/../friends/friend.class.php")); |
| require_once('/home/data/httpd/eclipse-php-classes/system/dbconnection_infra_ro.class.php'); |
| |
| |
| class InfraBlock { |
| |
| private $App = NULL; |
| |
| private $IsCommittter = NULL; |
| |
| private $Friend = NULL; |
| |
| private $Expiry = ""; |
| |
| private $Subnet = ""; |
| |
| /** |
| * Constructor |
| */ |
| function __construct() { |
| |
| global $App; |
| $this->App = $App; |
| $this->Session = $this->App->useSession(); |
| $this->Friend = $this->Session->getFriend(); |
| |
| $this->IsCommitter = $this->Friend->getIsCommitter(); |
| |
| } |
| |
| /** |
| * isBlocked |
| * |
| * @ returns a bool indicating block status of the given IP. |
| */ |
| public function isBlocked(){ |
| $rvalue = FALSE; |
| $subnet = $this->App->getRemoteIPAddress(); |
| //test if we have something that looks like an ip |
| if ( preg_match('/[1-9]{1,3}\.(([0-9]{1,3}\.?){3})/', $subnet )) { |
| if ($this->IsCommitter) { |
| //strip last address chunk, and replace with 0 |
| $this->Subnet = substr_replace($subnet,'.0',strrpos($subnet,'.') ); |
| $sql = "SELECT /* USE MASTER */ COUNT(1) AS BlockCount,ExpiryDateTime FROM Attacks WHERE Subnet= " . $this->App->returnQuotedString($this->Subnet); |
| $rs = $this->App->infra_sql($sql); |
| $myrow = mysql_fetch_assoc($rs); |
| if ($myrow['BlockCount'] > 0) { |
| //stash the expiry time |
| $this->Expiry = $myrow['ExpiryDateTime']; |
| $rvalue = TRUE; |
| } |
| } |
| } |
| return $rvalue; |
| } |
| |
| /** |
| * getExpiry |
| * |
| * @ returns the value stashed in isBlocked. |
| */ |
| public function getExpiry(){ |
| return $this->Expiry; |
| } |
| |
| /** |
| * whyBlocked |
| * |
| * @ returns a string which attempts to explain why you are blocked. |
| */ |
| public function whyBlocked() { |
| //by default someone else was doing something they shouldn't have |
| $rvalue = " due to apparent abuse from your network. Contact webmaster@eclipse.org for asstisance, or wait for the block to expire."; |
| //did you try to login? |
| $sql = "SELECT /* USE MASTER */ COUNT(1) AS RecordCount, UserID FROM UserSSHTrustedSubnets WHERE Subnet= " . $this->App->returnQuotedString($this->Subnet) ." AND AuthReplyEmail IS NULL" ; |
| $rs = $this->App->infra_sql($sql); |
| $myrow = mysql_fetch_assoc($rs); |
| if ($myrow['RecordCount'] > 0) { |
| //caused by the same user? |
| if (strcasecmp($myrow['UserID'], $this->Friend->getUID()) == 0) { |
| $rvalue = " due to a login from a new network. Please check your email for the unblock message."; |
| } else { |
| $rvalue = " due to another committers login from a new network. Either wait for them to respond to the unlock mail or contact webmaster@eclipse.org ."; |
| } |
| } |
| return $rvalue; |
| } |
| |
| } |