|
@@ -88,13 +88,15 @@ static inline BOOL _IsMacFinder(GCDWebServerRequest* request) {
|
|
if (![absolutePath hasPrefix:_uploadDirectory] || ![[NSFileManager defaultManager] fileExistsAtPath:absolutePath isDirectory:&isDirectory]) {
|
|
if (![absolutePath hasPrefix:_uploadDirectory] || ![[NSFileManager defaultManager] fileExistsAtPath:absolutePath isDirectory:&isDirectory]) {
|
|
return [GCDWebServerErrorResponse responseWithClientError:kGCDWebServerHTTPStatusCode_NotFound message:@"\"%@\" does not exist", relativePath];
|
|
return [GCDWebServerErrorResponse responseWithClientError:kGCDWebServerHTTPStatusCode_NotFound message:@"\"%@\" does not exist", relativePath];
|
|
}
|
|
}
|
|
- if (isDirectory) {
|
|
|
|
- return [GCDWebServerErrorResponse responseWithClientError:kGCDWebServerHTTPStatusCode_BadRequest message:@"\"%@\" is not a file", relativePath];
|
|
|
|
|
|
+
|
|
|
|
+ NSString* itemName = [absolutePath lastPathComponent];
|
|
|
|
+ if (([itemName hasPrefix:@"."] && !_showHidden) || (!isDirectory && ![self _checkFileExtension:itemName])) {
|
|
|
|
+ return [GCDWebServerErrorResponse responseWithClientError:kGCDWebServerHTTPStatusCode_Forbidden message:@"Downlading item name \"%@\" is not allowed", itemName];
|
|
}
|
|
}
|
|
|
|
|
|
- NSString* fileName = [absolutePath lastPathComponent];
|
|
|
|
- if (([fileName hasPrefix:@"."] && !_showHidden) || ![self _checkFileExtension:fileName]) {
|
|
|
|
- return [GCDWebServerErrorResponse responseWithClientError:kGCDWebServerHTTPStatusCode_Forbidden message:@"Downlading file name \"%@\" is not allowed", fileName];
|
|
|
|
|
|
+ // Because HEAD requests are mapped to GET ones, we need to handle directories but it's OK to return nothing per http://webdav.org/specs/rfc4918.html#rfc.section.9.4
|
|
|
|
+ if (isDirectory) {
|
|
|
|
+ return [GCDWebServerResponse response];
|
|
}
|
|
}
|
|
|
|
|
|
if ([_delegate respondsToSelector:@selector(davServer:didDownloadFileAtPath:)]) {
|
|
if ([_delegate respondsToSelector:@selector(davServer:didDownloadFileAtPath:)]) {
|