add query parameters for user accounts
authorChristian Thaeter <ct@pipapo.org>
Sun, 27 Jan 2008 00:52:58 +0000 (01:52 +0100)
committerChristian Thaeter <ct@pipapo.org>
Sun, 27 Jan 2008 00:52:58 +0000 (01:52 +0100)
constraints are not enforced yet
 * 'user' accountname 2-32 lowercase acsii chars
 * 'name' realname utf-8 must contain at least one space
 * 'email' email address, must contain one '@'
 * 'ssign' server signature SHA1(user+name+email+secret)

 * 'login' Cookie parameter, tuple of the ones above (signed)
 * 'prefs' Cookie parameter, tuple of arbitary parameters

src/query.c
src/query.h
src/webgit.h

index 699b26d..a3098c1 100644 (file)
@@ -51,6 +51,10 @@ webgit_query_init (struct webgit_query* q)
   q->path = NULL;
   q->blob = NULL;
   q->blob_size = 0;
+  q->user = NULL;
+  q->name = NULL;
+  q->email = NULL;
+  q->ssign = NULL;
   q->skin = cwa_strndup (WEBGIT_DEFAULT_SKIN, SIZE_MAX);
   q->count = -1;
 
@@ -74,6 +78,10 @@ webgit_query_destroy (struct webgit_query* q)
   free (q->object);
   free (q->head);
   free (q->path);
+  free (q->user);
+  free (q->name);
+  free (q->email);
+  free (q->ssign);
   free (q->skin);
   free (q->blob);
 
@@ -238,6 +246,84 @@ webgit_maxage_param (const Cgi self, const char* v, size_t v_sz, void* u_dat)
 }
 
 
+static void
+webgit_user_param (const Cgi self, const char* v, size_t v_sz, void* u_dat)
+{
+  (void) self;
+  struct webgit_query* q = (struct webgit_query*) u_dat;
+
+  if (webgit_validate_string (v, v_sz))
+    {
+      free (q->user);
+      q->user = cwa_strndup (v, v_sz);
+    }
+}
+
+
+static void
+webgit_name_param (const Cgi self, const char* v, size_t v_sz, void* u_dat)
+{
+  (void) self;
+  struct webgit_query* q = (struct webgit_query*) u_dat;
+
+  if (webgit_validate_string (v, v_sz))
+    {
+      free (q->name);
+      q->name = cwa_strndup (v, v_sz);
+    }
+}
+
+
+static void
+webgit_email_param (const Cgi self, const char* v, size_t v_sz, void* u_dat)
+{
+  (void) self;
+  struct webgit_query* q = (struct webgit_query*) u_dat;
+
+  if (webgit_validate_string (v, v_sz))
+    {
+      free (q->email);
+      q->email = cwa_strndup (v, v_sz);
+    }
+}
+
+
+static void
+webgit_ssign_param (const Cgi self, const char* v, size_t v_sz, void* u_dat)
+{
+  (void) self;
+  struct webgit_query* q = (struct webgit_query*) u_dat;
+
+  if (webgit_validate_string (v, v_sz))
+    {
+      free (q->ssign);
+      q->ssign = cwa_strndup (v, v_sz);
+    }
+}
+
+
+static void
+webgit_login_param (const Cgi self, const char* v, size_t v_sz, void* u_dat)
+{
+  if (v_sz)
+    {
+      char *name;
+      char *value;
+      char *data = cwa_urldecode (v);
+
+      while ((data = parse_namevalue (data, &name, &value)))
+        webgit_param_dispatch (self, name, value, value ? strlen (value) : 0, u_dat);
+    }
+}
+
+
+static void
+webgit_prefs_param (const Cgi self, const char* v, size_t v_sz, void* u_dat)
+{
+  webgit_login_param (self, v, v_sz, u_dat);
+}
+
+
 static void
 webgit_count_param (const Cgi self, const char* v, size_t v_sz, void* u_dat)
 {
index 54abb84..30fbd3f 100644 (file)
  WEBGIT_PARAM(path, "Path and filename for the queried object")         \
  WEBGIT_PARAM(object, "Object to perform on")                           \
  WEBGIT_PARAM(blob, "Data recieved from an edit")                       \
+ WEBGIT_PARAM(user, "Account name for the editing user")                \
+ WEBGIT_PARAM(name, "Real name of the editing user")                    \
+ WEBGIT_PARAM(email, "Email of the editing user")                       \
+ WEBGIT_PARAM(ssign, "Server signature over user/name/email")           \
  WEBGIT_PARAM(skin, "Set skin")                                         \
  WEBGIT_PARAM(maxage, "Age in days to hide inactive repositories")      \
+ WEBGIT_PARAM(login, "Login cookie")                                    \
+ WEBGIT_PARAM(prefs, "Preferences cookie")                              \
  WEBGIT_PARAM(count, "How many things to display")
 
 
index 14c5817..a908697 100644 (file)
@@ -68,6 +68,10 @@ struct webgit_query
   char* path;
   char* blob;
   size_t blob_size;
+  char* user;
+  char* name;
+  char* email;
+  char* ssign;
   char* skin;
   int count;