diff options
Diffstat (limited to 'bridges/DockerHubBridge.php')
-rw-r--r-- | bridges/DockerHubBridge.php | 299 |
1 files changed, 155 insertions, 144 deletions
diff --git a/bridges/DockerHubBridge.php b/bridges/DockerHubBridge.php index 343f832e..4ee72f5d 100644 --- a/bridges/DockerHubBridge.php +++ b/bridges/DockerHubBridge.php @@ -1,77 +1,81 @@ <?php -class DockerHubBridge extends BridgeAbstract { - const NAME = 'Docker Hub Bridge'; - const URI = 'https://hub.docker.com'; - const DESCRIPTION = 'Returns new images for a container'; - const MAINTAINER = 'VerifiedJoseph'; - const PARAMETERS = array( - 'User Submitted Image' => array( - 'user' => array( - 'name' => 'User', - 'type' => 'text', - 'required' => true, - 'exampleValue' => 'rssbridge', - ), - 'repo' => array( - 'name' => 'Repository', - 'type' => 'text', - 'required' => true, - 'exampleValue' => 'rss-bridge', - ) - ), - 'Official Image' => array( - 'repo' => array( - 'name' => 'Repository', - 'type' => 'text', - 'required' => true, - 'exampleValue' => 'postgres', - ) - ), - ); - - const CACHE_TIMEOUT = 3600; // 1 hour - - private $apiURL = 'https://hub.docker.com/v2/repositories/'; - private $imageUrlRegex = '/hub\.docker\.com\/r\/([\w]+)\/([\w-]+)\/?/'; - private $officialImageUrlRegex = '/hub\.docker\.com\/_\/([\w-]+)\/?/'; - - public function detectParameters($url) { - $params = array(); - - // user submitted image - if(preg_match($this->imageUrlRegex, $url, $matches)) { - $params['context'] = 'User Submitted Image'; - $params['user'] = $matches[1]; - $params['repo'] = $matches[2]; - return $params; - } - - // official image - if(preg_match($this->officialImageUrlRegex, $url, $matches)) { - $params['context'] = 'Official Image'; - $params['repo'] = $matches[1]; - return $params; - } - - return null; - } - - public function collectData() { - $json = getContents($this->getApiUrl()); - - $data = json_decode($json, false); - - foreach ($data->results as $result) { - $item = array(); - - $lastPushed = date('Y-m-d H:i:s', strtotime($result->tag_last_pushed)); - - $item['title'] = $result->name; - $item['uid'] = $result->id; - $item['uri'] = $this->getTagUrl($result->name); - $item['author'] = $result->last_updater_username; - $item['timestamp'] = $result->tag_last_pushed; - $item['content'] = <<<EOD + +class DockerHubBridge extends BridgeAbstract +{ + const NAME = 'Docker Hub Bridge'; + const URI = 'https://hub.docker.com'; + const DESCRIPTION = 'Returns new images for a container'; + const MAINTAINER = 'VerifiedJoseph'; + const PARAMETERS = [ + 'User Submitted Image' => [ + 'user' => [ + 'name' => 'User', + 'type' => 'text', + 'required' => true, + 'exampleValue' => 'rssbridge', + ], + 'repo' => [ + 'name' => 'Repository', + 'type' => 'text', + 'required' => true, + 'exampleValue' => 'rss-bridge', + ] + ], + 'Official Image' => [ + 'repo' => [ + 'name' => 'Repository', + 'type' => 'text', + 'required' => true, + 'exampleValue' => 'postgres', + ] + ], + ]; + + const CACHE_TIMEOUT = 3600; // 1 hour + + private $apiURL = 'https://hub.docker.com/v2/repositories/'; + private $imageUrlRegex = '/hub\.docker\.com\/r\/([\w]+)\/([\w-]+)\/?/'; + private $officialImageUrlRegex = '/hub\.docker\.com\/_\/([\w-]+)\/?/'; + + public function detectParameters($url) + { + $params = []; + + // user submitted image + if (preg_match($this->imageUrlRegex, $url, $matches)) { + $params['context'] = 'User Submitted Image'; + $params['user'] = $matches[1]; + $params['repo'] = $matches[2]; + return $params; + } + + // official image + if (preg_match($this->officialImageUrlRegex, $url, $matches)) { + $params['context'] = 'Official Image'; + $params['repo'] = $matches[1]; + return $params; + } + + return null; + } + + public function collectData() + { + $json = getContents($this->getApiUrl()); + + $data = json_decode($json, false); + + foreach ($data->results as $result) { + $item = []; + + $lastPushed = date('Y-m-d H:i:s', strtotime($result->tag_last_pushed)); + + $item['title'] = $result->name; + $item['uid'] = $result->id; + $item['uri'] = $this->getTagUrl($result->name); + $item['author'] = $result->last_updater_username; + $item['timestamp'] = $result->tag_last_pushed; + $item['content'] = <<<EOD <Strong>Tag</strong><br> <p>{$result->name}</p> <Strong>Last pushed</strong><br> @@ -80,86 +84,93 @@ class DockerHubBridge extends BridgeAbstract { {$this->getImages($result)} EOD; - $this->items[] = $item; - } - - } - - public function getURI() { - if ($this->queriedContext === 'Official Image') { - return self::URI . '/_/' . $this->getRepo(); - } - - if ($this->getInput('repo')) { - return self::URI . '/r/' . $this->getRepo(); - } - - return parent::getURI(); - } - - public function getName() { - if ($this->getInput('repo')) { - return $this->getRepo() . ' - Docker Hub'; - } - - return parent::getName(); - } - - private function getRepo() { - if ($this->queriedContext === 'Official Image') { - return $this->getInput('repo'); - } - - return $this->getInput('user') . '/' . $this->getInput('repo'); - } - - private function getApiUrl() { - if ($this->queriedContext === 'Official Image') { - return $this->apiURL . 'library/' . $this->getRepo() . '/tags/?page_size=25&page=1'; - } - - return $this->apiURL . $this->getRepo() . '/tags/?page_size=25&page=1'; - } - - private function getLayerUrl($name, $digest) { - if ($this->queriedContext === 'Official Image') { - return self::URI . '/layers/' . $this->getRepo() . '/library/' . - $this->getRepo() . '/' . $name . '/images/' . $digest; - } - - return self::URI . '/layers/' . $this->getRepo() . '/' . $name . '/images/' . $digest; - } - - private function getTagUrl($name) { - if ($this->queriedContext === 'Official Image') { - return self::URI . '/_/' . $this->getRepo() . '?tab=tags&name=' . $name; - } - - return self::URI . '/r/' . $this->getRepo() . '/tags?name=' . $name; - } - - private function getImages($result) { - $html = <<<EOD + $this->items[] = $item; + } + } + + public function getURI() + { + if ($this->queriedContext === 'Official Image') { + return self::URI . '/_/' . $this->getRepo(); + } + + if ($this->getInput('repo')) { + return self::URI . '/r/' . $this->getRepo(); + } + + return parent::getURI(); + } + + public function getName() + { + if ($this->getInput('repo')) { + return $this->getRepo() . ' - Docker Hub'; + } + + return parent::getName(); + } + + private function getRepo() + { + if ($this->queriedContext === 'Official Image') { + return $this->getInput('repo'); + } + + return $this->getInput('user') . '/' . $this->getInput('repo'); + } + + private function getApiUrl() + { + if ($this->queriedContext === 'Official Image') { + return $this->apiURL . 'library/' . $this->getRepo() . '/tags/?page_size=25&page=1'; + } + + return $this->apiURL . $this->getRepo() . '/tags/?page_size=25&page=1'; + } + + private function getLayerUrl($name, $digest) + { + if ($this->queriedContext === 'Official Image') { + return self::URI . '/layers/' . $this->getRepo() . '/library/' . + $this->getRepo() . '/' . $name . '/images/' . $digest; + } + + return self::URI . '/layers/' . $this->getRepo() . '/' . $name . '/images/' . $digest; + } + + private function getTagUrl($name) + { + if ($this->queriedContext === 'Official Image') { + return self::URI . '/_/' . $this->getRepo() . '?tab=tags&name=' . $name; + } + + return self::URI . '/r/' . $this->getRepo() . '/tags?name=' . $name; + } + + private function getImages($result) + { + $html = <<<EOD <table style="width:300px;"><thead><tr><th>Digest</th><th>OS/architecture</th></tr></thead></tbody> EOD; - foreach ($result->images as $image) { - $layersUrl = $this->getLayerUrl($result->name, $image->digest); - $id = $this->getShortDigestId($image->digest); + foreach ($result->images as $image) { + $layersUrl = $this->getLayerUrl($result->name, $image->digest); + $id = $this->getShortDigestId($image->digest); - $html .= <<<EOD + $html .= <<<EOD <tr> <td><a href="{$layersUrl}">{$id}</a></td> <td>{$image->os}/{$image->architecture}</td> </tr> EOD; - } + } - return $html . '</tbody></table>'; - } + return $html . '</tbody></table>'; + } - private function getShortDigestId($digest) { - $parts = explode(':', $digest); - return substr($parts[1], 0, 12); - } + private function getShortDigestId($digest) + { + $parts = explode(':', $digest); + return substr($parts[1], 0, 12); + } } |