aboutsummaryrefslogtreecommitdiffstats
path: root/web/src/js/flow/utils.js
diff options
context:
space:
mode:
Diffstat (limited to 'web/src/js/flow/utils.js')
-rw-r--r--web/src/js/flow/utils.js70
1 files changed, 59 insertions, 11 deletions
diff --git a/web/src/js/flow/utils.js b/web/src/js/flow/utils.js
index 29462a78..aa91e3b6 100644
--- a/web/src/js/flow/utils.js
+++ b/web/src/js/flow/utils.js
@@ -1,9 +1,17 @@
var _ = require("lodash");
var $ = require("jquery");
+var defaultPorts = {
+ "http": 80,
+ "https": 443
+};
+
var MessageUtils = {
getContentType: function (message) {
- return this.get_first_header(message, /^Content-Type$/i).split(";")[0].trim();
+ var ct = this.get_first_header(message, /^Content-Type$/i);
+ if(ct){
+ return ct.split(";")[0].trim();
+ }
},
get_first_header: function (message, regex) {
//FIXME: Cache Invalidation.
@@ -36,25 +44,20 @@ var MessageUtils = {
}
return false;
},
- getContentURL: function(flow, message){
- if(message === flow.request){
+ getContentURL: function (flow, message) {
+ if (message === flow.request) {
message = "request";
- } else if (message === flow.response){
+ } else if (message === flow.response) {
message = "response";
}
return "/flows/" + flow.id + "/" + message + "/content";
},
- getContent: function(flow, message){
+ getContent: function (flow, message) {
var url = MessageUtils.getContentURL(flow, message);
return $.get(url);
}
};
-var defaultPorts = {
- "http": 80,
- "https": 443
-};
-
var RequestUtils = _.extend(MessageUtils, {
pretty_host: function (request) {
//FIXME: Add hostheader
@@ -72,8 +75,53 @@ var RequestUtils = _.extend(MessageUtils, {
var ResponseUtils = _.extend(MessageUtils, {});
+var parseUrl_regex = /^(?:(https?):\/\/)?([^\/:]+)?(?::(\d+))?(\/.*)?$/i;
+var parseUrl = function (url) {
+ //there are many correct ways to parse a URL,
+ //however, a mitmproxy user may also wish to generate a not-so-correct URL. ;-)
+ var parts = parseUrl_regex.exec(url);
+
+ var scheme = parts[1],
+ host = parts[2],
+ port = parseInt(parts[3]),
+ path = parts[4];
+ if (scheme) {
+ port = port || defaultPorts[scheme];
+ }
+ var ret = {};
+ if (scheme) {
+ ret.scheme = scheme;
+ }
+ if (host) {
+ ret.host = host;
+ }
+ if (port) {
+ ret.port = port;
+ }
+ if (path) {
+ ret.path = path;
+ }
+ return ret;
+};
+
+
+var isValidHttpVersion_regex = /^HTTP\/\d+(\.\d+)*$/i;
+var isValidHttpVersion = function (httpVersion) {
+ return isValidHttpVersion_regex.test(httpVersion);
+};
+
+var parseHttpVersion = function (httpVersion) {
+ httpVersion = httpVersion.replace("HTTP/", "").split(".");
+ return _.map(httpVersion, function (x) {
+ return parseInt(x);
+ });
+};
+
module.exports = {
ResponseUtils: ResponseUtils,
RequestUtils: RequestUtils,
- MessageUtils: MessageUtils
+ MessageUtils: MessageUtils,
+ parseUrl: parseUrl,
+ parseHttpVersion: parseHttpVersion,
+ isValidHttpVersion: isValidHttpVersion
}; \ No newline at end of file