@@ -28,7 +28,7 @@ export const buildUrlScanResult = (
2828 const redirectChain = response . request ( ) . redirectChain ( ) ;
2929 const finalUrl = getFinalUrl ( page ) ;
3030 return {
31- targetUrlRedirects : isRedirect ( url , finalUrl , logger ) ,
31+ targetUrlRedirects : isRedirect ( url , getWithSubdomain ( finalUrl ) , logger ) ,
3232 finalUrl : finalUrl ,
3333 finalUrlWebsite : getWithSubdomain ( finalUrl ) ,
3434 finalUrlTopLevelDomain : getTopLevelDomain ( finalUrl ) ,
@@ -53,24 +53,42 @@ const getFinalUrl = (page: Page) => {
5353function cleanUrl ( url : string ) : string {
5454 // Remove the protocol (http:// or https://)
5555 url = url . replace ( / ^ h t t p s ? : \/ \/ / , '' ) ;
56-
57- // Remove 'www.' if it exists
58- url = url . replace ( / ^ w w w \. / , '' ) ;
5956
6057 // Remove trailing slashes
6158 url = url . replace ( / \/ $ / , '' ) ;
6259
6360 return url ;
6461}
6562
63+ function removeWww ( url : string ) : string {
64+ return url . replace ( / ^ w w w \. / , '' ) ;
65+ }
66+
67+ /**
68+ * Compares the initial URL and final URL to determine if a redirect occurred
69+ *
70+ * @param initialUrl The initial URL that is being scanned. Stored as the `url` property in the CoreInputDto
71+ * @param finalUrl The final URL after all redirects. Stored as the `name` property in the CoreResult
72+ * @param logger
73+ * @returns true if the initial URL and final URL are the same, false if they are different, and null if either is missing
74+ */
6675function isRedirect ( initialUrl : string , finalUrl : string , logger : Logger ) : boolean {
67- if ( ! initialUrl || ! finalUrl ) {
68- logger . warn ( 'One of the URLs is missing , cannot determine redirection .') ;
76+ if ( ! finalUrl ) {
77+ logger . info ( 'No final URL found , cannot compare .') ;
6978 return null ;
7079 }
80+
7181 initialUrl = cleanUrl ( initialUrl ) ;
72- finalUrl = cleanUrl ( finalUrl ) ;
73- logger . info ( { redirectCheck : { initialUrl, finalUrl} } , `Comparing initial URL: ${ initialUrl } with final URL: ${ finalUrl } ` ) ;
74- logger . info ( `Redirect check is: ${ initialUrl !== finalUrl } ` ) ;
75- return initialUrl !== finalUrl ;
82+ finalUrl = removeWww ( cleanUrl ( finalUrl ) ) ;
83+
84+ if ( initialUrl === finalUrl ) {
85+ logger . info ( { redirectCheck : { initialUrl, finalUrl} } , 'Initial URL and final URL are the same.' ) ;
86+ return true ;
87+ }
88+ if ( initialUrl && finalUrl ) {
89+ logger . info ( { redirectCheck : { initialUrl, finalUrl} } , 'Initial URL and final URL are different.' ) ;
90+ return false ;
91+ }
92+
93+ return null ;
7694}
0 commit comments