Exemplo n.º 1
0
 /**
  * @Route("/{digest}", methods={"GET"}, name="layer_get")
  *
  * @ParamConverter(name="layer", options={"mapping": {"digest": "digest"}})
  *
  * @link http://docs.docker.com/registry/spec/api/#existing-layers
  */
 public function getAction(Request $request, Layer $layer)
 {
     if ($request->isMethod('HEAD')) {
         return new Response('', Response::HTTP_OK, ['Docker-Content-Digest' => $layer->getDigest()]);
     }
     return new BinaryFileResponse($this->get('layer_manager')->getContentPath($layer), Response::HTTP_OK, ['Docker-Content-Digest' => $layer->getDigest()], false);
 }
 /**
  * @Route("/uploads/{uuid}", methods={"PUT"}, name="layer_upload", requirements={"uuid"="[0-9a-z-]+"})
  *
  * @ParamConverter(name="repository", options={"mapping": {"name": "name"}})
  * @ParamConverter(name="layer", options={"mapping": {"uuid": "uuid"}})
  *
  * @Security("is_granted('REPO_WRITE', repository)")
  *
  * @link http://docs.docker.com/registry/spec/api/#uploading-the-layer
  */
 public function uploadAction(Request $request, Repository $repository, Layer $layer)
 {
     if (Layer::STATUS_COMPLETE === $layer->getStatus()) {
         throw new BadRequestHttpException(sprintf('Layer with uuid "%s" has already been uploaded', $layer->getUuid()));
     }
     $finalUpload = $request->query->has('digest');
     // TODO: manage chunked uploads
     $this->get('layer_manager')->write($layer, $request->getContent(true));
     if (!$finalUpload) {
         $layer->setStatus(Layer::STATUS_PARTIAL);
         return new Response('', Response::HTTP_ACCEPTED, ['Location' => $this->generateUrl('layer_upload', ['name' => $repository->getName(), 'uuid' => $layer->getUuid()], true), 'Docker-Upload-UUID' => $layer->getUuid()]);
     }
     $digest = $this->get('layer_manager')->computeDigest($layer);
     if ($digest !== $request->query->get('digest')) {
         throw new BadRequestHttpException(sprintf('Digest does not match with received data (computed: "%s")', $digest));
     }
     $layer->setDigest($digest);
     $this->get('layer_manager')->save($layer);
     return new Response('', Response::HTTP_CREATED, ['Location' => $this->generateUrl('layer_get', ['name' => $repository->getName(), 'digest' => $layer->getDigest()], true), 'Docker-Content-Digest' => $layer->getDigest()]);
 }
Exemplo n.º 3
0
 public function getContentPath(Layer $layer)
 {
     return $this->storagePath . '/layers/' . $layer->getUuid();
 }