private static String protocolName(@Nullable SessionProtocol protocol) { return protocol != null ? protocol.uriText() : "<unknown>"; }
/** * Returns the {@link Scheme} of the specified {@link SerializationFormat} and {@link SessionProtocol}. * This method returns the same {@link Scheme} instance for the same combination of * {@link SerializationFormat} and {@link SessionProtocol}. */ public static Scheme of(SerializationFormat serializationFormat, SessionProtocol sessionProtocol) { return SCHEMES.get(requireNonNull(serializationFormat, "serializationFormat").uriText() + '+' + requireNonNull(sessionProtocol, "sessionProtocol").uriText()); }
@Override public void connectionOpen(SessionProtocol protocol, InetSocketAddress remoteAddr, InetSocketAddress localAddr, AttributeMap attrs) throws Exception { final int activeChannels = this.activeChannels.incrementAndGet(); if (logger.isInfoEnabled()) { attrs.attr(OPEN_NANOS).set(ticker.read()); logger.info("[L:{} - R:{}][{}] OPEN (active channels: {})", localAddr, remoteAddr, protocol.uriText(), activeChannels); } }
private static void validateScheme(String scheme) { for (SessionProtocol p : SessionProtocol.values()) { if (scheme.equalsIgnoreCase(p.uriText())) { return; } } throw new IllegalArgumentException("scheme : " + scheme + " (expected: one of " + ImmutableList.copyOf(SessionProtocol.values()) + ')'); }
private Scheme(SerializationFormat serializationFormat, SessionProtocol sessionProtocol) { this.serializationFormat = requireNonNull(serializationFormat, "serializationFormat"); this.sessionProtocol = requireNonNull(sessionProtocol, "sessionProtocol"); uriText = serializationFormat().uriText() + '+' + sessionProtocol().uriText(); }
@Override public void connectionClosed(SessionProtocol protocol, InetSocketAddress remoteAddr, InetSocketAddress localAddr, AttributeMap attrs) throws Exception { final int activeChannels = this.activeChannels.decrementAndGet(); if (logger.isInfoEnabled() && attrs.hasAttr(OPEN_NANOS)) { final long closeNanos = ticker.read(); final long elapsedNanos = closeNanos - attrs.attr(OPEN_NANOS).get(); logger.info("[L:{} ! R:{}][{}] CLOSED (lasted for: {}, active channels: {})", localAddr, remoteAddr, protocol.uriText(), TextFormatter.elapsed(elapsedNanos), activeChannels); } } }
private static void exportScheme(Map<String, String> out, RequestContext ctx, RequestLog log) { if (log.isAvailable(RequestLogAvailability.SCHEME)) { out.put(SCHEME.mdcKey, log.scheme().uriText()); } else { out.put(SCHEME.mdcKey, "unknown+" + ctx.sessionProtocol().uriText()); } }
@Override public void operationComplete(ChannelFuture f) { final Channel ch = f.channel(); assert ch.eventLoop().inEventLoop(); if (f.isSuccess()) { serverChannels.add(ch); ch.closeFuture() .addListener((ChannelFutureListener) future -> serverChannels.remove(future.channel())); final InetSocketAddress localAddress = (InetSocketAddress) ch.localAddress(); final ServerPort actualPort = new ServerPort(localAddress, port.protocols()); // Update the boss thread so its name contains the actual port. Thread.currentThread().setName(bossThreadName(actualPort)); synchronized (activePorts) { // Update the map of active ports. activePorts.put(localAddress, actualPort); } if (logger.isInfoEnabled()) { if (localAddress.getAddress().isAnyLocalAddress() || localAddress.getAddress().isLoopbackAddress()) { port.protocols().forEach(p -> logger.info( "Serving {} at {} - {}://127.0.0.1:{}/", p.name(), localAddress, p.uriText(), localAddress.getPort())); } else { logger.info("Serving {} at {}", Joiner.on('+').join(port.protocols()), localAddress); } } } } }
@Override public String toString() { String strVal = this.strVal; if (strVal != null) { return strVal; } final StringBuilder buf = new StringBuilder(96); // Prepend the current channel information if available. final Channel ch = channel(); final boolean hasChannel = ch != null; if (hasChannel) { buf.append(ch); } buf.append('[') .append(sessionProtocol().uriText()) .append("://") .append(endpoint.authority()) .append(path()) .append('#') .append(method()) .append(']'); strVal = buf.toString(); if (hasChannel) { this.strVal = strVal; } return strVal; }
.append(sessionProtocol().uriText()) .append("://") .append(virtualHost().defaultHostname());
private static String http2uri(SessionProtocol protocol) { return "tbinary+" + protocol.uriText() + "://127.0.0.1:" + http2Port() + TSERVLET_PATH; }
private static String http1uri(SessionProtocol protocol) { return "tbinary+" + protocol.uriText() + "://127.0.0.1:" + http1Port() + TSERVLET_PATH; }
buf.append(SerializationFormat.UNKNOWN.uriText()) .append('+') .append(sessionProtocol.uriText());
/** * Returns the URI for the {@link Server} of the specified protocol. * * @throws IllegalStateException if the {@link Server} is not started or * it did not open a port of the protocol. */ public String uri(SessionProtocol protocol, String path) { requireNonNull(protocol, "protocol"); requireNonNull(path, "path"); // This will ensure that the server has started. server(); final int port; if (!protocol.isTls() && hasHttp()) { port = httpPort(); } else if (protocol.isTls() && hasHttps()) { port = httpsPort(); } else { throw new IllegalStateException("can't find the specified port"); } return protocol.uriText() + "://127.0.0.1:" + port + path; }
@Override public HttpResponse serve(ServiceRequestContext ctx, AggregatedHttpMessage msg, String defaultHostname, SamlPortConfig portConfig) { try { final MessageContext<Response> messageContext; if (cfg.endpoint().bindingProtocol() == SamlBindingProtocol.HTTP_REDIRECT) { messageContext = HttpRedirectBindingUtil.toSamlObject(msg, SAML_RESPONSE, idpConfigs, defaultIdpConfig); } else { messageContext = HttpPostBindingUtil.toSamlObject(msg, SAML_RESPONSE); } final String endpointUri = cfg.endpoint().toUriString(portConfig.scheme().uriText(), defaultHostname, portConfig.port()); final Response response = messageContext.getMessage(); final Assertion assertion = getValidatedAssertion(response, endpointUri); // Find a session index which is sent by an identity provider. final String sessionIndex = assertion.getAuthnStatements().stream() .map(AuthnStatement::getSessionIndex) .filter(Objects::nonNull) .findFirst().orElse(null); final SAMLBindingContext bindingContext = messageContext.getSubcontext(SAMLBindingContext.class); final String relayState = bindingContext != null ? bindingContext.getRelayState() : null; return ssoHandler.loginSucceeded(ctx, msg, messageContext, sessionIndex, relayState); } catch (SamlException e) { return ssoHandler.loginFailed(ctx, msg, null, e); } }
final SingleLogoutService slo = build(SingleLogoutService.DEFAULT_ELEMENT_NAME); slo.setBinding(endpoint.bindingProtocol().urn()); slo.setLocation(endpoint.toUriString(portConfig.scheme().uriText(), defaultHostname, portConfig.port()));
private static AssertionConsumerService buildAssertionConsumerServiceElement( SamlAssertionConsumerConfig config, SamlPortConfig portConfig, String hostname, int index) { final AssertionConsumerService consumer = build(AssertionConsumerService.DEFAULT_ELEMENT_NAME); consumer.setLocation(config.endpoint().toUriString(portConfig.scheme().uriText(), hostname, portConfig.port())); consumer.setBinding(config.endpoint().bindingProtocol().urn()); consumer.setIndex(index); // Add 'isDefault' attribute only when told so. if (config.isDefault()) { consumer.setIsDefault(true); } return consumer; }
private HttpEndpointHealthChecker( ClientFactory clientFactory, Endpoint endpoint, SessionProtocol protocol, String healthCheckPath, int healthCheckPort, Function<? super ClientOptionsBuilder, ClientOptionsBuilder> configurator) { final String scheme = protocol.uriText(); final String ipAddr = endpoint.ipAddr(); final HttpClientBuilder builder; if (ipAddr == null) { builder = new HttpClientBuilder(scheme + "://" + endpoint.authority()); } else { final int port = healthCheckPort > 0 ? healthCheckPort : endpoint.port(protocol.defaultPort()); if (endpoint.ipFamily() == StandardProtocolFamily.INET) { builder = new HttpClientBuilder(scheme + "://" + ipAddr + ':' + port); } else { builder = new HttpClientBuilder(scheme + "://[" + ipAddr + "]:" + port); } builder.setHttpHeader(HttpHeaderNames.AUTHORITY, endpoint.authority()); } httpClient = builder.factory(clientFactory) .options(configurator.apply(new ClientOptionsBuilder()).build()) .build(); this.healthCheckPath = healthCheckPath; }
final SamlEndpoint acsEndpoint = idp.acsEndpoint() .orElse(sp.defaultAcsConfig().endpoint()); authnRequest.setAssertionConsumerServiceURL(acsEndpoint.toUriString(portConfig.scheme().uriText(), defaultHostname, portConfig.port()));
final String endpointUri = endpoint.toUriString(portConfig.scheme().uriText(), defaultHostname, portConfig.port()); final LogoutRequest logoutRequest = messageContext.getMessage();