/** * Handles request in order to authenticate. * * @param \AppserverIo\Psr\Servlet\Http\HttpServletRequestInterface $servletRequest The request instance * @param \AppserverIo\Psr\Servlet\Http\HttpServletResponseInterface $servletResponse The response instance * * @return boolean TRUE if the authentication has been successful, else FALSE * * @throws \Exception */ public function handleRequest(HttpServletRequestInterface $servletRequest, HttpServletResponseInterface $servletResponse) { // iterate over all servlets and return the matching one /** * @var string $urlPattern * @var \AppserverIo\Http\Authentication\AuthenticationInterface $authenticationAdapter */ foreach ($this->authenticationAdapters as $urlPattern => $authenticationAdapter) { // we'll match our URI against the URL pattern if (fnmatch($urlPattern, $servletRequest->getServletPath() . $servletRequest->getPathInfo())) { // the URI pattern matches, init the adapter and try to authenticate // check if auth header is not set in coming request headers if (!$servletRequest->hasHeader(Protocol::HEADER_AUTHORIZATION)) { // send header for challenge authentication against client $servletResponse->addHeader(HttpProtocol::HEADER_WWW_AUTHENTICATE, $authenticationAdapter->getAuthenticateHeader()); } // initialize the adapter with the current request $authenticationAdapter->init($servletRequest->getHeader(HttpProtocol::HEADER_AUTHORIZATION), $servletRequest->getMethod()); // try to authenticate the request $authenticated = $authenticationAdapter->authenticate(); if (!$authenticated) { // send header for challenge authentication against client $servletResponse->addHeader(HttpProtocol::HEADER_WWW_AUTHENTICATE, $authenticationAdapter->getAuthenticateHeader()); } return $authenticated; } } // we did not find an adapter for that URI pattern, no authentication required then return true; }
/** * Delete the requested application. * * @param \AppserverIo\Psr\Servlet\Http\HttpServletRequestInterface $servletRequest The request instance * @param \AppserverIo\Psr\Servlet\Http\HttpServletResponseInterface $servletResponse The response instance * * @return void * @see \AppserverIo\Psr\Servlet\Http\HttpServlet::doDelete() * * @SWG\Delete( * path="/applications.do/{id}", * tags={"applications"}, * summary="Delete's an existing application", * @SWG\Parameter( * name="id", * in="path", * description="The name of the application to delete", * required=true, * type="string" * ), * @SWG\Response( * response=200, * description="a ""success"" message" * ), * @SWG\Response( * response=500, * description="Internal Server Error" * ) * ) */ public function doDelete(HttpServletRequestInterface $servletRequest, HttpServletResponseInterface $servletResponse) { // load the requested path info, e. g. /api/applications.do/example/ $pathInfo = trim($servletRequest->getPathInfo(), '/'); // extract the entity and the ID, if available list($id, ) = explode('/', $pathInfo); // undeploy the application $this->getApplicationProcessor()->delete($id); }
/** * Return's TRUE if the passed request matches the mappings URL patter. * * @param \AppserverIo\Psr\Servlet\Http\HttpServletRequestInterface $servletRequest The request to match * * @return boolean TRUE if the request matches, else FALSE */ public function match(HttpServletRequestInterface $servletRequest) { return fnmatch($this->getUrlPattern(), $servletRequest->getServletPath() . $servletRequest->getPathInfo()); }
/** * Tries to load the available persistence units and adds them to the response. * * @param \AppserverIo\Psr\Servlet\Http\HttpServletRequestInterface $servletRequest The request instance * @param \AppserverIo\Psr\Servlet\Http\HttpServletResponseInterface $servletResponse The response instance * * @return void * @see \AppserverIo\Psr\Servlet\Http\HttpServlet::doGet() * * @SWG\Get( * path="/persistenceUnits.do", * tags={"persistenceUnits"}, * summary="List's all persistence units", * @SWG\Response( * response=200, * description="A list with the available persistence units", * @SWG\Schema( * type="array", * @SWG\Items(ref="#/definitions/PersistenceUnitOverviewData") * ) * ), * @SWG\Response( * response=500, * description="Internal Server Error" * ) * ) * * @SWG\Get( * path="/persistenceUnits.do/{id}", * tags={"persistenceUnits"}, * summary="Load's the persistence unit with the passed ID", * @SWG\Parameter( * name="id", * in="path", * description="The name of the persistence unit to load", * required=true, * type="string" * ), * @SWG\Response( * response=200, * description="The requested persistence unit", * @SWG\Schema( * ref="#/definitions/PersistenceUnitViewData" * ) * ), * @SWG\Response( * response=500, * description="Internal Server Error" * ) * ) */ public function doGet(HttpServletRequestInterface $servletRequest, HttpServletResponseInterface $servletResponse) { // load the requested path info, e. g. /api/persistenceUnits.do $pathInfo = trim($servletRequest->getPathInfo(), '/'); // extract the entity and the ID, if available list($id, ) = explode('/', $pathInfo); // query whether we've found an ID or not if ($id == null) { $content = $this->getPersistenceUnitProcessor()->findAll(); } else { $content = $this->getPersistenceUnitProcessor()->load($id); } // add the result to the request $servletRequest->setAttribute(RequestKeys::RESULT, $content); }
/** * Tries to load the content of the naming directory and adds it to the response. * * @param \AppserverIo\Psr\Servlet\Http\HttpServletRequestInterface $servletRequest The request instance * @param \AppserverIo\Psr\Servlet\Http\HttpServletResponseInterface $servletResponse The response instance * * @return void * @see \AppserverIo\Psr\Servlet\Http\HttpServlet::doGet() * * @SWG\Get( * path="/namingDirectories.do", * tags={"namingDirectories"}, * summary="List's the available naming directories", * @SWG\Response( * response=200, * description="A list with the available naming directories", * @SWG\Schema( * type="array", * @SWG\Items(ref="#/definitions/NamingDirectoryOverviewData") * ) * ), * @SWG\Response( * response=500, * description="Internal Server Error" * ) * ) * * @SWG\Get( * path="/namingDirectories.do/{id}", * tags={"namingDirectories"}, * summary="Load's the naming directory with the passed ID", * @SWG\Parameter( * name="id", * in="path", * description="The UUID of the naming directory to load", * required=true, * type="string" * ), * @SWG\Response( * response=200, * description="The requested naming directory", * @SWG\Schema( * ref="#/definitions/NamingDirectoryViewData" * ) * ), * @SWG\Response( * response=500, * description="Internal Server Error" * ) * ) */ public function doGet(HttpServletRequestInterface $servletRequest, HttpServletResponseInterface $servletResponse) { // load the requested path info, e. g. /api/namingDirectories.do/5e83e3e6-b1d5-49de-92ae-7fca480593b8 $pathInfo = trim($servletRequest->getPathInfo(), '/'); // extract the entity and the ID, if available list($id, ) = explode('/', $pathInfo); // query whether we've found an ID or not if ($id == null) { $content = $this->getNamingDirectoryProcessor()->findAll(); } else { $content = $this->getNamingDirectoryProcessor()->load($id); } // add the result to the request $servletRequest->setAttribute(RequestKeys::RESULT, $content); }
/** * Tries to load the requested vhosts and adds them to the response. * * @param \AppserverIo\Psr\Servlet\Http\HttpServletRequestInterface $servletRequest The request instance * @param \AppserverIo\Psr\Servlet\Http\HttpServletResponseInterface $servletResponse The response instance * * @return void * @see \AppserverIo\Psr\Servlet\Http\HttpServlet::doGet() * * @SWG\Get( * path="/virtualHosts.do", * tags={"virtualHosts"}, * summary="List's all virtual hosts", * @SWG\Response( * response=200, * description="A list with the available virtual hosts", * @SWG\Schema( * type="array", * @SWG\Items(ref="#/definitions/VirtualHostOverviewData") * ) * ), * @SWG\Response( * response="500", * description="Internal Server Error" * ) * ) * * @SWG\Get( * path="/virtualHosts.do/{id}", * tags={"virtualHosts"}, * summary="Loads the virtual host with the passed ID", * @SWG\Parameter( * name="id", * in="path", * description="The UUID of the virtual host to load", * required=true, * type="string" * ), * @SWG\Response( * response=200, * description="The requested virtual host", * @SWG\Schema( * ref="#/definitions/VirtualHostViewData" * ) * ), * @SWG\Response( * response="500", * description="Internal Server Error" * ) * ) */ public function doGet(HttpServletRequestInterface $servletRequest, HttpServletResponseInterface $servletResponse) { try { // load the requested path info, e. g. /api/applications.do/example/ $pathInfo = trim($servletRequest->getPathInfo(), '/'); // extract the entity and the ID, if available list($id, ) = explode('/', $pathInfo); // query whether we've found an ID or not if ($id == null) { $content = $this->getVirtualHostProcessor()->findAll(); } else { $content = $this->getVirtualHostProcessor()->load($id); } } catch (\Exception $e) { // set error message and status code $content = $e->getMessage(); $servletResponse->setStatusCode(500); } // add the result to the request $servletRequest->setAttribute(RequestKeys::RESULT, $content); }
/** * Dummy action implementation. * * @param \AppserverIo\Psr\Servlet\Http\HttpServletRequestInterface $servletRequest The request instance * @param \AppserverIo\Psr\Servlet\Http\HttpServletResponseInterface $servletResponse The response instance * * @return void */ public function testAction(HttpServletRequestInterface $servletRequest, HttpServletResponseInterface $servletResponse) { $servletResponse->appendBodyStream($servletRequest->getPathInfo()); }
/** * Tries to load the requested thumbnail from the applications WEB-INF directory * and adds it to the response. * * @param \AppserverIo\Psr\Servlet\Http\HttpServletRequestInterface $servletRequest The request instance * @param \AppserverIo\Psr\Servlet\Http\HttpServletResponseInterface $servletResponse The response instance * * @return void * @see \AppserverIo\Psr\Servlet\Http\HttpServlet::doGet() * * @SWG\Get( * path="/thumbnails.do/{id}", * tags={"applications"}, * summary="The application's thumbnail", * produces={"image/png"}, * @SWG\Parameter( * name="id", * in="path", * description="The name of the application to load the thumbnail for", * required=true, * type="string" * ), * @SWG\Response( * response=200, * description="The application's thumbnail" * ), * @SWG\Response( * response=500, * description="Internal Server Error" * ) * ) */ public function doGet(HttpServletRequestInterface $servletRequest, HttpServletResponseInterface $servletResponse) { // load the requested path info, e. g. /api/thumbnails.do/example/ $pathInfo = trim($servletRequest->getPathInfo(), '/'); // extract the entity and the ID, if available list($id, ) = explode('/', $pathInfo); // load file information and return the file object if possible $fileInfo = new \SplFileInfo($path = $this->getApplicationProcessor()->thumbnail($id)); if ($fileInfo->isDir()) { throw new FoundDirInsteadOfFileException(sprintf("Requested file %s is a directory", $path)); } if ($fileInfo->isFile() === false) { throw new FileNotFoundException(sprintf('File %s not not found', $path)); } if ($fileInfo->isReadable() === false) { throw new FileNotReadableException(sprintf('File %s is not readable', $path)); } // open the file itself $file = $fileInfo->openFile(); // set mimetypes to header $servletResponse->addHeader(HttpProtocol::HEADER_CONTENT_TYPE, MimeTypes::getMimeTypeByExtension(pathinfo($file->getFilename(), PATHINFO_EXTENSION))); // set last modified date from file $servletResponse->addHeader(HttpProtocol::HEADER_LAST_MODIFIED, gmdate('D, d M Y H:i:s \\G\\M\\T', $file->getMTime())); // set expires date $servletResponse->addHeader(HttpProtocol::HEADER_EXPIRES, gmdate('D, d M Y H:i:s \\G\\M\\T', time() + 3600)); // check if If-Modified-Since header info is set if ($servletRequest->getHeader(HttpProtocol::HEADER_IF_MODIFIED_SINCE)) { // check if file is modified since header given header date if (strtotime($servletRequest->getHeader(HttpProtocol::HEADER_IF_MODIFIED_SINCE)) >= $file->getMTime()) { // send 304 Not Modified Header information without content $servletResponse->addHeader(HttpProtocol::HEADER_STATUS, 'HTTP/1.1 304 Not Modified'); $servletResponse->appendBodyStream(PHP_EOL); return; } } // add the thumbnail as response content $servletResponse->appendBodyStream(file_get_contents($file->getRealPath())); }