@Override public ResourcePath resourcePath() { return delegate.resourcePath(); }
private DefaultResourceRequest(ResourceRequest original) { this.requestType = original.requestType(); this.resourcePath = original.resourcePath(); this.requestId = original.requestId(); }
public TraversingResponder(Executor executor, GlobalContext globalContext, ResourceRequest inReplyTo, ChannelHandlerContext ctx) { super(inReplyTo, ctx); this.executor = executor; this.currentResource = globalContext; this.plan = new TraversalPlan(inReplyTo.requestType(), inReplyTo.resourcePath()); }
private void initSecurityContext(final InboundInterceptorContext context, final ResourceRequest req, final DefaultSecurityContext securityContext, String token) { String prefix = getPrefix(req.resourcePath()); SecurityHelper.auth(client, securityContext, prefix, token, // Success function () -> context.forward(), // No Such Resource function () -> { log.info("Auth not configured for " + prefix); context.forward(); }, // Not Authorized function error -> { log.warn("Authentication failed. Request: " + req + ", error: " + error); context.replyWith(new DefaultResourceErrorResponse(req, ResourceErrorResponse.ErrorType.NOT_AUTHORIZED)); }, // Handle throwable throwable -> { log.error("Error processing authentication", throwable); context.replyWith(new DefaultResourceErrorResponse(req, ResourceErrorResponse.ErrorType.INTERNAL_ERROR)); }); }
List<ResourcePath.Segment> segments = request.resourcePath().segments(); String filename = segments.size() < 1 ? "unknown" : segments.get(segments.size()-1).name(); factory.createAttribute(original, "filename", filename); request.resourcePath().toString(), filename, contentType, "binary", Charset.forName("utf-8"), clen);
/** * Encode (for some cheap value of 'encode') a resulting resource into a ResourceState. * * @param ctx * @param response The response to encode. * @throws Exception */ protected void encode(ChannelHandlerContext ctx, ResourceResponse response) { final ClientResourceResponse.ResponseType responseType = ClientResourceResponse.ResponseType.OK; if (response.resource() == null) { ctx.writeAndFlush(new ClientResourceResponseImpl(response.inReplyTo(), responseType, response.inReplyTo().resourcePath().toString(), null)); ctx.fireUserEventTriggered(new RequestCompleteEvent(response.requestId())); return; } ctx.writeAndFlush(new ClientResourceResponseImpl(response.inReplyTo(), responseType, response.inReplyTo().resourcePath().toString(), response.state())); ctx.fireUserEventTriggered(new RequestCompleteEvent(response.requestId())); }
private List<Interceptor> getInterceptors(String chainName, ResourceRequest request) { List<Interceptor> result = new LinkedList<>(); List<InterceptorConfigEntry> chainConfigEntries = interceptorsConfig.get().getChainConfig(chainName); for (InterceptorConfigEntry configEntry : chainConfigEntries) { String interceptorName = configEntry.getInterceptorName(); Interceptor interceptor = interceptors.get(interceptorName); if (interceptor == null) { log.warnf("No interceptor under key '%s'", interceptorName); continue; } // Verify resourcePath matches if (configEntry.getResourcePathMapping() != null && request != null) { ResourcePath interceptorResPath = new ResourcePath(configEntry.getResourcePathMapping()); if (!interceptorResPath.isParentOf(request.resourcePath())) { continue; } } // Verify requestType matches if (configEntry.getRequestTypeMapping() != null && request != null) { if (!request.requestType().matches(configEntry.getRequestTypeMapping())) { continue; } } result.add(interceptor); } return result; }
@Override public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) throws Exception { if (msg instanceof ResourceResponse) { ResourceResponse response = (ResourceResponse) msg; if (msg instanceof ResourceErrorResponse) { ClientResourceResponse.ResponseType responseType = decodeResponseType(((ResourceErrorResponse) msg).errorType()); ctx.writeAndFlush(new ClientResourceResponseImpl(response.inReplyTo(), responseType, response.inReplyTo().resourcePath().toString(), ((ResourceErrorResponse) msg).state())); } else { encode(ctx, response); } } else { super.write(ctx, msg, promise); } }
@Override public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception { if (msg instanceof ByteBuf) { bytesRead += ((ByteBuf) msg).readableBytes(); startTime = startTime != 0 ? startTime : System.currentTimeMillis(); } else if (msg instanceof DefaultHttpRequest) { DefaultHttpRequest req = (DefaultHttpRequest) msg; event = new AnalyticsEvent(); startTime = startTime != 0 ? startTime : System.currentTimeMillis(); event.setTimestamp(startTime); event.setMethod(req.getMethod().name()); event.setUri(req.getUri()); event.clientAddress(ctx.channel().remoteAddress()); //event.uri(req.resourcePath().toString()); } else if (msg instanceof ResourceRequest) { ResourceRequest req = (ResourceRequest) msg; event.setApplication(req.resourcePath().head().toString()); event.setUserId(req.requestContext().securityContext().getSubject()); event.setApiRequest(true); } super.channelRead(ctx, msg); }
response.headers().add(HttpHeaders.Names.LOCATION, msg.resource().uri().toString()); } else { response.headers().add(HttpHeaders.Names.LOCATION, msg.inReplyTo().resourcePath().toString());
/** * Encode (for some cheap value of 'encode') a resulting resource into a ResourceState. * * @param ctx * @param response The response to encode. * @throws Exception */ protected void encode(ChannelHandlerContext ctx, ResourceResponse response, ChannelPromise promise) { final ClientResourceResponse.ResponseType responseType = ClientResourceResponse.ResponseType.OK; if (response.resource() == null) { ctx.writeAndFlush(new ClientResourceResponseImpl(response.inReplyTo(), responseType, response.inReplyTo().resourcePath().toString(), null)); ctx.fireUserEventTriggered(new RequestCompleteEvent(response.requestId())); return; } final ResourceStateEncoder encoder = new ResourceStateEncoder(); RootEncodingDriver driver = new RootEncodingDriver(response.inReplyTo().requestContext(), encoder, response.resource(), () -> { ResourceState state = encoder.root(); response.setState(state); ctx.writeAndFlush(response, promise).addListener(ChannelFutureListener.FIRE_EXCEPTION_ON_FAILURE).addListener(ChannelFutureListener.CLOSE_ON_FAILURE); }, t -> handleError(ctx, response.inReplyTo(), t)); try { driver.encode(); } catch (Throwable e) { handleError(ctx, response.inReplyTo(), e); } }
@Override public void onInbound(InboundInterceptorContext ctx) throws Exception { ResourceRequest req = ctx.request(); String prefix = getPrefix(req.resourcePath()); if (prefix == null) { ctx.forward();