add support for recapthcha on form to reduce spam
authorAndrew Dunstan <andrew@dunslane.net>
Wed, 29 Sep 2010 15:08:48 +0000 (15:08 +0000)
committerAndrew Dunstan <andrew@dunslane.net>
Wed, 29 Sep 2010 15:08:48 +0000 (15:08 +0000)
13 files changed:
cgi-bin/pgstatus.pl
cgi-bin/register-form.pl [new file with mode: 0755]
cgi-bin/register.pl
cgi-bin/show_history.pl
cgi-bin/show_log.pl
cgi-bin/show_members.pl
cgi-bin/show_status.pl
htdocs/index.html
schema/bfwebdb.sql
templates/bfwrapper.tt
templates/dyn/history.tt
templates/dyn/status.tt
templates/register-form.tt [new file with mode: 0644]

index 8743be30c8628b718af96fb3b6e4dcda24fd041f..5896761f0d8953fec98d15b78ef5934c9cc1032b 100755 (executable)
@@ -74,6 +74,8 @@ $sth->execute($animal);
 my ($secret)=$sth->fetchrow_array();
 $sth->finish;
 
+my $tsdiff = time - $ts;
+
 my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime($ts);
 $year += 1900; $mon +=1;
 my $date=
@@ -84,6 +86,7 @@ if ($ENV{BF_DEBUG} || ($ts > time) || ($ts + 86400 < time ) || (! $secret) )
     open(TX,">../buildlogs/$animal.$date");
     print TX "sig=$sig\nlogtar-len=" , length($log_archive),
         "\nstatus=$res\nstage=$stage\nconf:\n$conf\n",
+        "tsdiff:$tsdiff\n",
        "changed_this_run:\n$changed_this_run\n",
        "changed_since_success:\n$changed_since_success\n",
        "log:\n",$log;
@@ -91,7 +94,7 @@ if ($ENV{BF_DEBUG} || ($ts > time) || ($ts + 86400 < time ) || (! $secret) )
     close(TX);
 }
 
-unless ($ts < time)
+unless ($ts < time + 120)
 {
     my $gmt = gmtime($ts);
     print "Status: 491 bad ts parameter - $ts ($gmt GMT) is in the future.\n",
@@ -227,6 +230,7 @@ if (@config_flags)
 {
     @config_flags = grep {! m/=/ } @config_flags;
     map {s/\s+//g; $_=qq("$_"); } @config_flags;
+    push @config_flags,'git' if $client_conf->{scm} eq 'git';
     $config_flags = '{' . join(',',@config_flags) . '}' ;
 }
 
@@ -329,7 +333,7 @@ $sth->finish;
 
 
 $db->begin_work;
-$db->do("truncate dashboard_mat");
+$db->do("delete from dashboard_mat");
 $db->do("insert into dashboard_mat select * from dashboard_mat_data2");
 $db->commit;
 
diff --git a/cgi-bin/register-form.pl b/cgi-bin/register-form.pl
new file mode 100755 (executable)
index 0000000..3281a1f
--- /dev/null
@@ -0,0 +1,26 @@
+#!/usr/bin/perl
+
+use strict;
+use Template;
+use Captcha::reCAPTCHA;
+
+use vars qw( $captcha_pubkey );
+require "$ENV{BFConfDir}/BuildFarmWeb.pl";
+
+
+my $c = Captcha::reCAPTCHA->new;
+
+my $captcha = $c->get_html($captcha_pubkey);
+
+
+my $template = new Template({INCLUDE_PATH => '/home/community/pgbuildfarm/templates' });
+
+print "Content-Type: text/html\n\n";
+
+
+$template->process('register-form.tt',{captcha => $captcha});
+
+
+
+
+
index 3d68cb6ec9ba3575641683877db1a6c3c12e6c53..7f8d6fc1d50647be9bbacece7f70889568420717 100755 (executable)
@@ -4,8 +4,10 @@ use strict;
 use DBI;
 use Template;
 use CGI;
+use Template;
+use Captcha::reCAPTCHA;
 
-use vars qw($dbhost $dbname $dbuser $dbpass $dbport $notifyapp);
+use vars qw($dbhost $dbname $dbuser $dbpass $dbport $notifyapp $captcha_pubkey $captcha_privkey);
 
 require "$ENV{BFConfDir}/BuildFarmWeb.pl";
 #require "BuildFarmWeb.pl";
@@ -37,7 +39,7 @@ my $header = <<EOS;
     <li id="home"><a href="/index.html" title="PostgreSQL BuildFarm Home">Home</a></li>
     <li id="status"><a href="/cgi-bin/show_status.pl" title="Current results">Status</a></li>
     <li id="members"><a href="/cgi-bin/show_members.pl" title="Platforms tested">Members</a></li>
-    <li id="register"><a href="/register.html" title="Join PostgreSQL BuildFarm">Register</a></li>
+    <li id="register"><a href="/cgi-bin/register-form.pl" title="Join PostgreSQL BuildFarm">Register</a></li>
     <li id="pgfoundry"><a href="http://pgfoundry.org/projects/pgbuildfarm/">PGFoundry</a></li>
     <li id="postgresql.org"><a href="http://www.postgresql.org">PostgreSQL.org</a></li>
 </ul>
@@ -64,14 +66,23 @@ my $query = new CGI;
 
 my $params = $query->Vars;
 
-my ($os, $osv, $comp, $compv, $arch, $email, $owner) = @{$params}{
-       qw(os osv comp compv arch email owner)};
+my ($os, $osv, $comp, $compv, $arch, $email, $owner, $challenge, $response ) = @{$params}{
+       qw(os osv comp compv arch email owner recaptcha_challenge_field recaptcha_response_field)};
+
+my $captcha = Captcha::reCAPTCHA->new;
+my $captcha_ok = $captcha->check_answer
+    (
+     $captcha_privkey, 
+     $ENV{'REMOTE_ADDR'},
+     $challenge, $response
+     );
+
 
-unless ($os && $osv && $comp && $compv && $arch && $email && $owner)
+unless ($os && $osv && $comp && $compv && $arch && $email && $owner && $captcha_ok->{is_valid})
 {
        print "Content-Type: text/html\n\n",
        $header,
-       "<p>You need to complete all the form items. <a href=\"/register.html\">Please try again.</a></p>\n",
+       "<p>You need to complete all the form items. <a href=\"/cgi-bin/register-form.pl\">Please try again.</a></p>\n",
        $footer;
        exit;
 }
index 98a88605dfcd1aae7786c7e44bb31a8c35955b42..f600175f6077c79ffd62834c008a5c62479b5fcc 100755 (executable)
@@ -101,7 +101,7 @@ __DATA__
     <li id="home"><a href="/index.html" title="PostgreSQL BuildFarm Home">Home</a></li>
     <li id="status"><a href="/cgi-bin/show_status.pl" title="Current results">Status</a></li>
     <li id="members"><a href="/cgi-bin/show_members.pl" title="Platforms tested">Members</a></li>
-    <li id="register"><a href="/register.html" title="Join PostgreSQL BuildFarm">Register</a></li>
+    <li id="register"><a href="/cgi-bin/register-form.pl" title="Join PostgreSQL BuildFarm">Register</a></li>
     <li id="pgfoundry"><a href="http://pgfoundry.org/projects/pgbuildfarm/">PGFoundry</a></li>
 </ul>
 </div><!-- nav -->
index 925be5e83b5f70d14ac2b2d33b2656a629232006..cfee5710bc73461a05cc8efe9f732d6f70f92278 100755 (executable)
@@ -148,7 +148,7 @@ if ($stage eq 'OK')
     <li id="home"><a href="/index.html" title="PostgreSQL BuildFarm Home">Home</a></li>
     <li id="status"><a href="/cgi-bin/show_status.pl" title="Current results">Status</a></li>
     <li id="members"><a href="/cgi-bin/show_members.pl" title="Platforms tested">Members</a></li>
-    <li id="register"><a href="/register.html" title="Join PostgreSQL BuildFarm">Register</a></li>
+    <li id="register"><a href="/cgi-bin/register-form.pl" title="Join PostgreSQL BuildFarm">Register</a></li>
     <li id="pgfoundry"><a href="http://pgfoundry.org/projects/pgbuildfarm/">PGFoundry</a></li>
 </ul>
 </div><!-- nav -->
@@ -272,7 +272,7 @@ print <<EOHTML;
     <li id="home"><a href="/index.html" title="PostgreSQL BuildFarm Home">Home</a></li>
     <li id="status"><a href="/cgi-bin/show_status.pl" title="Status Page">Status</a></li>
     <li id="members"><a href="/cgi-bin/show_members.pl" title="Status Page">Members</a></li>
-    <li id="register"><a href="/register.html" title="Register">Register</a></li>
+    <li id="register"><a href="/cgi-bin/register-form.pl" title="Register">Register</a></li>
     <li id="pgfoundry"><a href="http://pgfoundry.org/projects/pgbuildfarm/">PGFoundry</a></li>
 </ul>
 </div><!-- nav -->
index 341103eba10701a1a1f1a7d84f0b742729fc4d74..d4b03b23b6456ee19c3ca40d119fbeb4e18b5ea2 100755 (executable)
@@ -100,7 +100,7 @@ __DATA__
     <li id="home"><a href="/index.html" title="PostgreSQL BuildFarm Home">Home</a></li>
     <li id="status"><a href="/cgi-bin/show_status.pl" title="Current results">Status</a></li>
     <li id="members"><a href="/cgi-bin/show_members.pl" title="Platforms tested">Members</a></li>
-    <li id="register"><a href="/register.html" title="Join PostgreSQL BuildFarm">Register</a></li>
+    <li id="register"><a href="/cgi-bin/register-form.pl" title="Join PostgreSQL BuildFarm">Register</a></li>
     <li id="pgfoundry"><a href="http://pgfoundry.org/projects/pgbuildfarm/">PGFoundry</a></li>
 </ul>
 </div><!-- nav -->
index 8c962f5d3a31a0ab4dc10bceeddf9024e885daa6..59d0e63b423e5f91a9ca84aa6b0fb51c67ca5d13 100755 (executable)
@@ -110,6 +110,7 @@ __DATA__
      xml => '/img/xml.png',
      'thread-safety' => '/img/threads.gif',
      'integer-datetimes' = '/img/days.png',
+     git => '/img/git.png',
      }
 -%]
 [%- BLOCK img ; IF flag == 'depend' or flag == 'gnu-ld' ; ; ELSIF flag_imgs.$flag %]<img src="[% flag_imgs.$flag %]" title="[% flag %]" alt="[% flag %]" height="16" width="16" class="inline" align="bottom" />  [% ELSE %][%#
@@ -140,7 +141,7 @@ __DATA__
     <li id="home"><a href="/index.html" title="PostgreSQL BuildFarm Home">Home</a></li>
     <li id="status"><a href="/cgi-bin/show_status.pl" title="Current results">Status</a></li>
     <li id="members"><a href="/cgi-bin/show_members.pl" title="Platforms tested">Members</a></li>
-    <li id="register"><a href="/register.html" title="Join PostgreSQL BuildFarm">Register</a></li>
+    <li id="register"><a href="/cgi-bin/register-form.pl" title="Join PostgreSQL BuildFarm">Register</a></li>
     <li id="pgfoundry"><a href="http://pgfoundry.org/projects/pgbuildfarm/">PGFoundry</a></li>
     <li id="postgresql.org"><a href="http://www.postgresql.org">PostgreSQL.org</a></li>
 </ul>
@@ -159,7 +160,7 @@ __DATA__
 <table><tr><th class="head" rowspan="2">Legend</th>
 [% FOREACH flagset IN flag_imgs %]
 <td><img src="[% flagset.value %]" title="[% flagset.key %]" alt="[% flagset.key %]" height="16" width="16" class="inline"  align="center"/> =  [% flagset.key %]</td>
-[% IF loop.count == 6 %]</tr><tr>[% END %]
+[% IF loop.count == 7 %]</tr><tr>[% END %]
 [% END %]
 </tr></table>
 <br />
index 37545f27a9d8a7d432567512079a18dd96729f79..0968db1325f5807cd083b8fe4ed2b2f596ec1cf5 100644 (file)
@@ -20,7 +20,7 @@
     <li id="home"><a href="/index.html" title="PostgreSQL BuildFarm Home">Home</a></li>
     <li id="status"><a href="/cgi-bin/show_status.pl" title="Current results">Status</a></li>
     <li id="members"><a href="/cgi-bin/show_members.pl" title="Platforms tested">Members</a></li>
-    <li id="register"><a href="/register.html" title="Join PostgreSQL BuildFarm">Register</a></li>
+    <li id="register"><a href="/cgi-bin/register-form.pl" title="Join PostgreSQL BuildFarm">Register</a></li>
     <li id="pgfoundry"><a href="http://pgfoundry.org/projects/pgbuildfarm/">PGFoundry</a></li>
 </ul>
 </div><!-- nav -->
@@ -38,7 +38,7 @@ To see the current status of tests on various branches, check the
 </p>
 <p>
 If you are interested in running a member of the build farm, then please visit
-the <a href="/register.html" title="Register">Registration Page</a>.
+the <a href="/cgi-bin/register-form.pl" title="Register">Registration Page</a>.
 We are particularly interested in unusual platforms or combinations of
 architecture, operating system and compiler.
 </p>
index 7e8ae33a605755d1487928227d30a01621f1dba6..2e575b02e8f7441f792aea2ec5d708af6abc8f7b 100644 (file)
@@ -180,6 +180,41 @@ CREATE FUNCTION target(t text) RETURNS text
 
 ALTER FUNCTION public.target(t text) OWNER TO pgbuildfarm;
 
+--
+-- Name: transitions(text, text, text, text, text, text); Type: FUNCTION; Schema: public; Owner: pgbuildfarm
+--
+
+CREATE FUNCTION transitions(text, text, text, text, text, text) RETURNS integer
+    AS $_$
+
+my ($os,$osv,$comp,$compv,$arch,$owner) = @_;
+# count transitions to and from upper case
+my $trans = 1;
+my $counttrans = 0;
+foreach (split "" ,"$os$osv$comp$compv$arch$owner")
+{
+       if (/[A-Z]/)
+       {
+               next if $trans;
+               $trans = 1;
+               $counttrans++;
+       }
+       else
+       {
+               next unless $trans;
+               $trans = 0;
+               $counttrans++;
+       }
+}
+
+return $counttrans;
+
+$_$
+    LANGUAGE plperl;
+
+
+ALTER FUNCTION public.transitions(text, text, text, text, text, text) OWNER TO pgbuildfarm;
+
 SET default_tablespace = '';
 
 SET default_with_oids = true;
@@ -215,7 +250,9 @@ CREATE TABLE build_status (
     log_archive bytea,
     log_archive_filenames text[],
     build_flags text[],
-    report_time timestamp with time zone DEFAULT ('now'::text)::timestamp(6) with time zone
+    report_time timestamp with time zone DEFAULT ('now'::text)::timestamp(6) with time zone,
+    scm text,
+    scmurl text
 );
 
 
@@ -263,7 +300,9 @@ CREATE TABLE buildsystems (
     sys_owner text NOT NULL,
     owner_email text NOT NULL,
     status_ts timestamp without time zone DEFAULT (('now'::text)::timestamp(6) with time zone)::timestamp without time zone,
-    no_alerts boolean DEFAULT false
+    no_alerts boolean DEFAULT false,
+    sys_notes text,
+    sys_notes_ts timestamp with time zone
 );
 
 
@@ -316,6 +355,57 @@ CREATE VIEW dashboard AS
 
 ALTER TABLE public.dashboard OWNER TO pgbuildfarm;
 
+--
+-- Name: dashboard_ex; Type: VIEW; Schema: public; Owner: pgbuildfarm
+--
+
+CREATE VIEW dashboard_ex AS
+    SELECT ((timezone('GMT'::text, now()))::timestamp(0) without time zone - b.snapshot) AS when_ago, b.sysname, b.snapshot, b.status, b.stage, b.branch, b.build_flags, s.operating_system, COALESCE(b.os_version, s.os_version) AS os_version, s.compiler, COALESCE(b.compiler_version, s.compiler_version) AS compiler_version, s.architecture, s.sys_notes, (s.sys_notes_ts)::date AS sys_notes_date FROM buildsystems s, (SELECT DISTINCT ON (bs.sysname, bs.branch, bs.report_time) bs.sysname, bs.snapshot, bs.status, bs.stage, bs.branch, bs.build_flags, bs.report_time, p.compiler_version, p.os_version FROM ((build_status bs NATURAL JOIN latest_snapshot m) LEFT JOIN personality p ON (((p.name = bs.sysname) AND (p.effective_date <= bs.report_time)))) WHERE (m.snapshot > (now() - '30 days'::interval)) ORDER BY bs.sysname, bs.branch, bs.report_time, (p.effective_date IS NULL), p.effective_date DESC) b WHERE ((s.name = b.sysname) AND (s.status = 'approved'::text));
+
+
+ALTER TABLE public.dashboard_ex OWNER TO pgbuildfarm;
+
+--
+-- Name: dashboard_mat; Type: TABLE; Schema: public; Owner: pgbfweb; Tablespace: 
+--
+
+CREATE TABLE dashboard_mat (
+    sysname text,
+    snapshot timestamp without time zone,
+    status integer,
+    stage text,
+    branch text,
+    build_flags text[],
+    operating_system text,
+    os_version text,
+    compiler text,
+    compiler_version text,
+    architecture text
+);
+
+
+ALTER TABLE public.dashboard_mat OWNER TO pgbfweb;
+
+--
+-- Name: dashboard_mat_data; Type: VIEW; Schema: public; Owner: pgbuildfarm
+--
+
+CREATE VIEW dashboard_mat_data AS
+    SELECT b.sysname, b.snapshot, b.status, b.stage, b.branch, b.build_flags, s.operating_system, COALESCE(b.os_version, s.os_version) AS os_version, s.compiler, COALESCE(b.compiler_version, s.compiler_version) AS compiler_version, s.architecture FROM buildsystems s, (SELECT DISTINCT ON (bs.sysname, bs.branch, bs.report_time) bs.sysname, bs.snapshot, bs.status, bs.stage, bs.branch, bs.build_flags, bs.report_time, p.compiler_version, p.os_version FROM ((build_status bs NATURAL JOIN latest_snapshot m) LEFT JOIN personality p ON (((p.name = bs.sysname) AND (p.effective_date <= bs.report_time)))) WHERE (m.snapshot > (now() - '30 days'::interval)) ORDER BY bs.sysname, bs.branch, bs.report_time, (p.effective_date IS NULL), p.effective_date DESC) b WHERE ((s.name = b.sysname) AND (s.status = 'approved'::text));
+
+
+ALTER TABLE public.dashboard_mat_data OWNER TO pgbuildfarm;
+
+--
+-- Name: dashboard_mat_data2; Type: VIEW; Schema: public; Owner: pgbuildfarm
+--
+
+CREATE VIEW dashboard_mat_data2 AS
+    SELECT b.sysname, b.snapshot, b.status, b.stage, b.branch, CASE WHEN ((b.conf_sum ~ 'use_vpath'::text) AND (b.conf_sum !~ '''use_vpath'' => undef'::text)) THEN (b.build_flags || 'vpath'::text) ELSE b.build_flags END AS build_flags, s.operating_system, COALESCE(b.os_version, s.os_version) AS os_version, s.compiler, COALESCE(b.compiler_version, s.compiler_version) AS compiler_version, s.architecture FROM buildsystems s, (SELECT DISTINCT ON (bs.sysname, bs.branch, bs.report_time) bs.sysname, bs.snapshot, bs.status, bs.stage, bs.branch, bs.build_flags, bs.conf_sum, bs.report_time, p.compiler_version, p.os_version FROM ((build_status bs NATURAL JOIN latest_snapshot m) LEFT JOIN personality p ON (((p.name = bs.sysname) AND (p.effective_date <= bs.report_time)))) WHERE (m.snapshot > (now() - '30 days'::interval)) ORDER BY bs.sysname, bs.branch, bs.report_time, (p.effective_date IS NULL), p.effective_date DESC) b WHERE ((s.name = b.sysname) AND (s.status = 'approved'::text));
+
+
+ALTER TABLE public.dashboard_mat_data2 OWNER TO pgbuildfarm;
+
 --
 -- Name: failures; Type: VIEW; Schema: public; Owner: pgbuildfarm
 --
@@ -456,6 +546,15 @@ CREATE INDEX bs_sysname_branch_report_idx ON build_status USING btree (sysname,
 
 ALTER INDEX public.bs_sysname_branch_report_idx OWNER TO pgbuildfarm;
 
+--
+-- Name: build_status_log_snapshot_idx; Type: INDEX; Schema: public; Owner: pgbuildfarm; Tablespace: 
+--
+
+CREATE INDEX build_status_log_snapshot_idx ON build_status_log USING btree (snapshot);
+
+
+ALTER INDEX public.build_status_log_snapshot_idx OWNER TO pgbuildfarm;
+
 --
 -- Name: set_latest_snapshot; Type: TRIGGER; Schema: public; Owner: pgbuildfarm
 --
@@ -529,7 +628,7 @@ GRANT SELECT ON TABLE build_status_log TO rssfeed;
 REVOKE ALL ON TABLE buildsystems FROM PUBLIC;
 REVOKE ALL ON TABLE buildsystems FROM pgbuildfarm;
 GRANT ALL ON TABLE buildsystems TO pgbuildfarm;
-GRANT INSERT,SELECT ON TABLE buildsystems TO pgbfweb;
+GRANT INSERT,SELECT,UPDATE ON TABLE buildsystems TO pgbfweb;
 GRANT SELECT ON TABLE buildsystems TO rssfeed;
 
 
@@ -564,6 +663,45 @@ GRANT ALL ON TABLE dashboard TO pgbuildfarm;
 GRANT SELECT ON TABLE dashboard TO pgbfweb;
 
 
+--
+-- Name: dashboard_ex; Type: ACL; Schema: public; Owner: pgbuildfarm
+--
+
+REVOKE ALL ON TABLE dashboard_ex FROM PUBLIC;
+REVOKE ALL ON TABLE dashboard_ex FROM pgbuildfarm;
+GRANT ALL ON TABLE dashboard_ex TO pgbuildfarm;
+GRANT SELECT ON TABLE dashboard_ex TO pgbfweb;
+
+
+--
+-- Name: dashboard_mat; Type: ACL; Schema: public; Owner: pgbfweb
+--
+
+REVOKE ALL ON TABLE dashboard_mat FROM PUBLIC;
+REVOKE ALL ON TABLE dashboard_mat FROM pgbfweb;
+GRANT ALL ON TABLE dashboard_mat TO pgbfweb;
+
+
+--
+-- Name: dashboard_mat_data; Type: ACL; Schema: public; Owner: pgbuildfarm
+--
+
+REVOKE ALL ON TABLE dashboard_mat_data FROM PUBLIC;
+REVOKE ALL ON TABLE dashboard_mat_data FROM pgbuildfarm;
+GRANT ALL ON TABLE dashboard_mat_data TO pgbuildfarm;
+GRANT SELECT ON TABLE dashboard_mat_data TO pgbfweb;
+
+
+--
+-- Name: dashboard_mat_data2; Type: ACL; Schema: public; Owner: pgbuildfarm
+--
+
+REVOKE ALL ON TABLE dashboard_mat_data2 FROM PUBLIC;
+REVOKE ALL ON TABLE dashboard_mat_data2 FROM pgbuildfarm;
+GRANT ALL ON TABLE dashboard_mat_data2 TO pgbuildfarm;
+GRANT SELECT ON TABLE dashboard_mat_data2 TO pgbfweb;
+
+
 --
 -- PostgreSQL database dump complete
 --
index cb95ef9908f73b856ccee0e55ab9730626c3af94..75cd7a64ae5e7357db680ba54b84bd314c3507de 100644 (file)
@@ -25,7 +25,7 @@ a></li>
 atus</a></li>
     <li id="members"><a href="/cgi-bin/show_members.pl" title="Platforms tested"
 >Members</a></li>
-    <li id="register"><a href="/register.html" title="Join PostgreSQL BuildFarm"
+    <li id="register"><a href="/cgi-bin/register-form.pl" title="Join PostgreSQL BuildFarm"
 >Register</a></li>
     <li id="pgfoundry"><a href="http://pgfoundry.org/projects/pgbuildfarm/">PGFo
 undry</a></li>
index 402a93268c57703fb8e9532a56e8a5d4f4e702ba..4713047888e790448fce181206a9daf2354af35e 100644 (file)
@@ -22,7 +22,7 @@
     <li id="home"><a href="/index.html" title="PostgreSQL BuildFarm Home">Home</a></li>
     <li id="status"><a href="/cgi-bin/show_status.pl" title="Current results">Status</a></li>
     <li id="members"><a href="/cgi-bin/show_members.pl" title="Platforms tested">Members</a></li>
-    <li id="register"><a href="/register.html" title="Join PostgreSQL BuildFarm">Register</a></li>
+    <li id="register"><a href="/cgi-bin/register-form.pl" title="Join PostgreSQL BuildFarm">Register</a></li>
     <li id="pgfoundry"><a href="http://pgfoundry.org/projects/pgbuildfarm/">PGFoundry</a></li>
 </ul>
 </div><!-- nav -->
index 17ee2acabdb58cb0c29abe437f3cec88d972c5d5..f17e4154e0b192d63c52daaddf0e0a52f466cbeb 100644 (file)
@@ -22,7 +22,7 @@
     <li id="home"><a href="/index.html" title="PostgreSQL BuildFarm Home">Home</a></li>
     <li id="status"><a href="/cgi-bin/show_status.pl" title="Current results">Status</a></li>
     <li id="members"><a href="/cgi-bin/show_members.pl" title="Platforms tested">Members</a></li>
-    <li id="register"><a href="/register.html" title="Join PostgreSQL BuildFarm">Register</a></li>
+    <li id="register"><a href="/cgi-bin/register-form.pl" title="Join PostgreSQL BuildFarm">Register</a></li>
     <li id="pgfoundry"><a href="http://pgfoundry.org/projects/pgbuildfarm/">PGFoundry</a></li>
     <li id="postgresql.org"><a href="http://www.postgresql.org">PostgreSQL.org</a></li>
 </ul>
diff --git a/templates/register-form.tt b/templates/register-form.tt
new file mode 100644 (file)
index 0000000..0f3b289
--- /dev/null
@@ -0,0 +1,111 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+       <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+       <title>PostgreSQL BuildFarm Application</title>
+       <link rel="icon" type="image/png" href="/elephant-icon.png" />
+       <link rel="stylesheet" rev="stylesheet" href="/inc/pgbf.css" charset="utf-8" />
+       <style type="text/css"><!--
+       li#register a { color:rgb(17,45,137); background: url(/inc/b/r.png) no-repeat 100% -20px; } 
+       li#register { background: url(/inc/b/l.png) no-repeat 0% -20px; }
+       --></style>
+</head>
+<body class="application">
+<div id="wrapper">
+<div id="banner">
+<a href="/index.html"><img src="/inc/pgbuildfarm-banner.png" alt="PostgreSQL BuildFarm" width="800" height="73" /></a>
+<div id="nav">
+<ul>
+    <li id="home"><a href="/index.html" title="PostgreSQL BuildFarm Home">Home</a></li>
+    <li id="status"><a href="/cgi-bin/show_status.pl" title="Current results">Status</a></li>
+    <li id="members"><a href="/cgi-bin/show_members.pl" title="Platforms tested">Members</a></li>
+    <li id="register"><a href="/cgi-bin/register-form.pl" title="Join PostgreSQL BuildFarm">Register</a></li>
+    <li id="pgfoundry"><a href="http://pgfoundry.org/projects/pgbuildfarm/">PGFoundry</a></li>
+</ul>
+</div><!-- nav -->
+</div><!-- banner -->
+<div id="main">
+<h1>Application to join PostgreSQL BuildFarm</h1>
+
+<p>Here is a short description of what is required to join the buildfarm successfully. Please read it carefully
+before submitting this form.</p>
+
+<ul>
+<li> your machine will need to be able to contact <a href="http://www.pgbuildfarm.org">http://www.pgbuildfarm.org</a>
+     either directly or via proxy, and it will need access to a PostgreSQL CVS repository, 
+     either the one at postgresql.org or a mirror (you can set up your own mirror using CSVup on a Linux or FreeBSD machine - 
+     this is recommended).</li>
+<li> have a working Postgresql build environment for your platform 
+     (for Windows this means MSys/MinGW with the libz and libintl stuff,  and ideally native Python and Tcl).</li>
+<li> Windows only: you will need a native perl installed as well as the one in the MSys DTK. The one from ActiveState works fine.</li>
+<li> download and unpack the latest release of client code from 
+     <a href="http://pgfoundry.org/frs/?group_id=1000040">http://pgfoundry.org/frs/?group_id=1000040</a></li>
+<li> read instructions at 
+     <a href="http://pgfoundry.org/docman/view.php/1000040/4/PGBuildFarm-HOWTO.txt">http://pgfoundry.org/docman/view.php/1000040/4/PGBuildFarm-HOWTO.txt</a></li>
+<li> get the software running locally using flags --force --nostatus --nosend</li>
+<li> register your machine on this page</li>
+<li> when you receive credentials, put them in the config file, and schedule regular builds (without those flags) 
+     for the branches you want to support - which should be at least HEAD and the most recent stable branch.</li>
+</ul>
+
+<p>There is also some extra information in this 
+<a href="http://www.onlamp.com/pub/a/onlamp/2005/02/24/pg_buildfarm.html">article about buildfarm</a> on the O'Reilly network.</p>
+
+<hr />
+
+<p>Please complete all items.</p>
+<p>For Linux, please specify the name and version of the <b>Distribution</b> for the Operating Systems items. 
+Do not use the name "Linux". For example, for my test machine the Operating 
+Systems is "Fedora Core" and the version is "4".</p>
+<form method="post" action="/cgi-bin/register.pl">
+<table cellspacing="0">
+<tr>
+  <th>Operating System</th>
+  <td><input type="text" name="os" value="" /></td>
+</tr>
+<tr>
+  <th>OS Version</th>
+  <td><input type="text" name="osv" value="" /></td>
+</tr>
+<tr>
+  <th>Compiler</th>
+  <td><input type="text" name="comp" value="" /></td>
+</tr>
+<tr>
+  <th>Compiler Version</th>
+  <td><input type="text" name="compv" value="" /></td>
+</tr>
+<tr>
+  <th>Architecture</th>
+  <td><input type="text" name="arch" value="" /></td>
+</tr>
+<tr>
+  <th>Your name</th>
+  <td><input type="text" name="owner" value="" /></td>
+</tr>
+<tr>
+  <th>Your email address</th>
+  <td><input type="text" name="email" value="" /></td>
+</tr>
+<tr>
+<th colspan="2">[% captcha %]</th>
+</tr>
+<tr>
+  <th class="submit" colspan="2"><input type="submit" /></th>
+</tr>
+</table>
+</form>
+</div><!-- main -->
+<hr />
+<p style="text-align: center;">
+Hosting for the PostgreSQL Buildfarm is generously 
+provided by: 
+<a href="http://www.commandprompt.com">CommandPrompt, 
+The PostgreSQL Company</a>
+</p>
+</div><!-- wrapper -->
+</body>
+</html>
+
+