@@ -2,6 +2,8 @@ var fs = require('fs');
2
2
var formidable = require ( 'formidable' ) ;
3
3
var async = require ( 'async' ) ;
4
4
var _ = require ( 'underscore' ) ;
5
+ var sanitizeHtml = require ( 'sanitize-html' ) ;
6
+ var htmlWhitelistLink = require ( '../libs/htmlWhitelistLink.json' ) ;
5
7
6
8
var Discussion = require ( '../models/discussion' ) . Discussion ;
7
9
var Group = require ( '../models/group' ) . Group ;
@@ -53,6 +55,9 @@ var getScriptPageTasks = function (options) {
53
55
var script = options . script ;
54
56
var authedUser = options . authedUser ;
55
57
58
+ // Temporaries
59
+ var htmlStub = null ;
60
+
56
61
//--- Tasks
57
62
58
63
// Show the number of open issues
@@ -64,23 +69,23 @@ var getScriptPageTasks = function (options) {
64
69
if ( script . meta . author && script . meta . collaborator ) {
65
70
options . hasCollab = true ;
66
71
if ( typeof script . meta . collaborator === 'string' ) {
67
- options . script . meta . collaborators = [ { name : script . meta . collaborator } ] ;
72
+ options . script . collaborators = [ { url : encodeURIComponent ( script . meta . collaborator ) , text : script . meta . collaborator } ] ;
68
73
} else {
69
- options . script . meta . collaborators = [ ] ;
74
+ options . script . collaborators = [ ] ;
70
75
script . meta . collaborator . forEach ( function ( collaborator ) {
71
- options . script . meta . collaborators . push ( { name : collaborator } ) ;
76
+ options . script . collaborators . push ( { url : encodeURIComponent ( collaborator ) , text : collaborator } ) ;
72
77
} ) ;
73
78
}
74
79
}
75
80
76
81
// Show licensings of the script
77
82
if ( script . meta . license ) {
78
83
if ( typeof script . meta . license === 'string' ) {
79
- options . script . meta . licenses = [ { name : script . meta . license } ] ;
84
+ options . script . licenses = [ { name : script . meta . license } ] ;
80
85
} else {
81
- options . script . meta . licenses = [ ] ;
86
+ options . script . licenses = [ ] ;
82
87
script . meta . license . forEach ( function ( license ) {
83
- options . script . meta . licenses . push ( { name : license } ) ;
88
+ options . script . licenses . push ( { name : license } ) ;
84
89
} ) ;
85
90
}
86
91
} else if ( ! script . isLib ) {
@@ -90,11 +95,25 @@ var getScriptPageTasks = function (options) {
90
95
// Show homepages of the script
91
96
if ( script . meta . homepageURL ) {
92
97
if ( typeof script . meta . homepageURL === 'string' ) {
93
- options . script . meta . homepages = [ { name : script . meta . homepageURL } ] ;
98
+ htmlStub = '<a href="' + script . meta . homepageURL + '"></a>' ;
99
+ if ( htmlStub === sanitizeHtml ( htmlStub , htmlWhitelistLink ) ) {
100
+ options . script . homepages = [ {
101
+ url : script . meta . homepageURL ,
102
+ text : decodeURI ( script . meta . homepageURL ) ,
103
+ hasNoFollow : ! / ^ (?: h t t p s ? : \/ \/ ) ? o p e n u s e r j s \. o r g \/ / i. test ( script . meta . homepageURL )
104
+ } ] ;
105
+ }
94
106
} else {
95
- options . script . meta . homepages = [ ] ;
107
+ options . script . homepages = [ ] ;
96
108
script . meta . homepageURL . forEach ( function ( homepage ) {
97
- options . script . meta . homepages . push ( { name : homepage } ) ;
109
+ htmlStub = '<a href="' + homepage + '"></a>' ;
110
+ if ( htmlStub === sanitizeHtml ( htmlStub , htmlWhitelistLink ) ) {
111
+ options . script . homepages . push ( {
112
+ url : homepage ,
113
+ text : decodeURI ( homepage ) ,
114
+ hasNoFollow : ! / ^ (?: h t t p s ? : \/ \/ ) ? o p e n u s e r j s \. o r g / i. test ( homepage )
115
+ } ) ;
116
+ }
98
117
} ) ;
99
118
}
100
119
}
0 commit comments