e8ffc5e45bd8e8de9f1c78347ea6b11fd4817a40 chmalee Mon Dec 2 12:37:53 2024 -0800 Generate api keys for each user and store them in hgcentral.hubSpaceKeys diff --git src/hg/hgHubConnect/trackHubWizard.c src/hg/hgHubConnect/trackHubWizard.c index 682b9ef..d876d58 100644 --- src/hg/hgHubConnect/trackHubWizard.c +++ src/hg/hgHubConnect/trackHubWizard.c @@ -7,37 +7,39 @@ #include "cart.h" #include "cheapcgi.h" #include "hdb.h" #include "hgConfig.h" #include "md5.h" #include "trashDir.h" #include "hgHubConnect.h" #include "jsHelper.h" #include "web.h" #include "wikiLink.h" #include "customTrack.h" #include "userdata.h" #include "jsonWrite.h" #include "cartJson.h" #include "hubSpace.h" +#include "hubSpaceKeys.h" #include "hubConnect.h" #include "trackHub.h" +#include "htmshell.h" void removeOneFile(char *userName, char *cgiFileName, char *fullPath, char *db, char *fileType) /* Remove one single file for userName */ { -char *fileName = prefixUserFile(userName, cgiEncodeFull(fullPath), NULL); +char *fileName = prefixUserFile(userName, fullPath, NULL); if (fileExists(fileName)) { fprintf(stderr, "deleting file: '%s'\n", fileName); removeFileForUser(fileName, userName); fflush(stderr); } else { fprintf(stderr, "file '%s' does not exist\n", fileName); fflush(stderr); } } void removeHubDir(char *userName, char *cgiFileName) /* Remove one single hub for userName */ @@ -186,15 +188,41 @@ "src=\"https://cdn.datatables.net/buttons/3.1.1/js/dataTables.buttons.min.js\"></script>"); puts("<link href=\"https://releases.transloadit.com/uppy/v4.5.0/uppy.min.css\" rel=\"stylesheet\">"); puts("<script type=\"text/javascript\" src=\"https://releases.transloadit.com/uppy/v4.5.0/uppy.min.js\"></script>"); jsIncludeFile("hgMyData.js", NULL); // the skeleton HTML: webIncludeFile("inc/hgMyData.html"); webIncludeResourceFile("hgMyData.css"); // get the current files stored for this user outFilesForUser(); jsInlineF("\nvar cartDb=\"%s %s\";\n", trackHubSkipHubName(hGenome(database)), database); jsInline("$(document).ready(function() {\nhubCreate.init();\n})"); puts("</div>"); } + +void revokeApiKey(struct cartJson *cj, struct hash *paramHash) +/* Remove any api keys for the user */ +{ +char *userName = getUserName(); +struct sqlConnection *conn = hConnectCentral(); +struct dyString *query = sqlDyStringCreate("delete from %s where userName='%s'", HUBSPACE_AUTH_TABLE, userName); +sqlUpdate(conn, dyStringCannibalize(&query)); +hDisconnectCentral(&conn); +jsonWriteString(cj->jw, "revoke", "true"); +} + +void generateApiKey(struct cartJson *cj, struct hash *paramHash) +/* Make a random (but not crypto-secure api key for use of hubtools to upload to hubspace */ +{ +char *userName = getUserName(); +if (!userName) + return; +char *apiKey = makeRandomKey(256); // just needs some arbitrary length +// save this key to the database for this user, the 'on duplicate' part automatically revokes old keys +struct sqlConnection *conn = hConnectCentral(); +struct dyString *query = sqlDyStringCreate("insert into %s values ('%s', '%s') on duplicate key update apiKey='%s'", HUBSPACE_AUTH_TABLE, userName, apiKey, apiKey); +sqlUpdate(conn, dyStringCannibalize(&query)); +jsonWriteString(cj->jw, "apiKey", apiKey); +hDisconnectCentral(&conn); +}