e27f427561241ab8dd9e881f082c1e68007e6dfe
hiram
Wed Mar 20 09:48:44 2019 -0700
correctly exclude vars for hgwdev-api URL functions refs #18869
diff --git src/hg/hubApi/hubApi.c src/hg/hubApi/hubApi.c
index a58944f..d85ec80 100644
--- src/hg/hubApi/hubApi.c
+++ src/hg/hubApi/hubApi.c
@@ -682,31 +682,31 @@
{
*nameReturn = cloneString(row[0]);
length = sqlLongLong(row[1]);
}
sqlFreeResult(&sr);
hFreeConn(&conn);
return length;
}
static void tracksForUcscDb(char *db)
/* scan the specified database for all tracks */
{
struct hash *countTracks = hashNew(0);
char *chromName = NULL;
long long chromSize = largestChrom(db, &chromName);
-hPrintf("
Tracks in UCSC genome: '%s', longest chrom: %s:%lld
\n", db, chromName, chromSize);
+hPrintf("
Tracks in UCSC genome: '%s', longest chrom: %s:%lld
\n", db, chromName, chromSize);
struct trackDb *tdbList = obtainTdb(NULL, db);
struct trackDb *tdb;
hPrintf("\n");
hPrintf("- %s:%lld
\n", chromName, chromSize);
for (tdb = tdbList; tdb != NULL; tdb = tdb->next )
{
countOneTdb(db, tdb, NULL, countTracks, chromName, chromSize);
if (timeOutReached())
break;
}
int trackCount = ptToInt(hashFindVal(countTracks, "track count"));
/* elCount - 1 since the 'track count' element isn't a track */
hPrintf(" - %d total tracks counted, %d different track types
\n", trackCount, countTracks->elCount - 1);
if (countTracks->elCount)
{
@@ -839,32 +839,30 @@
/* Set up globals and make web page */
{
cart = theCart;
measureTiming = hPrintStatus() && isNotEmpty(cartOptionalString(cart, "measureTiming"));
measureTiming = TRUE;
char *database = NULL;
char *genome = NULL;
cgiVarSet("ignoreCookie", "1");
getDbAndGenome(cart, &database, &genome, oldVars);
initGenbankTableNames(database);
initSupportedTypes();
initUrlPrefix();
-char *docRoot = cfgOptionDefault("browser.documentRoot", DOCUMENT_ROOT);
-
int timeout = cartUsualInt(cart, "udcTimeout", 300);
if (udcCacheTimeout() < timeout)
udcSetCacheTimeout(timeout);
knetUdcInstall();
char *pathInfo = getenv("PATH_INFO");
/* nothing on incoming path, then display the WEB page instead */
if (sameOk("/",pathInfo))
pathInfo = NULL;
boolean commandError = FALSE;
/*expect no more than MAX_PATH_INFO number of words*/
char *words[MAX_PATH_INFO];
if (isNotEmpty(pathInfo))
@@ -896,137 +894,178 @@
int listSize = slCount(dbList);
AllocArray(ucscDbList, listSize);
struct dbDb *el = dbList;
int ucscDataBaseCount = 0;
int maxDbNameWidth = 0;
for ( ; el != NULL; el = el->next )
{
ucscDbList[ucscDataBaseCount++] = el->name;
if (strlen(el->name) > maxDbNameWidth)
maxDbNameWidth = strlen(el->name);
}
maxDbNameWidth += 1;
cartWebStart(cart, database, "UCSC API v"CGI_VERSION);
+if (debug)
+ {
+ char *envVar = getenv("BROWSER_HOST");
+ hPrintf("BROWSER_HOST:%s
\n", envVar);
+ envVar = getenv("CONTEXT_DOCUMENT_ROOT");
+ hPrintf("CONTEXT_DOCUMENT_ROOT:%s
\n", envVar);
+ envVar = getenv("CONTEXT_PREFIX");
+ hPrintf("CONTEXT_PREFIX:%s
\n", envVar);
+ envVar = getenv("DOCUMENT_ROOT");
+ hPrintf("DOCUMENT_ROOT:%s
\n", envVar);
+ envVar = getenv("HTTP_HOST");
+ hPrintf("HTTP_HOST:%s
\n", envVar);
+ envVar = getenv("REQUEST_URI");
+ hPrintf("REQUEST_URI:%s
\n", envVar);
+ envVar = getenv("SCRIPT_FILENAME");
+ hPrintf("SCRIPT_FILENAME:%s
\n", envVar);
+ envVar = getenv("SCRIPT_NAME");
+ hPrintf("SCRIPT_NAME:%s
\n", envVar);
+ envVar = getenv("SCRIPT_URI");
+ hPrintf("SCRIPT_URI:%s
\n", envVar);
+ envVar = getenv("SCRIPT_URL");
+ hPrintf("SCRIPT_URL:%s
\n", envVar);
+ envVar = getenv("SERVER_NAME");
+ hPrintf("SERVER_NAME:%s
\n", envVar);
+ }
+
+
char *goOtherHub = cartUsualString(cart, "goOtherHub", defaultHub);
char *goUcscDb = cartUsualString(cart, "goUcscDb", "");
char *otherHubUrl = cartUsualString(cart, "urlHub", defaultHub);
char *goPublicHub = cartUsualString(cart, "goPublicHub", defaultHub);
char *hubDropDown = cartUsualString(cart, "publicHubs", defaultHub);
char *urlDropDown = urlFromShortLabel(hubDropDown);
char *ucscDb = cartUsualString(cart, "ucscGenomes", defaultDb);
char *urlInput = urlDropDown; /* assume public hub */
if (sameWord("go", goOtherHub)) /* requested other hub URL */
urlInput = otherHubUrl;
+else if (isEmpty(otherHubUrl))
+ otherHubUrl = urlInput;
if (commandError)
{
hPrintf("ERROR: no such command: '%s/%s' for endpoint '%s'
", words[0], words[1], pathInfo);
}
long lastTime = clock1000();
struct trackHub *hub = errCatchTrackHubOpen(urlInput);
if (measureTiming)
{
long thisTime = clock1000();
if (debug)
hPrintf("hub open time: %ld millis
\n", thisTime - lastTime);
}
// hPrintf("ucscDb: '%s'\n", ucscDb);
struct trackHubGenome *hubGenome = hub->genomeList;
introductionText();
showExamples(urlInput, hubGenome, ucscDb);
if (debug)
showCartDump();
hPrintf("Explore hub or database assemblies and tracks
\n");
-hPrintf("
\n");
+hPrintf("\n");
if (sameWord("go", goUcscDb)) /* requested UCSC db track list */
{
tracksForUcscDb(ucscDb);
}
else
{
- if (debug)
- {
- hPrintf("
URL: %s - %s
\n", urlInput, sameWord("go",goPublicHub) ? "public hub" : "other hub");
- hPrintf("name: %s
\n", hub->shortLabel);
- hPrintf("description: %s
\n", hub->longLabel);
- hPrintf("default db: '%s'
\n", isEmpty(hub->defaultDb) ? "(none available)" : hub->defaultDb);
- printf("docRoot:'%s'
\n", docRoot);
- }
+ hPrintf("
Examine %s at: %s
\n", sameWord("go",goPublicHub) ? "public hub" : "other hub", urlInput);
+ hPrintf("\n");
+ hPrintf("- %s
\n", hub->shortLabel);
+ hPrintf("- %s
\n", hub->longLabel);
+ if (isNotEmpty(hub->defaultDb))
+ hPrintf("- %s - default database
\n", hub->defaultDb);
+ hPrintf("
\n");
if (hub->genomeList)
(void) genomeList(hub, NULL, NULL); /* ignore returned list */
- hPrintf("\n");
}
if (timedOut)
hPrintf("Reached time out %ld seconds
", timeOutSeconds);
if (measureTiming)
hPrintf("Overall total time: %ld millis
\n", clock1000() - enteredMainTime);
+hPrintf("\n");
+
cartWebEnd();
} /* void doMiddle(struct cart *theCart) */
/* Null terminated list of CGI Variables we don't want to save
* permanently. */
-static char *excludeVars[] = {"Submit", "submit", NULL,};
+static char *excludeVars[] = {"Submit", "submit", "goOtherHub", "goPublicHub", "goUcscDb", "ucscGenomes", "publicHubs", NULL,};
int main(int argc, char *argv[])
/* Process command line. */
{
enteredMainTime = clock1000();
cgiSpoof(&argc, argv);
measureTiming = TRUE;
verboseTimeInit();
trackCounter = hashNew(0);
cartEmptyShellNoContent(doMiddle, hUserCookie(), excludeVars, oldVars);
return 0;
}