Commit c710bdef authored by Mark Harding's avatar Mark Harding
Browse files

Merge branch 'checkout-oauth' into 'master'

Checkout oauth

See merge request !118
parents ef9255df 8634a913
Loading
Loading
Loading
Loading
+15 −8
Original line number Original line Diff line number Diff line
<?php
<?php
/**
/**
 * Minds API - pseudo router
 * Minds API - pseudo router.
 *
 *
 * @version 1
 * @version 1
 *
 * @author Mark Harding
 * @author Mark Harding
 *
 *
 * @SWG\Swagger(
 * @SWG\Swagger(
@@ -37,33 +38,39 @@
 * )
 * )
 * @SWG\Info(title="Minds Public API", version="1.0")
 * @SWG\Info(title="Minds Public API", version="1.0")
 */
 */

namespace Minds\Controllers\api;
namespace Minds\Controllers\api;


use Minds\Core;
use Minds\Interfaces;
use Minds\Interfaces;
use Minds\Api\Factory;
use Minds\Api\Factory;


class api implements Interfaces\Api
class api implements Interfaces\Api
{
{

    /** @var Request $request */
    /** @var Request $request **/
    private $request;
    private $request;


    /** @var Response $response **/
    /** @var Response $response */
    private $response;
    private $response;


    public function setRequest($request)
    public function setRequest($request)
    {
    {
        $this->request = $request;
        $this->request = $request;

        return $this;
        return $this;
    }
    }


    public function setResponse($response)
    public function setResponse($response)
    {
    {
        $this->response = $response;
        $this->response = $response;

        return $this;
        return $this;
    }
    }


    public function options($pages)
    {
        return Factory::build($pages, $this->request, $this->response);
    }

    public function get($pages)
    public function get($pages)
    {
    {
        return Factory::build($pages, $this->request, $this->response);
        return Factory::build($pages, $this->request, $this->response);
+115 −0
Original line number Original line Diff line number Diff line
<?php

namespace Minds\Controllers\api\v2\sendwyre;

use Minds\Core\Session;
use Minds\Core\SendWyre\SendWyreAccount;
use Minds\Core\SendWyre\Manager;
use Minds\Interfaces\Api;
use Minds\Core\Di\Di;
use Minds\Api\Factory;

class accounts implements Api
{
    //GET /api/v2/sendwyre/accounts
    public function get($pages)
    {
        /** @var \Minds\Core\SendWyre\Manager $manager */
        $manager = Di::_()->get('SendWyre\Manager');

        $user = Session::getLoggedInUser();

        try {
            $account = $manager->get($user->guid);
            if (!$account) {
                return Factory::response([]);
            }

            return Factory::response([
                'status' => 'success',
                'account' => $account->export(),
            ]);
        } catch (\Exception $e) {
            return Factory::response([
                'status' => 'error',
                'message' => $e->getMessage(),
            ]);
        }
    }

    public function options($pages)
    {
        return Factory::response([]);
    }

    public function post($pages)
    {
        return Factory::response([]);
    }

    //PUT /api/v2/sendwyre/accounts/:sendwyre_account_id
    public function put($pages)
    {
        if (!isset($pages[0])) {
            return Factory::response(['status' => 'error', 'message' => 'sendwyre_account_id must be provided']);
        }
        $user = Session::getLoggedInUser();
        $accountId = $pages[0];

        /** @var \Minds\Core\SendWyre\Manager $manager */
        $manager = Di::_()->get('SendWyre\Manager');
        try {
            $account = (new SendWyreAccount())
                ->setUserGuid($user->guid)
                ->setSendWyreAccountId($accountId);

            $manager->save($account);

            return Factory::response([
                    'status' => 'success',
                    'account' => $account->export(),
                ]);
        } catch (\Exception $e) {
            return Factory::response([
                'status' => 'error',
                'message' => $e->getMessage(),
            ]);
        }
    }

    //DELETE /api/v2/sendwyre/accounts/:user_guid
    public function delete($pages)
    {
        if (!isset($pages[0])) {
            return Factory::response(['status' => 'error', 'message' => 'user_guid must be provided']);
        }

        $user = Session::getLoggedInUser();
        $userGuid = $pages[0];

        if (!Session::isAdmin() && $user->guid != $userGuid) {
            return Factory::response([
                'status' => 'error',
                'message' => 'Insufficient permissions',
            ]);
        }
        /** @var \Minds\Core\SendWyre\Manager $manager */
        $manager = Di::_()->get('SendWyre\Manager');
        try {
            $account = (new SendWyreAccount())
                ->setUserGuid($userGuid);

            $result = $manager->delete($account);

            return Factory::response([
                    'status' => 'success',
                    'done' => true,
                ]);
        } catch (\Exception $e) {
            return Factory::response([
                'status' => 'error',
                'message' => $e->getMessage(),
            ]);
        }
    }
}
+42 −0
Original line number Original line Diff line number Diff line
<?php

namespace Minds\Controllers;

use Minds;
use Minds\Api\Factory;
use Minds\Interfaces;
use Minds\Core\Di\Di;
use Minds\Common\Cookie;
use Minds\Core;

class checkout implements Interfaces\Api
{
    public function get($pages)
    {
        $checkoutKey = ['checkout_key' => base64_encode(openssl_random_pseudo_bytes(8)), 'usd' => $_GET['usd'] ?? 25];
        $cookie = new Cookie();
        $cookie
            ->setName('checkout_key')
            ->setValue($checkoutKey['checkout_key'])
            ->setExpire(time() + 300)
            ->setPath('/')
            ->setHttpOnly(true)
            ->create();
        Core\page::forward(Di::_()->get('Config')->get('checkout_url').'authorize?'.http_build_query($checkoutKey));
    }

    public function post($pages)
    {
        return Factory::response([]);
    }

    public function put($pages)
    {
        return Factory::response([]);
    }

    public function delete($pages)
    {
        return Factory::response([]);
    }
}
+61 −0
Original line number Original line Diff line number Diff line
<?php

namespace Minds\Controllers\oauth2;

use Minds\Core;
use Minds\Interfaces;
use Minds\Core\Di\Di;
use Minds\Core\Session;
use Minds\Core\OAuth\Entities\UserEntity;
use Zend\Diactoros\ServerRequestFactory;
use Zend\Diactoros\Response\HtmlResponse;
use Zend\Diactoros\Response\SapiEmitter;

class Implicit extends core\page implements Interfaces\page
{
    public function get($pages)
    {
        $request = ServerRequestFactory::fromGlobals();
        $response = new HtmlResponse('');
        $user = Session::getLoggedinUser();
        if (!$_GET['checkout_key'] || $_GET['checkout_key'] != $_COOKIE['checkout_key'] || $user === null) {
            \forward('/');
        }

        $server = Di::_()->get('OAuth\Server\Authorization');
        try {
            $result = $server->validateAuthorizationRequest($request);

            $entity = new UserEntity();
            $entity->setIdentifier($user->getGuid());
            $result->setUser($entity);
            $result->setAuthorizationApproved(true);
            //return a redirect with a jwt token
            $response = $server->completeAuthorizationRequest($result, $response);
        } catch (OAuthServerException $exception) {
            $response = $exception->generateHttpResponse($response);
        } catch (\Exception $exception) {
            $body = [
                'status' => 'error',
                'error' => $exception->getMessage(),
                'message' => $exception->getMessage(),
            ];
            $response = new HtmlResponse($exception->getMessage());
        }

        $emitter = new SapiEmitter();
        $emitter->emit($response);
    }

    public function post($pages)
    {
    }

    public function put($pages)
    {
    }

    public function delete($pages)
    {
    }
}
+1 −0
Original line number Original line Diff line number Diff line
@@ -20,6 +20,7 @@ class Minds extends base
        Helpdesk\Module::class,
        Helpdesk\Module::class,
        Onboarding\Module::class,
        Onboarding\Module::class,
        Subscriptions\Module::class,
        Subscriptions\Module::class,
        SendWyre\Module::class,
        Suggestions\Module::class,
        Suggestions\Module::class,
        Reports\Module::class,
        Reports\Module::class,
        VideoChat\Module::class,
        VideoChat\Module::class,
Loading