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;
 | |
| 	}
 | |
| 
 | |
| }
 | |
| 
 | |
| ?>
 |