objectRetriever = $objectRetriever; $this->reader = new NodeReader; } /** * Initialize and return the SDK with the given classname. * Throws Exception if the SDK is not supported. * * @param $classname Classname for the SDK's main class * @param array $options Additional options for the SDK (if necessary) */ public function get($classname, array $options) { if (!class_exists($classname)) throw new Exception("<".$classname."> is not a valid classname."); $hashkey = md5($classname.serialize($options)); if (!isset($this->classes[$hashkey])) { $nsNode = $this->objectRetriever->getAuthenticatingNamespaceObject(); // --- Amazon Web Services (https://aws.amazon.com/) --- // has multiple classnames, so check for common superclass if (is_a($classname, 'Aws\AwsClient', true)) { $class = new $classname(array_merge($options, [ 'credentials' => [ 'key' => $this->reader->getFirstValueString($nsNode, 'coid://aws.3rd-party.co/accessKeyId'), 'secret' => $this->reader->getFirstValueString($nsNode, 'coid://aws.3rd-party.co/secretAccessKey') ] ])); } else { switch ($classname) { // --- stream (https://getstream.io/) --- case "GetStream\Stream\Client": $class = new $classname( $this->reader->getFirstValueString($nsNode, 'coid://getstreamio.3rd-party.co/key'), $this->reader->getFirstValueString($nsNode, 'coid://getstreamio.3rd-party.co/secret') ); break; // --- Pusher (https://pusher.com/) --- case "Pusher": $class = new $classname( $this->reader->getFirstValueString($nsNode, 'coid://pusher.3rd-party.co/key'), $this->reader->getFirstValueString($nsNode, 'coid://pusher.3rd-party.co/secret'), $this->reader->getFirstValueString($nsNode, 'coid://pusher.3rd-party.co/appId'), $options ); break; } } } if (!isset($class)) throw new Exception("No rules defined to initialize <".$classname.">."); $this->classes[$hashkey] = $class; return $this->classes[$hashkey]; } }