re-adding php file but without secret
This commit is contained in:
parent
7fd559a387
commit
4df2436866
160
event_rewards/php/private_user_upgrade_api.php
Normal file
160
event_rewards/php/private_user_upgrade_api.php
Normal file
@ -0,0 +1,160 @@
|
|||||||
|
<?php
|
||||||
|
/*
|
||||||
|
Usage
|
||||||
|
Endpoint: https://unloze.com/api/private_user_upgrade_api.php
|
||||||
|
Query strings:
|
||||||
|
api_key - Required: Should be set to the secret API key
|
||||||
|
provider - Optional: Should be set to the wanted provider. Defaults to a default provider.
|
||||||
|
<id query> - Required: A respective ID query string should be set. E.g. the Steam provider requires a "steam_id" query string.
|
||||||
|
days_amount - Required: The amount of days to give as userUpgrade. this is related to event rewards.
|
||||||
|
*/
|
||||||
|
|
||||||
|
// --- CONFIG START ---
|
||||||
|
// API key for authorization
|
||||||
|
$api_key = "";
|
||||||
|
|
||||||
|
// Provider name with given query string
|
||||||
|
$provider_config = array(
|
||||||
|
"th_cap_steam" => "steam_id",
|
||||||
|
"minecraft" => "uuid"
|
||||||
|
);
|
||||||
|
|
||||||
|
// For backwards compatibility
|
||||||
|
$default_provider = "th_cap_steam";
|
||||||
|
|
||||||
|
// Responses
|
||||||
|
$response_error_apikey = 'API KEY INVALID';
|
||||||
|
$response_no_account_associated = 'NOACCOUNT';
|
||||||
|
$response_group_none = 'NOGROUP';
|
||||||
|
$response_error_id = 'MISSING ID';
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// --- CONFIG END ---
|
||||||
|
|
||||||
|
// TODO: Use single query string for ID?
|
||||||
|
|
||||||
|
// Prints the reason and exits.
|
||||||
|
function quitWithReason($reason, $status_code = 200){
|
||||||
|
|
||||||
|
http_response_code($status_code);
|
||||||
|
echo $reason;
|
||||||
|
die;
|
||||||
|
}
|
||||||
|
|
||||||
|
function debug_to_console($data) {
|
||||||
|
$output = $data;
|
||||||
|
if (is_array($output))
|
||||||
|
$output = implode(',', $output);
|
||||||
|
echo "<script>console.log('Debug Objects: " . $output . "' );</script>";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Check the API key
|
||||||
|
if(!isset($_GET['api_key']) || $_GET['api_key'] !== $api_key){
|
||||||
|
quitWithReason($response_error_apikey, 401);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Load XenForo stuffs
|
||||||
|
require ('bootstrap_user_upgrade.php');
|
||||||
|
|
||||||
|
// Fetch provider from query string. If none is found, use the default provider.
|
||||||
|
$provider = isset($_GET['provider']) ? $_GET['provider'] : $default_provider;
|
||||||
|
|
||||||
|
|
||||||
|
$days_reward = $_GET['days_reward'];
|
||||||
|
|
||||||
|
//debug_to_console("$days_reward"); //will always be set.
|
||||||
|
|
||||||
|
// Check if the given provider has been configured
|
||||||
|
if(!array_key_exists($provider, $provider_config)){
|
||||||
|
quitWithReason($response_error_provider, 404);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check if the ID is set.
|
||||||
|
if(!isset($_GET[$provider_config[$provider]])){
|
||||||
|
quitWithReason($response_error_id, 404);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Fetch the respective ID query string.
|
||||||
|
$provider_key = $_GET[$provider_config[$provider]];
|
||||||
|
|
||||||
|
// Use finder for external accounts
|
||||||
|
$connectedAccountFinder = \XF::finder('XF:UserConnectedAccount');
|
||||||
|
|
||||||
|
// Search for external accounts with the given provider and ID
|
||||||
|
$stAssoc = $connectedAccountFinder->where('provider', $provider)->where('provider_key', $provider_key)->fetchOne();
|
||||||
|
|
||||||
|
// If no account is associated to the steam account return NOACCOUNT
|
||||||
|
if(empty($stAssoc)){
|
||||||
|
quitWithReason($response_no_account_associated, 500);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Load XenForo model for users
|
||||||
|
$userFinder = \XF::finder('XF:User');
|
||||||
|
|
||||||
|
// Fetch the user from the external account entry
|
||||||
|
$user = $userFinder->where('user_id', $stAssoc->user_id)->fetchOne();
|
||||||
|
|
||||||
|
// (This should not happen) If no user is found, assign no group.
|
||||||
|
if(empty($user)){
|
||||||
|
// Push error to XenForo error log.
|
||||||
|
trigger_error("External account association exists for non-existing user ID (" . $stAssoc->user_id . ").");
|
||||||
|
quitWithReason($response_group_none, 500);
|
||||||
|
}
|
||||||
|
|
||||||
|
//debug_to_console("$stAssoc->user_id");
|
||||||
|
|
||||||
|
// Get UserUpgrade Information
|
||||||
|
$upgradeFinder = \XF::finder('XF:UserUpgrade');
|
||||||
|
$userUpgrade = $upgradeFinder->where('user_upgrade_id', 1)->fetchOne(); //its 1 because it should not matter which userupgrade we pick. its actually 1 month vip.
|
||||||
|
|
||||||
|
//debug_to_console("$user");
|
||||||
|
|
||||||
|
//before upgrading the user lets confirm if they already have a running vip duration. if they do we update it instead of creating a new one.
|
||||||
|
// Get Active Upgrade Information
|
||||||
|
$userUpgradeActiveFinder = \XF::Finder('XF:UserUpgradeActive');
|
||||||
|
$activeUserUpgrades = $userUpgradeActiveFinder->where('user_id', $stAssoc->user_id)->fetchOne();
|
||||||
|
//debug_to_console("$activeUserUpgrades");
|
||||||
|
|
||||||
|
if (isset($activeUserUpgrades))
|
||||||
|
{
|
||||||
|
debug_to_console("has user upgrade");
|
||||||
|
$userUpgrade_new = $activeUserUpgrades->Upgrade;
|
||||||
|
$expireDate = $activeUserUpgrades->end_date;
|
||||||
|
//debug_to_console("$userUpgrade_new");
|
||||||
|
//debug_to_console("$expireDate");
|
||||||
|
if ($expireDate === 0) {
|
||||||
|
quitWithReason(" end ", 200);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
$dateObject = date_create_from_format('U', $expireDate);
|
||||||
|
$intervalString = "P{$days_reward}D";
|
||||||
|
$interval = new DateInterval($intervalString);
|
||||||
|
$dateObject->add($interval);
|
||||||
|
$newTimestamp = $dateObject->getTimestamp();
|
||||||
|
|
||||||
|
//debug_to_console("$newTimestamp");
|
||||||
|
$upgradeService = $app->service('XF:User\Upgrade', $userUpgrade_new, $user);
|
||||||
|
$upgradeService->setEndDate($newTimestamp);
|
||||||
|
$upgradeService->ignoreUnpurchasable(true);
|
||||||
|
$upgradeService->upgrade();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
debug_to_console("no user upgrade so far");
|
||||||
|
// add days to current date
|
||||||
|
$date = strtotime("+$days_reward day");
|
||||||
|
|
||||||
|
// Upgrade User
|
||||||
|
$upgradeService = $app->service('XF:User\Upgrade', $userUpgrade, $user);
|
||||||
|
$upgradeService->setEndDate($date);
|
||||||
|
$upgradeService->ignoreUnpurchasable(true);
|
||||||
|
$upgradeService->upgrade();
|
||||||
|
}
|
||||||
|
|
||||||
|
quitWithReason(" end ", 200);
|
||||||
|
|
Loading…
Reference in New Issue
Block a user