Exemple #1
1
 public function addToInjector(Injector $injector)
 {
     foreach ($this->shares as $share) {
         $injector->share($share);
     }
     foreach ($this->aliases as $original => $alias) {
         $injector->alias($original, $alias);
     }
     foreach ($this->definitions as $name => $args) {
         $injector->define($name, $args);
     }
     foreach ($this->params as $param => $value) {
         $injector->defineParam($param, $value);
     }
     foreach ($this->delegates as $param => $callable) {
         $injector->delegate($param, $callable);
     }
     foreach ($this->prepares as $class => $callable) {
         $injector->prepare($class, $callable);
     }
 }
 /**
  * {@inheritdoc}
  */
 public function setClassParameters($className, $arguments)
 {
     foreach ($arguments as $key => $value) {
         unset($arguments[$key]);
         $arguments[':' . $key] = $value;
     }
     $this->auryn->define($className, $arguments);
 }
 /**
  *
  * {@inheritDoc}
  *
  * @see \Spark\Configuration\ConfigurationInterface::apply()
  */
 public function apply(Injector $injector)
 {
     $host = $this->env['DB_HOST'];
     $username = $this->env['DB_USERNAME'];
     $password = $this->env['DB_PASSWORD'];
     $name = $this->env['DB_DBNAME'];
     $port = $this->env['DB_PORT'];
     $dsn = "mysql:dbname={$name};host={$host};port={$port}";
     $injector->define('PDO', [':dsn' => $dsn, ':username' => $username, ':passwd' => $password]);
     $injector->define('FluentPDO', [':pdo' => $injector->make('PDO')]);
 }
 /**
  * Applies a configuration set to a dependency injector.
  *
  * @param Injector $injector
  */
 public function apply(Injector $injector)
 {
     // JWT
     $injector->define('Equip\\Auth\\Jwt\\Configuration', [':publicKey' => 'uhklzsdv89ywrahu', ':ttl' => 3600, ':algorithm' => 'HS256']);
     $injector->alias('Equip\\Auth\\Jwt\\GeneratorInterface', 'Equip\\Auth\\Jwt\\FirebaseGenerator');
     $injector->alias('Equip\\Auth\\Jwt\\ParserInterface', 'Equip\\Auth\\Jwt\\FirebaseParser');
     // Tokens
     $injector->alias(TokenExtractorInterface::class, TokenHeaderExtractor::class);
     $injector->define(TokenHeaderExtractor::class, [':header' => 'Bearer']);
     // Credentials
     $injector->alias(CredentialsExtractorInterface::class, CredentialsBodyExtractor::class);
     // Adapter
     $injector->alias(AdapterInterface::class, JWTAdapter::class);
 }
 /**
  *
  * {@inheritDoc}
  *
  * @see \Spark\Configuration\ConfigurationInterface::apply()
  */
 public function apply(Injector $injector)
 {
     $injector->alias(ExtractorInterface::class, HeaderExtractor::class);
     $injector->define(HeaderExtractor::class, [':header' => 'token']);
     $injector->alias(\Spark\Auth\Credentials\ExtractorInterface::class, BodyExtractor::class);
     $injector->alias(AdapterInterface::class, AuthAdapter::class);
 }
 /**
  * @inheritDoc
  */
 public function apply(Injector $injector)
 {
     $injector->define(RelayBuilder::class, ['resolver' => 'Spark\\Resolver\\ResolverInterface']);
     $injector->delegate('Relay\\Relay', function (RelayBuilder $builder, Middleware $queue) {
         return $builder->newInstance($queue);
     });
 }
Exemple #7
0
 function setMedoo()
 {
     $injector = new Injector();
     $injector->share('medoo');
     $injector->define('medoo', [':options' => $this->databaseconfig]);
     $this->medoodb = $injector->make('medoo');
 }
 /**
  * @inheritDoc
  */
 public function apply(Injector $injector)
 {
     $injector->define(RelayBuilder::class, ['resolver' => ResolverInterface::class]);
     $factory = function (RelayBuilder $builder, MiddlewareSet $queue) {
         return $builder->newInstance($queue);
     };
     $injector->delegate(Relay::class, $factory);
 }
 public function apply(Injector $injector)
 {
     //START: auth
     $injector->alias(AdapterInterface::class, \trejeraos\SimpleServerMonitor\Auth\FooAdapter::class);
     $injector->alias(AuthHandler::class, FooAuthHandler::class);
     $injector->share(FooAuthHandler::class);
     // get auth token
     $injector->alias(TokenExtractorInterface::class, QueryExtractor::class);
     $injector->define(QueryExtractor::class, [':parameter' => 'tok']);
     // get auth credentials
     $injector->alias(CredentialsExtractorInterface::class, BodyExtractor::class);
     $injector->define(BodyExtractor::class, [':identifier' => 'user', ':password' => 'password']);
     // share valid auth token class
     $injector->share(\trejeraos\SimpleServerMonitor\Auth\ValidTokens::class);
     //END: auth
     // share global config class
     $injector->share(\trejeraos\SimpleServerMonitor\Data\Configuration::class);
 }
Exemple #10
0
 /**
  * @inheritDoc
  */
 public function apply(Injector $injector)
 {
     $injector->define(Loader::class, [':filepaths' => $this->envfile]);
     $injector->share(Env::class);
     $injector->prepare(Env::class, function (Env $env, Injector $injector) {
         $loader = $injector->make(Loader::class);
         $values = $loader->parse()->toArray();
         return $env->withValues($values);
     });
 }
Exemple #11
0
 private function registerRouterServices(Injector $injector)
 {
     $injector->share(RouteCollector::class);
     $injector->define(RouteCollector::class, ['routeParser' => StdRouteParser::class, 'dataGenerator' => GcbGenerator::class]);
     $injector->share(Router\FastRouteRouter::class);
     $injector->define(Router\FastRouteRouter::class, ['collector' => RouteCollector::class, ':dispatcherCb' => function (array $data) use($injector) {
         return $injector->make(GcbDispatcher::class, [':data' => $data]);
     }]);
     $injector->alias(Router\Router::class, Router\FastRouteRouter::class);
     $injector->share(ResolverChain::class);
     $injector->prepare(ResolverChain::class, function (ResolverChain $chain, Injector $injector) {
         $chain->add($injector->make(ResponseResolver::class));
         $chain->add($injector->make(CallableResolver::class));
         $chain->add($injector->make(ControllerActionResolver::class));
     });
     $injector->share(InjectorExecutableResolver::class);
     $injector->define(InjectorExecutableResolver::class, ['resolver' => ResolverChain::class]);
     $injector->alias(HandlerResolver::class, InjectorExecutableResolver::class);
 }
 private function applyProviderConfig(Injector $injector, array $env)
 {
     $config = [];
     foreach ($env as $key => $value) {
         list($provider, $key) = explode('_', strtolower($key), 2);
         $key = $this->toCamelCase($key);
         $config[$provider][$key] = $value;
     }
     $injector->define(__NAMESPACE__ . '\\ProviderConfig', [':config' => $config]);
 }
 /**
  * @inheritDoc
  */
 public function apply(Injector $injector)
 {
     $injector->alias('Equip\\Auth\\Token\\ExtractorInterface', 'Equip\\Auth\\Token\\QueryExtractor');
     $injector->define('Equip\\Auth\\Token\\QueryExtractor', [':parameter' => 'tk']);
     $injector->alias('Equip\\Auth\\Credentials\\ExtractorInterface', 'Equip\\Auth\\Credentials\\BodyExtractor');
     $injector->alias('Equip\\Auth\\AdapterInterface', 'Equip\\Project\\Auth\\Adapter');
     $dir = dirname(dirname(__DIR__));
     $dotenv = new Dotenv($dir);
     $dotenv->load();
     $dotenv->required(['DB_HOST', 'DB_NAME', 'DB_USER', 'DB_PASS']);
 }
 /**
  * Applies a configuration set to a dependency injector.
  *
  * @param Injector $injector
  */
 public function apply(Injector $injector)
 {
     //Specify token parameter from query string
     $injector->define(QueryExtractor::class, [':parameter' => 'al']);
     //Use Query Extractor to grab auth token
     $injector->alias(\Spark\Auth\Token\ExtractorInterface::class, QueryExtractor::class);
     //Use Json Extractor to grab credentials
     $injector->alias(\Spark\Auth\Credentials\ExtractorInterface::class, JsonExtractor::class);
     //Specify custom auth adapter to use
     $injector->alias(AdapterInterface::class, Adapter::class);
 }
 function testValidControllerActionResultsInRightCallback()
 {
     $handler = HandlerWithMethod::class . '#action';
     $val = new \stdClass();
     $val->action = null;
     $injector = new Injector();
     $injector->define(HandlerWithMethod::class, [':val' => $val]);
     $resolver = new ControllerActionResolver($injector, $this->emitter);
     $cb = $resolver->resolve($this->request, $handler);
     $cb($this->getMock(ServerRequestInterface::class));
     $this->assertSame('invoked', $val->action);
 }
/**
 * @param array $implementations
 * @param array $shareClasses
 * @return Provider
 */
function createProvider($implementations = array(), $shareClasses = array())
{
    $provider = new Injector();
    $provider->define('GithubService\\GithubArtaxService\\GithubArtaxService', [':userAgent' => 'Danack_test']);
    $provider->prepare('Amp\\Artax\\Client', 'prepareArtaxClient');
    $standardImplementations = ['GithubService\\GithubService' => 'DebugGithub', 'Amp\\Artax\\AsyncClient' => 'Amp\\Artax\\AsyncClient', 'Amp\\Reactor' => 'Amp\\NativeReactor', 'ArtaxServiceBuilder\\ResponseCache' => 'ArtaxServiceBuilder\\ResponseCache\\NullResponseCache', 'PSR\\Cache' => 'PSR\\Cache\\APCCache', 'Amp\\Addr\\Cache' => 'Amp\\Addr\\MemoryCache'];
    $standardShares = ['Amp\\Reactor' => 'Amp\\Reactor'];
    $provider->delegate('Amp\\Artax\\Client', 'createClient');
    foreach ($standardImplementations as $interface => $implementation) {
        if (array_key_exists($interface, $implementations)) {
            if (is_object($implementations[$interface]) == true) {
                $provider->alias($interface, get_class($implementations[$interface]));
                $provider->share($implementations[$interface]);
            } else {
                $provider->alias($interface, $implementations[$interface]);
            }
            unset($implementations[$interface]);
        } else {
            if (is_object($implementation)) {
                $implementation = get_class($implementation);
            }
            $provider->alias($interface, $implementation);
        }
    }
    foreach ($implementations as $class => $implementation) {
        if (is_object($implementation) == true) {
            $provider->alias($class, get_class($implementation));
            $provider->share($implementation);
        } else {
            $provider->alias($class, $implementation);
        }
    }
    foreach ($standardShares as $class => $share) {
        if (array_key_exists($class, $shareClasses)) {
            $provider->share($shareClasses[$class]);
            unset($shareClasses[$class]);
        } else {
            $provider->share($share);
        }
    }
    foreach ($shareClasses as $class => $share) {
        $provider->share($share);
    }
    $provider->share($provider);
    //YOLO
    return $provider;
}
Exemple #17
0
 public function testRendering()
 {
     /** @var ViewParser $view */
     /** @var Dispatcher $dispatcher */
     $dispatcher = (new Injector())->make('Minute\\Event\\Dispatcher');
     $dispatcher->listen('one.plus.one', function (ViewEvent $event) {
         $event->setContent('2');
     });
     $injector = new Injector();
     $injector->define('Dispatcher', [$dispatcher]);
     $injector->share($dispatcher);
     $view = $injector->make('Minute\\View\\ViewParser', ['foo' => 'bar']);
     $view->loadTemplate('A\\HasEvent');
     $output = $view->render();
     $this->assertEquals('<html><body>1 + 1 = 2.</body></html>', $output, 'Output is rendering correctly');
     $view->setHelpers([new Helper('D/e', Helper::POSITION_BODY)]);
     $output = $view->render();
     $this->assertEquals('<html><body>1 + 1 = 2.[Helper 1!]</body></html>', $output, 'Output is rendering correctly');
 }
 public function apply(Injector $injector)
 {
     $injector->define(Engine::class, [':directory' => __DIR__ . '/../../templates']);
     $injector->prepare(Engine::class, [$this, 'prepareTemplates']);
 }
 /**
  * @inheritDoc
  */
 public function apply(Injector $injector)
 {
     $injector->alias(ResolverInterface::class, AurynResolver::class);
     $injector->define(AurynResolver::class, [':injector' => $injector]);
 }
 public function apply(Injector $injector)
 {
     $injector->define(Application::class, [':name' => 'Equip Console', ':version' => '0.1']);
 }
Exemple #21
0
use Kelunik\Template\TemplateService;
use function Aerys\root;
use function Aerys\router;
use function Aerys\session;
use function Amp\reactor;
$injector = new Injector();
$injector->alias("Kelunik\\Chat\\Storage\\MessageStorage", "Kelunik\\Chat\\Storage\\MysqlMessageStorage");
$injector->alias("Kelunik\\Chat\\Storage\\PingStorage", "Kelunik\\Chat\\Storage\\MysqlPingStorage");
$injector->alias("Kelunik\\Chat\\Storage\\RoomStorage", "Kelunik\\Chat\\Storage\\MysqlRoomStorage");
$injector->alias("Kelunik\\Chat\\Storage\\UserStorage", "Kelunik\\Chat\\Storage\\MysqlUserStorage");
$injector->alias("Kelunik\\Chat\\Events\\EventSub", "Kelunik\\Chat\\Events\\RedisEventSub");
$injector->alias("Kelunik\\Chat\\Search\\Messages\\MessageSearch", "Kelunik\\Chat\\Search\\Messages\\ElasticSearch");
$injector->prepare("Kelunik\\Template\\TemplateService", function (TemplateService $service) {
    $service->setBaseDirectory(__DIR__ . "/../res/html");
});
$injector->define("Kelunik\\Chat\\Search\\Messages\\ElasticSearch", [":host" => config("elastic.host"), ":port" => config("elastic.port")]);
$injector->share($injector);
$injector->share("Kelunik\\Template\\TemplateService");
$injector->share(new Redis(config("redis.protocol") . "://" . config("redis.host") . ":" . config("redis.port")));
$injector->share(new SubscribeClient(config("redis.protocol") . "://" . config("redis.host") . ":" . config("redis.port")));
$injector->share(new MySQL(sprintf("host=%s;user=%s;pass=%s;db=%s", config("database.host"), config("database.user"), config("database.pass"), config("database.name"))));
$auth = $injector->make("Kelunik\\ChatMain\\Auth");
/** @var TemplateService $templateService */
$templateService = $injector->make("Kelunik\\Template\\TemplateService");
/** @var Chat $chat */
$chat = $injector->make("Kelunik\\Chat\\Chat");
$router = router()->get("", function (Request $req, Response $resp) use($templateService) {
    $session = (yield (new Session($req))->read());
    if (!$session->get("login")) {
        $template = $templateService->load("main.php");
        $resp->send($template->render());
 /**
  *
  * {@inheritDoc}
  *
  * @see \Spark\Configuration\ConfigurationInterface::apply()
  */
 public function apply(Injector $injector)
 {
     $injector->define('UserMapper', [':fpdo' => $injector->make('FluentPDO')]);
     $injector->define('ShiftMapper', [':fpdo' => $injector->make('FluentPDO')]);
 }
 public function apply(Injector $injector)
 {
     $injector->define(Engine::class, [':directory' => $this->env['PLATES_DIRECTORY']]);
 }
 /**
  * @expectedException \Auryn\InjectionException
  * @expectedExceptionCode \Auryn\Injector::E_UNDEFINED_PARAM
  */
 public function testChildWithoutConstructorMissingParam()
 {
     $injector = new Injector();
     $injector->define('Auryn\\Test\\ParentWithConstructor', array(':foo' => 'parent'));
     $injector->make('Auryn\\Test\\ChildWithoutConstructor');
 }
Exemple #25
0
$minifier = (new MinifineFactory())->build(__DIR__ . '/public', $production);
/**
 * Setup DI
 */
$auryn = new Auryn();
$injector = new Injector($auryn);
/**
 * Setup shared instances and aliases
 */
$auryn->share($request);
$auryn->share($session);
$auryn->share($user);
$auryn->share($minifier);
$auryn->share($translator);
$auryn->share($decryptor);
$auryn->define('CodeCollab\\Encryption\\Defuse\\Encryptor', [':key' => file_get_contents(__DIR__ . '/encryption.key')]);
$auryn->define('CodeCollab\\Http\\Cookie\\Factory', [':domain' => $request->server('SERVER_NAME'), ':secure' => $request->isEncrypted()]);
$auryn->define('CodeCollab\\Theme\\Theme', [':themePath' => __DIR__ . '/themes', ':theme' => 'Default']);
$auryn->define('Demo\\Presentation\\Template\\Html', [':basePage' => '/page.phtml']);
$auryn->alias('CodeCollab\\CsrfToken\\Token', 'CodeCollab\\CsrfToken\\Handler');
$auryn->alias('CodeCollab\\Authentication\\Authentication', 'CodeCollab\\Authentication\\User');
$auryn->alias('CodeCollab\\CsrfToken\\Storage\\Storage', 'Demo\\Storage\\TokenSession');
$auryn->alias('CodeCollab\\Http\\Session\\Session', 'CodeCollab\\Http\\Session\\Native');
$auryn->alias('CodeCollab\\CsrfToken\\Generator\\Generator', 'CodeCollab\\CsrfToken\\Generator\\RandomBytes32');
$auryn->alias('CodeCollab\\I18n\\Translator', 'CodeCollab\\I18n\\FileTranslator');
$auryn->alias('CodeCollab\\Theme\\Loader', 'CodeCollab\\Theme\\Theme');
$auryn->alias('CodeCollab\\Template\\Html', 'Demo\\Presentation\\Template\\Html');
$auryn->alias('CodeCollab\\Encryption\\Encryptor', 'CodeCollab\\Encryption\\Defuse\\Encryptor');
$auryn->alias('CodeCollab\\Encryption\\Decryptor', 'CodeCollab\\Encryption\\Defuse\\Decryptor');
/**
 * Setup the front controller
 /**
  * @inheritDoc
  */
 public function apply(Injector $injector)
 {
     $injector->alias('Relay\\ResolverInterface', 'Equip\\Resolver\\AurynResolver');
     $injector->define('Equip\\Resolver\\AurynResolver', [':injector' => $injector]);
 }
Exemple #27
0
use function Amp\run;
require_once __DIR__ . '/../vendor/autoload.php';
require_once __DIR__ . '/../version.php';
define(__NAMESPACE__ . '\\PROCESS_START_TIME', time());
$builtInCommands = [AdminBuiltIn::class, BanBuiltIn::class, CommandBuiltIn::class, PluginBuiltIn::class, RoomPresence::class, UptimeBuiltIn::class, VersionBuiltIn::class];
$builtInEventHandlers = [Invite::class];
$config = Yaml::parse(file_get_contents(__DIR__ . '/../config/config.yml'));
$injector = new Injector();
require_once __DIR__ . '/setup-di.php';
$injector->alias(AdminStorage::class, $config['storage']['admin'] ?? FileAdminStorage::class);
$injector->alias(BanStorage::class, $config['storage']['ban'] ?? FileBanStorage::class);
$injector->alias(KeyValueStorage::class, $config['storage']['keyvalue'] ?? FileKeyValueStorage::class);
$injector->alias(KeyValueStorageFactory::class, ($config['storage']['keyvalue'] ?? FileKeyValueStorage::class) . 'Factory');
$injector->alias(PluginStorage::class, $config['storage']['plugin'] ?? FilePluginStorage::class);
$injector->alias(RoomStorage::class, $config['storage']['room'] ?? FileRoomStorage::class);
$injector->define(BitlyClient::class, [':accessToken' => $config['bitly']['accessToken']]);
$injector->define(TwitterApplicationCredentials::class, [':key' => $config['twitter']['consumerKey'], ':secret' => $config['twitter']['consumerSecret']]);
$injector->define(TranslationAPICredentials::class, [':clientId' => $config['ms-translate']['client-id'] ?? '', ':clientSecret' => $config['ms-translate']['client-secret'] ?? '']);
$injector->define(WebSocketEventDispatcher::class, [':devMode' => $config['dev-mode']['enable'] ?? false]);
$injector->delegate(Logger::class, function () use($config) {
    $flags = array_map('trim', explode('|', $config['logging']['level'] ?? ''));
    if (empty($flags[0])) {
        $flags = LogLevel::ALL;
    } else {
        $flags = array_reduce($flags, function ($carry, $flag) {
            return $carry | constant(LogLevel::class . "::{$flag}");
        }, 0);
    }
    $logger = $config['logging']['handler'] ?? StdOutLogger::class;
    return new $logger($flags, ...array_values($config['logging']['params'] ?? []));
});
Exemple #28
0
// Check for deployment configuration
$env = __DIR__ . '/../.env';
if (!is_file($env)) {
    echo 'Missing .env configuration! Please run the following:' . PHP_EOL . PHP_EOL . 'cp example.env .env && $EDITOR .env' . PHP_EOL;
    exit(1);
}
// Include Composer autoloader
require __DIR__ . '/../vendor/autoload.php';
use Auryn\Injector;
use josegonzalez\Dotenv\Loader as EnvLoader;
use Spark\Configuration\DefaultConfigurationSet;
use Spark\Configuration\PlatesResponderConfiguration;
use Shadowhand\RadioTide\Configuration\MiddlewareConfiguration;
use Shadowhand\RadioTide\Configuration\ResponderConfiguration;
use Shadowhand\RadioTide\Configuration\RoutingConfiguration;
use Shadowhand\RadioTide\Configuration\PlatesSessionConfiguration;
use Shadowhand\RadioTide\Configuration\SessionConfiguration;
// Load deployment configuration
$config = (new EnvLoader($env))->parse()->toArray();
// Configure the dependency injection container
$injector = new Injector();
// Set the template directory for Plates
$injector->define('League\\Plates\\Engine', [':directory' => realpath(__DIR__ . '/../templates')]);
// Set configuration for Rdio OAuth
$injector->define('AdamPaterson\\OAuth2\\Client\\Provider\\Rdio', [':options' => ['clientId' => $config['rdio_client_id'], 'clientSecret' => $config['rdio_client_secret'], 'redirectUri' => Shadowhand\RadioTide\get_server_url() . '/login/rdio']]);
// Set configuration for Tidal API
$injector->define('Shadowhand\\RadioTide\\TidalClient', [':token' => $config['tidal_token']]);
// Apply additional configuration
(new DefaultConfigurationSet([MiddlewareConfiguration::class, ResponderConfiguration::class, RoutingConfiguration::class, PlatesResponderConfiguration::class, PlatesSessionConfiguration::class, SessionConfiguration::class]))->apply($injector);
// Bootstrap the application
call_user_func($injector->make('Relay\\Relay'), $injector->make('Psr\\Http\\Message\\ServerRequestInterface'), $injector->make('Psr\\Http\\Message\\ResponseInterface'));
 /**
  * @inheritDoc
  */
 public function apply(Injector $injector)
 {
     $injector->alias(LoggerInterface::class, Logger::class);
     $injector->share(Logger::class);
     $injector->define(Logger::class, [':name' => $this->env->getValue('LOGGER_NAME', 'equip')]);
 }
 /**
  * @param string $offset
  * @param mixed  $value
  */
 public function offsetSet($offset, $value)
 {
     $this->injector->define($offset, (array) $value);
 }