<?php
if(!defined('MCR')){ exit('Hacking Attempt!'); }
class install{
public $cfg = array();
public $lng = array();
public $title = '';
public $header = '';
public function __construct(){
$https = (@$_SERVER['HTTPS']=='on' || $_SERVER['HTTP_X_FORWARDED_PROTO']=='https') ? 'https' : 'http';
define('PROGNAME', 'WebMCR Reloaded');
define('VERSION', 'WebMCR Beta 1.4.1');
define('FEEDBACK', '<a href="https://webmcr.ru" target="_blank">'.PROGNAME.'</a> © 2013-'.date("Y").' Qexy');
define('URL_ROOT', str_replace('\\', '/', dirname(dirname($_SERVER['PHP_SELF']))));
define('URL_ROOT_FULL', $https.'://'.$_SERVER['SERVER_NAME'].'/');
define('URL_INSTALL', $https.'://'.$_SERVER['SERVER_NAME'].'/install/');
define('DIR_ROOT', dirname(dirname(__FILE__)).'/');
define('DIR_INSTALL', dirname(__FILE__).'/');
define('DIR_INSTALL_THEME', DIR_INSTALL.'theme/');
require_once(DIR_ROOT.'configs/main.php');
$this->cfg['main'] = $main;
require_once(DIR_ROOT.'configs/db.php');
$this->cfg['db'] = $db;
require_once(DIR_ROOT.'configs/mail.php');
$this->cfg['mail'] = $mail;
require_once(DIR_ROOT.'language/'.$main['s_lang'].'/install.php');
$this->lng = $lng;
$this->title = $lng['mod_name'];
}
public function HSC($string){
return htmlspecialchars($string);
}
public function sp($page, $data=array()){
ob_start();
include(DIR_INSTALL_THEME.$page);
return ob_get_clean();
}
public function init_step(){
$do = (isset($_GET['do'])) ? $_GET['do'] : 'start';
if(!preg_match("/^[\w\.]+$/i", $do)){ return 'Hacking Attempt'; }
$modpath = DIR_INSTALL.'modules/'.$do.'.php';
if(!file_exists($modpath)){ return 'Module not found'; }
require_once($modpath);
$module = new module($this);
return $module->content();
}
public function notify($text='', $title='', $url=''){
$url = URL_ROOT.$url;
$_SESSION['notify_title'] = $title;
$_SESSION['notify_text'] = $text;
header("Location: $url");
exit();
}
public function get_notify(){
if(!isset($_SESSION['notify_title']) || !isset($_SESSION['notify_text'])){ return; }
if(empty($_SESSION['notify_title']) && empty($_SESSION['notify_text'])){ unset($_SESSION['notify_title']); unset($_SESSION['notify_text']); return; }
$data = array(
'TITLE' => $_SESSION['notify_title'],
'TEXT' => $_SESSION['notify_text'],
);
unset($_SESSION['notify_title']);
unset($_SESSION['notify_text']);
return $this->sp('notify.html', $data);
}
public function savecfg($cfg=array(), $file='main.php', $var='main'){
if(!is_array($cfg) || empty($cfg)){ return false; }
$filename = DIR_ROOT.'configs/'.$file;
$txt = '<?php'.PHP_EOL;
$txt .= '$'.$var.' = '.var_export($cfg, true).';'.PHP_EOL;
$txt .= '?>';
$result = file_put_contents($filename, $txt);
if($result === false){ return false; }
return true;
}
public function gen_password($string='', $salt='', $crypt=false){
if($crypt===false){ $crypt = $this->cfg['main']['crypt']; }
switch($crypt) {
case 1: return sha1($string); break;
case 2: return hash('sha256', $string); break;
case 3: return hash('sha512', $string); break;
case 4: return md5(md5($string)); break;
case 5: return md5($string.$salt); break; // Joomla
case 6: return md5($salt.$string); break; // osCommerce, TBDev
case 7: return md5(md5($salt).$string); break; // vBulletin, IceBB, Discuz
case 8: return md5(md5($string).$salt); break;
case 9: return md5($string.md5($salt)); break;
case 10: return md5($salt.md5($string)); break;
case 11: return sha1($string.$salt); break;
case 12: return sha1($salt.$string); break;
case 13: return md5(md5($salt).md5($string)); break; // ipb, MyBB
case 14: return hash('sha256', $string.$salt); break;
case 15: return hash('sha512', $string.$salt); break;
default: return md5($string); break;
}
}
public function logintouuid($string){
$string = "OfflinePlayer:".$string;
$val = md5($string, true);
$byte = array_values(unpack('C16', $val));
$tLo = ($byte[0] << 24) | ($byte[1] << 16) | ($byte[2] << 8) | $byte[3];
$tMi = ($byte[4] << 8) | $byte[5];
$tHi = ($byte[6] << 8) | $byte[7];
$csLo = $byte[9];
$csHi = $byte[8] & 0x3f | (1 << 7);
if (pack('L', 0x6162797A) == pack('N', 0x6162797A)) {
$tLo = (($tLo & 0x000000ff) << 24) | (($tLo & 0x0000ff00) << 8) | (($tLo & 0x00ff0000) >> 8) | (($tLo & 0xff000000) >> 24);
$tMi = (($tMi & 0x00ff) << 8) | (($tMi & 0xff00) >> 8);
$tHi = (($tHi & 0x00ff) << 8) | (($tHi & 0xff00) >> 8);
}
$tHi &= 0x0fff;
$tHi |= (3 << 12);
$uuid = sprintf(
'%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x',
$tLo, $tMi, $tHi, $csHi, $csLo,
$byte[10], $byte[11], $byte[12], $byte[13], $byte[14], $byte[15]
);
return $uuid;
}
public function ip(){
if(!empty($_SERVER['HTTP_CF_CONNECTING_IP'])){
$ip = $_SERVER['HTTP_CF_CONNECTING_IP'];
}elseif(!empty($_SERVER['HTTP_X_REAL_IP'])){
$ip = $_SERVER['HTTP_X_REAL_IP'];
}elseif(!empty($_SERVER['HTTP_CLIENT_IP'])){
$ip = $_SERVER['HTTP_CLIENT_IP'];
}elseif(!empty($_SERVER['HTTP_X_FORWARDED_FOR'])){
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
}else{
$ip = $_SERVER['REMOTE_ADDR'];
}
return mb_substr($ip, 0, 16, "UTF-8");
}
public function random($length=10, $safe = true) {
$chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPRQSTUVWXYZ0123456789";
if(!$safe){ $chars .= '$()#@!'; }
$string = "";
$len = strlen($chars) - 1;
while(strlen($string) < $length){
$string .= $chars[mt_rand(0,$len)];
}
return $string;
}
}
?>