ce019544af5459e5d1074720e5368a0b5dcd2d2a
angie
  Thu Jun 9 11:36:00 2016 -0700
Revert "New random-token method for login (HT Max & Galt): instead of requiring a new table gbMemberToken, use autoUpgrade to add a new column (keyList) to gbMembers that contains a list of long random keys, analogous to userDb and sessionDb's sessionKey (see cartDb.c).  The token cookie now includes both gbMembers.idx (for fast lookup) and the long random key, similar to the hguid cookie and hgsid CGI param.  keyList is a list in order to support user login on multiple web clients.  refs #17327 #17336 note-11"

This reverts commit ecd6e5bc9b85bcbafb08da0c1dae876b284ba69c.

diff --git src/hg/lib/gbMemberToken.h src/hg/lib/gbMemberToken.h
new file mode 100644
index 0000000..67ea0ab
--- /dev/null
+++ src/hg/lib/gbMemberToken.h
@@ -0,0 +1,66 @@
+/* gbMemberToken.h was originally generated by the autoSql program, which also 
+ * generated gbMemberToken.c and gbMemberToken.sql.  This header links the database and
+ * the RAM representation of objects. */
+
+#ifndef GBMEMBERTOKEN_H
+#define GBMEMBERTOKEN_H
+
+#define GBMEMBERTOKEN_NUM_COLS 4
+
+extern char *gbMemberTokenCommaSepFieldNames;
+
+struct gbMemberToken
+/* Maps random token to values of gbMembers.userName */
+    {
+    struct gbMemberToken *next;  /* Next in singly linked list. */
+    unsigned token;	/* Random nonzero number */
+    char *userName;	/* Name used to login in hgLogin */
+    char *createTime;	/* Date and time at which token was created */
+    char *validUntil;	/* Date and time until which token will be removed from table, NULL: do not remove */
+    };
+
+void gbMemberTokenStaticLoad(char **row, struct gbMemberToken *ret);
+/* Load a row from gbMemberToken table into ret.  The contents of ret will
+ * be replaced at the next call to this function. */
+
+struct gbMemberToken *gbMemberTokenLoad(char **row);
+/* Load a gbMemberToken from row fetched with select * from gbMemberToken
+ * from database.  Dispose of this with gbMemberTokenFree(). */
+
+struct gbMemberToken *gbMemberTokenLoadAll(char *fileName);
+/* Load all gbMemberToken from whitespace-separated file.
+ * Dispose of this with gbMemberTokenFreeList(). */
+
+struct gbMemberToken *gbMemberTokenLoadAllByChar(char *fileName, char chopper);
+/* Load all gbMemberToken from chopper separated file.
+ * Dispose of this with gbMemberTokenFreeList(). */
+
+#define gbMemberTokenLoadAllByTab(a) gbMemberTokenLoadAllByChar(a, '\t');
+/* Load all gbMemberToken from tab separated file.
+ * Dispose of this with gbMemberTokenFreeList(). */
+
+struct gbMemberToken *gbMemberTokenCommaIn(char **pS, struct gbMemberToken *ret);
+/* Create a gbMemberToken out of a comma separated string. 
+ * This will fill in ret if non-null, otherwise will
+ * return a new gbMemberToken */
+
+void gbMemberTokenFree(struct gbMemberToken **pEl);
+/* Free a single dynamically allocated gbMemberToken such as created
+ * with gbMemberTokenLoad(). */
+
+void gbMemberTokenFreeList(struct gbMemberToken **pList);
+/* Free a list of dynamically allocated gbMemberToken's */
+
+void gbMemberTokenOutput(struct gbMemberToken *el, FILE *f, char sep, char lastSep);
+/* Print out gbMemberToken.  Separate fields with sep. Follow last field with lastSep. */
+
+#define gbMemberTokenTabOut(el,f) gbMemberTokenOutput(el,f,'\t','\n');
+/* Print out gbMemberToken as a line in a tab-separated file. */
+
+#define gbMemberTokenCommaOut(el,f) gbMemberTokenOutput(el,f,',',',');
+/* Print out gbMemberToken as a comma separated list including final comma. */
+
+/* -------------------------------- End autoSql Generated Code -------------------------------- */
+
+#endif /* GBMEMBERTOKEN_H */
+