11'use strict' ;
2- const { URL } = require ( 'url' ) ;
3- const parseDomain = require ( 'parse-domain' ) ;
4- const { VALIDATION_OK , VALIDATION_NOT_WHITELIST ,
2+ const { VALIDATION_OK ,
53 VALIDATION_INVALID_URL , VALIDATION_PHONE } = require ( './validator-result.js' ) ;
64
75/**
8- * Controlla se l'URL e' ben formata e se il nome del dominio rientra in una whitelist di url .
6+ * Controlla se l'URL e' ben formata. Sono supportati fino a 5 livelli di dominio .
97 *
108 * @param url rappresenta l'url da controllare
119 *
1210 * @return Un oggetto di tipo ValidatorResult
1311 */
1412function validateUrl ( url ) {
15- const generalRegex = / ^ ( h t t p s ? ) : \/ \/ ( w w w \. ) ? ( [ a - z ] + ) ( \. ( [ \d a - z A - Z - ] + ) ) { 1 , 2 } ( \/ [ \d a - z A - Z - _ ] + ) * \/ ? $ / ;
13+ const generalRegex = / ^ ( h t t p s ? ) : \/ \/ ( w w w \. ) ? ( [ a - z ] + ) ( \. ( [ \d a - z A - Z - ] + ) ) { 1 , 5 } ( \/ [ \d a - z A - Z - _ ] + ) * \/ ? $ / ;
1614 if ( ! generalRegex . test ( url ) ) {
1715 return VALIDATION_INVALID_URL ;
1816 }
19- if ( ! isInWhiteList ( url ) ) {
20- return VALIDATION_NOT_WHITELIST ;
21- }
2217 return VALIDATION_OK ;
2318}
2419
@@ -36,63 +31,6 @@ function validatePhoneNumber(phone) {
3631 return VALIDATION_OK ;
3732}
3833
39- /**
40- * Controlla se il dominio della URL passata rientra in una whitelist di domini
41- *
42- * @param url rappresenta l'url da controllare
43- *
44- * @return true se l'url e' presente nella whitelist, false altrimenti
45- */
46- function isInWhiteList ( url ) {
47- let result = false ;
48- const dictionary = {
49- 'github' : / ^ ( h t t p s ? ) : \/ \/ ( g i t h u b \. c o m ) \/ ( [ \d a - z A - Z - _ ] ) * \/ ? $ / ,
50- 'bitbucket' : / ^ ( h t t p s ? ) : \/ \/ ( b i t b u c k e t \. o r g ) \/ ( [ \d a - z A - Z - _ ] ) * \/ ? $ / ,
51- 'gitlab' : / ^ ( h t t p s ? ) : \/ \/ ( g i t l a b \. c o m ) \/ ( [ \d a - z A - Z - _ ] + ) \/ ? $ / ,
52- 'phabricator' : / ^ ( h t t p s ? ) : \/ \/ ( s e c u r e \. p h a b r i c a t o r \. c o m ) \/ ( p ) \/ ( [ \d a - z A - Z - _ ] + ) \/ ? $ / ,
53- 'gitea' : / ^ ( h t t p s ? ) : \/ \/ ( t r y \. g i t e a \. i o ) \/ ( [ \d a - z A - Z - _ ] + ) \/ ? $ / ,
54- 'gogs' : / ^ ( h t t p s ? ) : \/ \/ ( t r y \. g o g s \. i o ) \/ ( [ \d a - z A - Z - _ ] + ) \/ ? $ /
55- } ;
56-
57- const arrayUrl = [
58- 'https://github.com/' ,
59- 'https://bitbucket.org/' ,
60- 'https://gitlab.com/' ,
61- 'https://phabricator.com/' ,
62- 'https://gitea.io/' ,
63- 'https://gogs.io/'
64- ] ;
65-
66- const urlParsed = new URL ( url ) ;
67- const protocol = urlParsed . protocol ;
68- const hostname = urlParsed . hostname ;
69-
70- const domainParsed = parseDomain ( url ) ;
71- if ( domainParsed != null ) {
72- const domain = domainParsed . domain ;
73-
74- const regex = dictionary [ domain ] ;
75- const isValid = regex && regex . test ( url ) ;
76-
77- let baseUrl = '' ;
78-
79- /* Gli url nella forma https://try.gogs.io/<username>/<projectname>,
80- https://try.gitea.io/<username>/<projectname>,
81- https://secure.phabricator.com/project/view/395/
82- devono diventare https://gogs.io/<username>/<projectname>,
83- https://gitea.io/<username>/<projectname>,
84- https://phabricator.com/project/view/<numProject>/
85- */
86- if ( [ 'gitea' , 'gogs' , 'phabricator' ] . includes ( domain ) ) {
87- baseUrl = `${ protocol } //${ domain } .${ domainParsed . tld } /` ;
88- } else {
89- baseUrl = `${ protocol } //${ hostname } /` ;
90- }
91-
92- result = isValid && arrayUrl . includes ( baseUrl ) ;
93- }
94- return result ;
95- }
9634
9735module . exports = {
9836 url : validateUrl ,
0 commit comments