From 7ba7fa64128fafe050e5beeffe842425c719a75a Mon Sep 17 00:00:00 2001
From: zolij <zolij86@gmail.com>
Date: Wed, 8 Jan 2014 00:40:28 +0100
Subject: [PATCH] =?UTF-8?q?kezdeti=20funkci=C3=B3k?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 php/AuthSCHClient.class.php | 79 +++++++++++++++++++++++++++++++++++++
 1 file changed, 79 insertions(+)

diff --git a/php/AuthSCHClient.class.php b/php/AuthSCHClient.class.php
index 7c64918..6de6abe 100644
--- a/php/AuthSCHClient.class.php
+++ b/php/AuthSCHClient.class.php
@@ -1,4 +1,83 @@
 <?php
 
 class AuthSCHClient {
+    
+    private static $host = "https://auth.sch.bme.hu/";
+    private static $username = "";  // your application's id
+    private static $password = "";  // your application's password
+    private static $scope = "";      // wanted data, separated with plus sign. For more information see your website profile on auth.sch.bme.hu.
+    
+    private $curl = null;   // curl session
+    private $tokens;
+    
+    public function __construct($checkLogin = true) {
+        $this->tokens = new stdClass();
+        
+        if($checkLogin === true) {
+            if(session_id() == '') {
+                // session isn't started
+                session_start();
+            }
+            if(!isset($_SESSION['authtoken'])) {
+                // auth token not exists
+                $this->authenticate();
+            }
+        }
+        
+        return $this->tokens;
+    }
+    
+    public function __destruct() {
+        
+    }
+    
+    private function curlSetOpt($urlPart, $data) {
+        curl_setopt($this->curl, CURLOPT_URL, self::$host . $urlPart);
+        curl_setopt($this->curl, CURLOPT_HEADER, 0);
+        curl_setopt($this->curl, CURLOPT_USERPWD, self::$username . ":" . self::$password);
+        curl_setopt($this->curl, CURLOPT_TIMEOUT, 30);
+        curl_setopt($this->curl, CURLOPT_POST, 1);
+        curl_setopt($this->curl, CURLOPT_POSTFIELDS, http_build_query($data));
+        curl_setopt($this->curl, CURLOPT_RETURNTRANSFER, TRUE);
+    }
+    
+    private function authenticate() {
+        $this->curl = curl_init();
+        
+        // before authentication & authorization
+        if (!isset($_GET['code'])) {
+            // get token
+            $data = array(
+                'grant_type' => 'client_credentials',
+            );
+                        
+            $this->curlSetOpt("oauth2/token", $data);
+            
+            $data = array(
+                'access_token' => json_decode(curl_exec($this->curl))->access_token,
+            );
+            
+            $this->curlSetOpt("oauth2/resource", $data);
+            
+            // check api access & redirect to auth.sch.bme.hu for authorization
+            if (json_decode(curl_exec($this->curl))->success == true)
+                header("Location: " . $host . "site/login?response_type=code&client_id&". self::$username ."&state=" . sha1($_SERVER['REMOTE_ADDR'] . $_SERVER['HTTP_USER_AGENT']) . "&scope=" . self::$scope);
+        } else {
+            $data = array(
+                'grant_type'=>'authorization_code',
+                'code'=>$_GET['code'],
+            );
+            
+            $this->curlSetOpt("oauth2/token", $data);
+            $tokens = json_decode(curl_exec($this->curl));
+            if($tokens === null || !isset($tokens->access_token) || empty($tokens->access_token))
+                throw new Exception ("invalid token data");
+            
+            $this->tokens = $tokens;
+        }
+        
+        curl_close($this->curl);
+
+    }
+    
 }
-- 
GitLab