HostInfo getHost()

in src/main/java/org/apache/sling/security/impl/ReferrerFilter.java [358:385]


    HostInfo getHost(final String referrer) {
        final int startPos = referrer.indexOf("://") + 3;
        if (startPos == 2 || startPos == referrer.length()) {
            // we consider this illegal
            return null;
        }
        final HostInfo info = new HostInfo();
        info.scheme = referrer.substring(0, startPos - 3);

        final int paramStart = referrer.indexOf('?');
        final String hostAndPath = (paramStart == -1 ? referrer : referrer.substring(0, paramStart));
        final int endPos = hostAndPath.indexOf('/', startPos);
        final String hostPart = (endPos == -1 ? hostAndPath.substring(startPos) : hostAndPath.substring(startPos, endPos));
        final int hostNameStart = hostPart.indexOf('@') + 1;
        final int hostNameEnd = hostPart.lastIndexOf(':');
        if (hostNameEnd < hostNameStart) {
            info.host = hostPart.substring(hostNameStart);
            if (info.scheme.equals("http")) {
                info.port = 80;
            } else if (info.scheme.equals("https")) {
                info.port = 443;
            }
        } else {
            info.host = hostPart.substring(hostNameStart, hostNameEnd);
            info.port = Integer.valueOf(hostPart.substring(hostNameEnd + 1));
        }
        return info;
    }