You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			433 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			PHP
		
	
			
		
		
	
	
			433 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			PHP
		
	
<?php
 | 
						|
// Get server url
 | 
						|
$url = 'https://' . $_SERVER['HTTP_HOST'];
 | 
						|
// Output messages
 | 
						|
$response = '';
 | 
						|
 | 
						|
/* Install function */
 | 
						|
function install($config_file = 'system/config.php') {
 | 
						|
	$contents = '<?php' . PHP_EOL;
 | 
						|
	// Write new variables to files
 | 
						|
	foreach ($_POST as $k => $v) {
 | 
						|
		if ($k == 'code') continue;
 | 
						|
        $v = in_array(strtolower($v), ['true', 'false']) || is_numeric($v) ? strtolower($v) : '\'' . $v . '\'';
 | 
						|
        $contents .= 'define(\'' . $k . '\',' . $v . ');' . PHP_EOL;
 | 
						|
    }
 | 
						|
	$contents .= '?>';
 | 
						|
	if (!file_put_contents($config_file, $contents)) {
 | 
						|
		return FALSE;
 | 
						|
	}
 | 
						|
	return TRUE;
 | 
						|
}
 | 
						|
 | 
						|
/*Verify Purchase Code function*/
 | 
						|
function verify($code)
 | 
						|
{
 | 
						|
	
 | 
						|
	/*If the submit form is success*/
 | 
						|
	if(!empty($code)){
 | 
						|
		
 | 
						|
		/*add purchase code to the API link*/
 | 
						|
		$purchase_code = $code;
 | 
						|
		$url = "https://dl.supers0ft.us/anonuptest/api.php?code=".$purchase_code;
 | 
						|
		$curl = curl_init($url);
 | 
						|
		
 | 
						|
		/*Set your personal token*/
 | 
						|
		// $personal_token = "9COT6mduU2sZSMIlC09aYAQveaRdQ2H9";
 | 
						|
		
 | 
						|
		/*Correct header for the curl extension*/
 | 
						|
		$header = array();
 | 
						|
		$header[] = 'Authorization: Bearer '.$personal_token;
 | 
						|
		$header[] = 'User-Agent: Purchase code verification';
 | 
						|
		$header[] = 'timeout: 20';
 | 
						|
		curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
 | 
						|
		curl_setopt($curl, CURLOPT_HTTPHEADER,$header);
 | 
						|
		
 | 
						|
		/*Connect to the API, and get values from there*/
 | 
						|
		$envatoCheck = curl_exec($curl);
 | 
						|
		curl_close($curl);
 | 
						|
		$envatoCheck = json_decode($envatoCheck);
 | 
						|
		
 | 
						|
		/*Variable request from the API*/
 | 
						|
		$date = new DateTime(isset($envatoCheck->supported_until) ? $envatoCheck->supported_until : false);							
 | 
						|
		$support_date = $date->format('Y-m-d H:i:s');
 | 
						|
		$sold = new DateTime(isset($envatoCheck->sold_at) ? $envatoCheck->sold_at : false);
 | 
						|
		$sold_at = $sold->format('Y-m-d H:i:s');
 | 
						|
		$buyer = (isset( $envatoCheck->buyer) ? $envatoCheck->buyer : false);
 | 
						|
		$license = (isset( $envatoCheck->license) ? $envatoCheck->license : false);
 | 
						|
		$count = (isset( $envatoCheck->purchase_count) ? $envatoCheck->purchase_count : false);
 | 
						|
		$support_amount = (isset( $envatoCheck->support_amount) ? $envatoCheck->support_amount : false);
 | 
						|
		$item  = (isset( $envatoCheck->item->previews->landscape_preview->landscape_url ) ? $envatoCheck->item->previews->landscape_preview->landscape_url  : false);
 | 
						|
 | 
						|
		
 | 
						|
		/*Check for Special Characters*/
 | 
						|
		if (preg_match('/[\'^£$%&*()}{@#~?><>,|=_+¬]/', $code)){
 | 
						|
		   	return 'Not allowed to use special characters!';	
 | 
						|
		}
 | 
						|
		
 | 
						|
		/*Check for Empty Spaces*/
 | 
						|
		if(!isset($code) || trim($code) == ''){
 | 
						|
			return 'You need to fill up the input area!';	
 | 
						|
		}
 | 
						|
		
 | 
						|
		/*If Purchase code exists, But Purchase ended*/
 | 
						|
		if (isset($envatoCheck->item->name) && (date('Y-m-d H:i:s') >= $support_date)){   
 | 
						|
			return "
 | 
						|
				<div class='alert alert-danger' role='alert'>
 | 
						|
					<h3>{$envatoCheck->item->name}</h3>										
 | 
						|
					<div class='row'>
 | 
						|
						<div class='center-box'>
 | 
						|
							<div class='col-md-6'>
 | 
						|
								<img src='{$item}' class='img-responsive' />
 | 
						|
							</div>
 | 
						|
							<div class='col-md-6'>
 | 
						|
								<table class='table table-striped'>
 | 
						|
								<thead>
 | 
						|
									<tbody>
 | 
						|
									<tr>
 | 
						|
										<td><b>CLIENT:</b></td>													
 | 
						|
										<td>{$buyer}</td>
 | 
						|
									</tr>
 | 
						|
									<tr>
 | 
						|
										<td><b>SOLD AT:</b></td>
 | 
						|
										<td> {$sold_at}</td>
 | 
						|
									</tr>
 | 
						|
									<tr>
 | 
						|
										<td><b>SUPPORT UNTIL:</b></td>
 | 
						|
										<td> {$support_date}</td>
 | 
						|
									</tr>
 | 
						|
									<tr>
 | 
						|
										<td><b>LICENSE:</b></td>
 | 
						|
										<td> {$license}</td>
 | 
						|
									</tr>
 | 
						|
									<tr>
 | 
						|
										<td><b>COUNT:</b></td>
 | 
						|
										<td> {$count}</td>
 | 
						|
									</tr>
 | 
						|
									<tr>
 | 
						|
										<td><b>SUPPORT EXTENSION:</b></td>
 | 
						|
										<td> {$support_amount}</td>
 | 
						|
									</tr>
 | 
						|
								</tbody>
 | 
						|
							  </table>  													
 | 
						|
							</div>
 | 
						|
						</div>
 | 
						|
					</div>
 | 
						|
				</div>
 | 
						|
			";
 | 
						|
		}
 | 
						|
 | 
						|
		/*If Purchase code exists, display client information*/
 | 
						|
		if (isset($envatoCheck->item->name) && (date('Y-m-d H:i:s') < $support_date)){    
 | 
						|
			if (!install()) {
 | 
						|
				return '<h3>Error!</h3><p>Could not write to file! Please check permissions and try again!</a>';
 | 
						|
			}
 | 
						|
			return "
 | 
						|
				<div class='alert alert-success' role='alert'>
 | 
						|
					<h3>{$envatoCheck->item->name}</h3>										
 | 
						|
					<div class='row'>
 | 
						|
						<div class='center-box'>
 | 
						|
							<div class='col-md-6'>
 | 
						|
								<img src='{$item}' class='img-responsive' />
 | 
						|
							</div>
 | 
						|
							<div class='col-md-6'>
 | 
						|
								<table class='table table-striped'>
 | 
						|
								<thead>
 | 
						|
									<tbody>
 | 
						|
									<tr>
 | 
						|
										<td><b>CLIENT:</b></td>													
 | 
						|
										<td>{$buyer}</td>
 | 
						|
									</tr>
 | 
						|
									<tr>
 | 
						|
										<td><b>SOLD AT:</b></td>
 | 
						|
										<td> {$sold_at}</td>
 | 
						|
									</tr>
 | 
						|
									<tr>
 | 
						|
										<td><b>SUPPORT UNTIL:</b></td>
 | 
						|
										<td> {$support_date}</td>
 | 
						|
									</tr>
 | 
						|
									<tr>
 | 
						|
										<td><b>LICENSE:</b></td>
 | 
						|
										<td> {$license}</td>
 | 
						|
									</tr>
 | 
						|
									<tr>
 | 
						|
										<td><b>COUNT:</b></td>
 | 
						|
										<td> {$count}</td>
 | 
						|
									</tr>
 | 
						|
									<tr>
 | 
						|
										<td><b>SUPPORT EXTENSION:</b></td>
 | 
						|
										<td> {$support_amount}</td>
 | 
						|
									</tr>
 | 
						|
								</tbody>
 | 
						|
							  </table>  													
 | 
						|
							</div>
 | 
						|
						</div>
 | 
						|
					</div>
 | 
						|
				</div> 
 | 
						|
			";
 | 
						|
		}
 | 
						|
 | 
						|
		/*If Purchase Code doesn't exist, no information will be displayed*/
 | 
						|
		if (!isset($envatoCheck->item->name)){ 											
 | 
						|
			return " 
 | 
						|
				<div class='alert alert-danger' role='alert'>
 | 
						|
					<h3>INVALID PURCHASE CODE.</h3>
 | 
						|
					<div class='row'>
 | 
						|
						<div class='center-box'>
 | 
						|
							<div class='col-md-6'>
 | 
						|
								<img src='img/profile.png' class='img-responsive' />
 | 
						|
							</div>
 | 
						|
							<div class='col-md-6'>
 | 
						|
								<table class='table table-striped'>
 | 
						|
								<thead>
 | 
						|
									<tbody>
 | 
						|
									<tr>
 | 
						|
										<td><b>CLIENT:</b></td>													
 | 
						|
										<td> NOT VERIFIED</td>
 | 
						|
									</tr>
 | 
						|
									<tr>
 | 
						|
										<td><b>SOLD AT:</b></td>
 | 
						|
										<td> NONE</td>
 | 
						|
									</tr>
 | 
						|
									<tr>
 | 
						|
										<td><b>SUPPORT UNTIL:</b></td>
 | 
						|
										<td> NONE</td>
 | 
						|
									</tr>
 | 
						|
									<tr>
 | 
						|
										<td><b>LICENSE:</b></td>
 | 
						|
										<td> NONE</td>
 | 
						|
									</tr>
 | 
						|
									<tr>
 | 
						|
										<td><b>COUNT:</b></td>
 | 
						|
										<td> NONE</td>
 | 
						|
									</tr>
 | 
						|
									<tr>
 | 
						|
										<td><b>SUPPORT EXTENSION:</b></td>
 | 
						|
										<td> NONE</td>
 | 
						|
									</tr>
 | 
						|
								</tbody>
 | 
						|
							  </table>  													
 | 
						|
							</div>
 | 
						|
						</div>
 | 
						|
					</div>
 | 
						|
				</div>
 | 
						|
			";
 | 
						|
		} 
 | 
						|
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
if ($_POST) {
 | 
						|
    if (isset($_POST['code'])) {
 | 
						|
		// Validate code
 | 
						|
		$response = verify($_POST['code']);
 | 
						|
	} else {
 | 
						|
		// No code specified
 | 
						|
		$response = '<h3>Error!</h3><p>Please enter your Envato code!</p>';
 | 
						|
	}
 | 
						|
}
 | 
						|
?>
 | 
						|
<!DOCTYPE html>
 | 
						|
<html lang="en">
 | 
						|
	<head>
 | 
						|
		<meta charset="utf-8">
 | 
						|
		<meta name="viewport" content="width=device-width,minimum-scale=1">
 | 
						|
		<title>Installer</title>
 | 
						|
		<link rel="stylesheet" href="https://use.fontawesome.com/releases/v6.0.0/css/all.css">
 | 
						|
		<link rel="stylesheet" href="style.css">
 | 
						|
	</head>
 | 
						|
	<body>
 | 
						|
		<form class="installer-form" method="post" action="">
 | 
						|
			
 | 
						|
			<h1><i class="fa-solid fa-box-open"></i>Installer</h1>
 | 
						|
 | 
						|
			<div class="steps">
 | 
						|
				<div class="step current"></div>
 | 
						|
				<div class="step"></div>
 | 
						|
				<div class="step"></div>
 | 
						|
				<div class="step"></div>
 | 
						|
				<div class="step"></div>
 | 
						|
			</div>
 | 
						|
 | 
						|
			<div class="step-content current" data-step="1">
 | 
						|
				<div class="fields">
 | 
						|
 | 
						|
					<label for="email">Admin Email</label>
 | 
						|
					<div class="field">
 | 
						|
						<i class="fas fa-envelope"></i>
 | 
						|
						<input id="email" type="email" name="email" placeholder="Your Email Address" required>
 | 
						|
					</div>
 | 
						|
 | 
						|
					<label for="password">Password</label>
 | 
						|
					<div class="field">
 | 
						|
						<i class="fas fa-lock"></i>
 | 
						|
						<input id="password" type="password" name="password" placeholder="Password" minlength="8" required>
 | 
						|
					</div>
 | 
						|
 | 
						|
					<label for="app_name">App Name</label>
 | 
						|
					<div class="field">
 | 
						|
						<input id="app_name" type="text" name="app_name" placeholder="App Name" required>
 | 
						|
					</div>
 | 
						|
 | 
						|
					<label for="app_desc">App Description</label>
 | 
						|
					<div class="field">
 | 
						|
						<input id="app_desc" type="text" name="app_desc" placeholder="App Description" required>
 | 
						|
					</div>
 | 
						|
 | 
						|
				</div>
 | 
						|
				<div class="buttons">
 | 
						|
					<a href="#" class="btn" data-set-step="2">Next</a>
 | 
						|
				</div>
 | 
						|
			</div>
 | 
						|
 | 
						|
			<div class="step-content" data-step="2">
 | 
						|
				<div class="fields">
 | 
						|
 | 
						|
					<label for="FILELIST">File List</label>
 | 
						|
					<div class="field">
 | 
						|
						<input id="FILELIST" type="text" name="FILELIST" placeholder="Comma-seperated list of supported files" required value="jpeg,jpg,gif,png,zip,xls,doc,mp3,mp4,mpeg,wav,avi,rar,7z,txt">
 | 
						|
					</div>
 | 
						|
 | 
						|
					<p>Options</p>
 | 
						|
					<div class="group">
 | 
						|
						<label for="size_verification">
 | 
						|
							<input type="checkbox" name="size_verification" id="size_verification">
 | 
						|
							Size Verification
 | 
						|
						</label>
 | 
						|
					</div>
 | 
						|
 | 
						|
					<!-- file destination - do not change or script won't work -->
 | 
						|
					<div class="field">
 | 
						|
						<input id="file_destination" type="hidden" name="file_destination" placeholder="File Destination" value="files"readonly required>
 | 
						|
					</div>
 | 
						|
 | 
						|
					<label for="file_destination">Site URL</label>
 | 
						|
					<div class="field">
 | 
						|
						<input id="file_destination" type="text" name="file_url_destination" placeholder="https://example.com/anonupload" value="<?php echo $url; ?>" required>
 | 
						|
					</div>
 | 
						|
 | 
						|
				</div>
 | 
						|
				<div class="buttons">
 | 
						|
					<a href="#" class="btn" data-set-step="1">Prev</a>
 | 
						|
					<a href="#" class="btn" data-set-step="3">Next</a>
 | 
						|
				</div>
 | 
						|
			</div>
 | 
						|
 | 
						|
			<div class="step-content" data-step="3">
 | 
						|
				<div class="fields">
 | 
						|
 | 
						|
					<label for="max_size">Maximum Size In Bytes</label>
 | 
						|
					<div class="field">
 | 
						|
						<input id="max_size" type="number" name="max_size" placeholder="Maximum Size" required>
 | 
						|
					</div>
 | 
						|
 | 
						|
					<label for="min_size">Minimum Size In Bytes</label>
 | 
						|
					<div class="field">
 | 
						|
						<input id="min_size" type="number" name="min_size" placeholder="Minimum Size" required>
 | 
						|
					</div>
 | 
						|
 | 
						|
					<!-- OTHER FORM ELEMENTS
 | 
						|
					<p>Features</p>
 | 
						|
					<div class="group">
 | 
						|
						<label for="feature1">
 | 
						|
							<input type="checkbox" name="feature1" id="feature1">
 | 
						|
							Enable Feature 1
 | 
						|
						</label>
 | 
						|
						<label for="feature2">
 | 
						|
							<input type="checkbox" name="feature2" id="feature2">
 | 
						|
							Enable Feature 2
 | 
						|
						</label>
 | 
						|
						<label for="feature3">
 | 
						|
							<input type="checkbox" name="feature3" id="feature3">
 | 
						|
							Enable Feature 3
 | 
						|
						</label>		
 | 
						|
					</div>
 | 
						|
 | 
						|
					<p>Account Permissions</p>
 | 
						|
					<div class="group">
 | 
						|
						<label for="radio6">
 | 
						|
							<input type="radio" name="account_permissions" id="radio6" value="full">
 | 
						|
							Full
 | 
						|
						</label>
 | 
						|
						<label for="radio7">
 | 
						|
							<input type="radio" name="account_permissions" id="radio7" value="strict">
 | 
						|
							Strict
 | 
						|
						</label>		
 | 
						|
					</div>
 | 
						|
 | 
						|
					<p>Maximum number of accounts</p>
 | 
						|
					<div class="rating">
 | 
						|
						<input type="radio" name="maximum_accounts" id="radio1" value="5">
 | 
						|
						<label for="radio1">5</label>
 | 
						|
						<input type="radio" name="maximum_accounts" id="radio2" value="10">
 | 
						|
						<label for="radio2">10</label>
 | 
						|
						<input type="radio" name="maximum_accounts" id="radio3" value="20">
 | 
						|
						<label for="radio3">20</label>
 | 
						|
						<input type="radio" name="maximum_accounts" id="radio4" value="50">
 | 
						|
						<label for="radio4">50</label>
 | 
						|
						<input type="radio" name="maximum_accounts" id="radio5" value="80">
 | 
						|
						<label for="radio5">80</label>
 | 
						|
					</div>
 | 
						|
					-->
 | 
						|
 | 
						|
				</div>
 | 
						|
				<div class="buttons">
 | 
						|
					<a href="#" class="btn alt" data-set-step="2">Prev</a>
 | 
						|
					<a href="#" class="btn" data-set-step="4">Next</a>
 | 
						|
				</div>
 | 
						|
			</div>
 | 
						|
 | 
						|
			<div class="step-content" data-step="4">
 | 
						|
				<div class="fields">
 | 
						|
					<label for="code">Envato Code</label>
 | 
						|
					<div class="field">
 | 
						|
						<i class="fa-solid fa-key"></i>
 | 
						|
						<input id="code" type="text" name="code" placeholder="Your Purchase Code" required>
 | 
						|
					</div>
 | 
						|
				</div>
 | 
						|
				<div class="buttons">
 | 
						|
					<a href="#" class="btn alt" data-set-step="3">Prev</a>
 | 
						|
					<input type="submit" class="btn" value="Submit">
 | 
						|
				</div>
 | 
						|
			</div>
 | 
						|
 | 
						|
			<div class="step-content" data-step="5">
 | 
						|
				<div class="result"><?=$response?></div>
 | 
						|
			</div>
 | 
						|
 | 
						|
		</form>
 | 
						|
 | 
						|
		<script>
 | 
						|
		document.querySelectorAll("input[type='checkbox']").forEach(checkbox => {
 | 
						|
			checkbox.onclick = () => checkbox.value = checkbox.checked ? 'true' : 'false';
 | 
						|
		});
 | 
						|
		const setStep = step => {
 | 
						|
			document.querySelectorAll(".step-content").forEach(element => element.style.display = "none");
 | 
						|
			document.querySelector("[data-step='" + step + "']").style.display = "block";
 | 
						|
			document.querySelectorAll(".steps .step").forEach((element, index) => {
 | 
						|
				index < step-1 ? element.classList.add("complete") : element.classList.remove("complete");
 | 
						|
				index == step-1 ? element.classList.add("current") : element.classList.remove("current");
 | 
						|
			});
 | 
						|
		};
 | 
						|
		document.querySelectorAll("[data-set-step]").forEach(element => {
 | 
						|
			element.onclick = event => {
 | 
						|
				event.preventDefault();
 | 
						|
				let canContinue = true;
 | 
						|
				document.querySelectorAll('input').forEach(element => {
 | 
						|
					if (!element.checkValidity() && element.offsetWidth !== 0 && element.offsetHeight !== 0) {
 | 
						|
						canContinue = false;
 | 
						|
						element.reportValidity();
 | 
						|
					}
 | 
						|
				});
 | 
						|
				if (canContinue) {
 | 
						|
					setStep(parseInt(element.dataset.setStep));
 | 
						|
				}
 | 
						|
			};
 | 
						|
		});
 | 
						|
		<?php if (!empty($_POST)): ?>
 | 
						|
		setStep(5);
 | 
						|
		<?php endif; ?>
 | 
						|
		</script>
 | 
						|
 | 
						|
	</body>
 | 
						|
</html>
 |