diff src/c/urweb.c @ 1050:93315ac00394

More fun with cookies
author Adam Chlipala <adamc@hcoop.net>
date Thu, 26 Nov 2009 14:20:00 -0500
parents a8a825861397
children 731e6aa6655a
line wrap: on
line diff
--- a/src/c/urweb.c	Thu Nov 26 10:35:57 2009 -0500
+++ b/src/c/urweb.c	Thu Nov 26 14:20:00 2009 -0500
@@ -672,7 +672,7 @@
 }
 
 int uw_set_input(uw_context ctx, const char *name, char *value) {
-  printf("Input name %s\n", name);
+  //printf("Input name %s\n", name);
 
   if (!strcasecmp(name, ".b")) {
     int n = uw_input_num(value);
@@ -2680,18 +2680,41 @@
   return NULL;
 }
 
-uw_unit uw_Basis_set_cookie(uw_context ctx, uw_Basis_string prefix, uw_Basis_string c, uw_Basis_string v) {
+uw_unit uw_Basis_set_cookie(uw_context ctx, uw_Basis_string prefix, uw_Basis_string c, uw_Basis_string v, uw_Basis_time *expires, uw_Basis_bool secure) {
   uw_write_header(ctx, "Set-Cookie: ");
   uw_write_header(ctx, c);
   uw_write_header(ctx, "=");
   uw_write_header(ctx, v);
   uw_write_header(ctx, "; path=");
   uw_write_header(ctx, prefix);
+  if (expires) {
+    char formatted[30];
+    struct tm tm;
+
+    gmtime_r(expires, &tm);
+
+    strftime(formatted, sizeof formatted, "%a, %d-%b-%Y %T GMT", &tm);
+
+    uw_write_header(ctx, "; expires=");
+    uw_write_header(ctx, formatted);
+  }
+  if (secure)
+    uw_write_header(ctx, "; secure");
   uw_write_header(ctx, "\r\n");
 
   return uw_unit_v;
 }
 
+uw_unit uw_Basis_clear_cookie(uw_context ctx, uw_Basis_string prefix, uw_Basis_string c) {
+  uw_write_header(ctx, "Set-Cookie: ");
+  uw_write_header(ctx, c);
+  uw_write_header(ctx, "=; path=");
+  uw_write_header(ctx, prefix);
+  uw_write_header(ctx, "; expires=Mon, 01-01-1970 00:00:00 GMT\r\n");
+
+  return uw_unit_v;
+}
+
 static delta *allocate_delta(uw_context ctx, unsigned client) {
   unsigned i;
   delta *d;
@@ -3077,6 +3100,8 @@
   return r;
 }
 
+const uw_Basis_time minTime = 0;
+
 uw_Basis_time uw_Basis_now(uw_context ctx) {
   return time(NULL);
 }