eae37393137ad19d32a23f2a59c6a058932ca125
[freeside.git] / fs_selfservice / FS-SelfService / cgi / selfservice.cgi
1 #!/usr/bin/perl -Tw
2
3 use strict;
4 use vars qw($cgi $session_id $form_max $template_dir);
5 use subs qw(do_template);
6 use CGI;
7 use CGI::Carp qw(fatalsToBrowser);
8 use Text::Template;
9 use FS::SelfService qw(login customer_info invoice);
10
11 $template_dir = '.';
12
13 $form_max = 255;
14
15 $cgi = new CGI;
16
17 unless ( defined $cgi->param('session') ) {
18   do_template('login',{});
19   exit;
20 }
21
22 if ( $cgi->param('session') eq 'login' ) {
23
24   $cgi->param('username') =~ /^\s*([a-z0-9_\-\.\&]{0,$form_max})\s*$/i
25     or die "illegal username";
26   my $username = $1;
27
28   $cgi->param('domain') =~ /^\s*([\w\-\.]{0,$form_max})\s*$/
29     or die "illegal domain";
30   my $domain = $1;
31
32   $cgi->param('password') =~ /^(.{0,$form_max})$/
33     or die "illegal password";
34   my $password = $1;
35
36   my $rv = login(
37     'username' => $username,
38     'domain'   => $domain,
39     'password' => $password,
40   );
41   if ( $rv->{error} ) {
42     do_template('login', {
43       'error'    => $rv->{error},
44       'username' => $username,
45       'domain'   => $domain,
46     } );
47     exit;
48   } else {
49     $cgi->param('session' => $rv->{session_id} );
50     $cgi->param('action'  => 'myaccount' );
51   }
52 }
53
54 $session_id = $cgi->param('session');
55
56 $cgi->param('action') =~ /^(myaccount|view_invoice)$/
57   or die "unknown action ". $cgi->param('action');
58 my $action = $1;
59
60 my $result = eval "&$action();";
61 die $@ if $@;
62
63 if ( $result->{error} eq "Can't resume session" ) { #ick
64   do_template('login',{});
65   exit;
66 }
67
68 #warn $result->{'open_invoices'};
69 #warn scalar(@{$result->{'open_invoices'}});
70
71 do_template($action, {
72   'session_id' => $session_id,
73   %{$result}
74 });
75
76 #--
77
78 sub myaccount { customer_info( 'session_id' => $session_id ); }
79
80 sub view_invoice {
81
82   $cgi->param('invnum') =~ /^(\d+)$/ or die "illegal invnum";
83   my $invnum = $1;
84
85   invoice( 'session_id' => $session_id,
86            'invnum'     => $invnum,
87          );
88
89 }
90
91 #--
92
93 sub do_template {
94   my $name = shift;
95   my $fill_in = shift;
96
97   $cgi->delete_all();
98   $fill_in->{'self_url'} = $cgi->self_url;
99
100   my $template = new Text::Template( TYPE    => 'FILE',
101                                      SOURCE  => "$template_dir/$name.html",
102                                      DELIMITERS => [ '<%=', '%>' ],
103                                      UNTAINT => 1,                    )
104     or die $Text::Template::ERROR;
105
106   print $cgi->header( '-expires' => 'now' ),
107         $template->fill_in( HASH => $fill_in );
108 }
109