<?php
if(!defined("MCR")){ exit("Hacking Attempt!"); }
class module{
	private $install, $cfg, $lng, $methods;
	public function __construct($install){
		$this->install		= $install;
		$this->cfg			= $install->cfg;
		$this->lng			= $install->lng;
		$this->methods = array('MD5', 'SHA1', 'SHA256', 'SHA512', 'Double MD5 [ md5(md5(PASS)) ]', 'Salted MD5 [ md5(PASS+SALT) ]',
								'Salted MD5 [ md5(SALT+PASS) ]', 'Salted Double MD5 [ md5(md5(SALT)+PASS) ]', 'Salted Double MD5 [ md5(md5(PASS)+SALT) ]',
								'Salted Double MD5 [ md5(PASS+md5(SALT)) ]', 'Salted Double MD5 [ md5(SALT+md5(PASS)) ]', 'Salted SHA1 [ sha1(PASS+SALT) ]',
								'Salted SHA1 [ sha1(SALT+PASS) ]', 'Triple salted MD5 [ md5(md5(SALT)+md5(PASS)) ]', 'Salted SHA256 [ sha256(PASS+SALT) ]',
								'Salted SHA512 [ sha512(PASS+SALT) ]');
		$this->install->title = $this->lng['mod_name'].' — '.$this->lng['step_2'];
	}
	private function encrypt_methods($selected=0){
		ob_start();
		foreach($this->methods as $key => $title){
			$select = ($key==$selected) ? 'selected' : '';
			echo '<option value="'.$key.'" '.$select.'>'.$title.'</option>';
		}
		return ob_get_clean();
	}
	public function content(){
		if(!isset($_SESSION['step_1'])){ $this->install->notify('', '', 'install/?do=step_1'); }
		if(isset($_SESSION['step_2'])){ $this->install->notify('', '', 'install/?do=step_3'); }
		$time = time();
		$_SESSION['f_login'] = (isset($_POST['login'])) ? $this->install->HSC(@$_POST['login']) : 'admin';
		$_SESSION['f_adm_pass'] = @$_POST['password'];
		$_SESSION['f_repass'] = $this->install->HSC(@$_POST['repassword']);
		$_SESSION['f_email'] = (isset($_POST['email'])) ? $this->install->HSC(@$_POST['email']) : 'admin@'.$_SERVER['SERVER_NAME'];
		$method = intval(@$_POST['method']);
		if($_SERVER['REQUEST_METHOD']=='POST'){
			if(!preg_match("/^[\w\-]{3,}$/i", @$_POST['login'])){
				$this->install->notify($this->lng['e_login_format'], $this->lng['e_msg'], 'install/?do=step_2');
			}
			if(mb_strlen(@$_POST['password'], "UTF-8")<6){
				$this->install->notify($this->lng['e_pass_len'], $this->lng['e_msg'], 'install/?do=step_2');
			}
			if(@$_POST['password'] !== @$_POST['repassword']){
				$this->install->notify($this->lng['e_pass_match'], $this->lng['e_msg'], 'install/?do=step_2');
			}
			if(!filter_var(@$_POST['email'], FILTER_VALIDATE_EMAIL)){
				$this->install->notify($this->lng['e_email_format'], $this->lng['e_msg'], 'install/?do=step_2');
			}
			if(!isset($this->methods[$method])){ $this->install->notify($this->lng['e_method'], $this->lng['e_msg'], 'install/?do=step_2'); }
			$this->cfg['main']['crypt'] = $method;
			if(!$this->install->savecfg($this->cfg['main'], 'main.php', 'main')){
				$this->install->notify($this->lng['e_settings'], $this->lng['e_msg'], 'install/?do=step_2');
			}
			require_once(DIR_ROOT.'engine/db/'.$this->cfg['db']['backend'].'.class.php');
			$db = new db($this->cfg['db']['host'], $this->cfg['db']['user'], $this->cfg['db']['pass'], $this->cfg['db']['base'], $this->cfg['db']['port']);
			$error = $db->error();
			if(!empty($error)){
				$this->install->notify($this->lng['e_connection'].' | '.$db->error(), $this->lng['e_msg'], 'install/?do=step_2');
			}
			$login		= $db->safesql(@$_POST['login']);
			$email		= $db->safesql(@$_POST['email']);
			$salt		= $db->safesql($this->install->random());
			$password	= $this->install->gen_password(@$_POST['password'], $salt, $method);
			$uuid		= $db->safesql($this->install->logintouuid(@$_POST['login']));
			$ip			= $this->install->ip();
			$ctables	= $this->cfg['db']['tables'];
			$ic_f		= $ctables['iconomy']['fields'];
			$us_f		= $ctables['users']['fields'];
			$query = $db->query("INSERT INTO `{$ctables['users']['name']}`
										(`{$us_f['group']}`, `{$us_f['login']}`, `{$us_f['email']}`, `{$us_f['pass']}`, `{$us_f['uuid']}`, `{$us_f['salt']}`, `{$us_f['ip_create']}`, `{$us_f['ip_last']}`, `{$us_f['date_reg']}`, `{$us_f['date_last']}`, `{$us_f['fname']}`, `{$us_f['lname']}`)
									VALUES
										('3', '$login', '$email', '$password', '$uuid', '$salt', '$ip', '$ip', '$time', '$time', '', '')");
			if(!$query){ $this->install->notify($this->lng['e_add_admin'], $this->lng['e_msg'], 'install/?do=step_2'); }
			$query = $db->query("INSERT INTO `{$ctables['iconomy']['name']}`
										(`{$ic_f['login']}`, `{$ic_f['money']}`, `{$ic_f['rm']}`, `{$ic_f['bank']}`)
									VALUES
										('$login', 0, 0, 0)");
			if(!$query){ $this->install->notify($this->lng['e_add_economy'], $this->lng['e_msg'], 'install/?do=step_2'); }
			$_SESSION['step_2'] = true;
			$this->install->notify('', '', 'install/?do=step_3');
		}
		$data = array(
			'METHODS' => $this->encrypt_methods($method),
		);
		return $this->install->sp('step_2.html', $data);
	}
}
?>