forked from encrypt-to/encrypt-to.github.io
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathworker.js
More file actions
132 lines (111 loc) · 3.19 KB
/
worker.js
File metadata and controls
132 lines (111 loc) · 3.19 KB
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
124
125
126
127
128
129
130
131
132
function startAudit() {
// load js file list
var fileLoader = new ObjLoader("https://api.github.com/repos/hackenproof/report_encryption/contents");
// load commits
var commitLoader = new ObjLoader("https://api.github.com/repos/hackenproof/report_encryption/commits");
var lastCommit = commitLoader.objects[0];
if (lastCommit) {
self.postMessage({'cmd':'commit','lastCommit':lastCommit});
} else {
self.postMessage({'cmd':'error','msg':'Can not load files from Github.'});
//self.close();
}
// start file audit
for (var i in fileLoader.objects) {
var name = fileLoader.objects[i].name;
var size = fileLoader.objects[i].size;
if (name.indexOf(".js") !== -1) {
// build links
var deployedLink = 'https://cdn.jsdelivr.net/gh/hackenproof/report_encryption/' + name;
var githubLink = 'https://api.github.com/repos/hackenproof/report_encryption/contents/' + name;
// load files
var deployed = new Audit(deployedLink, false);
var github = new Audit(githubLink, true);
// compare base64 string
var result = deployed.encodedData === github.encodedData;
// write result
if (result) {
self.postMessage({'cmd':'audit','valid':'true','name':name,'size':size});
} else {
self.postMessage({'cmd':'audit','valid':'false','name':name,'size':size});
}
}
}
// worker done
self.postMessage({'cmd':'done'});
}
/**
* Audit Security Tool for Encrypt.to
* The script compares js files from github and the deployed version at Encrypt.to.
*
*/
// define audit class
function Audit(url, isJson) {
var self = this;
self.isJson = isJson;
self.url = url;
self.startAudit();
}
// start processing
Audit.prototype.startAudit = function() {
var self = this;
self.loadData();
self.encodeData();
if (self.isJson) {
self.parseJson();
self.cleanupString();
}
};
// fetch data from remote source
Audit.prototype.loadData = function() {
var self = this;
var req = new XMLHttpRequest();
req.open('GET', self.url + "?" + new Date().getTime(), false);
req.send(null);
if(req.status == 200) {
self.sourceData = req.responseText;
} else {
//self.postMessage({'cmd':'error','req':req});
}
};
// encode sourceData to base64
Audit.prototype.encodeData = function() {
var self = this;
importScripts("base64.js");
self.encodedData = base64.encode(self.sourceData);
};
// load encoded data from obj
Audit.prototype.parseJson = function() {
var self = this;
var obj = JSON.parse(self.sourceData);
self.encodedData = obj.content;
};
// remove newlines
Audit.prototype.cleanupString = function() {
var self = this;
self.encodedData = self.encodedData.replace(/\n/g,'');
};
// define ObjLoader class
function ObjLoader(url) {
var self = this;
self.url = url;
self.objects = [];
self.loadData();
}
// fetch data from remote source
ObjLoader.prototype.loadData = function() {
var self = this;
var req = new XMLHttpRequest();
req.open('GET', self.url + "?" + new Date().getTime(), false);
req.send(null);
if(req.status == 200) {
self.sourceData = req.responseText;
self.objects = JSON.parse(self.sourceData);
} else {
//self.postMessage({'cmd':'error','req':req});
}
};
// web worker
self.addEventListener('message', function(e) {
startAudit();
}, false);