Skip to content

Commit

Permalink
Add the functionality to download folder content.
Browse files Browse the repository at this point in the history
Signed-off-by: Akayeshmantha <[email protected]>
  • Loading branch information
Akayeshmantha committed Sep 19, 2020
1 parent 7321c15 commit dcb2390
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 0 deletions.
35 changes: 35 additions & 0 deletions c/unixFileService.c
Original file line number Diff line number Diff line change
Expand Up @@ -1032,6 +1032,26 @@ static int serveUnixFileChangeTag(HttpService *service, HttpResponse *response)
return 0;
}

static int serveUnixFolderDownloadMode(HttpService *service, HttpResponse *response) {
HttpRequest *request = response->request;
char *routeFileFrag = stringListPrint(request->parsedFile, 2, 1000, "/", 0);

if (routeFileFrag == NULL || strlen(routeFileFrag) == 0) {
respondWithJsonError(response, "Required absolute path of the resource is not provided", HTTP_STATUS_BAD_REQUEST, "Bad Request");
return 0;
}
char *encodedRouteFolder = stringConcatenate(response->slh, "/", routeFileFrag);
char *routeFolderName = cleanURLParamValue(response->slh, encodedRouteFolder);

if (!strcmp(request->method, methodGET)) {
createArchiveFromUnixDirectoryAndRespond(response, routeFolderName);
}
else {
respondWithJsonError(response, "Method Not Allowed", HTTP_STATUS_METHOD_NOT_FOUND, "Bad Request");
return 0;
}
return 0;
}

static int serveTableOfContents(HttpService *service, HttpResponse *response) {
HttpRequest *request = response->request;
Expand Down Expand Up @@ -1074,6 +1094,10 @@ static int serveTableOfContents(HttpService *service, HttpResponse *response) {
jsonAddString(out, "chmod", "/unixfile/chmod/{absPath}");
jsonEndObject(out);

jsonStartObject(out, NULL);
jsonAddString(out, "folderdownload", "/unixfile/folderdownload/{absPath}");
jsonEndObject(out);

jsonEndArray(out);
jsonEnd(out);

Expand Down Expand Up @@ -1205,6 +1229,17 @@ void installUnixFileTableOfContentsService(HttpServer *server) {
registerHttpService(server, httpService);
}

void installUnixFolderToFileConvertAndDownloadService(HttpServer *server) {
HttpService *httpService = makeGeneratedService("UnixFolderDownload",
"/unixfile/folderdownload/**");
httpService->authType = SERVICE_AUTH_NATIVE_WITH_SESSION_TOKEN;
httpService->serviceFunction = serveUnixFolderDownloadMode;
httpService->runInSubtask = TRUE;
httpService->doImpersonation = TRUE;
registerHttpService(server, httpService);
}



/*
This program and the accompanying materials are
Expand Down
1 change: 1 addition & 0 deletions c/zss.c
Original file line number Diff line number Diff line change
Expand Up @@ -1218,6 +1218,7 @@ int main(int argc, char **argv){
installUnixFileChangeTagService(server);
#endif
installUnixFileChangeModeService(server);
installUnixFolderToFileConvertAndDownloadService(server);
installUnixFileTableOfContentsService(server); /* This needs to be registered last */
#ifdef __ZOWE_OS_ZOS
installVSAMDatasetContentsService(server);
Expand Down
1 change: 1 addition & 0 deletions h/unixFileService.h
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ void installUnixFileChangeOwnerService(HttpServer *server);
void installUnixFileChangeTagService(HttpServer *server);
void installUnixFileTableOfContentsService(HttpServer *server);
void installUnixFileChangeModeService(HttpServer *server);
void installUnixFolderToFileConvertAndDownloadService(HttpServer *server);

#endif

Expand Down

0 comments on commit dcb2390

Please sign in to comment.