private boolean isSuccessfulRequestWithContent(final Context context, final Response response) { return isGetOrHeadRequest(context) && isSuccessfulOrNotModified(response) && response.getPayload() != null && response.getPayload() instanceof Content; }
public Builder copy(final Response response) { checkNotNull(response); attributes = response.getAttributes(); headers = response.getHeaders(); status = response.getStatus(); payload = response.getPayload(); return this; }
@Nonnull @Override public Response handle(@Nonnull final Context context) throws Exception { Response response = context.proceed(); if (!Boolean.parseBoolean(context.getRequest().getAttributes().get(DO_NOT_REWRITE, String.class))) { if (response.getStatus().getCode() == HttpStatus.OK && response.getPayload() != null) { response = HttpResponses .ok(composerJsonProcessor.rewriteProviderJson(context.getRepository(), response.getPayload())); } } return response; } }
/** * Parses a search response, returning the marshaled {@link NpmSearchResponse}. */ @Nullable private NpmSearchResponse parseSearchResponse(final Repository repository, final Response response) { Payload payload = response.getPayload(); if (response.getStatus().getCode() == HttpStatus.OK && payload != null) { try (InputStream in = payload.openInputStream()) { return npmSearchResponseMapper.readFromInputStream(in); } catch (IOException e) { if (log.isDebugEnabled()) { log.warn("Unable to process search response for repository {}, skipping", repository.getName(), e); } else { log.warn("Unable to process search response for repository {}, cause: {}, skipping", repository.getName(), e.getMessage()); } } } return null; } }
@Nullable @VisibleForTesting protected Content buildMergedPackageRoot(final Map<Repository, Response> responses, final Context context) throws IOException { checkNotNull(responses); checkNotNull(context); if (responses.isEmpty()) { log.debug("Unable to create package root for repository {}. Members had no metadata to merge.", context.getRepository().getName()); return null; } List<NestedAttributesMap> packages = responses .entrySet().stream().map(entry -> getNestedAttributesMap(entry.getValue().getPayload())) .filter(Objects::nonNull) .collect(toList()); NestedAttributesMap result; NpmPackageId packageId = packageId(matcherState(context)); if (shouldServeFirstResult(packages, packageId)) { result = packages.get(0); } else { log.debug("Merging results from {} repositories", responses.size()); // we make the last package the dominant one, by reversing the list reverse(packages); result = merge(packages.get(0).getKey(), packages); } rewriteTarballUrl(context.getRepository().getName(), result); return saveToCache(packageId, result); }
if (entry.getValue().getStatus().getCode() == HttpStatus.OK) { Response response = entry.getValue(); if (response.getPayload() instanceof Content) { contents.put(entry.getKey(), (Content) response.getPayload());
private Content generatePackagesJson(final Context context) throws IOException { try { // TODO: Better logging and error checking on failure/non-200 scenarios Request request = new Request.Builder().action(GET).path("/" + LIST_JSON).build(); Response response = getRepository().facet(ViewFacet.class).dispatch(request, context); Payload payload = checkNotNull(response.getPayload()); return composerJsonProcessor.generatePackagesFromList(getRepository(), payload); } catch (IOException e) { throw new UncheckedIOException(e); } catch (Exception e) { Throwables.throwIfUnchecked(e); throw new RuntimeException(e); } }
@Override protected final Response doGet(@Nonnull final Context context, @Nonnull final GroupHandler.DispatchedRepositories dispatched) throws Exception { Repository repository = context.getRepository(); GroupFacet groupFacet = repository.facet(GroupFacet.class); makeUnconditional(context.getRequest()); Map<Repository, Response> responses; try { responses = getAll(context, groupFacet.members(), dispatched); } finally { makeConditional(context.getRequest()); } List<Payload> payloads = responses.values().stream() .filter(response -> response.getStatus().getCode() == HttpStatus.OK && response.getPayload() != null) .map(Response::getPayload) .collect(Collectors.toList()); if (payloads.isEmpty()) { return notFoundResponse(context); } return HttpResponses.ok(merge(repository, payloads)); }
/** * This method MUST NOT be called from within a TX, as it dispatches a new request! It fails with * {@code java.lang.IllegalStateException}: "Transaction already in progress" otherwise! */ private NestedAttributesMap retrievePackageRoot(final NpmPackageId packageId, final Context context) throws IOException { try { Request getRequest = new Request.Builder().action(GET).path("/" + packageId.id()).build(); Response response = getRepository().facet(ViewFacet.class).dispatch(getRequest, context); if (response.getPayload() == null) { throw new IOException("Could not retrieve package " + packageId); } final InputStream packageRootIn = response.getPayload().openInputStream(); return NpmFacetUtils.parse(() -> packageRootIn); } catch (IOException e) { throw e; } catch (Exception e) { Throwables.throwIfUnchecked(e); throw new IOException(e); } }
private String getZipballUrl(final Context context) { try { TokenMatcher.State state = context.getAttributes().require(TokenMatcher.State.class); Map<String, String> tokens = state.getTokens(); String vendor = tokens.get(VENDOR_TOKEN); String project = tokens.get(PROJECT_TOKEN); String version = tokens.get(VERSION_TOKEN); Request request = new Request.Builder().action(GET).path("/" + buildProviderPath(vendor, project)) .attribute(ComposerProviderHandler.DO_NOT_REWRITE, "true").build(); Response response = getRepository().facet(ViewFacet.class).dispatch(request, context); Payload payload = response.getPayload(); if (payload == null) { throw new NonResolvableProviderJsonException( String.format("No provider found for vendor %s, project %s, version %s", vendor, project, version)); } else { return composerJsonProcessor.getDistUrl(vendor, project, version, payload); } } catch (IOException e) { throw new UncheckedIOException(e); } catch (Exception e) { Throwables.throwIfUnchecked(e); throw new RuntimeException(e); } }
@Nonnull @Override public Response handle(@Nonnull final Context context) throws Exception { final Response response = context.proceed(); Payload payload = response.getPayload(); if (response.getStatus().isSuccessful() && payload instanceof Content) { final Content content = (Content) payload; final DateTime lastModified = content.getAttributes().get(Content.CONTENT_LAST_MODIFIED, DateTime.class); if (lastModified != null) { response.getHeaders().set(HttpHeaders.LAST_MODIFIED, DateUtils.formatDate(lastModified.toDate())); } final String etag = content.getAttributes().get(Content.CONTENT_ETAG, String.class); if (etag != null) { response.getHeaders().set(HttpHeaders.ETAG, "\"" + etag + "\""); } } return response; } }
@Override public Response handle(final Context context) throws Exception { Response response = context.proceed(); try { if (isSuccessfulRequestWithContent(context, response)) { Repository repository = context.getRepository(); StorageFacet storageFacet = repository.facet(StorageFacet.class); Content content = (Content) response.getPayload(); AttributesMap attributes = content.getAttributes(); maybeUpdateLastDownloaded(storageFacet, attributes); } } catch (Exception e) { log.error("Failed to update last downloaded time for request {}", context.getRequest().getPath(), e); } return response; }
final Payload payload = response.getPayload(); if (payload == null) { return response;
@Override public Response handle(final Context context) throws Exception { Response response = context.proceed(); if (assetDownloadCountStore.isEnabled() && response != null && response.getStatus().isSuccessful() && isGetRequest(context.getRequest())) { Asset asset = getAssetFromPayload(response.getPayload()); if (asset != null) { assetDownloadCountStore.incrementCount(context.getRepository().getName(), asset.name()); } } return response; }