@@ -35,6 +35,7 @@ class FilestackFilePicker extends React.Component {
35
35
this . state = {
36
36
inputUrl : '' ,
37
37
invalidUrl : false ,
38
+ invalidDomain : false ,
38
39
} ;
39
40
}
40
41
@@ -105,8 +106,10 @@ class FilestackFilePicker extends React.Component {
105
106
if ( ! isChallengeBelongToTopgearGroup ) {
106
107
return ;
107
108
}
108
- if ( this . isValidUrl ( inputUrl ) ) {
109
- this . setState ( { invalidUrl : false } ) ;
109
+ const validUrl = this . isValidUrl ( inputUrl ) ;
110
+ const validDomain = this . isDomainAllowed ( inputUrl ) ;
111
+ if ( validUrl && validDomain ) {
112
+ this . setState ( { invalidUrl : false , invalidDomain : false } ) ;
110
113
const path = this . generateFilePath ( ) ;
111
114
const filename = inputUrl . substring ( inputUrl . lastIndexOf ( '/' ) + 1 ) ;
112
115
setDragged ( false ) ;
@@ -119,7 +122,7 @@ class FilestackFilePicker extends React.Component {
119
122
originalPath : inputUrl ,
120
123
} , path ) ;
121
124
} else {
122
- this . setState ( { invalidUrl : true } ) ;
125
+ this . setState ( { invalidUrl : true , invalidDomain : ! validDomain } ) ;
123
126
}
124
127
}
125
128
@@ -132,6 +135,11 @@ class FilestackFilePicker extends React.Component {
132
135
return / ^ (?: (?: (?: h t t p s ? | f t p ) : ) ? \/ \/ ) (?: \S + (?: : \S * ) ? @ ) ? (?: (? ! (?: 1 0 | 1 2 7 ) (?: \. \d { 1 , 3 } ) { 3 } ) (? ! (?: 1 6 9 \. 2 5 4 | 1 9 2 \. 1 6 8 ) (?: \. \d { 1 , 3 } ) { 2 } ) (? ! 1 7 2 \. (?: 1 [ 6 - 9 ] | 2 \d | 3 [ 0 - 1 ] ) (?: \. \d { 1 , 3 } ) { 2 } ) (?: [ 1 - 9 ] \d ? | 1 \d \d | 2 [ 0 1 ] \d | 2 2 [ 0 - 3 ] ) (?: \. (?: 1 ? \d { 1 , 2 } | 2 [ 0 - 4 ] \d | 2 5 [ 0 - 5 ] ) ) { 2 } (?: \. (?: [ 1 - 9 ] \d ? | 1 \d \d | 2 [ 0 - 4 ] \d | 2 5 [ 0 - 4 ] ) ) | (?: (?: [ a - z \u00a1 - \uffff 0 - 9 ] - * ) * [ a - z \u00a1 - \uffff 0 - 9 ] + ) (?: \. (?: [ a - z \u00a1 - \uffff 0 - 9 ] - * ) * [ a - z \u00a1 - \uffff 0 - 9 ] + ) * (?: \. (?: [ a - z \u00a1 - \uffff ] { 2 , } ) ) ) (?: : \d { 2 , 5 } ) ? (?: [ / ? # ] \S * ) ? $ / i. test ( url ) ; /* eslint-disable-line no-useless-escape */
133
136
}
134
137
138
+ isDomainAllowed ( url ) {
139
+ const domainReg = new RegExp ( `^https?://(${ config . TOPGEAR_ALLOWED_SUBMISSIONS_DOMAINS . join ( '|' ) } )/` ) ;
140
+ return ! ! url . match ( domainReg ) ;
141
+ }
142
+
135
143
/**
136
144
* Returns the path where the picked up file should be stored.
137
145
* @return {String }
@@ -157,6 +165,7 @@ class FilestackFilePicker extends React.Component {
157
165
158
166
const {
159
167
invalidUrl,
168
+ invalidDomain,
160
169
inputUrl,
161
170
} = this . state ;
162
171
@@ -207,6 +216,14 @@ class FilestackFilePicker extends React.Component {
207
216
isChallengeBelongToTopgearGroup && (
208
217
< div styleName = "url-input-container" >
209
218
{ invalidUrl && ( < div styleName = "invalid-url-message" > * Invalid URL</ div > ) }
219
+ { invalidDomain && (
220
+ < div styleName = "invalid-url-message" >
221
+ Ensure that you submit a valid Wipro SharePoint link only.
222
+ The link should point to the outcome/deliverable of the
223
+ challenge and should reflect the work done.
224
+ Please check the challenge submission guidelines.
225
+ </ div >
226
+ ) }
210
227
< input styleName = { ( invalidUrl ? 'invalid' : '' ) } id = "name" name = "name" type = "text" placeholder = "URL" onChange = { this . onUpdateInputUrl } value = { inputUrl } required />
211
228
</ div >
212
229
)
0 commit comments