diff options
| author | Manuel Traut <manut@mecka.net> | 2011-04-29 09:09:27 +0200 |
|---|---|---|
| committer | Manuel Traut <manut@mecka.net> | 2011-04-29 09:09:27 +0200 |
| commit | 5238ad5a0c4a9e1c8cd036f5de4055e39bd71297 (patch) | |
| tree | 4407c087b9fb5432b1dc11e70b52dacfa0b99feb /beagle/debian-rfs/usr/share/perl5/Debconf/FrontEnd/Web.pm | |
| parent | 60ead65c41afba7e6aa4bbcf507a1d52f7a8fe9f (diff) | |
added debootstrap stuff
Signed-off-by: Manuel Traut <manut@mecka.net>
Diffstat (limited to 'beagle/debian-rfs/usr/share/perl5/Debconf/FrontEnd/Web.pm')
| -rw-r--r-- | beagle/debian-rfs/usr/share/perl5/Debconf/FrontEnd/Web.pm | 137 |
1 files changed, 137 insertions, 0 deletions
diff --git a/beagle/debian-rfs/usr/share/perl5/Debconf/FrontEnd/Web.pm b/beagle/debian-rfs/usr/share/perl5/Debconf/FrontEnd/Web.pm new file mode 100644 index 0000000..bb2caff --- /dev/null +++ b/beagle/debian-rfs/usr/share/perl5/Debconf/FrontEnd/Web.pm @@ -0,0 +1,137 @@ +#!/usr/bin/perl -w +# This file was preprocessed, do not edit! + + +package Debconf::FrontEnd::Web; +use IO::Socket; +use IO::Select; +use CGI; +use strict; +use Debconf::Gettext; +use base qw(Debconf::FrontEnd); + + + +sub init { + my $this=shift; + + $this->SUPER::init(@_); + + $this->port(8001) unless defined $this->port; + $this->formid(0); + $this->interactive(1); + $this->capb('backup'); + $this->need_tty(0); + + $this->server(IO::Socket::INET->new( + LocalPort => $this->port, + Proto => 'tcp', + Listen => 1, + Reuse => 1, + LocalAddr => '127.0.0.1', + )) || die "Can't bind to ".$this->port.": $!"; + + print STDERR sprintf(gettext("Note: Debconf is running in web mode. Go to http://localhost:%i/"),$this->port)."\n"; +} + + +sub client { + my $this=shift; + + $this->{client}=shift if @_; + return $this->{client} if $this->{client}; + + my $select=IO::Select->new($this->server); + 1 while ! $select->can_read(1); + my $client=$this->server->accept; + my $commands=''; + while (<$client>) { + last if $_ eq "\r\n"; + $commands.=$_; + } + $this->commands($commands); + $this->{client}=$client; +} + + +sub closeclient { + my $this=shift; + + close $this->client; + $this->client(''); +} + + +sub showclient { + my $this=shift; + my $page=shift; + + my $client=$this->client; + print $client $page; +} + + +sub go { + my $this=shift; + + $this->backup(''); + + my $httpheader="HTTP/1.0 200 Ok\nContent-type: text/html\n\n"; + my $form=''; + my $id=0; + my %idtoelt; + foreach my $elt (@{$this->elements}) { + $idtoelt{$id}=$elt; + $elt->id($id++); + my $html=$elt->show; + if ($html ne '') { + $form.=$html."<hr>\n"; + } + } + return 1 if $form eq ''; + + my $formid=$this->formid(1 + $this->formid); + + $form="<html>\n<title>".$this->title."</title>\n<body>\n". + "<form><input type=hidden name=formid value=$formid>\n". + $form."<p>\n"; + + if ($this->capb_backup) { + $form.="<input type=submit value=".gettext("Back")." name=back>\n"; + } + $form.="<input type=submit value=".gettext("Next").">\n"; + $form.="</form>\n</body>\n</html>\n"; + + my $query; + do { + $this->showclient($httpheader . $form); + + $this->closeclient; + $this->client; + + my @get=grep { /^GET / } split(/\r\n/, $this->commands); + my $get=shift @get; + my ($qs)=$get=~m/^GET\s+.*?\?(.*?)(?:\s+.*)?$/; + + $query=CGI->new($qs); + } until ($query->param('formid') eq $formid); + + if ($this->capb_backup && $query->param('back') ne '') { + return ''; + } + + foreach my $id ($query->param) { + next unless $idtoelt{$id}; + + $idtoelt{$id}->value($query->param($id)); + delete $idtoelt{$id}; + } + foreach my $elt (values %idtoelt) { + $elt->value(''); + } + + return 1; +} + + +1 |
