#!/usr/bin/perl use LWP; use Getopt::Std; use HTTP::Headers; use HTTP::Request::Common; use POSIX qw(strftime); use strict; use vars qw($login $logout %options %projects); =pod Usage: tracker.pl [-u username -p password -P project -t "MM/DD/YYYY HH:MM:SS"] list|login|logout\n); =cut $login='http://sillyemployer.com/tracker/login.php3'; $logout='http://sillyemployer.com/tracker/logout.php3'; getopt("u:p:t:P:", \%options); my $user= $options{u} || 'guym'; my $pass= $options{p} || 's1llium'; my $now = $options{t} || strftime("%m/%d/%Y %H:%M:%S", localtime(time)); my $prj = $options{P} || 0; my $cmd = $ARGV[0]; my $h=new HTTP::Headers; $h->authorization_basic($user,$pass); my($key,$val)=split(/: /, $h->as_string()); my $ua=new LWP::UserAgent; my $res=$ua->request(GET $login, $key=>$val); # Get the content of the login page my $page=$res->content; my @lines=split(/\n/, $page); # Build a projects hashtable (id to name). for my $line (@lines) { $line=~/<option value="(\d+)">(.+?)<\/option>/; $projects{$1}=$2; } # List the projects if($cmd eq 'list') { for my $project (sort { $a <=> $b } keys %projects) { print "$project $projects{$project}\n"; } } # Post a login to a project elsif($cmd eq 'login') { print "Logging into project $projects{$prj} at $now\n"; my $res=$ua->request(POST "$login?state=add_do", $key=>$val, Content => [ s_project_id=>$prj, s_start_time=>$now ]); print $res->is_success; } # Post a logout to a project elsif($cmd eq 'logout') { print "Logging out of project $projects{$prj} at $now\n"; my $res=$ua->request(GET $logout, $key=>$val); $res->as_string =~ /state=edit_do\&id=(\d+)/; my $id=$1; $res=$ua->request(POST "$logout?state=edit_do&id=$id", $key=>$val, Content => [ s_project_id=>$prj, s_stop_time=>$now ]); print $res->is_success; } else { print qq(Usage: tracker.pl [-u username -p password -P number -t "MM/DD/YYYY HH:MM:SS"] list|login|logout\n); }