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("<p>Tracks in UCSC genome: '%s', longest chrom: %s:%lld<br>\n", db, chromName, chromSize); +hPrintf("<h4>Tracks in UCSC genome: '%s', longest chrom: %s:%lld</h4>\n", db, chromName, chromSize); struct trackDb *tdbList = obtainTdb(NULL, db); struct trackDb *tdb; hPrintf("<ul>\n"); hPrintf("<li>%s:%lld</li>\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(" <li>%d total tracks counted, %d different track types</li>\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("<h4>BROWSER_HOST:%s</h4>\n", envVar); + envVar = getenv("CONTEXT_DOCUMENT_ROOT"); + hPrintf("<h4>CONTEXT_DOCUMENT_ROOT:%s</h4>\n", envVar); + envVar = getenv("CONTEXT_PREFIX"); + hPrintf("<h4>CONTEXT_PREFIX:%s</h4>\n", envVar); + envVar = getenv("DOCUMENT_ROOT"); + hPrintf("<h4>DOCUMENT_ROOT:%s</h4>\n", envVar); + envVar = getenv("HTTP_HOST"); + hPrintf("<h4>HTTP_HOST:%s</h4>\n", envVar); + envVar = getenv("REQUEST_URI"); + hPrintf("<h4>REQUEST_URI:%s</h4>\n", envVar); + envVar = getenv("SCRIPT_FILENAME"); + hPrintf("<h4>SCRIPT_FILENAME:%s</h4>\n", envVar); + envVar = getenv("SCRIPT_NAME"); + hPrintf("<h4>SCRIPT_NAME:%s</h4>\n", envVar); + envVar = getenv("SCRIPT_URI"); + hPrintf("<h4>SCRIPT_URI:%s</h4>\n", envVar); + envVar = getenv("SCRIPT_URL"); + hPrintf("<h4>SCRIPT_URL:%s</h4>\n", envVar); + envVar = getenv("SERVER_NAME"); + hPrintf("<h4>SERVER_NAME:%s</h4>\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("<h3>ERROR: no such command: '%s/%s' for endpoint '%s'</h3>", words[0], words[1], pathInfo); } long lastTime = clock1000(); struct trackHub *hub = errCatchTrackHubOpen(urlInput); if (measureTiming) { long thisTime = clock1000(); if (debug) hPrintf("<em>hub open time: %ld millis</em><br>\n", thisTime - lastTime); } // hPrintf("<h3>ucscDb: '%s'</h2>\n", ucscDb); struct trackHubGenome *hubGenome = hub->genomeList; introductionText(); showExamples(urlInput, hubGenome, ucscDb); if (debug) showCartDump(); hPrintf("<h2>Explore hub or database assemblies and tracks</h2>\n"); -hPrintf("<form action='%s' name='hubApiUrl' id='hubApiUrl' method='GET'>\n\n", "../cgi-bin/hubApi"); +// hPrintf("<form action='%s' name='hubApiUrl' id='hubApiUrl' method='GET'>\n\n", "../cgi-bin/hubApi"); +hPrintf("<form action='%s' name='hubApiUrl' id='hubApiUrl' method='GET'>\n\n", urlPrefix); + +#ifdef NOT +if (isEmpty(urlPrefix)) + { + char *scriptUri = getenv("SCRIPT_URI"); + hPrintf("<form action='%s' name='hubApiUrl' id='hubApiUrl' method='GET'>\n\n", scriptUri); + } +else + hPrintf("<form action='%s' name='hubApiUrl' id='hubApiUrl' method='GET'>\n\n", urlPrefix); +#endif hPrintf("<b>Select public hub: </b>"); #define JBUFSIZE 2048 #define SMALLBUF 256 char javascript[JBUFSIZE]; struct slPair *events = NULL; safef(javascript, sizeof(javascript), "this.lastIndex=this.selectedIndex;"); slPairAdd(&events, "focus", cloneString(javascript)); cgiMakeDropListClassWithIdStyleAndJavascript("publicHubs", "publicHubs", shortLabels, publicHubCount, hubDropDown, NULL, "width: 400px", events); hWrites(" "); hButton("goPublicHub", "go"); hPrintf("<br>Or, enter a hub URL: "); -hPrintf("<input type='text' name='urlHub' id='urlHub' size='60' value='%s'>\n", urlInput); +hPrintf("<input type='text' name='urlHub' id='urlHub' size='60' value='%s'>\n", otherHubUrl); hWrites(" "); hButton("goOtherHub", "go"); hPrintf("<br>Or, select a UCSC database name: "); maxDbNameWidth *= 9; // 9 should be font width here char widthPx[SMALLBUF]; safef(widthPx, sizeof(widthPx), "width: %dpx", maxDbNameWidth); cgiMakeDropListClassWithIdStyleAndJavascript("ucscGenomes", "ucscGenomes", ucscDbList, ucscDataBaseCount, ucscDb, NULL, widthPx, events); hWrites(" "); hButton("goUcscDb", "go"); boolean depthSearch = cartUsualBoolean(cart, "depthSearch", FALSE); hPrintf("<br>\n "); hCheckBox("depthSearch", cartUsualBoolean(cart, "depthSearch", FALSE)); hPrintf(" perform full bbi file measurement : %s (will time out if taking longer than %ld seconds)<br>\n", depthSearch ? "TRUE" : "FALSE", timeOutSeconds); hPrintf("\n "); allTrackSettings = cartUsualBoolean(cart, "allTrackSettings", FALSE); hCheckBox("allTrackSettings", allTrackSettings); hPrintf(" display all track settings for each track : %s<br>\n", allTrackSettings ? "TRUE" : "FALSE"); hPrintf("<br>\n</form>\n"); +hPrintf("<p>\n"); if (sameWord("go", goUcscDb)) /* requested UCSC db track list */ { tracksForUcscDb(ucscDb); } else { - if (debug) - { - hPrintf("<p>URL: %s - %s<br>\n", urlInput, sameWord("go",goPublicHub) ? "public hub" : "other hub"); - hPrintf("name: %s<br>\n", hub->shortLabel); - hPrintf("description: %s<br>\n", hub->longLabel); - hPrintf("default db: '%s'<br>\n", isEmpty(hub->defaultDb) ? "(none available)" : hub->defaultDb); - printf("docRoot:'%s'<br>\n", docRoot); - } + hPrintf("<h4>Examine %s at: %s</h4>\n", sameWord("go",goPublicHub) ? "public hub" : "other hub", urlInput); + hPrintf("<ul>\n"); + hPrintf("<li>%s</li>\n", hub->shortLabel); + hPrintf("<li>%s</li>\n", hub->longLabel); + if (isNotEmpty(hub->defaultDb)) + hPrintf("<li>%s - default database</li>\n", hub->defaultDb); + hPrintf("</ul>\n"); if (hub->genomeList) (void) genomeList(hub, NULL, NULL); /* ignore returned list */ - hPrintf("</p>\n"); } if (timedOut) hPrintf("<h1>Reached time out %ld seconds</h1>", timeOutSeconds); if (measureTiming) hPrintf("<em>Overall total time: %ld millis</em><br>\n", clock1000() - enteredMainTime); +hPrintf("</p>\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; }