173 lines
4.5 KiB
PHP
173 lines
4.5 KiB
PHP
|
<?php
|
||
|
|
||
|
/* ---------
|
||
|
Filtr. Class 4 your Entertainment
|
||
|
filtr.sandros.hu
|
||
|
Sandros Industries
|
||
|
2015. June 28.
|
||
|
|
||
|
Version: 2.2.1.00b <== If the last 2 numbers are equal, this version is untested!
|
||
|
|
||
|
Usage:
|
||
|
|
||
|
- Basic
|
||
|
|
||
|
$filtr = new filtrLogin( [ CUSTOM API URL / NULL ] );
|
||
|
|
||
|
$filtr->setAppid( [ APPLICATION IDENTIFIER ] );
|
||
|
$filtr->setApptoken( [ APPLICATION TOKEN HASH ] );
|
||
|
|
||
|
$filtr->setToken( [ USER'S TOKEN GENERATED BY FILTR. APL.REDIRECT ] );
|
||
|
|
||
|
- Advanced
|
||
|
$filtr->DataStorage( [ WAT TO DO (read, write, erase) ], [ KEY (only for writing) ], [ VALUE (only for writing) ]);
|
||
|
$filtr->cache = '/tmp/[ YOUR PROJECTS CODENAME ]/filtrd/';
|
||
|
|
||
|
Comments:
|
||
|
The Filtr. API has a geniune and valid SSL certificate, but it slows down the process.
|
||
|
Use it only if your connection is not trusted!
|
||
|
We're logging EVERY requests, so you will be able to monitor every access and you will be able to limit the APP's access by IP.
|
||
|
|
||
|
Public UNAME/PASSWD authentication NEVER GONNA HAPPEN!
|
||
|
|
||
|
The specified cache must end with '/'. Automatic detection just slows down the process and generates unnecessary load.
|
||
|
|
||
|
That's it! Have fun!
|
||
|
Don't forget to go out and become black. This is important! And cool! You'll be less awesome, but eh.
|
||
|
|
||
|
Just do it! Tomorrow.
|
||
|
--------- */
|
||
|
|
||
|
|
||
|
class filtrLogin
|
||
|
{
|
||
|
/* User authentication */
|
||
|
private $token;
|
||
|
|
||
|
/* Filtr. authentication */
|
||
|
private $appid;
|
||
|
private $apptoken;
|
||
|
private $apiurl = 'http://filtr.sandros.hu/api.php';
|
||
|
|
||
|
/* This holds the response from Filtr. */
|
||
|
private $apiResponse;
|
||
|
|
||
|
// Cache
|
||
|
public $cache;
|
||
|
public $cachetimeout = 60;
|
||
|
|
||
|
/* Hey! :) */
|
||
|
public function __construct($apiurl = false, $cache = false) {
|
||
|
if ($apiurl)
|
||
|
$this->apiurl = $apiurl; // Override the class-default API url with the given one
|
||
|
}
|
||
|
|
||
|
/* Data collectors */
|
||
|
public function setToken($token = 0) { $this->token = $token; }
|
||
|
public function setAppid($user = 0) { $this->appid = $user; }
|
||
|
public function setApptoken($key = 0) { $this->apptoken = $key; }
|
||
|
|
||
|
/* Data storage */
|
||
|
private $datastorage = array();
|
||
|
public function DataStorage($todo, $key = false, $value = false) {
|
||
|
switch($todo)
|
||
|
{
|
||
|
case 'read':
|
||
|
$this->datastorage = array('data_storage'=>'read');
|
||
|
break;
|
||
|
|
||
|
case 'write':
|
||
|
$this->datastorage = array('data_storage'=>'write', 'data_storage_key'=>$key, 'data_storage_value'=>$value);
|
||
|
break;
|
||
|
|
||
|
case 'erase':
|
||
|
$this->datastorage = array('data_storage'=>'erase');
|
||
|
break;
|
||
|
}
|
||
|
if ($this->status())
|
||
|
{
|
||
|
$this->Login();
|
||
|
return (isset($this->apiResponse->data_storage) ? true : false);
|
||
|
}
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
/* Nasty things */
|
||
|
public function Login($timeout = 6) {
|
||
|
|
||
|
// Caching
|
||
|
if ($this->cache && file_exists($this->cache.$this->token) && filemtime($this->cache.$this->token) > time()-$this->cachetimeout)
|
||
|
{
|
||
|
$this->apiResponse = json_decode(file_get_contents($this->cache.$this->token));
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
// Collect the auth infos
|
||
|
// ! This looks pretty bad. In the next release, there will be a JSON encoder.
|
||
|
$array = array_merge(array(
|
||
|
'appid' => $this->appid,
|
||
|
'apptoken' => $this->apptoken,
|
||
|
'token' => $this->token,
|
||
|
), $this->datastorage);
|
||
|
|
||
|
// Convert to GET like string
|
||
|
$fields = '';
|
||
|
foreach($array as $key=>$value)
|
||
|
$fields .= $key.'='.$value.'&';
|
||
|
$fields = rtrim($fields, '&');
|
||
|
|
||
|
|
||
|
// Connect options and set data
|
||
|
$ch = curl_init();
|
||
|
curl_setopt($ch, CURLOPT_URL, $this->apiurl);
|
||
|
curl_setopt($ch, CURLOPT_POST, count($array));
|
||
|
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);
|
||
|
curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
|
||
|
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
|
||
|
|
||
|
// Free up some memory
|
||
|
unset($fields);
|
||
|
unset($array);
|
||
|
$this->datastorage = false;
|
||
|
|
||
|
// Do what we need to
|
||
|
$rawResponse = curl_exec($ch);
|
||
|
$this->apiResponse = json_decode($rawResponse);
|
||
|
|
||
|
// Basic cache
|
||
|
if ($this->cache)
|
||
|
{
|
||
|
$cache = fopen($this->cache.$this->token, 'w');
|
||
|
fwrite($cache, $rawResponse);
|
||
|
fclose($cache);
|
||
|
unset($cache);
|
||
|
}
|
||
|
unset($rawResponse);
|
||
|
|
||
|
// Close the connection to the login server
|
||
|
curl_close($ch);
|
||
|
unset($ch);
|
||
|
|
||
|
// '1' means the response has came from the remote server
|
||
|
// Not relevant for this script, but you can build an advanced cache control for better performance.
|
||
|
return 1;
|
||
|
}
|
||
|
|
||
|
// Logged in?
|
||
|
public function status() {
|
||
|
if (isset($this->apiResponse->status) && $this->apiResponse->status == 'ok')
|
||
|
return true;
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
// Return user's data
|
||
|
// Array mode is the default, because this could cause serious problems if someone auto-updating this script.
|
||
|
public function getData($array = true) {
|
||
|
if ($array)
|
||
|
return (array)$this->apiResponse;
|
||
|
return $this->apiResponse;
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
?>
|