The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl

package main;

use 5.005;
use strict;

use vars qw{$VERSION};
BEGIN {
	$VERSION = '0.98';
}

sub error {
	print "Content-type: text/plain\n\nError: $_[0]\n";
	exit(0);
}

BEGIN {
	eval {
		require FindBin;
		require File::Spec;
		require Scalar::Util;
		require YAML::Tiny;
		require CGI;
		require Authen::Htpasswd;
		require Email::MIME;
		require Email::MIME::Creator;
		require Email::Send;
	};
	if ( $@ ) {
		error("Failed to load critical module dependency: $@");
	}
}

unless ( $ENV{TEST_TINYAUTH} ) {
	# Create the configuration
	my $config_file = File::Spec->catfile( $FindBin::Bin, 'tinyauth.conf' );
	unless ( -f $config_file ) {
		error("Config file $config_file does not exist");
	}
	unless ( -f $config_file ) {
		error("No read permissions for config file $config_file");
	}

	my $config = YAML::Tiny->read( $config_file );
	unless ( $config ) {
		error("Failed to load config file at $config_file");
	}

	# Create the web application
	my $application = eval {
		TinyAuth->new(
			config => $config,
		)
	};
	unless ( $application ) {
		error("Failed to create TinyAuth instance: $@");
	}

	# Run the instance
	my $rv = eval { $application->run };
	unless ( $rv ) {
		error("Application instance failed to run: $@");
	}

	exit(0);
}





$INC{'TinyAuth.pm'} = __FILE__;
#####################################################################
# Inline lib/TinyAuth.pm