Index: lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/ResourceConstants.java =================================================================== diff -u -r1bf70a335f5b30a1907ccae506908b05374c6c8c -rcadbe1a983addbcc43e8bbcd5b76f822b7ed3c99 --- lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/ResourceConstants.java (.../ResourceConstants.java) (revision 1bf70a335f5b30a1907ccae506908b05374c6c8c) +++ lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/ResourceConstants.java (.../ResourceConstants.java) (revision cadbe1a983addbcc43e8bbcd5b76f822b7ed3c99) @@ -153,10 +153,6 @@ public static final String ATTR_USER_UID = "userUid"; - public static final String DEFUALT_PROTOCOL_REFIX = "http://"; - - public static final String ALLOW_PROTOCOL_REFIX = new String("[http://|https://|ftp://|nntp://]"); - public static final String EVENT_NAME_NOTIFY_TEACHERS_ON_ASSIGMENT_SUBMIT = "notify_teachers_on_assigment_submit"; public static final String SHARED_ITEMS_DEFINITION_NAME = "shared.items.output.definition.rsrc"; Fisheye: Tag cadbe1a983addbcc43e8bbcd5b76f822b7ed3c99 refers to a dead (removed) revision in file `lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/util/ResourceWebUtils.java'. Fisheye: No comparison available. Pass `N' to diff? Index: lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/web/action/ViewItemAction.java =================================================================== diff -u -r7d2053d1d049adee30bd0c726fd94227b982c75f -rcadbe1a983addbcc43e8bbcd5b76f822b7ed3c99 --- lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/web/action/ViewItemAction.java (.../ViewItemAction.java) (revision 7d2053d1d049adee30bd0c726fd94227b982c75f) +++ lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/web/action/ViewItemAction.java (.../ViewItemAction.java) (revision cadbe1a983addbcc43e8bbcd5b76f822b7ed3c99) @@ -52,7 +52,6 @@ import org.lamsfoundation.lams.tool.rsrc.service.IResourceService; import org.lamsfoundation.lams.tool.rsrc.service.ResourceServiceProxy; import org.lamsfoundation.lams.tool.rsrc.util.ResourceItemComparator; -import org.lamsfoundation.lams.tool.rsrc.util.ResourceWebUtils; import org.lamsfoundation.lams.usermanagement.dto.UserDTO; import org.lamsfoundation.lams.util.WebUtil; import org.lamsfoundation.lams.web.session.SessionManager; @@ -128,7 +127,7 @@ int itemIdx = NumberUtils.stringToInt(request.getParameter(ResourceConstants.PARAM_ITEM_INDEX)); request.setAttribute(ResourceConstants.ATTR_RESOURCE_REVIEW_URL, - getReviewUrl(item, sessionMapID, mode, itemIdx)); + getReviewUrl(request, item, sessionMapID, mode, itemIdx)); request.setAttribute(ResourceConstants.ATTR_ALLOW_COMMENTS, item.isAllowComments()); @@ -238,7 +237,7 @@ // Private method // ************************************************************************************* /** - * Return resoruce item according to ToolAccessMode. + * Return resource item according to ToolAccessMode. * * @param request * @param sessionMap @@ -270,21 +269,40 @@ private static Pattern usePopupButtonForURL = Pattern.compile("wikipedia|google", Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE); + private static Pattern protocolExists = Pattern.compile("http://|https://|ftp://|nntp://", + Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE); + private static Pattern httpPattern = Pattern.compile("http://", Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE); + public static final String DEFAULT_PROTOCOL = "http://"; + public static final String HTTPS_SCHEME = "https"; - private Object getReviewUrl(ResourceItem item, String sessionMapID, String mode, int itemIdx) { + + private Object getReviewUrl(HttpServletRequest request, ResourceItem item, String sessionMapID, String mode, int itemIdx) { short type = item.getType(); String url = null; switch (type) { case ResourceConstants.RESOURCE_TYPE_URL: - // See LDEV-1736 regarding wikipedia regex - Matcher matcher = usePopupButtonForURL.matcher(item.getUrl()); - boolean usePopup = matcher.find(); + // protocol missing? Assume http. Must do before the popup checks otherwise LDEV-4503 case may be missed. + url = item.getUrl(); + if (!protocolExists.matcher(url).find()) { + url = DEFAULT_PROTOCOL + url; + } - if (item.isOpenUrlNewWindow() || usePopup) { - url = constructUrlOpenInNewWindow(item, sessionMapID, mode, itemIdx); - } else { - url = ResourceWebUtils.protocol(item.getUrl()); + // check all three cases that trigger popup - first is set in authoring + boolean usePopup = item.isOpenUrlNewWindow(); + // See LDEV-4503 regarding https/http issues + if ( ! usePopup ) { + String serverScheme = request.getScheme(); + usePopup = HTTPS_SCHEME.equalsIgnoreCase(serverScheme) && httpPattern.matcher(url).find(); } + // See LDEV-1736 regarding wikipedia regex + if ( ! usePopup ) { + Matcher matcher = usePopupButtonForURL.matcher(url); + usePopup = matcher.find(); + } + + if ( usePopup ) { + url = constructUrlOpenInNewWindow(item, sessionMapID, mode, itemIdx); + } break; case ResourceConstants.RESOURCE_TYPE_FILE: