3287b31723908959aff8fa82b5406e0e32a3e94f chmalee Wed Aug 22 16:57:04 2018 -0700 New CGI for short linking to sessions, refs #8520 diff --git src/hg/hgs/hgs.c src/hg/hgs/hgs.c new file mode 100644 index 0000000..7e6474d --- /dev/null +++ src/hg/hgs/hgs.c @@ -0,0 +1,79 @@ +/* hgs - redirects to a session. */ +#include "common.h" +#include "linefile.h" +#include "hash.h" +#include "options.h" +#include "jksql.h" +#include "htmshell.h" +#include "web.h" +#include "cheapcgi.h" +#include "cart.h" +#include "hui.h" +#include "udc.h" +#include "knetUdc.h" +#include "genbank.h" +#include "hdb.h" + +/* Global Variables */ +struct cart *cart; /* CGI and other variables */ +struct hash *oldVars = NULL; + +void hgs(struct cart *theCart) +/* Redirect to hgTracks with the userName and sessionName from the REQUEST_URI variable */ +{ +int partLen = 0; +char *request = cloneString(getenv("REQUEST_URI")); +if (request != NULL) + partLen = chopString(request, "/", NULL, 0); +if (partLen < 4) + { + warn("Provide a userName and sessionName in the url, for example: %shgs/userName/sessionName", hLocalHostCgiBinUrl()); + return; + } +else + { + // redirect, same as hgLinkIn + char *parts[partLen]; + chopString(request, "/", parts, partLen); + char url[2048]; + safef(url, sizeof(url), + "../../hgTracks?hgS_doOtherUser=submit&hgS_otherUserName=%s&hgS_otherUserSessionName=%s", parts[partLen-2], parts[partLen-1]); + char redirect[4096]; + printf("<br>Redirecting to <a href=\"%s\">%s</a>.", url, url); + safef(redirect, sizeof(redirect), "window.location='%s';", url); + jsInline(redirect); + return; + } +} + +void doMiddle(struct cart *theCart) +/* Set up globals and make web page */ +{ +cart = theCart; +char *database = NULL; +char *genome = NULL; +getDbAndGenome(cart, &database, &genome, oldVars); +initGenbankTableNames(database); + +int timeout = cartUsualInt(cart, "udcTimeout", 300); +if (udcCacheTimeout() < timeout) + udcSetCacheTimeout(timeout); +knetUdcInstall(); + +cartWebStart(cart, database, "Redirects to a session"); +hgs(cart); +cartWebEnd(); +} + +/* Null terminated list of CGI Variables we don't want to save + * permanently. */ +char *excludeVars[] = {"Submit", "submit", NULL,}; + +int main(int argc, char *argv[]) +/* Process command line. */ +{ +htmlPushEarlyHandlers(); +cgiSpoof(&argc, argv); +cartEmptyShell(doMiddle, hUserCookie(), excludeVars, oldVars); +return 0; +}