■ ■ ■ ■ ■ ■
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 |