initial commit
authorDaniel Kahn Gillmor <dkg@fifthhorseman.net>
Wed, 6 Jan 2010 01:07:44 +0000 (20:07 -0500)
committerDaniel Kahn Gillmor <dkg@fifthhorseman.net>
Wed, 6 Jan 2010 01:07:44 +0000 (20:07 -0500)
.gitignore [new file with mode: 0644]
README [new file with mode: 0644]
msva [new file with mode: 0755]

diff --git a/.gitignore b/.gitignore
new file mode 100644 (file)
index 0000000..b25c15b
--- /dev/null
@@ -0,0 +1 @@
+*~
diff --git a/README b/README
new file mode 100644 (file)
index 0000000..dca3836
--- /dev/null
+++ b/README
@@ -0,0 +1,23 @@
+2010-01-05 18:21:59-0500
+------------------------
+
+msva is the Monkeysphere Validation Agent.
+
+Its goal is to simplify bindings between cryptographic tokens and the
+real-world entities that humans actually care about.
+
+In its current technical conception, is a minimal HTTP server that
+accepts two requests:
+
+POST /reviewcert (vars: UID, context, PKC)
+POST /extracerts (vars: certificates)
+
+(PKC means: public key carrier: raw key, OpenPGP cert, or X.509 cert)
+(UID means: User ID (like in OpenPGP))
+(context means: (this is too vague right now) something like "this certificate was used to try to identify an HTTPS server")
+
+
+
+Authors: Daniel Kahn Gillmor <dkg@fifthhorseman.net>
+         Matthew James Goins
+         Jameson Rollins
diff --git a/msva b/msva
new file mode 100755 (executable)
index 0000000..75e28f6
--- /dev/null
+++ b/msva
@@ -0,0 +1,62 @@
+#!/usr/bin/perl -wT
+
+use warnings;
+use strict;
+
+{
+  package MSVA;
+
+  use HTTP::Server::Simple::CGI;
+  use base qw(HTTP::Server::Simple::CGI);
+  use warnings;
+  use strict;
+
+  use JSON;
+
+  my %dispatch = (
+                  '/reviewcert' => \&reviewcert,
+                  '/extracerts' => \&extracerts,
+                 );
+
+  sub handle_request {
+    my $self = shift;
+    my $cgi  = shift;
+
+    my $path = $cgi->path_info();
+    my $handler = $dispatch{$path};
+
+    if (ref($handler) eq "CODE") {
+      my ($status, $object) = $handler->($cgi);
+      printf("HTTP/1.0 %s\r\nContent-Type: application/json\r\n\r\n%s", $status, to_json ($object));
+
+    } else {
+      printf("HTTP/1.0  Bad Request -- not handled by Monkeysphere validation agent\r\nContent-Type: text/plain\r\n\r\nBad Request -- the path:\r\n   %s\r\nis not handled by the MonkeySphere validation agent.\r\nPlease try one of the following paths instead:\r\n\r\n%s\r\n", $path, ' * '.join("\r\n * ", keys %dispatch) );
+    }
+  }
+
+  sub reviewcert {
+    my $cgi  = shift;   # CGI.pm object
+    return if !ref $cgi;
+
+    my $uid = $cgi->param('uid');
+    my $pkc = $cgi->param('pkc');
+    my $context = $cgi->param('context');
+
+    my $ret = { foo => 'bar' };
+    # my $status = '404 no match found for the public key in this certificate';
+    # or:
+    my $status = '200 match found, authentication details to follow';
+
+    return $status, $ret;
+  }
+
+  sub extracerts {
+    my $cgi = shift;
+
+    return '500 not yet implemented', { };
+  }
+}
+
+# start the server on port 8080
+my $server = MSVA->new(8901);
+$server->run();