aboutsummaryrefslogtreecommitdiffstats
path: root/libmproxy/web/static
diff options
context:
space:
mode:
Diffstat (limited to 'libmproxy/web/static')
-rw-r--r--libmproxy/web/static/css/app.css81
-rw-r--r--libmproxy/web/static/flows.json2012
-rw-r--r--libmproxy/web/static/images/sprite.pngbin0 -> 10895 bytes
-rw-r--r--libmproxy/web/static/js/app.js78
4 files changed, 2156 insertions, 15 deletions
diff --git a/libmproxy/web/static/css/app.css b/libmproxy/web/static/css/app.css
index ecc7426c..27acd68a 100644
--- a/libmproxy/web/static/css/app.css
+++ b/libmproxy/web/static/css/app.css
@@ -6,6 +6,60 @@ html {
*:after {
box-sizing: inherit;
}
+.resource-icon {
+ width: 32px;
+ height: 32px;
+}
+.resource-icon-css {
+ background-image: url("../images/sprite.png");
+ background-position: 0px 0px;
+ background-size: 32px 320px!important;
+}
+.resource-icon-document {
+ background-image: url("../images/sprite.png");
+ background-position: 0px -32px;
+ background-size: 32px 320px!important;
+}
+.resource-icon-js {
+ background-image: url("../images/sprite.png");
+ background-position: 0px -64px;
+ background-size: 32px 320px!important;
+}
+.resource-icon-plain {
+ background-image: url("../images/sprite.png");
+ background-position: 0px -96px;
+ background-size: 32px 320px!important;
+}
+.resource-icon-executable {
+ background-image: url("../images/sprite.png");
+ background-position: 0px -128px;
+ background-size: 32px 320px!important;
+}
+.resource-icon-flash {
+ background-image: url("../images/sprite.png");
+ background-position: 0px -160px;
+ background-size: 32px 320px!important;
+}
+.resource-icon-image {
+ background-image: url("../images/sprite.png");
+ background-position: 0px -192px;
+ background-size: 32px 320px!important;
+}
+.resource-icon-java {
+ background-image: url("../images/sprite.png");
+ background-position: 0px -224px;
+ background-size: 32px 320px!important;
+}
+.resource-icon-not-modified {
+ background-image: url("../images/sprite.png");
+ background-position: 0px -256px;
+ background-size: 32px 320px!important;
+}
+.resource-icon-redirect {
+ background-image: url("../images/sprite.png");
+ background-position: 0px -288px;
+ background-size: 32px 320px!important;
+}
html,
body,
#container {
@@ -69,6 +123,33 @@ header .menu {
}
.flow-table {
width: 100%;
+ table-layout: fixed;
+}
+.flow-table thead {
+ background-color: #dadada;
+}
+.flow-table td {
+ overflow: hidden;
+ white-space: nowrap;
+ text-overflow: ellipsis;
+}
+.flow-table .col-tls {
+ width: 10px;
+}
+.flow-table .col-tls-https {
+ background-color: rgba(0, 185, 0, 0.5);
+}
+.flow-table .col-icon {
+ width: 32px;
+}
+.flow-table .col-method {
+ width: 60px;
+}
+.flow-table .col-status {
+ width: 50px;
+}
+.flow-table .col-time {
+ width: 120px;
}
.eventlog {
flex: 0 0 auto;
diff --git a/libmproxy/web/static/flows.json b/libmproxy/web/static/flows.json
new file mode 100644
index 00000000..bdbfd5cc
--- /dev/null
+++ b/libmproxy/web/static/flows.json
@@ -0,0 +1,2012 @@
+[{
+ "request": {
+ "timestamp_end": 1410651311.107,
+ "timestamp_start": 1410651311.106,
+ "form_in": "relative",
+ "headers": [
+ [
+ "Host",
+ "news.ycombinator.com"
+ ],
+ [
+ "User-Agent",
+ "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:32.0) Gecko/20100101 Firefox/32.0"
+ ],
+ [
+ "Accept",
+ "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"
+ ],
+ [
+ "Accept-Language",
+ "de,en-US;q=0.7,en;q=0.3"
+ ],
+ [
+ "Accept-Encoding",
+ "gzip, deflate"
+ ],
+ [
+ "Cookie",
+ "__cfduid=d0486ff404fe3beb320f15e958861aaea1410651010546"
+ ],
+ [
+ "Connection",
+ "keep-alive"
+ ],
+ [
+ "Pragma",
+ "no-cache"
+ ],
+ [
+ "Cache-Control",
+ "no-cache"
+ ]
+ ],
+ "host": "news.ycombinator.com",
+ "form_out": "relative",
+ "path": "/",
+ "method": "GET",
+ "scheme": "https",
+ "port": 443,
+ "httpversion": [
+ 1,
+ 1
+ ]
+ },
+ "server_conn": {
+ "timestamp_tcp_setup": 1410651311.055,
+ "state": [],
+ "timestamp_ssl_setup": 1410651311.096,
+ "sni": "news.ycombinator.com",
+ "timestamp_start": 1410651311.04,
+ "address": {
+ "use_ipv6": false,
+ "address": [
+ "news.ycombinator.com",
+ 443
+ ]
+ },
+ "timestamp_end": null,
+ "source_address": {
+ "use_ipv6": false,
+ "address": [
+ "192.168.1.117",
+ 63383
+ ]
+ },
+ "ssl_established": true
+ },
+ "client_conn": {
+ "timestamp_start": 1410651310.36,
+ "address": {
+ "use_ipv6": false,
+ "address": [
+ "127.0.0.1",
+ 63380
+ ]
+ },
+ "timestamp_ssl_setup": 1410651311.105,
+ "timestamp_end": null,
+ "clientcert": null,
+ "ssl_established": true
+ },
+ "conntype": "http",
+ "version": [
+ 0,
+ 11
+ ],
+ "error": null,
+ "response": {
+ "code": 200,
+ "headers": [
+ [
+ "Server",
+ "cloudflare-nginx"
+ ],
+ [
+ "Date",
+ "Sat, 13 Sep 2014 23:35:08 GMT"
+ ],
+ [
+ "Content-Type",
+ "text/html; charset=utf-8"
+ ],
+ [
+ "Transfer-Encoding",
+ "chunked"
+ ],
+ [
+ "Connection",
+ "keep-alive"
+ ],
+ [
+ "Vary",
+ "Accept-Encoding"
+ ],
+ [
+ "Cache-Control",
+ "private"
+ ],
+ [
+ "X-Frame-Options",
+ "DENY"
+ ],
+ [
+ "Cache-Control",
+ "max-age=0"
+ ],
+ [
+ "Strict-Transport-Security",
+ "max-age=31556900; includeSubDomains"
+ ],
+ [
+ "CF-RAY",
+ "169828d0108e088d-FRA"
+ ],
+ [
+ "Content-Encoding",
+ "gzip"
+ ]
+ ],
+ "timestamp_start": 1410651311.6,
+ "msg": "OK",
+ "timestamp_end": 1410651311.603,
+ "httpversion": [
+ 1,
+ 1
+ ]
+ }
+},
+{
+ "request": {
+ "timestamp_end": 1410651311.657,
+ "timestamp_start": 1410651311.653,
+ "form_in": "relative",
+ "headers": [
+ [
+ "Host",
+ "news.ycombinator.com"
+ ],
+ [
+ "User-Agent",
+ "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:32.0) Gecko/20100101 Firefox/32.0"
+ ],
+ [
+ "Accept",
+ "text/css,*/*;q=0.1"
+ ],
+ [
+ "Accept-Language",
+ "de,en-US;q=0.7,en;q=0.3"
+ ],
+ [
+ "Accept-Encoding",
+ "gzip, deflate"
+ ],
+ [
+ "Referer",
+ "https://news.ycombinator.com/"
+ ],
+ [
+ "Cookie",
+ "__cfduid=d0486ff404fe3beb320f15e958861aaea1410651010546"
+ ],
+ [
+ "Connection",
+ "keep-alive"
+ ],
+ [
+ "Pragma",
+ "no-cache"
+ ],
+ [
+ "Cache-Control",
+ "no-cache"
+ ]
+ ],
+ "host": "news.ycombinator.com",
+ "form_out": "relative",
+ "path": "/news.css?IZYAdhDe5bN6BGyHv1jq",
+ "method": "GET",
+ "scheme": "https",
+ "port": 443,
+ "httpversion": [
+ 1,
+ 1
+ ]
+ },
+ "server_conn": {
+ "timestamp_tcp_setup": 1410651311.055,
+ "state": [],
+ "timestamp_ssl_setup": 1410651311.096,
+ "sni": "news.ycombinator.com",
+ "timestamp_start": 1410651311.04,
+ "address": {
+ "use_ipv6": false,
+ "address": [
+ "news.ycombinator.com",
+ 443
+ ]
+ },
+ "timestamp_end": null,
+ "source_address": {
+ "use_ipv6": false,
+ "address": [
+ "192.168.1.117",
+ 63383
+ ]
+ },
+ "ssl_established": true
+ },
+ "client_conn": {
+ "timestamp_start": 1410651310.36,
+ "address": {
+ "use_ipv6": false,
+ "address": [
+ "127.0.0.1",
+ 63380
+ ]
+ },
+ "timestamp_ssl_setup": 1410651311.105,
+ "timestamp_end": null,
+ "clientcert": null,
+ "ssl_established": true
+ },
+ "conntype": "http",
+ "version": [
+ 0,
+ 11
+ ],
+ "error": null,
+ "response": {
+ "code": 200,
+ "headers": [
+ [
+ "Server",
+ "cloudflare-nginx"
+ ],
+ [
+ "Date",
+ "Sat, 13 Sep 2014 23:35:08 GMT"
+ ],
+ [
+ "Content-Type",
+ "text/css"
+ ],
+ [
+ "Transfer-Encoding",
+ "chunked"
+ ],
+ [
+ "Connection",
+ "keep-alive"
+ ],
+ [
+ "Last-Modified",
+ "Fri, 01 Aug 2014 04:27:14 GMT"
+ ],
+ [
+ "Vary",
+ "Accept-Encoding"
+ ],
+ [
+ "Expires",
+ "Mon, 29 Jul 2024 04:27:14 GMT"
+ ],
+ [
+ "Cache-Control",
+ "max-age=311575926"
+ ],
+ [
+ "Cache-Control",
+ "public"
+ ],
+ [
+ "CF-RAY",
+ "169828d38096088d-FRA"
+ ],
+ [
+ "Content-Encoding",
+ "gzip"
+ ]
+ ],
+ "timestamp_start": 1410651312.167,
+ "msg": "OK",
+ "timestamp_end": 1410651312.17,
+ "httpversion": [
+ 1,
+ 1
+ ]
+ }
+},
+{
+ "request": {
+ "timestamp_end": 1410651312.362,
+ "timestamp_start": 1410651312.359,
+ "form_in": "relative",
+ "headers": [
+ [
+ "Host",
+ "news.ycombinator.com"
+ ],
+ [
+ "User-Agent",
+ "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:32.0) Gecko/20100101 Firefox/32.0"
+ ],
+ [
+ "Accept",
+ "image/png,image/*;q=0.8,*/*;q=0.5"
+ ],
+ [
+ "Accept-Language",
+ "de,en-US;q=0.7,en;q=0.3"
+ ],
+ [
+ "Accept-Encoding",
+ "gzip, deflate"
+ ],
+ [
+ "Referer",
+ "https://news.ycombinator.com/"
+ ],
+ [
+ "Cookie",
+ "__cfduid=d0486ff404fe3beb320f15e958861aaea1410651010546"
+ ],
+ [
+ "Connection",
+ "keep-alive"
+ ],
+ [
+ "Pragma",
+ "no-cache"
+ ],
+ [
+ "Cache-Control",
+ "no-cache"
+ ]
+ ],
+ "host": "news.ycombinator.com",
+ "form_out": "relative",
+ "path": "/s.gif",
+ "method": "GET",
+ "scheme": "https",
+ "port": 443,
+ "httpversion": [
+ 1,
+ 1
+ ]
+ },
+ "server_conn": {
+ "timestamp_tcp_setup": 1410651312.303,
+ "state": [],
+ "timestamp_ssl_setup": 1410651312.349,
+ "sni": "news.ycombinator.com",
+ "timestamp_start": 1410651312.287,
+ "address": {
+ "use_ipv6": false,
+ "address": [
+ "news.ycombinator.com",
+ 443
+ ]
+ },
+ "timestamp_end": null,
+ "source_address": {
+ "use_ipv6": false,
+ "address": [
+ "192.168.1.117",
+ 63391
+ ]
+ },
+ "ssl_established": true
+ },
+ "client_conn": {
+ "timestamp_start": 1410651312.193,
+ "address": {
+ "use_ipv6": false,
+ "address": [
+ "127.0.0.1",
+ 63386
+ ]
+ },
+ "timestamp_ssl_setup": 1410651312.358,
+ "timestamp_end": null,
+ "clientcert": null,
+ "ssl_established": true
+ },
+ "conntype": "http",
+ "version": [
+ 0,
+ 11
+ ],
+ "error": null,
+ "response": {
+ "code": 200,
+ "headers": [
+ [
+ "Server",
+ "cloudflare-nginx"
+ ],
+ [
+ "Date",
+ "Sat, 13 Sep 2014 23:35:08 GMT"
+ ],
+ [
+ "Content-Type",
+ "image/gif"
+ ],
+ [
+ "Content-Length",
+ "43"
+ ],
+ [
+ "Connection",
+ "keep-alive"
+ ],
+ [
+ "Last-Modified",
+ "Tue, 12 Mar 2013 09:06:31 GMT"
+ ],
+ [
+ "ETag",
+ "\"513ef017-2b\""
+ ],
+ [
+ "Expires",
+ "Fri, 31 Mar 2023 21:06:02 GMT"
+ ],
+ [
+ "Cache-Control",
+ "public, max-age=269645454"
+ ],
+ [
+ "CF-Cache-Status",
+ "HIT"
+ ],
+ [
+ "Vary",
+ "Accept-Encoding"
+ ],
+ [
+ "Accept-Ranges",
+ "bytes"
+ ],
+ [
+ "CF-RAY",
+ "169828d7e771088d-FRA"
+ ]
+ ],
+ "timestamp_start": 1410651312.383,
+ "msg": "OK",
+ "timestamp_end": 1410651312.393,
+ "httpversion": [
+ 1,
+ 1
+ ]
+ }
+},
+{
+ "request": {
+ "timestamp_end": 1410651312.389,
+ "timestamp_start": 1410651312.368,
+ "form_in": "relative",
+ "headers": [
+ [
+ "Host",
+ "news.ycombinator.com"
+ ],
+ [
+ "User-Agent",
+ "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:32.0) Gecko/20100101 Firefox/32.0"
+ ],
+ [
+ "Accept",
+ "image/png,image/*;q=0.8,*/*;q=0.5"
+ ],
+ [
+ "Accept-Language",
+ "de,en-US;q=0.7,en;q=0.3"
+ ],
+ [
+ "Accept-Encoding",
+ "gzip, deflate"
+ ],
+ [
+ "Referer",
+ "https://news.ycombinator.com/news.css?IZYAdhDe5bN6BGyHv1jq"
+ ],
+ [
+ "Cookie",
+ "__cfduid=d0486ff404fe3beb320f15e958861aaea1410651010546"
+ ],
+ [
+ "Connection",
+ "keep-alive"
+ ],
+ [
+ "Pragma",
+ "no-cache"
+ ],
+ [
+ "Cache-Control",
+ "no-cache"
+ ]
+ ],
+ "host": "news.ycombinator.com",
+ "form_out": "relative",
+ "path": "/grayarrow.gif",
+ "method": "GET",
+ "scheme": "https",
+ "port": 443,
+ "httpversion": [
+ 1,
+ 1
+ ]
+ },
+ "server_conn": {
+ "timestamp_tcp_setup": 1410651312.307,
+ "state": [],
+ "timestamp_ssl_setup": 1410651312.355,
+ "sni": "news.ycombinator.com",
+ "timestamp_start": 1410651312.291,
+ "address": {
+ "use_ipv6": false,
+ "address": [
+ "news.ycombinator.com",
+ 443
+ ]
+ },
+ "timestamp_end": null,
+ "source_address": {
+ "use_ipv6": false,
+ "address": [
+ "192.168.1.117",
+ 63393
+ ]
+ },
+ "ssl_established": true
+ },
+ "client_conn": {
+ "timestamp_start": 1410651312.2,
+ "address": {
+ "use_ipv6": false,
+ "address": [
+ "127.0.0.1",
+ 63387
+ ]
+ },
+ "timestamp_ssl_setup": 1410651312.368,
+ "timestamp_end": null,
+ "clientcert": null,
+ "ssl_established": true
+ },
+ "conntype": "http",
+ "version": [
+ 0,
+ 11
+ ],
+ "error": null,
+ "response": {
+ "code": 200,
+ "headers": [
+ [
+ "Server",
+ "cloudflare-nginx"
+ ],
+ [
+ "Date",
+ "Sat, 13 Sep 2014 23:35:08 GMT"
+ ],
+ [
+ "Content-Type",
+ "image/gif"
+ ],
+ [
+ "Content-Length",
+ "111"
+ ],
+ [
+ "Connection",
+ "keep-alive"
+ ],
+ [
+ "Last-Modified",
+ "Tue, 12 Mar 2013 09:06:31 GMT"
+ ],
+ [
+ "ETag",
+ "\"513ef017-6f\""
+ ],
+ [
+ "Expires",
+ "Sat, 01 Apr 2023 05:56:11 GMT"
+ ],
+ [
+ "Cache-Control",
+ "public, max-age=269677263"
+ ],
+ [
+ "CF-Cache-Status",
+ "HIT"
+ ],
+ [
+ "Vary",
+ "Accept-Encoding"
+ ],
+ [
+ "Accept-Ranges",
+ "bytes"
+ ],
+ [
+ "CF-RAY",
+ "169828d81430088d-FRA"
+ ]
+ ],
+ "timestamp_start": 1410651312.409,
+ "msg": "OK",
+ "timestamp_end": 1410651312.412,
+ "httpversion": [
+ 1,
+ 1
+ ]
+ }
+},
+{
+ "request": {
+ "timestamp_end": 1410651312.386,
+ "timestamp_start": 1410651312.368,
+ "form_in": "relative",
+ "headers": [
+ [
+ "Host",
+ "news.ycombinator.com"
+ ],
+ [
+ "User-Agent",
+ "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:32.0) Gecko/20100101 Firefox/32.0"
+ ],
+ [
+ "Accept",
+ "image/png,image/*;q=0.8,*/*;q=0.5"
+ ],
+ [
+ "Accept-Language",
+ "de,en-US;q=0.7,en;q=0.3"
+ ],
+ [
+ "Accept-Encoding",
+ "gzip, deflate"
+ ],
+ [
+ "Referer",
+ "https://news.ycombinator.com/"
+ ],
+ [
+ "Cookie",
+ "__cfduid=d0486ff404fe3beb320f15e958861aaea1410651010546"
+ ],
+ [
+ "Connection",
+ "keep-alive"
+ ],
+ [
+ "Pragma",
+ "no-cache"
+ ],
+ [
+ "Cache-Control",
+ "no-cache"
+ ]
+ ],
+ "host": "news.ycombinator.com",
+ "form_out": "relative",
+ "path": "/y18.gif",
+ "method": "GET",
+ "scheme": "https",
+ "port": 443,
+ "httpversion": [
+ 1,
+ 1
+ ]
+ },
+ "server_conn": {
+ "timestamp_tcp_setup": 1410651312.303,
+ "state": [],
+ "timestamp_ssl_setup": 1410651312.355,
+ "sni": "news.ycombinator.com",
+ "timestamp_start": 1410651312.287,
+ "address": {
+ "use_ipv6": false,
+ "address": [
+ "news.ycombinator.com",
+ 443
+ ]
+ },
+ "timestamp_end": null,
+ "source_address": {
+ "use_ipv6": false,
+ "address": [
+ "192.168.1.117",
+ 63392
+ ]
+ },
+ "ssl_established": true
+ },
+ "client_conn": {
+ "timestamp_start": 1410651312.192,
+ "address": {
+ "use_ipv6": false,
+ "address": [
+ "127.0.0.1",
+ 63385
+ ]
+ },
+ "timestamp_ssl_setup": 1410651312.368,
+ "timestamp_end": null,
+ "clientcert": null,
+ "ssl_established": true
+ },
+ "conntype": "http",
+ "version": [
+ 0,
+ 11
+ ],
+ "error": null,
+ "response": {
+ "code": 200,
+ "headers": [
+ [
+ "Server",
+ "cloudflare-nginx"
+ ],
+ [
+ "Date",
+ "Sat, 13 Sep 2014 23:35:08 GMT"
+ ],
+ [
+ "Content-Type",
+ "image/gif"
+ ],
+ [
+ "Content-Length",
+ "100"
+ ],
+ [
+ "Connection",
+ "keep-alive"
+ ],
+ [
+ "Last-Modified",
+ "Tue, 12 Mar 2013 09:06:31 GMT"
+ ],
+ [
+ "ETag",
+ "\"513ef017-64\""
+ ],
+ [
+ "Expires",
+ "Sat, 01 Apr 2023 04:28:54 GMT"
+ ],
+ [
+ "Cache-Control",
+ "public, max-age=269672026"
+ ],
+ [
+ "CF-Cache-Status",
+ "HIT"
+ ],
+ [
+ "Vary",
+ "Accept-Encoding"
+ ],
+ [
+ "Accept-Ranges",
+ "bytes"
+ ],
+ [
+ "CF-RAY",
+ "169828d8109a088d-FRA"
+ ]
+ ],
+ "timestamp_start": 1410651312.413,
+ "msg": "OK",
+ "timestamp_end": 1410651312.416,
+ "httpversion": [
+ 1,
+ 1
+ ]
+ }
+},
+{
+ "request": {
+ "timestamp_end": 1410651373.965,
+ "timestamp_start": 1410651373.963,
+ "form_in": "absolute",
+ "headers": [
+ [
+ "Host",
+ "mitmproxy.org"
+ ],
+ [
+ "User-Agent",
+ "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:32.0) Gecko/20100101 Firefox/32.0"
+ ],
+ [
+ "Accept",
+ "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"
+ ],
+ [
+ "Accept-Language",
+ "de,en-US;q=0.7,en;q=0.3"
+ ],
+ [
+ "Accept-Encoding",
+ "gzip, deflate"
+ ],
+ [
+ "Connection",
+ "keep-alive"
+ ]
+ ],
+ "host": "mitmproxy.org",
+ "form_out": "relative",
+ "path": "/",
+ "method": "GET",
+ "scheme": "http",
+ "port": 80,
+ "httpversion": [
+ 1,
+ 1
+ ]
+ },
+ "server_conn": {
+ "timestamp_tcp_setup": 1410651374.189,
+ "state": [],
+ "timestamp_ssl_setup": null,
+ "sni": null,
+ "timestamp_start": 1410651373.985,
+ "address": {
+ "use_ipv6": false,
+ "address": [
+ "mitmproxy.org",
+ 80
+ ]
+ },
+ "timestamp_end": null,
+ "source_address": {
+ "use_ipv6": false,
+ "address": [
+ "192.168.1.117",
+ 63404
+ ]
+ },
+ "ssl_established": false
+ },
+ "client_conn": {
+ "timestamp_start": 1410651373.958,
+ "address": {
+ "use_ipv6": false,
+ "address": [
+ "127.0.0.1",
+ 63403
+ ]
+ },
+ "timestamp_ssl_setup": null,
+ "timestamp_end": null,
+ "clientcert": null,
+ "ssl_established": false
+ },
+ "conntype": "http",
+ "version": [
+ 0,
+ 11
+ ],
+ "error": null,
+ "response": {
+ "code": 200,
+ "headers": [
+ [
+ "Server",
+ "nginx/1.1.19"
+ ],
+ [
+ "Date",
+ "Sat, 13 Sep 2014 23:36:10 GMT"
+ ],
+ [
+ "Content-Type",
+ "text/html"
+ ],
+ [
+ "Last-Modified",
+ "Wed, 26 Feb 2014 19:58:20 GMT"
+ ],
+ [
+ "Transfer-Encoding",
+ "chunked"
+ ],
+ [
+ "Connection",
+ "keep-alive"
+ ],
+ [
+ "Vary",
+ "Accept-Encoding"
+ ],
+ [
+ "Content-Encoding",
+ "gzip"
+ ]
+ ],
+ "timestamp_start": 1410651374.365,
+ "msg": "OK",
+ "timestamp_end": 1410651374.366,
+ "httpversion": [
+ 1,
+ 1
+ ]
+ }
+},
+{
+ "request": {
+ "timestamp_end": 1410651374.391,
+ "timestamp_start": 1410651374.387,
+ "form_in": "absolute",
+ "headers": [
+ [
+ "Host",
+ "mitmproxy.org"
+ ],
+ [
+ "User-Agent",
+ "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:32.0) Gecko/20100101 Firefox/32.0"
+ ],
+ [
+ "Accept",
+ "text/css,*/*;q=0.1"
+ ],
+ [
+ "Accept-Language",
+ "de,en-US;q=0.7,en;q=0.3"
+ ],
+ [
+ "Accept-Encoding",
+ "gzip, deflate"
+ ],
+ [
+ "Referer",
+ "http://mitmproxy.org/"
+ ],
+ [
+ "Connection",
+ "keep-alive"
+ ]
+ ],
+ "host": "mitmproxy.org",
+ "form_out": "relative",
+ "path": "/01-bootstrap.min.css",
+ "method": "GET",
+ "scheme": "http",
+ "port": 80,
+ "httpversion": [
+ 1,
+ 1
+ ]
+ },
+ "server_conn": {
+ "timestamp_tcp_setup": 1410651374.189,
+ "state": [],
+ "timestamp_ssl_setup": null,
+ "sni": null,
+ "timestamp_start": 1410651373.985,
+ "address": {
+ "use_ipv6": false,
+ "address": [
+ "mitmproxy.org",
+ 80
+ ]
+ },
+ "timestamp_end": null,
+ "source_address": {
+ "use_ipv6": false,
+ "address": [
+ "192.168.1.117",
+ 63404
+ ]
+ },
+ "ssl_established": false
+ },
+ "client_conn": {
+ "timestamp_start": 1410651373.958,
+ "address": {
+ "use_ipv6": false,
+ "address": [
+ "127.0.0.1",
+ 63403
+ ]
+ },
+ "timestamp_ssl_setup": null,
+ "timestamp_end": null,
+ "clientcert": null,
+ "ssl_established": false
+ },
+ "conntype": "http",
+ "version": [
+ 0,
+ 11
+ ],
+ "error": null,
+ "response": {
+ "code": 200,
+ "headers": [
+ [
+ "Server",
+ "nginx/1.1.19"
+ ],
+ [
+ "Date",
+ "Sat, 13 Sep 2014 23:36:10 GMT"
+ ],
+ [
+ "Content-Type",
+ "text/css"
+ ],
+ [
+ "Last-Modified",
+ "Wed, 26 Feb 2014 19:58:20 GMT"
+ ],
+ [
+ "Transfer-Encoding",
+ "chunked"
+ ],
+ [
+ "Connection",
+ "keep-alive"
+ ],
+ [
+ "Vary",
+ "Accept-Encoding"
+ ],
+ [
+ "Content-Encoding",
+ "gzip"
+ ]
+ ],
+ "timestamp_start": 1410651374.579,
+ "msg": "OK",
+ "timestamp_end": 1410651374.58,
+ "httpversion": [
+ 1,
+ 1
+ ]
+ }
+},
+{
+ "request": {
+ "timestamp_end": 1410651374.396,
+ "timestamp_start": 1410651374.394,
+ "form_in": "absolute",
+ "headers": [
+ [
+ "Host",
+ "mitmproxy.org"
+ ],
+ [
+ "User-Agent",
+ "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:32.0) Gecko/20100101 Firefox/32.0"
+ ],
+ [
+ "Accept",
+ "text/css,*/*;q=0.1"
+ ],
+ [
+ "Accept-Language",
+ "de,en-US;q=0.7,en;q=0.3"
+ ],
+ [
+ "Accept-Encoding",
+ "gzip, deflate"
+ ],
+ [
+ "Referer",
+ "http://mitmproxy.org/"
+ ],
+ [
+ "Connection",
+ "keep-alive"
+ ]
+ ],
+ "host": "mitmproxy.org",
+ "form_out": "relative",
+ "path": "/03-sitestyle.css",
+ "method": "GET",
+ "scheme": "http",
+ "port": 80,
+ "httpversion": [
+ 1,
+ 1
+ ]
+ },
+ "server_conn": {
+ "timestamp_tcp_setup": 1410651374.567,
+ "state": [],
+ "timestamp_ssl_setup": null,
+ "sni": null,
+ "timestamp_start": 1410651374.401,
+ "address": {
+ "use_ipv6": false,
+ "address": [
+ "mitmproxy.org",
+ 80
+ ]
+ },
+ "timestamp_end": null,
+ "source_address": {
+ "use_ipv6": false,
+ "address": [
+ "192.168.1.117",
+ 63407
+ ]
+ },
+ "ssl_established": false
+ },
+ "client_conn": {
+ "timestamp_start": 1410651374.389,
+ "address": {
+ "use_ipv6": false,
+ "address": [
+ "127.0.0.1",
+ 63405
+ ]
+ },
+ "timestamp_ssl_setup": null,
+ "timestamp_end": null,
+ "clientcert": null,
+ "ssl_established": false
+ },
+ "conntype": "http",
+ "version": [
+ 0,
+ 11
+ ],
+ "error": null,
+ "response": {
+ "code": 200,
+ "headers": [
+ [
+ "Server",
+ "nginx/1.1.19"
+ ],
+ [
+ "Date",
+ "Sat, 13 Sep 2014 23:36:11 GMT"
+ ],
+ [
+ "Content-Type",
+ "text/css"
+ ],
+ [
+ "Content-Length",
+ "124"
+ ],
+ [
+ "Last-Modified",
+ "Wed, 26 Feb 2014 19:58:20 GMT"
+ ],
+ [
+ "Connection",
+ "keep-alive"
+ ],
+ [
+ "Accept-Ranges",
+ "bytes"
+ ]
+ ],
+ "timestamp_start": 1410651374.746,
+ "msg": "OK",
+ "timestamp_end": 1410651374.747,
+ "httpversion": [
+ 1,
+ 1
+ ]
+ }
+},
+{
+ "request": {
+ "timestamp_end": 1410651374.795,
+ "timestamp_start": 1410651374.793,
+ "form_in": "absolute",
+ "headers": [
+ [
+ "Host",
+ "www.google-analytics.com"
+ ],
+ [
+ "User-Agent",
+ "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:32.0) Gecko/20100101 Firefox/32.0"
+ ],
+ [
+ "Accept",
+ "*/*"
+ ],
+ [
+ "Accept-Language",
+ "de,en-US;q=0.7,en;q=0.3"
+ ],
+ [
+ "Accept-Encoding",
+ "gzip, deflate"
+ ],
+ [
+ "Referer",
+ "http://mitmproxy.org/"
+ ],
+ [
+ "Connection",
+ "keep-alive"
+ ]
+ ],
+ "host": "www.google-analytics.com",
+ "form_out": "relative",
+ "path": "/ga.js",
+ "method": "GET",
+ "scheme": "http",
+ "port": 80,
+ "httpversion": [
+ 1,
+ 1
+ ]
+ },
+ "server_conn": {
+ "timestamp_tcp_setup": 1410651374.99,
+ "state": [],
+ "timestamp_ssl_setup": null,
+ "sni": null,
+ "timestamp_start": 1410651374.974,
+ "address": {
+ "use_ipv6": false,
+ "address": [
+ "www.google-analytics.com",
+ 80
+ ]
+ },
+ "timestamp_end": null,
+ "source_address": {
+ "use_ipv6": false,
+ "address": [
+ "192.168.1.117",
+ 63409
+ ]
+ },
+ "ssl_established": false
+ },
+ "client_conn": {
+ "timestamp_start": 1410651374.389,
+ "address": {
+ "use_ipv6": false,
+ "address": [
+ "127.0.0.1",
+ 63405
+ ]
+ },
+ "timestamp_ssl_setup": null,
+ "timestamp_end": null,
+ "clientcert": null,
+ "ssl_established": false
+ },
+ "conntype": "http",
+ "version": [
+ 0,
+ 11
+ ],
+ "error": null,
+ "response": {
+ "code": 200,
+ "headers": [
+ [
+ "Date",
+ "Sat, 13 Sep 2014 22:02:27 GMT"
+ ],
+ [
+ "Expires",
+ "Sun, 14 Sep 2014 00:02:27 GMT"
+ ],
+ [
+ "Last-Modified",
+ "Mon, 08 Sep 2014 18:50:13 GMT"
+ ],
+ [
+ "X-Content-Type-Options",
+ "nosniff"
+ ],
+ [
+ "Content-Type",
+ "text/javascript"
+ ],
+ [
+ "Vary",
+ "Accept-Encoding"
+ ],
+ [
+ "Content-Encoding",
+ "gzip"
+ ],
+ [
+ "Server",
+ "Golfe2"
+ ],
+ [
+ "Content-Length",
+ "16062"
+ ],
+ [
+ "Age",
+ "5624"
+ ],
+ [
+ "Cache-Control",
+ "public, max-age=7200"
+ ],
+ [
+ "Alternate-Protocol",
+ "80:quic,p=0.002"
+ ]
+ ],
+ "timestamp_start": 1410651375.013,
+ "msg": "OK",
+ "timestamp_end": 1410651375.015,
+ "httpversion": [
+ 1,
+ 1
+ ]
+ }
+},
+{
+ "request": {
+ "timestamp_end": 1410651375.084,
+ "timestamp_start": 1410651375.078,
+ "form_in": "absolute",
+ "headers": [
+ [
+ "Host",
+ "www.google-analytics.com"
+ ],
+ [
+ "User-Agent",
+ "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:32.0) Gecko/20100101 Firefox/32.0"
+ ],
+ [
+ "Accept",
+ "image/png,image/*;q=0.8,*/*;q=0.5"
+ ],
+ [
+ "Accept-Language",
+ "de,en-US;q=0.7,en;q=0.3"
+ ],
+ [
+ "Accept-Encoding",
+ "gzip, deflate"
+ ],
+ [
+ "Referer",
+ "http://mitmproxy.org/"
+ ],
+ [
+ "Connection",
+ "keep-alive"
+ ]
+ ],
+ "host": "www.google-analytics.com",
+ "form_out": "relative",
+ "path": "/__utm.gif?utmwv=5.5.7&utms=1&utmn=1242429522&utmhn=mitmproxy.org&utmcs=UTF-8&utmsr=1536x864&utmvp=1091x742&utmsc=24-bit&utmul=de&utmje=1&utmfl=15.0%20r0&utmdt=mitmproxy%20-%20home&utmhid=812953117&utmr=-&utmp=%2F&utmht=1410651375077&utmac=UA-4150636-13&utmcc=__utma%3D30234659.1711188806.1410651375.1410651375.1410651375.1%3B%2B__utmz%3D30234659.1410651375.1.1.utmcsr%3D(direct)%7Cutmccn%3D(direct)%7Cutmcmd%3D(none)%3B&utmu=q~",
+ "method": "GET",
+ "scheme": "http",
+ "port": 80,
+ "httpversion": [
+ 1,
+ 1
+ ]
+ },
+ "server_conn": {
+ "timestamp_tcp_setup": 1410651374.99,
+ "state": [],
+ "timestamp_ssl_setup": null,
+ "sni": null,
+ "timestamp_start": 1410651374.974,
+ "address": {
+ "use_ipv6": false,
+ "address": [
+ "www.google-analytics.com",
+ 80
+ ]
+ },
+ "timestamp_end": null,
+ "source_address": {
+ "use_ipv6": false,
+ "address": [
+ "192.168.1.117",
+ 63409
+ ]
+ },
+ "ssl_established": false
+ },
+ "client_conn": {
+ "timestamp_start": 1410651374.389,
+ "address": {
+ "use_ipv6": false,
+ "address": [
+ "127.0.0.1",
+ 63405
+ ]
+ },
+ "timestamp_ssl_setup": null,
+ "timestamp_end": null,
+ "clientcert": null,
+ "ssl_established": false
+ },
+ "conntype": "http",
+ "version": [
+ 0,
+ 11
+ ],
+ "error": null,
+ "response": {
+ "code": 200,
+ "headers": [
+ [
+ "Pragma",
+ "no-cache"
+ ],
+ [
+ "Expires",
+ "Wed, 19 Apr 2000 11:43:00 GMT"
+ ],
+ [
+ "Last-Modified",
+ "Wed, 21 Jan 2004 19:51:30 GMT"
+ ],
+ [
+ "X-Content-Type-Options",
+ "nosniff"
+ ],
+ [
+ "Content-Type",
+ "image/gif"
+ ],
+ [
+ "Date",
+ "Thu, 04 Sep 2014 18:39:58 GMT"
+ ],
+ [
+ "Server",
+ "Golfe2"
+ ],
+ [
+ "Content-Length",
+ "35"
+ ],
+ [
+ "Age",
+ "795373"
+ ],
+ [
+ "Cache-Control",
+ "private, no-cache, no-cache=Set-Cookie, proxy-revalidate"
+ ],
+ [
+ "Alternate-Protocol",
+ "80:quic,p=0.002"
+ ]
+ ],
+ "timestamp_start": 1410651375.104,
+ "msg": "OK",
+ "timestamp_end": 1410651375.107,
+ "httpversion": [
+ 1,
+ 1
+ ]
+ }
+},
+{
+ "request": {
+ "timestamp_end": 1410651374.778,
+ "timestamp_start": 1410651374.766,
+ "form_in": "absolute",
+ "headers": [
+ [
+ "Host",
+ "mitmproxy.org"
+ ],
+ [
+ "User-Agent",
+ "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:32.0) Gecko/20100101 Firefox/32.0"
+ ],
+ [
+ "Accept",
+ "image/png,image/*;q=0.8,*/*;q=0.5"
+ ],
+ [
+ "Accept-Language",
+ "de,en-US;q=0.7,en;q=0.3"
+ ],
+ [
+ "Accept-Encoding",
+ "gzip, deflate"
+ ],
+ [
+ "Referer",
+ "http://mitmproxy.org/"
+ ],
+ [
+ "Connection",
+ "keep-alive"
+ ]
+ ],
+ "host": "mitmproxy.org",
+ "form_out": "relative",
+ "path": "/images/apple.png",
+ "method": "GET",
+ "scheme": "http",
+ "port": 80,
+ "httpversion": [
+ 1,
+ 1
+ ]
+ },
+ "server_conn": {
+ "timestamp_tcp_setup": 1410651374.952,
+ "state": [],
+ "timestamp_ssl_setup": null,
+ "sni": null,
+ "timestamp_start": 1410651374.782,
+ "address": {
+ "use_ipv6": false,
+ "address": [
+ "mitmproxy.org",
+ 80
+ ]
+ },
+ "timestamp_end": null,
+ "source_address": {
+ "use_ipv6": false,
+ "address": [
+ "192.168.1.117",
+ 63408
+ ]
+ },
+ "ssl_established": false
+ },
+ "client_conn": {
+ "timestamp_start": 1410651374.39,
+ "address": {
+ "use_ipv6": false,
+ "address": [
+ "127.0.0.1",
+ 63406
+ ]
+ },
+ "timestamp_ssl_setup": null,
+ "timestamp_end": null,
+ "clientcert": null,
+ "ssl_established": false
+ },
+ "conntype": "http",
+ "version": [
+ 0,
+ 11
+ ],
+ "error": null,
+ "response": {
+ "code": 200,
+ "headers": [
+ [
+ "Server",
+ "nginx/1.1.19"
+ ],
+ [
+ "Date",
+ "Sat, 13 Sep 2014 23:36:11 GMT"
+ ],
+ [
+ "Content-Type",
+ "image/png"
+ ],
+ [
+ "Content-Length",
+ "20532"
+ ],
+ [
+ "Last-Modified",
+ "Wed, 26 Feb 2014 19:58:20 GMT"
+ ],
+ [
+ "Connection",
+ "keep-alive"
+ ],
+ [
+ "Accept-Ranges",
+ "bytes"
+ ]
+ ],
+ "timestamp_start": 1410651375.125,
+ "msg": "OK",
+ "timestamp_end": 1410651375.126,
+ "httpversion": [
+ 1,
+ 1
+ ]
+ }
+},
+{
+ "request": {
+ "timestamp_end": 1410651374.778,
+ "timestamp_start": 1410651374.766,
+ "form_in": "absolute",
+ "headers": [
+ [
+ "Host",
+ "mitmproxy.org"
+ ],
+ [
+ "User-Agent",
+ "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:32.0) Gecko/20100101 Firefox/32.0"
+ ],
+ [
+ "Accept",
+ "image/png,image/*;q=0.8,*/*;q=0.5"
+ ],
+ [
+ "Accept-Language",
+ "de,en-US;q=0.7,en;q=0.3"
+ ],
+ [
+ "Accept-Encoding",
+ "gzip, deflate"
+ ],
+ [
+ "Referer",
+ "http://mitmproxy.org/"
+ ],
+ [
+ "Connection",
+ "keep-alive"
+ ]
+ ],
+ "host": "mitmproxy.org",
+ "form_out": "relative",
+ "path": "/images/mitmproxy-small.png",
+ "method": "GET",
+ "scheme": "http",
+ "port": 80,
+ "httpversion": [
+ 1,
+ 1
+ ]
+ },
+ "server_conn": {
+ "timestamp_tcp_setup": 1410651374.189,
+ "state": [],
+ "timestamp_ssl_setup": null,
+ "sni": null,
+ "timestamp_start": 1410651373.985,
+ "address": {
+ "use_ipv6": false,
+ "address": [
+ "mitmproxy.org",
+ 80
+ ]
+ },
+ "timestamp_end": null,
+ "source_address": {
+ "use_ipv6": false,
+ "address": [
+ "192.168.1.117",
+ 63404
+ ]
+ },
+ "ssl_established": false
+ },
+ "client_conn": {
+ "timestamp_start": 1410651373.958,
+ "address": {
+ "use_ipv6": false,
+ "address": [
+ "127.0.0.1",
+ 63403
+ ]
+ },
+ "timestamp_ssl_setup": null,
+ "timestamp_end": null,
+ "clientcert": null,
+ "ssl_established": false
+ },
+ "conntype": "http",
+ "version": [
+ 0,
+ 11
+ ],
+ "error": null,
+ "response": {
+ "code": 200,
+ "headers": [
+ [
+ "Server",
+ "nginx/1.1.19"
+ ],
+ [
+ "Date",
+ "Sat, 13 Sep 2014 23:36:11 GMT"
+ ],
+ [
+ "Content-Type",
+ "image/png"
+ ],
+ [
+ "Content-Length",
+ "170108"
+ ],
+ [
+ "Last-Modified",
+ "Wed, 26 Feb 2014 19:58:20 GMT"
+ ],
+ [
+ "Connection",
+ "keep-alive"
+ ],
+ [
+ "Accept-Ranges",
+ "bytes"
+ ]
+ ],
+ "timestamp_start": 1410651374.953,
+ "msg": "OK",
+ "timestamp_end": 1410651374.954,
+ "httpversion": [
+ 1,
+ 1
+ ]
+ }
+},
+{
+ "request": {
+ "timestamp_end": 1410651376.078,
+ "timestamp_start": 1410651376.075,
+ "form_in": "absolute",
+ "headers": [
+ [
+ "Host",
+ "mitmproxy.org"
+ ],
+ [
+ "User-Agent",
+ "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:32.0) Gecko/20100101 Firefox/32.0"
+ ],
+ [
+ "Accept",
+ "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"
+ ],
+ [
+ "Accept-Language",
+ "de,en-US;q=0.7,en;q=0.3"
+ ],
+ [
+ "Accept-Encoding",
+ "gzip, deflate"
+ ],
+ [
+ "Cookie",
+ "__utma=30234659.1711188806.1410651375.1410651375.1410651375.1; __utmb=30234659.1.10.1410651375; __utmc=30234659; __utmz=30234659.1410651375.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none)"
+ ],
+ [
+ "Connection",
+ "keep-alive"
+ ]
+ ],
+ "host": "mitmproxy.org",
+ "form_out": "relative",
+ "path": "/favicon.ico",
+ "method": "GET",
+ "scheme": "http",
+ "port": 80,
+ "httpversion": [
+ 1,
+ 1
+ ]
+ },
+ "server_conn": {
+ "timestamp_tcp_setup": 1410651374.189,
+ "state": [],
+ "timestamp_ssl_setup": null,
+ "sni": null,
+ "timestamp_start": 1410651373.985,
+ "address": {
+ "use_ipv6": false,
+ "address": [
+ "mitmproxy.org",
+ 80
+ ]
+ },
+ "timestamp_end": null,
+ "source_address": {
+ "use_ipv6": false,
+ "address": [
+ "192.168.1.117",
+ 63404
+ ]
+ },
+ "ssl_established": false
+ },
+ "client_conn": {
+ "timestamp_start": 1410651373.958,
+ "address": {
+ "use_ipv6": false,
+ "address": [
+ "127.0.0.1",
+ 63403
+ ]
+ },
+ "timestamp_ssl_setup": null,
+ "timestamp_end": null,
+ "clientcert": null,
+ "ssl_established": false
+ },
+ "conntype": "http",
+ "version": [
+ 0,
+ 11
+ ],
+ "error": null,
+ "response": {
+ "code": 404,
+ "headers": [
+ [
+ "Server",
+ "nginx/1.1.19"
+ ],
+ [
+ "Date",
+ "Sat, 13 Sep 2014 23:36:12 GMT"
+ ],
+ [
+ "Content-Type",
+ "text/html"
+ ],
+ [
+ "Content-Length",
+ "169"
+ ],
+ [
+ "Connection",
+ "keep-alive"
+ ]
+ ],
+ "timestamp_start": 1410651376.254,
+ "msg": "Not Found",
+ "timestamp_end": 1410651376.255,
+ "httpversion": [
+ 1,
+ 1
+ ]
+ }
+},
+{
+ "request": {
+ "timestamp_end": 1410651376.282,
+ "timestamp_start": 1410651376.279,
+ "form_in": "absolute",
+ "headers": [
+ [
+ "Host",
+ "mitmproxy.org"
+ ],
+ [
+ "User-Agent",
+ "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:32.0) Gecko/20100101 Firefox/32.0"
+ ],
+ [
+ "Accept",
+ "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"
+ ],
+ [
+ "Accept-Language",
+ "de,en-US;q=0.7,en;q=0.3"
+ ],
+ [
+ "Accept-Encoding",
+ "gzip, deflate"
+ ],
+ [
+ "Cookie",
+ "__utma=30234659.1711188806.1410651375.1410651375.1410651375.1; __utmb=30234659.1.10.1410651375; __utmc=30234659; __utmz=30234659.1410651375.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none)"
+ ],
+ [
+ "Connection",
+ "keep-alive"
+ ]
+ ],
+ "host": "mitmproxy.org",
+ "form_out": "relative",
+ "path": "/favicon.ico",
+ "method": "GET",
+ "scheme": "http",
+ "port": 80,
+ "httpversion": [
+ 1,
+ 1
+ ]
+ },
+ "server_conn": {
+ "timestamp_tcp_setup": 1410651374.189,
+ "state": [],
+ "timestamp_ssl_setup": null,
+ "sni": null,
+ "timestamp_start": 1410651373.985,
+ "address": {
+ "use_ipv6": false,
+ "address": [
+ "mitmproxy.org",
+ 80
+ ]
+ },
+ "timestamp_end": null,
+ "source_address": {
+ "use_ipv6": false,
+ "address": [
+ "192.168.1.117",
+ 63404
+ ]
+ },
+ "ssl_established": false
+ },
+ "client_conn": {
+ "timestamp_start": 1410651373.958,
+ "address": {
+ "use_ipv6": false,
+ "address": [
+ "127.0.0.1",
+ 63403
+ ]
+ },
+ "timestamp_ssl_setup": null,
+ "timestamp_end": null,
+ "clientcert": null,
+ "ssl_established": false
+ },
+ "conntype": "http",
+ "version": [
+ 0,
+ 11
+ ],
+ "error": null,
+ "response": {
+ "code": 404,
+ "headers": [
+ [
+ "Server",
+ "nginx/1.1.19"
+ ],
+ [
+ "Date",
+ "Sat, 13 Sep 2014 23:36:12 GMT"
+ ],
+ [
+ "Content-Type",
+ "text/html"
+ ],
+ [
+ "Content-Length",
+ "169"
+ ],
+ [
+ "Connection",
+ "keep-alive"
+ ]
+ ],
+ "timestamp_start": 1410651376.461,
+ "msg": "Not Found",
+ "timestamp_end": 1410651376.462,
+ "httpversion": [
+ 1,
+ 1
+ ]
+ }
+}] \ No newline at end of file
diff --git a/libmproxy/web/static/images/sprite.png b/libmproxy/web/static/images/sprite.png
new file mode 100644
index 00000000..ff57a37d
--- /dev/null
+++ b/libmproxy/web/static/images/sprite.png
Binary files differ
diff --git a/libmproxy/web/static/js/app.js b/libmproxy/web/static/js/app.js
index e967af89..ea49db4d 100644
--- a/libmproxy/web/static/js/app.js
+++ b/libmproxy/web/static/js/app.js
@@ -269,13 +269,14 @@ _.extend(FlowView.prototype, EventEmitter.prototype, {
var updates = this.flows;
this.flows = flows;
updates.forEach(function(flow){
- this.update(flow);
+ this._update(flow);
}.bind(this));
+ this.emit("change");
},
- update: function(flow){
+ _update: function(flow){
console.debug("FIXME: Use UUID");
var idx = _.findIndex(this.flows, function(f){
- return flow.request.timestamp_start == f.request.timestamp_start
+ return flow.request.timestamp_start == f.request.timestamp_start;
});
if(idx < 0){
@@ -283,6 +284,9 @@ _.extend(FlowView.prototype, EventEmitter.prototype, {
} else {
this.flows[idx] = flow;
}
+ },
+ update: function(flow){
+ this._update(flow);
this.emit("change");
},
});
@@ -294,6 +298,11 @@ function _FlowStore() {
_.extend(_FlowStore.prototype, EventEmitter.prototype, {
getView: function (since) {
var view = new FlowView(this, !since);
+
+ $.getJSON("/static/flows.json", function(flows){
+ view.add_bulk(flows);
+ });
+
return view;
},
handle: function (action) {
@@ -442,7 +451,10 @@ var FlowRow = React.createClass({displayName: 'FlowRow',
render: function(){
var flow = this.props.flow;
var columns = this.props.columns.map(function(column){
- return column({flow: flow});
+ return column({
+ key: column.displayName,
+ flow: flow
+ });
}.bind(this));
return React.DOM.tr(null, columns);
}
@@ -460,55 +472,89 @@ var FlowTableHead = React.createClass({displayName: 'FlowTableHead',
var FlowTableBody = React.createClass({displayName: 'FlowTableBody',
render: function(){
var rows = this.props.flows.map(function(flow){
- return FlowRow({flow: flow, columns: this.props.columns})
+ //TODO: Add UUID
+ return FlowRow({flow: flow, columns: this.props.columns});
}.bind(this));
return React.DOM.tbody(null, rows);
}
});
+
+var TLSColumn = React.createClass({displayName: 'TLSColumn',
+ statics: {
+ renderTitle: function(){
+ return React.DOM.th({key: "tls", className: "col-tls"});
+ }
+ },
+ render: function(){
+ var flow = this.props.flow;
+ var ssl = (flow.request.scheme == "https");
+ return React.DOM.td({className: ssl ? "col-tls-https" : "col-tls-http"});
+ }
+});
+
+
+var IconColumn = React.createClass({displayName: 'IconColumn',
+ statics: {
+ renderTitle: function(){
+ return React.DOM.th({key: "icon", className: "col-icon"});
+ }
+ },
+ render: function(){
+ var flow = this.props.flow;
+ return React.DOM.td({className: "resource-icon resource-icon-plain"});
+ }
+});
+
var PathColumn = React.createClass({displayName: 'PathColumn',
statics: {
renderTitle: function(){
- return React.DOM.th({key: "PathColumn"}, "Path");
+ return React.DOM.th({key: "path", className: "col-path"}, "Path");
}
},
render: function(){
var flow = this.props.flow;
- return React.DOM.td({key: "PathColumn"}, flow.request.scheme + "://" + flow.request.host + flow.request.path);
+ return React.DOM.td(null, flow.request.scheme + "://" + flow.request.host + flow.request.path);
}
});
+
+
var MethodColumn = React.createClass({displayName: 'MethodColumn',
statics: {
renderTitle: function(){
- return React.DOM.th({key: "MethodColumn"}, "Method");
+ return React.DOM.th({key: "method", className: "col-method"}, "Method");
}
},
render: function(){
var flow = this.props.flow;
- return React.DOM.td({key: "MethodColumn"}, flow.request.method);
+ return React.DOM.td(null, flow.request.method);
}
});
+
+
var StatusColumn = React.createClass({displayName: 'StatusColumn',
statics: {
renderTitle: function(){
- return React.DOM.th({key: "StatusColumn"}, "Status");
+ return React.DOM.th({key: "status", className: "col-status"}, "Status");
}
},
render: function(){
var flow = this.props.flow;
var status;
if(flow.response){
- status = flow.response.code + " " + flow.response.msg;
+ status = flow.response.code;
} else {
status = null;
}
- return React.DOM.td({key: "StatusColumn"}, status);
+ return React.DOM.td(null, status);
}
});
+
+
var TimeColumn = React.createClass({displayName: 'TimeColumn',
statics: {
renderTitle: function(){
- return React.DOM.th({key: "TimeColumn"}, "Time");
+ return React.DOM.th({key: "time", className: "col-time"}, "Time");
}
},
render: function(){
@@ -519,11 +565,13 @@ var TimeColumn = React.createClass({displayName: 'TimeColumn',
} else {
time = "...";
}
- return React.DOM.td({key: "TimeColumn"}, time);
+ return React.DOM.td(null, time);
}
});
-var all_columns = [PathColumn, MethodColumn, StatusColumn, TimeColumn];
+
+var all_columns = [TLSColumn, IconColumn, PathColumn, MethodColumn, StatusColumn, TimeColumn];
+
var FlowTable = React.createClass({displayName: 'FlowTable',
getInitialState: function () {