blob: a1dad656b3bd74a516a4cb4e3530de140fa0b5fa [file] [log] [blame]
<?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;
}
}