The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#! /usr/bin/perl
#---------------------------------------------------------------------
# nfsn.pl
# Copyright 2010 Christopher J. Madsen
#
# This program is free software; you can redistribute it and/or modify
# it under the same terms as Perl itself.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See either the
# GNU General Public License or the Artistic License for more details.
#
# Simple client script for using the NFSN API
#---------------------------------------------------------------------

use strict;
use warnings;
# RECOMMEND PREREQ: Data::Dumper
use Data::Dumper;
use Try::Tiny;
use WebService::NFSN;

my ($type, $id, $command, @parameters) = @ARGV;

die <<"" unless defined $command;
Usage: $0 TYPE ID COMMAND [PARAMETERS...]\n
Reads credentials from .nfsn-api\n
Examples:
  $0 account A1B2-C3D4E5F6 balance
  $0 account A1B2-C3D4E5F6 friendlyName NewName
  $0 dns example.com listRRs name www
  $0 dns example.com addRR name bob type A data 10.0.0.5
  $0 email example.com forward name dest_email 'to\@example.net'
  $0 member USER accounts
  $0 site SHORT_NAME addAlias alias www.example.com

my $nfsn = WebService::NFSN->new; # Load credentials from ~/.nfsn-api

die "Unknown type $type\n" unless $nfsn->can($type);
my $obj = $nfsn->$type($id);

die "Unknown command $command\n" unless $obj->can($command);
my $result = try {
  $obj->$command(@parameters);
} catch {
  my $res = $nfsn->last_response;
  print STDERR $res->as_string . "\n" if $res;
  die $_;
};

$Data::Dumper::Indent   = 1;
$Data::Dumper::Sortkeys = 1;
$Data::Dumper::Terse    = 1;
print Dumper($result);