Projects STRLCPY Taipan Commits 7e0fd324
🤬
  • ■ ■ ■ ■ ■
    Src/ES.Taipan.Discoverer/DefaultResourceDiscoverer.fs
    skipped 227 lines
    228 228   serviceStateController.UnlockPause()
    229 229   }
    230 230  
     231 + let getEffectiveUriToScan(inputDiscoverRequest: DiscoverRequest) =
     232 + let mutable uri = inputDiscoverRequest.Request.Uri.AbsoluteUri
     233 + if String.IsNullOrWhiteSpace(Path.GetExtension(uri)) && not(uri.EndsWith("/")) then
     234 + // maybe it is a directory with missing trailing '/', send the request
     235 + let savedAllowRedirect = webRequestor.HttpRequestor.Settings.AllowAutoRedirect
     236 + webRequestor.HttpRequestor.Settings.AllowAutoRedirect <- false
     237 + let httpResponse = webRequestor.HttpRequestor.SendRequest(new HttpRequest(uri))
     238 + webRequestor.HttpRequestor.Settings.AllowAutoRedirect <- savedAllowRedirect
     239 + 
     240 + // if the response is a redirect with a path similar with added '/' it is a directory
     241 + if httpResponse.IsSome && HttpUtility.isRedirect(httpResponse.Value.StatusCode) then
     242 + match HttpUtility.tryGetHeader("Location", httpResponse.Value.Headers) with
     243 + | Some locationHdr ->
     244 + if locationHdr.Value.Equals(uri + "/") then
     245 + uri <- locationHdr.Value
     246 + | None -> ()
     247 + uri
     248 + 
    231 249   do
    232 250   logProvider.AddLogSourceToLoggers(_logger)
    233 251   
    skipped 65 lines
    299 317   member this.Discover(inputDiscoverRequest: DiscoverRequest) : ResourceDiscovered list =
    300 318   let identifiedResources = new ConcurrentBag<ResourceDiscovered>()
    301 319   let extensionMarker = "%EXT%"
     320 + let uri = new Uri(getEffectiveUriToScan(inputDiscoverRequest))
    302 321  
    303 322   // create the effective discover request, this is necessary if the request ask to discover a file
    304  - let pathDirectory = HttpUtility.getAbsolutePathDirectory(inputDiscoverRequest.Request.Uri) + "/"
    305  - let discoverRequest = new DiscoverRequest(new HttpRequest(new Uri(inputDiscoverRequest.Request.Uri, pathDirectory)))
     323 + let pathDirectory = HttpUtility.getAbsolutePathDirectory(uri) + "/"
     324 + let discoverRequest = new DiscoverRequest(new HttpRequest(new Uri(uri, pathDirectory)))
    306 325  
    307 326   if isRequestAllowed(discoverRequest) then
    308 327   _logger.DiscoverRequest(discoverRequest)
    skipped 105 lines
Please wait...
Page is in error, reload to recover