-#!/usr/bin/perl
-use strict;
-use warnings;
-
-use File::Spec;
-use File::Path qw/ make_path /;
-
-my $root_dir = $ENV{PUBLIC_ROOT_DIR}
- or die "Need PUBLIC_ROOT_DIR\n";
-my $link_dir = $ENV{PUBLIC_LINK_DIR}
- or die "Need PUBLIC_LINK_DIR\n";
-my $http_uri = $ENV{PUBLIC_HTTP_URI}
- or die "Need PUBLIC_HTTP_URI\n";
-
-
-sub nonce {
- my $n = shift;
- $n = 10 unless $n > 0;
-
- my @chars = ( 'a' .. 'z', 'A' .. 'Z', '0' .. '9' );
- my @path = ();
- push @path, $chars[ rand @chars ] for 1 .. $n;
-
- return join '', @path;
-}
-
-sub makeNonceDir {
- my $nonce = shift;
- my $path = File::Spec->catdir($link_dir, $nonce);
- make_path($path, { chmod => 0777 });
- return $path, ;
-}
-
-sub addFiles {
- # get list of files matching name from root directory
- my $name = shift
- or die "Need filename!\n";
-
- opendir DIR, $root_dir
- or die $!;
- my @files = grep /$name/i, readdir(DIR);
- closedir DIR;
-
- # exit if no files found
- die "No match: $name\n" unless @files;
-
- # create nonce dir and add symbolic links
- my $nonce = nonce(20);
- my $nonce_dir = makeNonceDir($nonce);
-
- for my $file (@files) {
- my $root_filepath = File::Spec->catfile($root_dir, $file);
- my $link_filepath = File::Spec->catfile($nonce_dir, $file);
-
- symlink $root_filepath, $link_filepath
- or die "Unable to create symlink: $root_filepath -> $link_filepath";
-
- my $uri_link = join '/', $http_uri, $nonce, $file;
- print "$uri_link\n";
- }
-}
-
-sub listFiles {
- opendir DIR, $link_dir;
- my @nonces = readdir(DIR);
- closedir DIR;
-
- for my $nonce (@nonces) {
- next if $nonce eq '.';
- next if $nonce eq '..';
-
- # ensure it's a directory
- my $nonce_dir = File::Spec->catdir($link_dir, $nonce);
- next unless -d $nonce_dir;
-
- # make URIs for all the files in the nonce dirs
- opendir DIR, $nonce_dir;
- my @files = readdir(DIR);
- closedir DIR;
-
- for my $file (@files) {
- next if $file eq '.';
- next if $file eq '..';
-
- my $uri_link = join '/', $http_uri, $nonce, $file;
- print "$uri_link\n";
- }
- }
-}
-
-
-# script begins
-if (@ARGV) {
- addFiles($_) for @ARGV;
-}
-else {
- listFiles;
-}