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);
+}