$u['id']), array( 'valid' => 0) ); session_name( Config::$sessionCookie ); session_start(); $_SESSION['id'] = $this->id = $u['id']; $_SESSION['name'] = $this->name = $u['name']; $_SESSION['admin'] = $this->admin = $u['admin']; $_SESSION['website'] = $this->website = $u['website']; $_SESSION['color'] = $this->color = $u['color']; $_SESSION['stylecolor'] = $this->stylecolor = $u['style']; $_SESSION['avatar'] = $this->avatar = $u['avatar']; setcookie( Config::$rememberCookie, $id, time() + 3600 * 24 * 365, Config::$absolutePath ); if( Config::$vbbIntegration['enabled'] ) { global $vbulletin; $forum = new ForumOps($vbulletin); $forum->login(array('username' => $u['name'])); } return true; } public function isSpamLocked() { // delete all ips older than IP_LOCK_TIME DB::query( 'DELETE FROM '.TABLE_UPLOADLOCK.' WHERE ts < :1', time() - Config::$uploadLockTime ); $ip = $_SERVER['REMOTE_ADDR']; $r = DB::getRow( 'SELECT COUNT(*) AS c FROM '.TABLE_UPLOADLOCK.' WHERE ip = :1', $ip ); if( $r['c'] > Config::$maxNumUploads ) { return true; } else { return false; } } public function isSpamer() { $r = DB::getRow( 'SELECT logged FROM pl_images WHERE user = :1 order by logged desc', $this->id ); $time = strtotime($r["logged"]); if( (time() - (integer)$time) < 10 ) { return true; } else { return false; } } public function isSpamming() { $block = DB::getRow("SELECT spamblocked,time FROM pl_users WHERE id=:1",$this->id); if ( (int)$block["spamblocked"] == 1) { if ((int)$block["time"] != 0){ $now = time(); $then = (int)$block["time"]; if ($now > $then) { DB::updateRow("pl_users",array("id" => $this->id),array("time" => 0,"spamblocked" => 0)); return false; }else{ return $block["time"]; exit(); } }else{ return true; } } $count = DB::getRow( 'SELECT COUNT(*) as c FROM pl_images WHERE user = :1', $this->id ); if ( $count["c"] >= 3){ $r = DB::query( 'SELECT id,image,keyword,logged FROM pl_images WHERE user = :1 LIMIT '.((integer)$count["c"]-3).',2', $this->id ); $r0 = DB::getRow( 'SELECT image,keyword,logged FROM pl_images WHERE user = :1 LIMIT '.((integer)$count["c"]-1).',1', $this->id ); require_once("img_class.php"); $ban =0; foreach ($r as $checkable) { if ((strtotime($r0["logged"]) - strtotime($checkable["logged"])) < 60){ $splitter = split("/",$checkable["keyword"]); $file2 = $splitter[0]."/".$splitter[1]."/".$checkable["image"]; $splitter = split("/",$r0["keyword"]); $file1 = $splitter[0]."/".$splitter[1]."/".$r0["image"]; $diff = new imagediff("data/images/".$file2, "data/images/".$file1); $dif = $diff->diff(); if ($dif > 0.92){ $ban += 1; } } } if ($ban >= 2){ foreach ($r as $checkable) { DB::query("DELETE FROM pl_images WHERE id=:1",$checkable["id"]); } DB::updateRow("pl_users",array("id" => $this->id),array("spamblocked" => 1,"spam_reason"=>"Imagespam","time" => time() + (7 * 24 * 60 * 60))); return true; }else{ return false;} }else{ return false;} } public function logUpload() { $ip = $_SERVER['REMOTE_ADDR']; DB::insertRow( TABLE_UPLOADLOCK, array('ip' => $ip, 'ts' => time(),'user' => $this->id) ); } public function login() { // attempt to login via post, session or remeber cookie session_name( Config::$sessionCookie ); if( isset($_POST['login']) ) { // post login $u = DB::getRow( 'SELECT id, name, admin, website, color, style,avatar FROM '.TABLE_USERS.' WHERE name = :1 AND pass = :2 and valid = 1', $_POST['name'], md5($_POST['pass']) ); $banstate = DB::getRow("SELECT * FROM pl_banned WHERE id=:1",$u['id']); if ($banstate){ return "ban/".$banstate["reason"]; } if( !empty($u) ) { $c = DB::getRow('SELECT ip, created, COUNT(*) as c from pl_registerlock WHERE ip=:1 GROUP BY ip',$_SERVER['REMOTE_ADDR']); if ((int)$c["c"] == 0){ DB::insertRow( "pl_registerlock", array("ip"=>$_SERVER['REMOTE_ADDR'],"created"=>date('Y-m-d H:i:s')));}else{ DB::query("DELETE FROM pl_registerlock WHERE ip=:1",$_SERVER['REMOTE_ADDR']); DB::insertRow("pl_registerlock",array('ip'=>$_SERVER['REMOTE_ADDR'],'created'=>date('Y-m-d H:i:s'))); } session_start(); $_SESSION['id'] = $this->id = $u['id']; $_SESSION['name'] = $this->name = $u['name']; $_SESSION['admin'] = $this->admin = $u['admin']; $_SESSION['website'] = $this->website = $u['website']; $_SESSION['color'] = $this->color = $u['color']; $_SESSION['stylecolor'] = $this->stylecolor = $u['style']; $_SESSION['avatar'] = $this->avatar = $u['avatar']; if( !empty($_POST['remember']) ) { $r = md5(uniqid(rand())); DB::updateRow( TABLE_USERS, array('id' => $this->id), array('remember' => $r ) ); setcookie( Config::$rememberCookie, $r, time() + 3600 * 24 * 365, Config::$absolutePath ); } if( Config::$vbbIntegration['enabled'] ) { global $vbulletin; $forum = new ForumOps($vbulletin); $forum->login(array('username' => $u['name'])); } }else{return "wronglogin";} } else if( !empty($_COOKIE[Config::$sessionCookie]) ) { // session running session_start(); $c = DB::getRow('SELECT ip, created, COUNT(*) as c from pl_registerlock WHERE ip=:1 GROUP BY ip',$_SERVER['REMOTE_ADDR']); if ((int)$c["c"] == 0){ DB::insertRow( "pl_registerlock", array("ip"=>$_SERVER['REMOTE_ADDR'],"created"=>date('Y-m-d H:i:s')));}else{ DB::query("DELETE FROM pl_registerlock WHERE ip=:1",$_SERVER['REMOTE_ADDR']); DB::insertRow("pl_registerlock",array('ip'=>$_SERVER['REMOTE_ADDR'],'created'=>date('Y-m-d H:i:s'))); } if( empty($_SESSION['id']) ) { setcookie(Config::$sessionCookie, false, time() - 3600, Config::$absolutePath ); } else { $this->id = $_SESSION['id']; $this->name = $_SESSION['name']; $this->admin = $_SESSION['admin']; $this->website = $_SESSION['website']; $this->color = $u['color']; $this->stylecolor = $u['stylecolor']; $this->avatar = $u['avatar']; } if (DB::getRow("SELECT id FROM pl_banned WHERE id=:1",$this->id)){ $this->logout(); return "banned"; } } else if( !empty($_COOKIE[Config::$rememberCookie]) ) { // remember cookie found $u = DB::getRow( 'SELECT id, name, admin, website, style, color, avatar FROM '.TABLE_USERS.' WHERE remember = :1', $_COOKIE[Config::$rememberCookie] ); if( !empty($u) ) { session_start(); $_SESSION['id'] = $this->id = $u['id']; $_SESSION['name'] = $this->name = $u['name']; $_SESSION['admin'] = $this->admin = $u['admin']; $_SESSION['website'] = $this->website = $u['website']; $_SESSION['color'] = $this->color = $u['color']; $_SESSION['stylecolor'] = $this->stylecolor = $u['style']; $_SESSION['avatar'] = $this->avatar = $u['avatar']; // refresh for another year setcookie( Config::$rememberCookie, $_COOKIE[Config::$rememberCookie], time() + 3600 * 24 * 365, Config::$absolutePath ); $c = DB::getRow('SELECT ip, created, COUNT(*) as c from pl_registerlock WHERE ip=:1 GROUP BY ip',$_SERVER['REMOTE_ADDR']); if ((int)$c["c"] == 0){ DB::insertRow( "pl_registerlock", array("ip"=>$_SERVER['REMOTE_ADDR'],"created"=>date('Y-m-d H:i:s')));}else{ DB::query("DELETE FROM pl_registerlock WHERE ip=:1",$_SERVER['REMOTE_ADDR']); DB::insertRow("pl_registerlock",array('ip'=>$_SERVER['REMOTE_ADDR'],'created'=>date('Y-m-d H:i:s'))); } if (DB::getRow("SELECT id FROM pl_banned WHERE id=:1",$u['id'])){ $this->logout(); return "banned"; } if( Config::$vbbIntegration['enabled'] ) { global $vbulletin; $forum = new ForumOps($vbulletin); $forum->login(array('username' => $u['name'])); } } } } public function profile( $localFile, &$messages ) { $upd = array( 'website' => $_POST['website'] ); $_SESSION['website'] = $_POST['website']; if( Config::$vbbIntegration['enabled'] ) { global $vbulletin; $forum = new ForumOps($vbulletin); } $p = trim($_POST['cpass']); if( !empty( $p ) ) { if( strlen($_POST['cpass']) < 6 ) { $messages['passToShort'] = true; } else if( $_POST['cpass'] != $_POST['cpass2'] ) { $messages['passNotEqual'] = true; } else { $upd['pass'] = md5($_POST['cpass2']); if( Config::$vbbIntegration['enabled'] ) { $forum->set_pass( $_SESSION['name'], $_POST['cpass2']); } } } if( !empty( $localFile ) ) { require_once( 'lib/images.php' ); list( $imgWidth, $imgHeight, $imgtype ) = getimagesize($localFile); if ( $imgWidth == 64 && $imgHeight == 64 && $imgtype == IMAGETYPE_GIF){ $name = Config::$images['avatarsPath'].uniqid().'.gif'; if (!move_uploaded_file($localFile,$name)){ $messages['avatarFailed'] = true; $upd['avatar'] = Config::$images['avatarsPath']."default.png"; }else{ $upd['avatar'] = $name; } }else{ $name = Config::$images['avatarsPath'].uniqid().'.jpg'; if( Image::createThumb( $localFile, $name, 64,64 ) ) { $upd['avatar'] = $name; } else { $messages['avatarFailed'] = true; } } } if(!empty($_POST['color'])){ if(preg_match('/^[a-f0-9]{6}$/i', $_POST['color'])){ if ( strtolower($_POST['color']) != "ffffff"){ $upd['color'] = $_POST['color']; }else{ $upd['color'] = "0"; } }else{ $messages['colorFailed'] = true; } } //--------------------------------------------------------------------blockuser if(!empty($_POST['blockuser'])){ if(preg_match('/^\w{2,20}$/', $_POST['blockuser'])){ $blockedusers = array(); $blockedusers = DB::getRow("SELECT id, users FROM pl_blocked WHERE id=:1",$this->id); if(!empty($blockedusers)){ $blockedusers = unserialize($blockedusers['users']); if (in_array(strtolower ($_POST['blockuser']),$blockedusers)){ $messages['blockAlready'] = true; }else{ if(DB::query('SELECT * FROM pl_users WHERE name=:1', strtolower ($_POST['blockuser']))){ array_push($blockedusers,$_POST['blockuser']); if(DB::query('UPDATE pl_blocked SET users=:1 WHERE id=:2', serialize($blockedusers),$this->id)){ $messages['blocked'] = true; }else{ $messages['blockFailed'] = true; } }else{ $messages['userFailed'] = true; } } }else{ if(DB::query('SELECT * FROM pl_users WHERE name=:1', $_POST['blockuser'])){ $newarray = array(); array_push($newarray,strtolower ($_POST['blockuser'])); if(DB::query("INSERT INTO pl_blocked (id,users) VALUES (:1,:2)",$this->id,serialize($newarray))){ $messages['blocked'] = true; }else{ $messages['blockFailed'] = true; } }else{ $messages['userFailed'] = true; } } }else{ $messages['blockFailed'] = true; } } //--------------------------------------------------------------------UNblockuser function remove_item_by_value($array, $val = '', $preserve_keys = true) { if (count($array) == 1) return false; if (empty($array) || !is_array($array)) return false; if (!in_array($val, $array)) return $array; foreach($array as $key => $value) { if ($value == $val) unset($array[$key]); } return ($preserve_keys === true) ? $array : array_values($array); } //--------------------------------------------------------------------UNblockuser if(!empty($_POST['unblockuser'])){ if ($_POST['unblockuser'] != "select"){ if(preg_match('/^\w{2,20}$/', $_POST['unblockuser'])){ if(DB::query('SELECT * FROM pl_users WHERE name=:1', $_POST['unblockuser'])){ $blockedusers = array(); $blockedusers = DB::getRow("SELECT id, users FROM pl_blocked WHERE id=:1",$this->id); if(!empty($blockedusers)){ $blockedusers = unserialize($blockedusers['users']); if (in_array($_POST['unblockuser'],$blockedusers)){ $blockedusers = remove_item_by_value($blockedusers,$_POST['unblockuser']); if ($blockedusers){ DB::query('UPDATE pl_blocked SET users=:1 WHERE id=:2', serialize($blockedusers),$this->id); $messages['unblocked'] = true; }else{ DB::query('DELETE FROM pl_blocked WHERE id=:1',$this->id); $messages['unblocked'] = true; } }else{$messages['notBlocked'] = true;} }else{$messages['unblockFailed'] = true;} }else{$messages['userFailed'] = true;} }else{$messages['unblockFailed'] = true;} } } //-------------------------------------------------------------------------STYLE if(isset($_POST['stylecolor'])) { if($_POST['stylecolor'] == 'white') { $upd['style'] = $_POST['stylecolor']; } elseif($_POST['stylecolor'] == 'black') { $upd['style'] = $_POST['stylecolor']; } else{ $upd['style'] = $_POST['black']; } } if( empty($this->email) && preg_match('/^[\.\w\-]{1,}@[\.\w\-]{2,}\.[\w]{2,}$/', $_POST['email']) ) { if( Config::$vbbIntegration['enabled'] ) { $forum->set_email( $_SESSION['name'], $_POST['email']); } $upd['email'] = $_POST['email']; } DB::updateRow( TABLE_USERS, array( 'id' => $this->id ), $upd ); } public function loadEmail() { $tmp = DB::getRow( 'SELECT email,color,style,avatar FROM '.TABLE_USERS.' WHERE id = :1', $this->id ); $this->email = $tmp['email']; $this->color = $tmp['color']; $this->stylecolor = $tmp['style']; $this->avatar = $u['avatar']; } public function logout() { session_unset(); session_destroy(); $_SESSION = array(); setcookie( Config::$rememberCookie, false, time() - 3600, Config::$absolutePath ); setcookie( Config::$sessionCookie, false, time() - 3600, Config::$absolutePath ); if( Config::$vbbIntegration['enabled'] ) { global $vbulletin; $forum = new ForumOps($vbulletin); $forum->logout(); } } public function increaseScore( $amount ) { DB::query( 'UPDATE '.TABLE_USERS.' SET score = score + :1 WHERE id = :2', intval( $amount ), $this->id ); } public function register( &$messages,$inviteC=false ) { DB::query( 'DELETE FROM '.TABLE_USERS.' WHERE valid = 0 AND registered < NOW() - INTERVAL 30 MINUTE' ); $iplocks = DB::getRow("DELETE FROM pl_registerlock WHERE created < (NOW() - INTERVAL 1440 MINUTE)"); $reg = DB::getRow("SELECT * FROM pl_settings"); $doubleacc = DB::getRow("SELECT COUNT(*) as c FROM pl_registerlock WHERE ip=:1",$_SERVER['REMOTE_ADDR']); if($inviteC == false){ if ($reg["register"] != 1 || $doubleacc["c"] > 0){ $messages['registerClosed'] = true; } }else{ if ($doubleacc["c"] > 0){ DB::updateRow("pl_invites",array("code"=>$inviteC),array("used"=>1,"usedby"=>1)); $inviteC = false; $messages['registerClosed'] = true; } } if( !preg_match('/^\w{2,20}$/', $_POST['name']) ) { $messages['nameInvalid'] = true; } else { $u = DB::getRow( 'SELECT * FROM '.TABLE_USERS.' WHERE name = :1', $_POST['name'] ); if( !empty($u) ) { $messages['nameInUse'] = true; } } if( strlen($_POST['pass']) < 6 ) { $messages['passToShort'] = true; } else if( $_POST['pass'] != $_POST['pass2'] ) { $messages['passNotEqual'] = true; } if( !preg_match( '/^[\.\w\-]{1,}@[\.\w\-]{2,}\.[\w]{2,}$/', $_POST['email'] ) ) { $messages['wrongEmail'] = true; } else { $u = DB::getRow( 'SELECT * FROM '.TABLE_USERS.' WHERE email = :1', $_POST['email'] ); if( !empty($u) ) { $messages['emailInUse'] = true; } } if( !empty($messages) ) { return false; } $this->validationString = md5(uniqid(rand())); DB::insertRow( TABLE_USERS, array( 'registered' => date('Y-m-d H:i:s'), 'name' => $_POST['name'], 'pass' => md5($_POST['pass']), 'valid' => 1, 'score' => 0, 'images' => 0, 'website' => '', 'avatar' => Config::$images['avatarsPath'].'default.png', 'remember' => $this->validationString, 'admin' => 0, 'email' => $_POST['email'], 'color' => '0', 'style' => 'black', 'invite' => $inviteC )); if($inviteC != false){ $lastid= DB::getRow("SELECT LAST_INSERT_ID() as id"); DB::updateRow("pl_invites",array("code"=>$inviteC),array("used"=>1,"usedby"=>$lastid["id"])); } DB::insertRow( "pl_registerlock", array("ip"=>$_SERVER['REMOTE_ADDR'],"created"=>date('Y-m-d H:i:s'))); if( Config::$vbbIntegration['enabled'] ) { global $vbulletin; $forum = new ForumOps($vbulletin); $user['name'] = $_POST['name']; $user['pass'] = $_POST['pass']; $user['email'] = $_POST['email']; echo $forum->register_newuser($user, false); } $mail = file_get_contents( Config::$templates.'registrationmail.txt' ); preg_match( '/From: (?.*?)\r?\nSubject: (?.*?)\r?\n\r?\n(?.*)/sim', $mail, $mail ); $mail['text'] = str_replace( '%validationString%', $this->validationString, $mail['text'] ); $mail['text'] = str_replace( '%siteName%', Config::$siteName, $mail['text'] ); $mail['text'] = str_replace( '%frontendPath%', Config::$frontendPath, $mail['text'] ); $mail['text'] = str_replace( '%userName%', $_POST['name'], $mail['text'] ); $mail['subject'] = str_replace( '%siteName%', Config::$siteName, $mail['subject'] ); $mail['subject'] = str_replace( '%userName%', $_POST['name'], $mail['subject'] ); //mail( $_POST['email'], $mail['subject'], $mail['text'], 'FROM: '.$mail['from'] ); mail($_POST['email'],$mail['subject'],$mail['text'],"FROM:".$mail['from']); return true; } } ?>