chiark / gitweb /
Store Unix timestamps in the database, rather than SQL ones.
[odin-cgi] / bin / shorturl.userv
1 #! /usr/bin/perl
2
3 use lib "lib";
4
5 use Odin;
6 use DBI;
7 use POSIX;
8
9 Odin::cmdline_who;
10
11 my $op = shift(@ARGV) // "help";
12 if ($op eq "help") {
13   print <<EOF;
14 Commands available:
15
16         del TAG ...
17         get TAG ...
18         help
19         list
20         new URL
21 EOF
22 } elsif ($op eq "list") {
23   @ARGV == 0 or Odin::fail "usage: list";
24   my $db = Odin::open_db;
25   for my $r (@{$db->selectall_arrayref
26       ("SELECT tag, stamp, url
27         FROM odin_shorturl WHERE owner = ?
28         ORDER BY stamp", undef, $Odin::WHO)}) {
29     my ($tag, $stamp, $url) = @$r;
30     my $t = strftime "%Y-%m-%d %H:%M:%S %z", localtime $stamp;
31     printf "%-25s  %-12s  %s\n", $t, $tag, $url;
32   }
33 } elsif ($op eq "new") {
34   @ARGV == 1 or Odin::fail "usage: new URL";
35   my ($url) = @ARGV;
36   my $tag = Odin::new_shorturl $url;
37   print "$Odin::SHORTURL/$tag\n";
38 } elsif ($op eq "get") {
39   @ARGV >= 0 or Odin::fail "usage: get TAG ...";
40   if (@ARGV == 1) { print Odin::get_shorturl $ARGV[0], "\n"; }
41   else {
42     for my $tag (@ARGV)
43       { printf "%-12s  %s\n", $tag, Odin::get_shorturl $tag; }
44   }
45 } elsif ($op eq "del") {
46   @ARGV >= 0 or Odin::fail "usage: del TAG ...";
47   Odin::delete_shorturl @ARGV;
48 } else {
49   Odin::fail "unknown operation `$op'";
50 }