Hey, Here is a small batch of patches for the SUSE Studio integration part. These patches include the following changes:
1. Workaround the Studio API that is returning incomplete URLs in certain versions 2. Very basic normalization for the SUSE Studio base URL that is entered by a user 3. Catch MalformedURLExceptions for not crashing in case of a missing protocol etc. Best regards, Johannes -- SUSE LINUX Products GmbH, HRB 16746 (AG Nürnberg) GF: Jeff Hawn, Jennifer Guild, Felix Imendörffer
>From 0cc632b53cb828837bfb556758c1b2922d4df96e Mon Sep 17 00:00:00 2001 From: Johannes Renner <jren...@suse.de> Date: Tue, 13 Nov 2012 13:47:37 +0100 Subject: [PATCH 1/3] Workaround for Studio API returning incomplete URLs --- .../frontend/action/renderers/ImagesRenderer.java | 29 +++++++++++--------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/java/code/src/com/redhat/rhn/frontend/action/renderers/ImagesRenderer.java b/java/code/src/com/redhat/rhn/frontend/action/renderers/ImagesRenderer.java index 716c4a5..2859bd8 100644 --- a/java/code/src/com/redhat/rhn/frontend/action/renderers/ImagesRenderer.java +++ b/java/code/src/com/redhat/rhn/frontend/action/renderers/ImagesRenderer.java @@ -86,7 +86,7 @@ public class ImagesRenderer extends BaseFragmentRenderer { */ private List<Image> getImages(User user, HttpServletRequest request) throws IOException { - List<Appliance> ret = new ArrayList<Appliance>(); + List<Appliance> appliances = new ArrayList<Appliance>(); // Lookup credentials and url Credentials creds = CredentialsFactory.lookupStudioCredentials(user); @@ -97,22 +97,13 @@ public class ImagesRenderer extends BaseFragmentRenderer { // Get appliance builds from studio SUSEStudio studio = new SUSEStudio(studioUser, studioKey, studioUrl); - ret = studio.getAppliances(); + appliances = studio.getAppliances(); } else { request.setAttribute(ATTRIB_ERROR_MSG, "images.message.error.nocreds"); } // Convert to a list of images - return convertAppliances(ret); - } - - /** - * Convert a list of {@link Appliance}s to a list of {@link Image}s. - * @param appliances list of appliances - * @return list of images - */ - private List<Image> convertAppliances(List<Appliance> appliances) { List<Image> ret = new LinkedList<Image>(); for (Appliance appliance : appliances) { // Create one image object for every build @@ -124,10 +115,10 @@ public class ImagesRenderer extends BaseFragmentRenderer { Image img = new Image(); // Appliance attributes img.setArch(appliance.getArch()); - img.setEditUrl(appliance.getEditUrl()); + img.setEditUrl(fixURL(appliance.getEditUrl(), creds)); img.setName(appliance.getName()); // Build attributes - img.setDownloadUrl(build.getDownloadUrl()); + img.setDownloadUrl(fixURL(build.getDownloadUrl(), creds)); img.setId(new Long(build.getId())); img.setImageSize(build.getImageSize()); img.setImageType(build.getImageType()); @@ -139,6 +130,18 @@ public class ImagesRenderer extends BaseFragmentRenderer { } /** + * Certain versions of SUSE Studio provide relative URLs only, + * automatically prepend the base URL in this case. + */ + private String fixURL(String url, Credentials creds) { + String ret = url; + if (ret != null && ret.startsWith("/")) { + ret = creds.getUrl() + ret; + } + return ret; + } + + /** * {@inheritDoc} */ @Override -- 1.7.10.4
>From 46d46e7752e8c7eb665109de9aaaf3bfaeee35fd Mon Sep 17 00:00:00 2001 From: Johannes Renner <jren...@suse.de> Date: Tue, 13 Nov 2012 16:24:39 +0100 Subject: [PATCH 2/3] Basic normalization for SUSE Studio base URL --- .../action/user/UserCredentialsEditAction.java | 23 ++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/java/code/src/com/redhat/rhn/frontend/action/user/UserCredentialsEditAction.java b/java/code/src/com/redhat/rhn/frontend/action/user/UserCredentialsEditAction.java index 8048eb1..66efc89 100644 --- a/java/code/src/com/redhat/rhn/frontend/action/user/UserCredentialsEditAction.java +++ b/java/code/src/com/redhat/rhn/frontend/action/user/UserCredentialsEditAction.java @@ -64,7 +64,7 @@ public class UserCredentialsEditAction extends RhnAction { Credentials newCreds = CredentialsFactory.createCredentials(); newCreds.setUsername(request.getParameter(PARAM_USER).trim()); newCreds.setPassword(request.getParameter(PARAM_KEY).trim()); - newCreds.setUrl(request.getParameter(PARAM_URL).trim()); + newCreds.setUrl(normalizeURL(request.getParameter(PARAM_URL))); // Check for completeness if (newCreds.isEmpty() || newCreds.isComplete()) { @@ -77,7 +77,8 @@ public class UserCredentialsEditAction extends RhnAction { // Store the credentials creds.setUsername(newCreds.getUsername()); creds.setPassword(newCreds.getPassword()); - creds.setUrl(newCreds.getUrl()); + String url = newCreds.getUrl(); + creds.setUrl(url.isEmpty() ? DEFAULT_URL : url); CredentialsFactory.storeCredentials(creds); } ActionMessages messages = new ActionMessages(); @@ -96,4 +97,22 @@ public class UserCredentialsEditAction extends RhnAction { } return mapping.findForward(RhnHelper.DEFAULT_FORWARD); } + + /** + * Very basic URL normalization. + * @param url + * @return url normalized + */ + private String normalizeURL(String url) { + String ret = url; + if (ret != null) { + // trim() and make all lowercase + ret = url.trim().toLowerCase(); + // Remove trailing slashes + while (ret.endsWith("/")) { + ret = ret.substring(0, ret.length() - 1); + } + } + return ret; + } } -- 1.7.10.4
>From e11683a955cfc9a4c924cdc11010e407b05d4ae6 Mon Sep 17 00:00:00 2001 From: Johannes Renner <jren...@suse.de> Date: Tue, 13 Nov 2012 16:25:20 +0100 Subject: [PATCH 3/3] Catch MalformedURLException in case of missing protocol etc. --- .../redhat/rhn/frontend/action/renderers/ImagesRenderer.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/java/code/src/com/redhat/rhn/frontend/action/renderers/ImagesRenderer.java b/java/code/src/com/redhat/rhn/frontend/action/renderers/ImagesRenderer.java index 2859bd8..cb81d0b 100644 --- a/java/code/src/com/redhat/rhn/frontend/action/renderers/ImagesRenderer.java +++ b/java/code/src/com/redhat/rhn/frontend/action/renderers/ImagesRenderer.java @@ -16,6 +16,7 @@ package com.redhat.rhn.frontend.action.renderers; import java.io.IOException; +import java.net.MalformedURLException; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; @@ -73,6 +74,13 @@ public class ImagesRenderer extends BaseFragmentRenderer { request.getSession().setAttribute(ATTRIB_IMAGES_LIST, images); } } + catch (RuntimeException re) { + if (re.getCause() instanceof MalformedURLException) { + logger.error(re.getMessage()); + request.setAttribute(ATTRIB_ERROR_MSG, "images.message.error.connection"); + } + else throw re; + } catch (IOException e) { logger.error(e.getMessage()); request.setAttribute(ATTRIB_ERROR_MSG, "images.message.error.connection"); -- 1.7.10.4
_______________________________________________ Spacewalk-devel mailing list Spacewalk-devel@redhat.com https://www.redhat.com/mailman/listinfo/spacewalk-devel