1
- /**
2
- * Audit Security Tool for Encrypt.to
3
- * The script compares js files from github and the deployed version at Encrypt.to.
4
- *
5
- */
6
-
7
- // define audit class
8
- function Audit ( url , isJson ) {
9
- var self = this ;
10
- self . isJson = isJson ;
11
- self . url = url ;
12
-
13
- self . startAudit ( ) ;
14
- }
15
-
16
- // start processing
17
- Audit . prototype . startAudit = function ( ) {
18
- var self = this ;
19
- self . loadData ( ) ;
20
- self . encodeData ( ) ;
21
-
22
- if ( self . isJson ) {
23
- self . parseJson ( ) ;
24
- self . cleanupString ( ) ;
25
- }
26
- } ;
27
-
28
- // fetch data from remote source
29
- Audit . prototype . loadData = function ( ) {
30
- var self = this ;
31
- self . sourceData = $ . ajax ( {
32
- url : self . url + "?" + new Date ( ) . getTime ( ) ,
33
- async : false
34
- } ) . responseText ;
35
- } ;
36
-
37
- // encode sourceData to base64
38
- Audit . prototype . encodeData = function ( ) {
39
- var self = this ;
40
- self . encodedData = window . btoa ( self . sourceData ) ;
41
- } ;
42
-
43
- // load encoded data from obj
44
- Audit . prototype . parseJson = function ( ) {
45
- var self = this ;
46
- var obj = JSON . parse ( self . sourceData ) ;
47
- self . encodedData = obj . content ;
48
- } ;
49
-
50
- // remove newlines
51
- Audit . prototype . cleanupString = function ( ) {
52
- var self = this ;
53
- self . encodedData = self . encodedData . replace ( / \n / g, '' ) ;
54
- } ;
55
-
56
- // define ObjLoader class
57
- function ObjLoader ( url ) {
58
- var self = this ;
59
- self . url = url ;
60
- self . objects = [ ] ;
61
- self . loadData ( ) ;
62
- }
63
-
64
- // fetch data from remote source
65
- ObjLoader . prototype . loadData = function ( ) {
66
- var self = this ;
67
- self . sourceData = $ . ajax ( {
68
- url : self . url + "?" + new Date ( ) . getTime ( ) ,
69
- async : false
70
- } ) . responseText ;
71
- self . objects = JSON . parse ( self . sourceData ) ;
72
- } ;
73
-
74
1
// start audit after page load
75
2
$ ( document ) . ready ( function ( ) {
76
- setTimeout ( function ( ) {
77
-
78
- // load js file list
79
- var fileLoader = new ObjLoader ( "https://api.github.com/repos/encrypt-to/encrypt.to/contents/public/assets" ) ;
80
-
81
- // load commits
82
- var commitLoader = new ObjLoader ( "https://api.github.com/repos/encrypt-to/encrypt.to/commits" ) ;
83
- var lastCommit = commitLoader . objects [ 0 ] ;
84
- $ ( '#commit' ) . append ( "<a href='https://github.com/encrypt-to/encrypt.to/commit/" + lastCommit . sha + "'>" + "Last commit from " + lastCommit . commit . author . date + ", " + lastCommit . commit . message + "</a>" ) ;
3
+ var worker = new Worker ( 'worker.js' ) ;
85
4
86
- // start file audit
87
- for ( var i in fileLoader . objects ) {
88
- var name = fileLoader . objects [ i ] . name ;
89
- var size = fileLoader . objects [ i ] . size ;
90
- if ( name . indexOf ( ".js" ) !== - 1 ) {
91
-
92
- // build links
93
- var deployedLink = 'https://encrypt.to/assets/ ' + name ;
94
- var githubLink = 'https://api.github.com/repos/encrypt-to/encrypt.to/contents/public/assets/' + name ;
95
-
96
- // load files
97
- var deployed = new Audit ( deployedLink , false ) ;
98
- var github = new Audit ( githubLink , true ) ;
99
-
100
- // compare base64 string
101
- var result = deployed . encodedData === github . encodedData ;
102
-
103
- // write result
104
- if ( result ) {
105
- $ ( '#resultTable > tbody:last' ) . append ( '<tr><td>' + name + '</td><td style="background-color:green;color:white;">=</td><td>' + name + '</td><td>' + size / 1000 + ' kb</td></tr>' ) ;
106
- } else {
107
- $ ( '#resultTable > tbody:last' ) . append ( '<tr style="background-color:red ;color:white;"><td>' + name + '</td><td>!=</td><td>' + name + '</td></tr>' ) ;
108
- }
109
- }
110
- }
111
- $ ( '#running' ) . text ( "Test finished." ) ;
112
- } , 500 ) ;
5
+ worker . addEventListener ( 'message' , function ( e ) {
6
+ var data = e . data ;
7
+ switch ( data . cmd ) {
8
+ case 'audit' :
9
+ if ( data . valid === 'true' ) {
10
+ $ ( '#resultTable > tbody:last' ) . append ( '<tr><td>' + data . name + '</td><td style="background-color:green;color:white;">=</td><td>' + data . name + '</td><td>' + data . size / 1000 + ' kb</td></tr>' ) ;
11
+ } else {
12
+ $ ( '#resultTable > tbody:last' ) . append ( '<tr style="background-color:red;color:white;"><td>' + data . name + '</td><td>!=</td><td> ' + data . name + '</td></tr>' ) ;
13
+ }
14
+ break ;
15
+ case 'commit' :
16
+ $ ( '#commit' ) . append ( "<a href='https://github.com/encrypt-to/encrypt.to/commit/" + data . lastCommit . sha + "'>" + "Last commit from " + data . lastCommit . commit . author . date + ", " + data . lastCommit . commit . message + "</a>" ) ;
17
+ break ;
18
+ case 'done' :
19
+ $ ( '#running' ) . text ( "Test finished." ) ;
20
+ worker . terminate ( ) ;
21
+ break
22
+ case 'error' :
23
+ $ ( '#running' ) . text ( data . msg ) ;
24
+ break
25
+ default :
26
+ $ ( '#resultTable > tbody:last' ) . append ( '<tr style="background-color:blue ;color:white;"><td>' + data . name + ' unavailable </td><td>!=</td><td>' + data . name + ' unavailable </td></tr>' ) ;
27
+ } ;
28
+ } , false ) ;
29
+
30
+ // start worker
31
+ worker . postMessage ( { 'cmd' : 'start' } ) ;
113
32
} ) ;
0 commit comments