blob: 0f71b787d5ce8cc7ccba44579a54731c8d428566 [file] [log] [blame]
<?php
/**
* Copyright 2010-2014 baas-platform.com, Pty Ltd. or its affiliates. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License").
* You may not use this file except in compliance with the License.
* A copy of the License is located at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* or in the "license" file accompanying this file. This file is distributed
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
* express or implied. See the License for the specific language governing
* permissions and limitations under the License.
*/
namespace Apache\Usergrid\Native;
use Apache\Usergrid\Api\Usergrid;
use Apache\Usergrid\Guzzle\Plugin\Oauth2\GrantType\ClientCredentials;
use Apache\Usergrid\Guzzle\Plugin\Oauth2\GrantType\PasswordCredentials;
use Apache\Usergrid\Guzzle\Plugin\Oauth2\GrantType\RefreshToken;
use Apache\Usergrid\Guzzle\Plugin\Oauth2\Oauth2Plugin;
use Guzzle\Http\Client;
/**
* Class UsergridBootstrapper
*
* @package Apache/Usergrid
* @version 1.0.0
* @author Jason Kristian <jasonkristian@gmail.com>
* @license Apache License, Version 2.0
* @copyright (c) 2008-2014, Baas Platform Pty. Ltd
* @link http://baas-platform.com
*/
class UsergridBootstrapper
{
/**
* The Usergrid configuration.
*
* @var array
*/
protected $config;
/**
* The Oauth2 Plugin.
*
* @var \Apache\Usergrid\Guzzle\Plugin\Oauth2\Oauth2Plugin
*/
protected $oauth2Plugin = null;
/**
* Constructor.
*
* @param mixed $config
* @return \Apache\Usergrid\Native\UsergridBootstrapper
*/
public function __construct($config = null)
{
$this->config = $config ?: new ConfigRepository($config);
}
/**
* Creates the Usergrid instance.
*
* @return \Apache\Usergrid\Api\Usergrid
*/
public function createUsergrid()
{
$baseUrl = array_get($this->config, 'usergrid.url');
$orgName = array_get($this->config, 'usergrid.orgName');
$appName = array_get($this->config, 'usergrid.appName');
$manifestPath = array_get($this->config, 'usergrid.manifestPath');
$version = array_get($this->config, 'usergrid.version');
$enable_oauth2_plugin = array_get($this->config, 'usergrid.enable_oauth2_plugin');
//check if user wants to manage there own Oauth 2 auth flow
if ($enable_oauth2_plugin) {
$this->createOauth2Plugin();
return new Usergrid($orgName, $appName, $manifestPath, $version, $baseUrl, $this->oauth2Plugin);
} else {
return new Usergrid($orgName, $appName, $manifestPath, $version, $baseUrl);
}
}
private function createOauth2Plugin()
{
$base_url = array_get($this->config, 'usergrid.url');
$client_id = array_get($this->config, 'usergrid.clientId');
$client_secret = array_get($this->config, 'usergrid.clientSecret');
$grant_type = array_get($this->config, 'usergrid.grant_type');
$auth_type = array_get($this->config, 'usergrid.auth_type');
$username = array_get($this->config, 'usergrid.username');
$password = array_get($this->config, 'usergrid.password');
$org_name = array_get($this->config, 'usergrid.orgName');
$app_name = array_get($this->config, 'usergrid.appName');
if ($auth_type == 'organization') {
$url = $base_url . '/management/token';
} elseif ($auth_type == 'application') {
$url = $base_url . '/' . $org_name . '/' . $app_name . '/token';
}
$oauth2Client = new Client($url);
if ($grant_type == 'client_credentials') {
$config = [
'client_id' => $client_id,
'client_secret' => $client_secret,
];
$grantType = new ClientCredentials($oauth2Client, $config);
$refreshTokenGrantType = new RefreshToken($oauth2Client, $config);
$this->oauth2Plugin = new Oauth2Plugin($grantType, $refreshTokenGrantType);
} elseif ($grant_type == 'password') {
$config = [
'username' => $username,
'password' => $password,
'client_id' => $client_id,
'client_secret' => $client_secret
];
$grantType = new PasswordCredentials($oauth2Client, $config);
$refreshTokenGrantType = new RefreshToken($oauth2Client, $config);
$this->oauth2Plugin = new Oauth2Plugin($grantType, $refreshTokenGrantType);
}
}
}