Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
PackagesAuth.php
Go to the documentation of this file.
1 <?php
7 namespace Magento\Setup\Model;
8 
10 use Zend\View\Model\JsonModel;
11 
16 {
20  const KEY_HTTPBASIC = 'http-basic';
21  const KEY_USERNAME = 'username';
22  const KEY_PASSWORD = 'password';
28  const PATH_TO_AUTH_FILE = 'auth.json';
29  const PATH_TO_PACKAGES_FILE = 'packages.json';
35  protected $serviceLocator;
36 
40  protected $curlClient;
41 
45  protected $urlPrefix = 'https://';
46 
50  private $filesystem;
51 
55  private $serializer;
56 
64  public function __construct(
65  \Zend\ServiceManager\ServiceLocatorInterface $serviceLocator,
66  \Magento\Framework\HTTP\Client\Curl $curl,
67  \Magento\Framework\Filesystem $filesystem,
68  \Magento\Framework\Serialize\Serializer\Json $serializer = null
69  ) {
70  $this->serviceLocator = $serviceLocator;
71  $this->curlClient = $curl;
72  $this->filesystem = $filesystem;
73  $this->serializer = $serializer?: \Magento\Framework\App\ObjectManager::getInstance()
74  ->get(\Magento\Framework\Serialize\Serializer\Json::class);
75  }
76 
80  private function getPackagesJsonUrl()
81  {
82  return $this->urlPrefix . $this->getCredentialBaseUrl() . '/packages.json';
83  }
84 
88  public function getCredentialBaseUrl()
89  {
90  $config = $this->serviceLocator->get('config');
91  return $config['marketplace']['check_credentials_url'];
92  }
93 
100  public function checkCredentials($token, $secretKey)
101  {
102  $response = ['success' => true];
103  $serviceUrl = $this->getPackagesJsonUrl();
104  $this->curlClient->setCredentials($token, $secretKey);
105  try {
106  $this->curlClient->post($serviceUrl, []);
107  if ($this->curlClient->getStatus() == 200) {
108  $packagesInfo = $this->curlClient->getBody();
109  $directory = $this->filesystem->getDirectoryWrite(DirectoryList::COMPOSER_HOME);
110  $directory->writeFile(self::PATH_TO_PACKAGES_FILE, $packagesInfo);
111  } else {
112  $response = ['success' => false, 'message' => 'Bad credentials'];
113  }
114  } catch (\Exception $e) {
115  $response = ['success' => false, 'message' => $e->getMessage()];
116  }
117  return $this->serializer->serialize($response);
118  }
119 
125  public function getAuthJsonData()
126  {
127  try {
128  $authJson = $this->getAuthJson();
129  $serviceUrl = $this->getCredentialBaseUrl();
130  $authJsonData = isset($authJson['http-basic'][$serviceUrl]) ? $authJson['http-basic'][$serviceUrl] : false;
131  } catch (\Exception $e) {
132  $authJsonData = false;
133  }
134  return $authJsonData;
135  }
136 
143  private function getAuthJson()
144  {
145  $directory = $this->filesystem->getDirectoryRead(DirectoryList::COMPOSER_HOME);
146  if ($directory->isExist(self::PATH_TO_AUTH_FILE) && $directory->isReadable(self::PATH_TO_AUTH_FILE)) {
147  try {
148  $data = $directory->readFile(self::PATH_TO_AUTH_FILE);
149  return json_decode($data, true);
150  } catch (\Exception $e) {
151  throw new \Exception('Error in reading Auth file');
152  }
153  }
154  return false;
155  }
156 
163  public function removeCredentials()
164  {
165  $serviceUrl = $this->getCredentialBaseUrl();
166  $directory = $this->filesystem->getDirectoryWrite(DirectoryList::COMPOSER_HOME);
167  if ($directory->isExist(self::PATH_TO_AUTH_FILE) && $directory->isReadable(self::PATH_TO_AUTH_FILE)) {
168  $authJsonData = $this->getAuthJson();
169  if (isset($authJsonData['http-basic']) && isset($authJsonData['http-basic'][$serviceUrl])) {
170  unset($authJsonData['http-basic'][$serviceUrl]);
171  if ($authJsonData === ['http-basic' => []]) {
172  return $directory->delete(self::PATH_TO_AUTH_FILE);
173  } else {
174  $data = json_encode($authJsonData, JSON_UNESCAPED_SLASHES|JSON_PRETTY_PRINT);
175  return $data !== false && $directory->writeFile(self::PATH_TO_AUTH_FILE, $data);
176  }
177  }
178  }
179  return false;
180  }
181 
190  public function saveAuthJson($username, $password)
191  {
192  $directory = $this->filesystem->getDirectoryWrite(DirectoryList::COMPOSER_HOME);
193  $authContent = [
195  $this->getCredentialBaseUrl() => [
196  PackagesAuth::KEY_USERNAME => "$username",
197  PackagesAuth::KEY_PASSWORD => "$password"
198  ]
199  ]
200  ];
201  $json = new \Zend\View\Model\JsonModel($authContent);
202  $json->setOption('prettyPrint', true);
203  $jsonContent = $json->serialize();
204 
205  return $directory->writeFile(self::PATH_TO_AUTH_FILE, $jsonContent);
206  }
207 }
$response
Definition: 404.php:11
__construct(\Zend\ServiceManager\ServiceLocatorInterface $serviceLocator, \Magento\Framework\HTTP\Client\Curl $curl, \Magento\Framework\Filesystem $filesystem, \Magento\Framework\Serialize\Serializer\Json $serializer=null)
$config
Definition: fraud_order.php:17
checkCredentials($token, $secretKey)
saveAuthJson($username, $password)
$filesystem