aboutsummaryrefslogtreecommitdiffstats
path: root/jtosca/src/main/java/org/openecomp/sdc/toscaparser/utils/UrlUtils.java
blob: 1bf2f503a2b4d2f09fda7589ef23b04a2137bee2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
package org.openecomp.sdc.toscaparser.utils;

import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

import org.openecomp.sdc.toscaparser.common.ExceptionCollector;

public class UrlUtils {
	
	public static boolean validateUrl(String sUrl) {
        // Validates whether the given path is a URL or not

        // If the given path includes a scheme (http, https, ftp, ...) and a net
        // location (a domain name such as www.github.com) it is validated as a URL
		try {
			URL url = new URL(sUrl);
			if(url.getProtocol().equals("file")) {
				return true;
			}
			return url.getAuthority() != null;
		}
		catch(MalformedURLException e) {
			return false; 
		}
	}
	
	public static String joinUrl(String sUrl,String relativePath) {
        // Builds a new URL from the given URL and the relative path

        // Example:
        //   url: http://www.githib.com/openstack/heat
        //   relative_path: heat-translator
        //   - joined: http://www.githib.com/openstack/heat-translator
		if(!validateUrl(sUrl)) {
			ExceptionCollector.appendException(String.format(
					"ValueError: The URL \"%s\" is malformed",sUrl));
		}
		try {
			URL base = new URL(sUrl);
			return (new URL(base,relativePath)).toString();
		}
		catch(MalformedURLException e) {
			ExceptionCollector.appendException(String.format(
					"ValueError: Joining URL \"%s\" and relative path \"%s\" caused an exception",sUrl,relativePath));
			return sUrl; 
		}
	}

	public static boolean isUrlAccessible(String sUrl) {
        // Validates whether the given URL is accessible

        // Returns true if the get call returns a 200 response code.
        // Otherwise, returns false.
		try {
			HttpURLConnection connection = (HttpURLConnection) new URL(sUrl).openConnection();
			connection.setRequestMethod("HEAD");
			int responseCode = connection.getResponseCode();
			return responseCode == 200;
		}
		catch(IOException e) {
			return false;
		}
	}

}

/*python

from six.moves.urllib.parse import urljoin
from six.moves.urllib.parse import urlparse
from toscaparser.common.exception import ExceptionCollector
from toscaparser.utils.gettextutils import _

try:
    # Python 3.x
    import urllib.request as urllib2
except ImportError:
    # Python 2.x
    import urllib2


class UrlUtils(object):

    @staticmethod
    def validate_url(path):
        """Validates whether the given path is a URL or not.

        If the given path includes a scheme (http, https, ftp, ...) and a net
        location (a domain name such as www.github.com) it is validated as a
        URL.
        """
        parsed = urlparse(path)
        if parsed.scheme == 'file':
            # If the url uses the file scheme netloc will be ""
            return True
        else:
            return bool(parsed.scheme) and bool(parsed.netloc)

    @staticmethod
    def join_url(url, relative_path):
        """Builds a new URL from the given URL and the relative path.

        Example:
          url: http://www.githib.com/openstack/heat
          relative_path: heat-translator
          - joined: http://www.githib.com/openstack/heat-translator
        """
        if not UrlUtils.validate_url(url):
            ExceptionCollector.appendException(
                ValueError(_('"%s" is not a valid URL.') % url))
        return urljoin(url, relative_path)

    @staticmethod
    def url_accessible(url):
        """Validates whether the given URL is accessible.

        Returns true if the get call returns a 200 response code.
        Otherwise, returns false.
        """
        return urllib2.urlopen(url).getcode() == 200
*/