mirror of
https://github.com/Encryptshell/Pritunl-API-crack.git
synced 2025-11-29 00:23:09 +00:00
138 lines
6.9 KiB
PHP
138 lines
6.9 KiB
PHP
<?php
|
|
//Author: simonmicro 2022
|
|
|
|
header("Access-Control-Allow-Origin: *"); //Allow access from everywhere...
|
|
$code = 200;
|
|
|
|
//Parse body (if possible)
|
|
$body = json_decode(file_get_contents('php://input'));
|
|
|
|
//Fake API
|
|
$result = null;
|
|
if(isset($_GET['path'])) {
|
|
//Any notification/[version] will be answered here
|
|
if(preg_match('/notification.*/', $_GET['path'])) {
|
|
$result = new stdClass;
|
|
$result->message = 'Fake API endpoint for v1.30.3116.68 active and reachable (contacted at ' . date('r') . ').';
|
|
$result->vpn = false; //Idk
|
|
$result->www = false; //Idk
|
|
} else if(isset($body->license) && preg_match('/subscription.*/', $_GET['path'])) {
|
|
//The following only works with the body containing the desired license
|
|
$result = new stdClass;
|
|
$license = null;
|
|
//The stylesheet determines what is shown on the dashboard (and by the plan). As default we change the colors of any text.
|
|
$stylesheet = '';
|
|
if(preg_match('/.*premium/', $body->license)) {
|
|
$license = 'premium';
|
|
} else if(preg_match('/.*enterprise/', $body->license)) {
|
|
$license = 'enterprise';
|
|
$stylesheet .= file_get_contents('enterprise.css');
|
|
//Now fix some too aggressive display strategies by appending their overrides...
|
|
$stylesheet .= file_get_contents('enterprise_fix.css');
|
|
} else if(preg_match('/.*ultimate/', $body->license)) {
|
|
$license = 'enterprise_plus';
|
|
//Load the new css file and change all invisible blocks to visible (this will show a little bit too much, but whatever...)
|
|
$stylesheet .= file_get_contents('enterprise.css');
|
|
$stylesheet = preg_replace('/(enterprise)/', '$1-temp-prefix', $stylesheet);
|
|
$stylesheet = preg_replace('/(enterprise)(-temp-prefix-plus)/', '$1', $stylesheet);
|
|
$stylesheet = preg_replace('/(enterprise)(-temp-prefix)/', '$1-plus', $stylesheet);
|
|
$stylesheet = preg_replace('/(display:.?)none.?$/m', '$1inline-block', $stylesheet); //This WILL SHOW TOO MUCH... So we'll need a fix file...
|
|
$stylesheet .= file_get_contents('ultimate_fix.css');
|
|
}
|
|
$stylesheet .= "* { color: rgb(57, 83, 120); }\n.dark * { color: rgb(200, 242, 242); }\n.navbar .navbar-brand { animation-name: pritunl-logo; animation-duration: 20s; animation-iteration-count: infinite; }\n@keyframes pritunl-logo { 0% { transform:rotate3d(1, 0, 0, 360deg); } 25% { transform:rotate3d(1, 0, 0, 0deg); } 50% { transform:rotate3d(0, 1, 0, 0deg); } 75% { transform:rotate3d(0, 1, 0, 360deg); } 100% { transform:rotate3d(0, 1, 0, 360deg); } }\n.footer-brand {visibility: hidden; }\n.footer-brand::before { visibility: visible; position: absolute; bottom: 0; right: 0; content: ''; background: url('https://" . $_SERVER['HTTP_HOST'] . "/logo.png'); background-size: cover; width: 1em; height: 1em; margin: 0.3em; }\n/* Generated for $license license */";
|
|
|
|
# Workaround for 70b354a10df55d60515f76d851dee42939864395
|
|
if($body->version >= 1003031084050 and $body->version < 1003031164068)
|
|
$stylesheet = base64_encode($stylesheet);
|
|
|
|
$state = null;
|
|
if($license) { //The following only makes sense if you selected any license
|
|
if(strpos($body->license, 'bad') !== false) {
|
|
$state = 'Bad';
|
|
} else if(strpos($body->license, 'canceled') !== false) {
|
|
$state = 'canceled';
|
|
} else if(strpos($body->license, 'active') !== false) {
|
|
$state = 'Active';
|
|
}
|
|
}
|
|
|
|
if($state == 'Active') {
|
|
$result->active = $body->version < 1003031164068 ? $license != 'premium' : $license == 'enterprise_plus';
|
|
$result->status = $state;
|
|
$result->plan = $license;
|
|
$result->quantity = 42;
|
|
$result->amount = 42;
|
|
$result->credit = 42;
|
|
$result->period_end = false;
|
|
$result->trial_end = false;
|
|
$result->cancel_at_period_end = false;
|
|
$result->styles = new stdClass;
|
|
$result->styles->etag = 42;
|
|
$result->styles->last_modified = time();
|
|
$result->styles->data = $stylesheet;
|
|
}
|
|
if($state == 'Canceled') {
|
|
$result->active = false; //Here we can savely disable any styles
|
|
$result->status = $state;
|
|
$result->plan = $license;
|
|
$result->quantity = 42;
|
|
$result->amount = 42;
|
|
$result->period_end = false;
|
|
$result->trial_end = false;
|
|
$result->cancel_at_period_end = false;
|
|
$result->styles = new stdClass;
|
|
$result->styles->etag = 42;
|
|
$result->styles->last_modified = time();
|
|
$result->styles->data = $stylesheet;
|
|
}
|
|
if($state == 'Bad' || $state == null) {
|
|
$code = 470; //-> bad license
|
|
$result->error_msg = 'As you wish.';
|
|
$result->error = 'license_invalid';
|
|
$result->active = false;
|
|
$result->status = false;
|
|
$result->plan = null;
|
|
$result->quantity = 0;
|
|
$result->amount = 0;
|
|
$result->period_end = true;
|
|
$result->trial_end = true;
|
|
$result->cancel_at_period_end = null;
|
|
$result->styles = new stdClass;
|
|
}
|
|
if($state == null) {
|
|
$result->error_msg = 'Unknown command. Use ["bad" | "canceled" | "active"] ["premium" | "enterprise" | "ultimate"].';
|
|
}
|
|
} else if(preg_match('/checkout.*/', $_GET['path'])) {
|
|
$result = array();
|
|
$result['zipCode'] = false;
|
|
$result['allowRememberMe'] = false;
|
|
$result['image'] = 'https://' . $_SERVER['HTTP_HOST'] . '/logo.png';
|
|
$result['key'] = null; //Insert here a key to unlock the stripe store (is a string). And buy the subscription...
|
|
$result['plans'] = array();
|
|
$result['plans']['premium'] = array();
|
|
$result['plans']['premium']['amount'] = 42;
|
|
$result['plans']['enterprise'] = array();
|
|
$result['plans']['enterprise']['amount'] = 42;
|
|
$result['plans']['enterprise_plus'] = array();
|
|
$result['plans']['enterprise_plus']['amount'] = 42;
|
|
} else if(preg_match('/auth\/.*/', $_GET['path'])) {
|
|
$result = array('error' => 'Sorry, but SSO is currently not supported.');
|
|
$code = 401; //Let Pritunl fail, without 500 codes (it will show 405)
|
|
}
|
|
}
|
|
|
|
header('Content-Type: application/json');
|
|
http_response_code($code);
|
|
echo json_encode($result);
|
|
|
|
//Should we log any request? Used for the development and debugging of this API
|
|
if(false) {
|
|
//Log request
|
|
file_put_contents('access.log', "\n" . date('r') . ":\t" . json_encode(array('head' => getallheaders(), 'body' => file_get_contents('php://input'), 'get' => $_GET, 'post' => $_POST, 'answer_code' => $code, 'answer' => $result)) . "\n", FILE_APPEND);
|
|
|
|
//GET operator to clear log file
|
|
if(isset($_GET['clear']))
|
|
file_put_contents('access.log', '');
|
|
}
|
|
?>
|