1 /** 2 * Copyright 2017 Google Inc. All Rights Reserved. 3 * 4 * <p>Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file 5 * except in compliance with the License. You may obtain a copy of the License at 6 * 7 * <p>http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * <p>Unless required by applicable law or agreed to in writing, software distributed under the 10 * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 11 * express or implied. See the License for the specific language governing permissions and 12 * limitations under the License. 13 */ 14 package com.android.vts.util; 15 16 import java.net.MalformedURLException; 17 import java.net.URI; 18 import java.net.URISyntaxException; 19 import java.net.URL; 20 21 /** UrlUtil, a helper class for formatting and validating URLs. */ 22 public class UrlUtil { 23 private static final String HTTPS = "https"; 24 25 public static class LinkDisplay { 26 public final String name; 27 public final String url; 28 29 /** 30 * Create a link display object. 31 * 32 * @param uri The hyperlink URI. 33 */ LinkDisplay(URI uri)34 public LinkDisplay(URI uri) { 35 this.url = uri.toString(); 36 37 // Parse the name from the URI path 38 int lastSeparator = uri.getPath().lastIndexOf('/'); 39 if (lastSeparator < 0) { 40 this.name = uri.toString(); 41 } else { 42 this.name = uri.getPath().substring(lastSeparator + 1); 43 } 44 } 45 } 46 47 /** 48 * Validates and formats a URL. 49 * 50 * <p>Ensures that the protocol is HTTPs and the URL is properly formatted. This avoids link 51 * issues in the UI and possible vulnerabilities due to embedded JS in URLs. 52 * 53 * @param urlString The url string to validate. 54 * @returns The validated LinkDisplay object. 55 */ processUrl(String urlString)56 public static LinkDisplay processUrl(String urlString) { 57 try { 58 URL url = new URL(urlString); 59 String scheme = url.getProtocol(); 60 String userInfo = url.getUserInfo(); 61 String host = url.getHost(); 62 int port = url.getPort(); 63 String path = url.getPath(); 64 String query = url.getQuery(); 65 String fragment = url.getRef(); 66 if (!url.getProtocol().equals(HTTPS)) 67 throw new MalformedURLException(); 68 URI uri = new URI(scheme, userInfo, host, port, path, query, fragment); 69 return new LinkDisplay(uri); 70 } catch (MalformedURLException | URISyntaxException e) { 71 return null; 72 } 73 } 74 } 75