1f954876a8847da234e0c89b3b43390b40c6ca4e chmalee Tue Feb 25 10:45:31 2025 -0800 Special handle the parentDir setting during uploads by cgi-encoding the components of parentDir but leaving the slash characters in place. This allows hubtools uploads to preserve the filesystem layout on the host on our end, but prevent writing of files outside of the users hubspace directory. Any '..' characters in the parentDir are simply ignored. This commit also fixes some other hubtools related UI bugs, like preventing infinite recursion when doing a row select, displaying file names unencoded, and fixing a bug when deleting subdirectories, refs #31058 diff --git src/hg/hgHubConnect/hooks/hooklib.h src/hg/hgHubConnect/hooks/hooklib.h index 9fa9d266067..06eb095a07f 100644 --- src/hg/hgHubConnect/hooks/hooklib.h +++ src/hg/hgHubConnect/hooks/hooklib.h @@ -1,41 +1,45 @@ /* hooklib - Common routines for all the tusd hooks */ /* Copyright (C) 2008 The Regents of the University of California * See kent/LICENSE or http://genome.ucsc.edu/license/ for licensing information. */ #ifndef HOOKLIB_H #define HOOKLIB_H #define ERR_MSG "errorMessage" #define REJECT_SETTING "RejectUpload" #define STOP_SETTING "StopUpload" #define HTTP_NAME "HTTPResponse" #define HTTP_STATUS "StatusCode" #define HTTP_BODY "Body" #define HTTP_HEADER "Header" #define HTTP_CONTENT_TYPE "Content-Type" #define HTTP_CONTENT_TYPE_STR "application/json" char *prettyFileSize(long size); /* Return a string representing the size of a file */ +char *encodePath(char *path); +/* Return a string where each individual component of a '/' separated + * string has been cgiEncoded, but not the '/' chars themselves */ + void fillOutHttpResponseError(); void fillOutHttpResponseSuccess(); struct jsonElement *makeDefaultResponse(); /* Create the default response json with some fields pre-filled */ void rejectUpload(struct jsonElement *response, char *msg, ...); /* Set the keys for stopping an upload */ boolean isFileTypeRecognized(char *fileName); /* Return true if this file one of our recognized types */ boolean isExistingHubForUser(char *userName, char *reqHubName); /* Return true if hubName is an existing hub for this user */ char *genomeForHub(char *userName, char *reqHubName); /* Return the genome associated with reqHubName for user */ #endif /* HOOKLIB_H */