a9fde73d32daf74780765442de44324061b01d66
markd
  Sun Jan 22 22:13:52 2023 -0800
Add URL resolver plugin functionality to allow an external program to convert
cloud URLs (s3:, gs: drs:, or really any non-HTTP RUL) to http/https URLs.
This can include signed URLs.  The cloud URL is used to index the UDC cache
rather than the resolved URL.  This allows for re-resolving signed URLs
if they time out.

Joint work by Max and Markd

diff --git src/hg/hgc/hgc.c src/hg/hgc/hgc.c
index fbdafd1..9854137 100644
--- src/hg/hgc/hgc.c
+++ src/hg/hgc/hgc.c
@@ -1670,31 +1670,31 @@
 char *line;
 while (lineFileNext(lf, &line, NULL))
     {
     printf("<tr><td>");
     char *toPrint = replaceChars(line, "\t", "</td><td>");
     printf("%s", toPrint);
     printf("</td></tr>\n");
     }
 printf("</table>\n"); // closes bedExtraTbl
 }
 
 static struct slName *findFieldsInExtraFile(char *detailsTableUrl, struct asColumn *col, struct dyString *ds)
 // return a list of the ${}-enclosed fields from an extra file
 {
 struct slName *foundFields = NULL;
-char *table = netReadTextFileIfExists(hReplaceGbdb(detailsTableUrl));
+char *table = udcFileReadAllIfExists(hReplaceGbdb(detailsTableUrl), NULL, 0, NULL);
 if (table)
     {
     for (; col != NULL; col = col->next)
         {
         char field[256];
         safef(field, sizeof(field), "${%s}", col->name);
         if (stringIn(field, table))
             {
             struct slName *replaceField = slNameNew(col->name);
             slAddHead(&foundFields, replaceField);
             }
         }
     dyStringPrintf(ds, "%s", table);
     if (foundFields)
         slReverse(foundFields);