scopeConfig = $scopeConfig; $this->storeManager = $storeManager; } /* * consumer key * @return string */ public function getConsumerKey() { return $this->getConfigValue(self::XML_PATH_OAUTH_CONSUMER_KEY); } /* * consumer Secret * @return string */ public function getConsumerSecret() { return $this->getConfigValue(self::XML_PATH_OAUTH_CONSUMER_SECRET); } /* * Token access key * @return string */ public function getToken() { return $this->getConfigValue(self::XML_PATH_OAUTH_TOKEN); } /* * Token Secret * @return string */ public function getTokenSecret() { return $this->getConfigValue(self::XML_PATH_OAUTH_TOKEN_SECRET); } /* * Token Secreat * @return string */ public function getRealm() { return $this->getConfigValue(self::XML_PATH_OAUTH_REALM); } /* * Token script * @return string */ public function getScript() { return $this->getConfigValue(self::OAUTH_SCRIPT); } /* * Token Secreat * @return string */ public function getApiUrl() { return $this->getConfigValue(self::XML_PATH_OAUTH_URL); } /* * Calculate header for request * @return string */ public function getOauthParams() { $time = time(); $nonce = rawurlencode($this->generateNonceString(11)); $oauthparams = $this->getParamObject($nonce, $time); $baseString = $this->createBaseString($oauthparams); $signature = $this->getSignature('sha256', $baseString); return $headerValue = $this->buildAuthorizationHeader($nonce, $time, $signature); } /* * Calculate signature for request * @return string */ public function getSignature($algo, $baseString) { $key = rawurlencode($this->getConsumerSecret()) . '&' . rawurlencode($this->getTokenSecret()); return rawurlencode(base64_encode(hash_hmac($algo, $baseString, $key, true))); } /** * Builds the Authorization header for a request * @return array */ private function buildAuthorizationHeader($nonce, $time, $signature) { return 'OAuth realm="'.$this->getRealm().'", oauth_consumer_key="'.$this->getConsumerKey().'",oauth_nonce="'.$nonce.'",oauth_signature_method="HMAC-SHA256",oauth_timestamp="'.$time.'",oauth_token="'.$this->getToken().'",oauth_version="1.0",oauth_signature="'.$signature.'"'; } /** * Creates the Signature Base String. * The Signature Base String is a consistent reproducible concatenation of * the request elements into a single string. The string is used as an * input in hashing or signing algorithms. * @return string Returns the base string */ private function createBaseString($params) { $url = $this->getApiUrl(); $query = http_build_query($params, '', '&', PHP_QUERY_RFC3986); return strtoupper('POST') . '&' . rawurlencode($url) . '&' . rawurlencode($query); } /* * generating nonce value * @return string */ public function generateNonceString($length = 11) { $characters = self::NONCE_STRING; $charactersLength = strlen($characters); $randomString = ''; for ($i = 0; $i < $length; $i++) { $randomString .= $characters[rand(0, $charactersLength - 1)]; } return $randomString; } /* * generating param value * @return array */ public function getParamObject($nonce, $time) { return [ 'deploy'=>1, "oauth_consumer_key"=> $this->getConsumerKey(), "oauth_nonce"=> $nonce, "oauth_signature_method"=>self::SIGNATURE_METHOD_HMACSHA256, "oauth_timestamp"=> $time, "oauth_token"=>$this->getToken(), "oauth_version"=> self::OAUTH_VERSION, 'script'=> $this->getScript() ]; } /* * get config value * return string */ public function getConfigValue($path) { $store = $this->storeManager->getStore()->getStoreId(); $config_data = $this->scopeConfig->getValue($path, ScopeInterface::SCOPE_STORE, $store); return $config_data; } }