summaryrefslogblamecommitdiffstats
path: root/repos/automagic.pl
blob: 1da3fc8d29a9de063b7f09f0e2de7d8542698949 (plain) (tree)


























































































































                                                                                                                                       
#!/usr/bin/perl

# finds SWORD repos on a given server and returns the skeleton for a 
# installmgr configuration

## Licensed under the standard BSD license:

# Copyright (c) 2009 CrossWire Bible Society <http://www.crosswire.org/>
# All rights reserved.
# 
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
# met:
# 
#     * Redistributions of source code must retain the above copyright
#        notice, this list of conditions and the following disclaimer.
#     * Redistributions in binary form must reproduce the above copyright
#       notice, this list of conditions and the following disclaimer in
#       the documentation and/or other materials provided with the
#       distribution.
#     * Neither the name of the CrossWire Bible Society nor the names of
#       its contributors may be used to endorse or promote products
#       derived from this software without specific prior written
#       permission.
# 
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
# IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
# PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

## For general inquiries, comments, suggestions, bug reports, etc. email:
## sword-support@crosswire.org

#########################################################################

use Net::FTP;


## Obtain arguments
if (scalar(@ARGV) < 1) {
    print "\nautomagic.pl <ftp server> [-l user] [-p password] [-o output] -- - connect to a ftp server and find SWORD repos on it \n";
    print "- Arguments in braces < > are required. Arguments in brackets [ ] are optional.\n";
    print "- If no -o option is specified the output will go to <STDOUT>\n";
    exit (-1);
}

$server = @ARGV[0];

$nextarg = 1;

if (@ARGV[$nextarg] eq "-l") {
    $user = "@ARGV[$nextarg+1]";
    $nextarg += 2;
}
else {
    $user = "anonymous";
}

if (@ARGV[$nextarg] eq "-p") {
    $password = "@ARGV[$nextarg+1]";
    $nextarg += 2;
}
else {
    $password = "";
}

if (@ARGV[$nextarg] eq "-o") {
    $outputFilename = "@ARGV[$nextarg+1]";
    open (OUTF, ">", "$outputFilename") or die "Could not open file $outputFilename for writing.";
    binmode OUTF;
    select(OUTF);
}


#open ftp server and obtain listing of all directories

$ftp = Net::FTP->new($server, Debug => 0)
    or die "Cannot connect to $server:\n $@";
$ftp->login($user,$password)
    or die "Username or password incorrect";
@data=$ftp->ls("-Rla");
$ftp->quit;

#parse listings and create repo list

foreach my $line (@data)
        {
        if ($line =~ /^\.\//) {$path = $line}
        if ($line =~ /mods\.d$/) {
                $path =~ s/://;
                $path =~ s/^\.//;
                push(@output,$path);
                }
        }


my $i=0;
if ($user eq "anonymous") {
    $user="";
    }

if (@output>0) {
    print "[General]\nPassiveFTP=true\n\n[Sources]\n";
    foreach my $path (@output)
        {
        print "FTPSource=Repo$i|$server|$path|$user|$password|\n";
        $i++
        }
    $return=0; 
    }
else {
    print STDERR "This server contains no SWORD repos";
    $return=1;
    }
    
exit $return;