diff --git a/src/Platform_Core/org/lobobrowser/security/PermissionSystem.java b/src/Platform_Core/org/lobobrowser/security/PermissionSystem.java index 4932a307..cd143bc3 100644 --- a/src/Platform_Core/org/lobobrowser/security/PermissionSystem.java +++ b/src/Platform_Core/org/lobobrowser/security/PermissionSystem.java @@ -74,6 +74,10 @@ public boolean isRequestPermitted(final Request request) { } } + public boolean isHTTPPermitted(final Request request) { + return getLastBoard().isHTTPPermitted(request); + } + public List getBoards() { return boards; } @@ -139,6 +143,12 @@ public boolean isRequestPermitted(final Request request) { return row.isRequestPermitted(request); } + public boolean isHTTPPermitted(final Request request) { + final String requestHost = request.url.getHost().toLowerCase(); + final PermissionRow row = getRow(requestHost); + return row.isHTTPPermitted(request); + } + public void dump() { System.out.print(String.format("\n%30s", "all")); headerRowOpt.ifPresent(r -> r.dump()); @@ -212,6 +222,15 @@ public PermissionResult getPermission(final Request request) { return requestCells[requestOrdinal].getEffectivePermission(); } + public boolean isHTTPPermitted(final Request request) { + return getHTTPPermission(request).permission == Permission.Allow; + } + + public PermissionResult getHTTPPermission(final Request request) { + final int requestOrdinal = RequestKind.HTTP.ordinal(); + return requestCells[requestOrdinal].getEffectivePermission(); + } + public void dump() { Arrays.stream(requestCells).forEach(c -> { final PermissionResult permissionResult = c.getEffectivePermission(); diff --git a/src/Platform_Core/org/lobobrowser/security/RequestManager.java b/src/Platform_Core/org/lobobrowser/security/RequestManager.java index 277cffa7..3a469ef7 100644 --- a/src/Platform_Core/org/lobobrowser/security/RequestManager.java +++ b/src/Platform_Core/org/lobobrowser/security/RequestManager.java @@ -42,6 +42,7 @@ public final class RequestManager { private final NavigatorFrame frame; + public RequestManager(final NavigatorFrame frame) { this.frame = frame; } @@ -49,8 +50,11 @@ public RequestManager(final NavigatorFrame frame) { private static class RequestCounters { private final int counters[] = new int[UserAgentContext.RequestKind.values().length]; - public void updateCounts(final RequestKind kind) { - counters[kind.ordinal()]++; + public void updateCounts(final Request request) { + counters[request.kind.ordinal()]++; + if (request.url.getProtocol().equals("http")) { + counters[UserAgentContext.RequestKind.HTTP.ordinal()]++; + } } @Override @@ -67,7 +71,7 @@ public String toString() { private synchronized void updateCounter(final Request request) { final String host = request.url.getHost().toLowerCase(); ensureHostInCounter(host); - hostToCounterMap.get(host).updateCounts(request.kind); + hostToCounterMap.get(host).updateCounts(request); } private void ensureHostInCounter(final String host) { @@ -106,11 +110,23 @@ private Request rewriteRequest(final Request request) { } public boolean isRequestPermitted(final Request request) { + final Request finalRequest = rewriteRequest(request); if (permissionSystemOpt.isPresent()) { final Boolean permitted = permissionSystemOpt.map(p -> p.isRequestPermitted(finalRequest)).orElse(false); updateCounter(finalRequest); + if (permitted) { + boolean selectHTTP = permissionSystemOpt.get().isHTTPPermitted(finalRequest); + String protocolTest = request.url.getProtocol(); + String frameProtocol = getFrameURL().get().getProtocol(); + + if (protocolTest.equals("http") && frameProtocol.equals("https") && !selectHTTP) { + System.out.println("Denied " + request); + return false; + } + } + // dumpCounters(); return permitted; } else { diff --git a/src/Platform_Public_API/org/lobobrowser/ua/UserAgentContext.java b/src/Platform_Public_API/org/lobobrowser/ua/UserAgentContext.java index 30fac004..a5183f88 100644 --- a/src/Platform_Public_API/org/lobobrowser/ua/UserAgentContext.java +++ b/src/Platform_Public_API/org/lobobrowser/ua/UserAgentContext.java @@ -14,7 +14,8 @@ */ public interface UserAgentContext { public enum RequestKind { - Image("Img"), CSS("CSS"), Cookie("Cookie"), JavaScript("JS"), Frame("Frame"), XHR("XHR"), Referrer("Referrer"); + Image("Img"), CSS("CSS"), Cookie("Cookie"), JavaScript("JS"), Frame("Frame"), XHR("XHR"), Referrer( + "Referrer"), HTTP("HTTP Request"); public final String shortName;