Duffer Derek

Current Path : /var/www/podiomigration.bitkit.dk/httpdocs/src/classes/Controllers/
Upload File :
Current File : /var/www/podiomigration.bitkit.dk/httpdocs/src/classes/Controllers/LoginController.php

<?php

/**
 * Created by PhpStorm.
 * User: sanju
 * Date: 6/6/18
 * Time: 10:45 AM
 */

namespace App\Controllers;


use App\Repository\General\PodioConfig;
use App\Repository\General\Log;
use Psr\Http\Message\ServerRequestInterface as Request;
use Slim\Views\Twig as View;
use Psr\Http\Message\ResponseInterface as Response;
use App\Repository\General\DB;
use PDO;

class LoginController
{
    public function authenticate(Request $request, Response $response, View $view)
    {

        $param = $request->getQueryParams();
        if (isset($_SESSION['user_id'])) {
            return $response->withRedirect('/workspace'); // already logged in
        }
        if (isset($param['code']) && !empty($param['code'])) {
            $code = $param['code'];
            \Podio::setup(PodioConfig::$PODIO_CLIENT_ID, PodioConfig::$PODIO_CLIENT_SECRET);
            $res = \Podio::authenticate('authorization_code', array('code' => $code, 'redirect_uri' => PodioConfig::$REDIRECT_URL));
            if ($res) {
                $user = \PodioUser::get();
                $podioAuthObject = \Podio::$oauth;


                /**
                 * Delete if already exist
                 */
                $sql = "DELETE FROM auth WHERE user=:user";
                $data_delete = array("user" => $user->user_id);
                $STHDELETE = DB::prepare($sql);
                $STHDELETE->execute($data_delete);


                /**
                 * Insert the new column into `auth` table
                 */
                $sql = "insert into auth (access_token,refresh_token,expire_time,start_time,end_time,`key`,`user`) 
                    values ( AES_ENCRYPT(:access_token,:secret),AES_ENCRYPT(:refresh_token,:secret),:expire_time,:start_time,:end_time,:key,:user)";

                $STH = DB::prepare($sql);
                $data = array(
                    'secret' => PodioConfig::$SECRET_KEY,
                    'access_token' => $podioAuthObject->access_token,
                    'refresh_token' => $podioAuthObject->refresh_token,
                    'expire_time' => time() + $podioAuthObject->expires_in,
                    'start_time' => time(), // rate limit count - start time
                    'end_time' => time() + (60 * 60),
                    'key' => 1,
                    'user' => $user->user_id
                );


                try {

                    $STH->execute($data);
                    // return $response->withRedirect('/home');
                    $_SESSION['podio_refresh_token'] = $podioAuthObject->refresh_token;
                    $_SESSION['user_id'] = $user->user_id;

                    return $response->withRedirect('/workspace');
                } catch (\Exception $e) {
                    Log::logError($e, "PDO ERROR", "LoginController");
                }
            }
        } else {
            return $response->withRedirect('https://podio.com/oauth/authorize?client_id=' . PodioConfig::$PODIO_CLIENT_ID . '&redirect_uri=' . PodioConfig::$REDIRECT_URL);
        }
    }

    public function logout($request, $response)
    {
        // Clear session
        session_unset();
        session_destroy();

        // Optionally restart session to reset ID
        session_start();
        session_regenerate_id(true);

        // Redirect to login
        return $response
            ->withHeader('Location', '/')
            ->withStatus(302);
    }
}

Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists