/**
  * Create a new command instance.
  *
  * @return void
  */
 public function __construct()
 {
     parent::__construct();
     if (config('df.managed')) {
         $this->cacheRoot = Managed::getCacheRoot();
     } else {
         $this->cacheRoot = storage_path('framework/cache');
     }
 }
Beispiel #2
0
 public function __construct($dsn = '', $username = '', $password = '')
 {
     $file = substr($dsn, 7);
     if (false === strpos($file, DIRECTORY_SEPARATOR)) {
         // no directories involved, store it where we want to store it
         if (config('df.standalone')) {
             $storage = config('df.db.sqlite_storage');
         } else {
             $storage = Managed::getStoragePath();
             $storage = rtrim($storage, DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR . 'databases';
         }
         if (!is_dir($storage)) {
             // Attempt
             @mkdir($storage);
         }
         if (!is_dir($storage)) {
             logger('Failed to access storage path ' . $storage);
             throw new InternalServerErrorException('Failed to access storage path.');
         }
         $dsn = 'sqlite:' . rtrim($storage, DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR . $file;
     }
     parent::__construct($dsn, $username, $password);
 }
Beispiel #3
0
|--------------------------------------------------------------------------
| Bind Important Interfaces
|--------------------------------------------------------------------------
|
| Next, we need to bind some important interfaces into the container so
| we will be able to resolve them when needed. The kernels serve the
| incoming requests to this application from both the web and CLI.
|
*/
$app->singleton('Illuminate\\Contracts\\Http\\Kernel', 'DreamFactory\\Http\\Kernel');
$app->singleton('Illuminate\\Contracts\\Console\\Kernel', 'DreamFactory\\Console\\Kernel');
$app->singleton('Illuminate\\Contracts\\Debug\\ExceptionHandler', 'DreamFactory\\Exceptions\\Handler');
$app->configureMonologUsing(function ($monolog) {
    $logFile = storage_path('logs/dreamfactory.log');
    if (config('df.managed')) {
        $logFile = Managed::getLogFile();
    }
    $mode = config('app.log');
    if ($mode === 'syslog') {
        $monolog->pushHandler(new SyslogHandler('dreamfactory'));
    } else {
        if ($mode === 'single') {
            $handler = new StreamHandler($logFile);
        } else {
            if ($mode === 'errorlog') {
                $handler = new ErrorLogHandler();
            } else {
                $handler = new RotatingFileHandler($logFile, 5);
            }
        }
        $monolog->pushHandler($handler);
 /**
  * Create a new command instance.
  */
 public function __construct()
 {
     parent::__construct();
     $this->cacheRoot = Managed::getCacheRoot();
 }
 protected function setDriver($config)
 {
     $diskName = null;
     if (empty($config) || !isset($config['container'])) {
         $diskName = Config::get('filesystems.default');
     } else {
         $diskName = $config['container'];
     }
     if (empty($diskName)) {
         throw new InternalServerErrorException('Local file service driver/disk not configured. Please check configuration for file service - ' . $this->name . '.');
     }
     $disks = Config::get('filesystems.disks');
     if (!array_key_exists($diskName, $disks)) {
         throw new InternalServerErrorException('Local file service disk - ' . $diskName . ' not found.Please check configuration for file service - ' . $this->name . '.');
     }
     $disk = ArrayUtils::get($disks, $diskName);
     //  Replace any private lookups
     Session::replaceLookups($disk, true);
     if (!isset($disk['driver'])) {
         throw new InternalServerErrorException('Mis-configured disk - ' . $diskName . '. Driver not specified.');
     }
     switch ($disk['driver']) {
         case 'local':
             if (config('df.standalone')) {
                 $root = $disk['root'];
             } else {
                 $root = Managed::getStoragePath(config('df.local_file_service_container'));
             }
             if (!is_dir($root)) {
                 mkdir($root, 0775);
             }
             if (empty($root)) {
                 throw new InternalServerErrorException('Mis-configured disk - ' . $diskName . '. Root path not specified.');
             }
             if (!is_dir($root)) {
                 throw new InternalServerErrorException('Mis-configured disk - ' . $diskName . '. Root path not found.');
             }
             $this->driver = new LocalFileSystem($root);
             break;
         case 's3':
             $this->container = ArrayUtils::get($disk, 'bucket', ArrayUtils::get($disk, 'container'));
             ArrayUtils::set($disk, 'container', $this->container);
             if (empty($this->container)) {
                 throw new InternalServerErrorException('S3 file service bucket/container not specified. Please check configuration for file service - ' . $this->name);
             }
             $this->driver = new S3FileSystem($disk);
             break;
         case 'rackspace':
             $this->container = ArrayUtils::get($disk, 'container');
             if (empty($this->container)) {
                 throw new InternalServerErrorException('Azure blob container not specified. Please check configuration for file service - ' . $this->name);
             }
             $this->driver = new OpenStackObjectStorageSystem($disk);
             break;
         case 'azure':
             $this->container = ArrayUtils::get($disk, 'container');
             if (empty($this->container)) {
                 throw new InternalServerErrorException('Azure blob container not specified. Please check configuration for file service - ' . $this->name);
             }
             $this->driver = new AzureBlobFileSystem($disk);
             break;
         default:
             break;
     }
 }
Beispiel #6
0
 /**
  * Handle an incoming request.
  *
  * @param  \Illuminate\Http\Request $request
  * @param  \Closure                 $next
  *
  * @return mixed
  */
 public function handle($request, Closure $next)
 {
     //Get the Console API Key
     $consoleApiKey = AccessCheck::getConsoleApiKey($request);
     // Get limits
     if (config('df.standalone') === true || $consoleApiKey === Managed::getConsoleKey()) {
         return $next($request);
     } else {
         $limits = Managed::getLimits();
         // The limits array comes across from the console as a bunch of Std Objects, need to turn it back
         // into an array
         $limits['api'] = (array) $limits['api'];
         foreach (array_keys($limits['api']) as $key) {
             $limits['api'][$key] = (array) $limits['api'][$key];
         }
     }
     if (!empty($limits) && is_null($this->_getServiceName()) === false) {
         $this->_inUnitTest = \Config::get('api_limits_test');
         $userName = $this->_getUser(Session::getCurrentUserId());
         $userRole = $this->_getRole(Session::getRoleId());
         $apiName = $this->_getApiKey(Session::getApiKey());
         $serviceName = $this->_getServiceName();
         $clusterName = Managed::getClusterName();
         // Build the list of API Hits to check
         $apiKeysToCheck = ['cluster.default' => 0, 'instance.default' => 0];
         $serviceKeys[$serviceName] = 0;
         if (is_null($userRole) === false) {
             $serviceKeys[$serviceName . '.' . $userRole] = 0;
         }
         if (is_null($userName) === false) {
             $serviceKeys[$serviceName . '.' . $userName] = 0;
         }
         if (is_null($apiName) === false) {
             $apiKeysToCheck[$apiName] = 0;
             if (is_null($userRole) === false) {
                 $apiKeysToCheck[$apiName . '.' . $userRole] = 0;
             }
             if (is_null($userName) === false) {
                 $apiKeysToCheck[$apiName . '.' . $userName] = 0;
             }
             foreach ($serviceKeys as $key => $value) {
                 $apiKeysToCheck[$apiName . '.' . $key] = $value;
             }
         }
         if (is_null($clusterName) === false) {
             $apiKeysToCheck[$clusterName] = 0;
             if (is_null($userRole) === false) {
                 $apiKeysToCheck[$clusterName . '.' . $userRole] = 0;
             }
             if (is_null($userName) === false) {
                 $apiKeysToCheck[$clusterName . '.' . $userName] = 0;
             }
             foreach ($serviceKeys as $key => $value) {
                 $apiKeysToCheck[$clusterName . '.' . $key] = $value;
             }
         }
         if (is_null($userName) === false) {
             $apiKeysToCheck[$userName] = 0;
         }
         if (is_null($userRole) === false) {
             $apiKeysToCheck[$userRole] = 0;
         }
         $apiKeysToCheck = array_merge($apiKeysToCheck, $serviceKeys);
         $timePeriods = ['minute', 'hour', 'day', '7-day', '30-day'];
         $overLimit = false;
         try {
             foreach (array_keys($apiKeysToCheck) as $key) {
                 foreach ($timePeriods as $period) {
                     $keyToCheck = $key . '.' . $period;
                     if (array_key_exists($keyToCheck, $limits['api']) === true) {
                         $cacheValue = \Cache::get($keyToCheck, 0);
                         $cacheValue++;
                         \Cache::put($keyToCheck, $cacheValue, $limits['api'][$keyToCheck]['period']);
                         if ($cacheValue > $limits['api'][$keyToCheck]['limit']) {
                             $overLimit = true;
                         }
                     }
                 }
             }
         } catch (\Exception $e) {
             return ResponseFactory::getException(new InternalServerErrorException('Unable to update cache'), $request);
         }
         if ($overLimit === true) {
             return ResponseFactory::getException(new TooManyRequestsException('Specified connection limit exceeded'), $request);
         }
     }
     return $next($request);
 }
 /**
  * @param Request $request
  * @param Closure $next
  *
  * @return array|mixed|string
  */
 public function handle($request, Closure $next)
 {
     try {
         static::setExceptions();
         //Get the api key.
         $apiKey = static::getApiKey($request);
         Session::setApiKey($apiKey);
         $appId = App::getAppIdByApiKey($apiKey);
         //Get the JWT.
         $token = static::getJwt($request);
         Session::setSessionToken($token);
         //Get the Console API Key
         $consoleApiKey = static::getConsoleApiKey($request);
         //Check for basic auth attempt.
         $basicAuthUser = $request->getUser();
         $basicAuthPassword = $request->getPassword();
         if (config('df.managed') && !empty($consoleApiKey) && $consoleApiKey === Managed::getConsoleKey()) {
             //DFE Console request
             return $next($request);
         } elseif (!empty($basicAuthUser) && !empty($basicAuthPassword)) {
             //Attempting to login using basic auth.
             Auth::onceBasic();
             /** @var User $authenticatedUser */
             $authenticatedUser = Auth::user();
             if (!empty($authenticatedUser)) {
                 $userId = $authenticatedUser->id;
                 Session::setSessionData($appId, $userId);
             } else {
                 throw new UnauthorizedException('Unauthorized. User credentials did not match.');
             }
         } elseif (!empty($token)) {
             //JWT supplied meaning an authenticated user session/token.
             try {
                 JWTAuth::setToken($token);
                 /** @type Payload $payload */
                 $payload = JWTAuth::getPayload();
                 JWTUtilities::verifyUser($payload);
                 $userId = $payload->get('user_id');
                 Session::setSessionData($appId, $userId);
             } catch (TokenExpiredException $e) {
                 JWTUtilities::clearAllExpiredTokenMaps();
                 if (!static::isException($request)) {
                     throw new UnauthorizedException($e->getMessage());
                 }
             } catch (TokenBlacklistedException $e) {
                 throw new ForbiddenException($e->getMessage());
             } catch (TokenInvalidException $e) {
                 throw new BadRequestException('Invalid token: ' . $e->getMessage(), 401);
             }
         } elseif (!empty($apiKey)) {
             //Just Api Key is supplied. No authenticated session
             Session::setSessionData($appId);
         } elseif (static::isException($request)) {
             //Path exception.
             return $next($request);
         } else {
             throw new BadRequestException('Bad request. No token or api key provided.');
         }
         if (static::isAccessAllowed()) {
             return $next($request);
         } elseif (static::isException($request)) {
             //API key and/or (non-admin) user logged in, but if access is still not allowed then check for exception case.
             return $next($request);
         } else {
             if (!Session::isAuthenticated()) {
                 throw new UnauthorizedException('Unauthorized.');
             } else {
                 throw new ForbiddenException('Access Forbidden.');
             }
         }
     } catch (\Exception $e) {
         return ResponseFactory::getException($e, $request);
     }
 }
Beispiel #8
0
<?php

use DreamFactory\Managed\Support\Managed;
return ['default' => env('CACHE_DRIVER', 'file'), 'stores' => ['apc' => ['driver' => 'apc'], 'array' => ['driver' => 'array'], 'database' => ['driver' => 'database', 'table' => 'cache', 'connection' => null], 'file' => ['driver' => 'file', 'path' => env('DF_MANAGED') ? Managed::getCachePath() : storage_path('framework/cache')], 'memcached' => ['driver' => 'memcached', 'servers' => [['host' => '127.0.0.1', 'port' => 11211, 'weight' => 100]]], 'redis' => ['driver' => 'redis', 'connection' => 'default']], 'prefix' => env('DF_MANAGED') ? Managed::getCacheKeyPrefix() : 'dreamfactory'];
Beispiel #9
0
<?php

return ['default' => env('CACHE_DRIVER', 'file'), 'stores' => ['apc' => ['driver' => 'apc'], 'array' => ['driver' => 'array'], 'database' => ['driver' => 'database', 'table' => 'cache', 'connection' => null], 'file' => ['driver' => 'file', 'path' => DreamFactory\Managed\Support\Managed::getCachePath()], 'memcached' => ['driver' => 'memcached', 'servers' => [['host' => '127.0.0.1', 'port' => 11211, 'weight' => 100]]], 'redis' => ['driver' => 'redis', 'connection' => 'default']], 'prefix' => \DreamFactory\Managed\Support\Managed::getCacheKeyPrefix()];