#!/usr/local/bin/perl
# ==================================================================
# Gossamer Links - enhanced directory management system
#
#   Website  : http://gossamer-threads.com/
#   Support  : http://gossamer-threads.com/scripts/support/
#   CVS Info : 087,071,086,086,085      
#   Revision : $Id: postback.cgi,v 1.6 2005/03/05 01:29:08 brewt Exp $
#
# Copyright (c) 2001 Gossamer Threads Inc.  All Rights Reserved.
# Redistribution in part or in whole strictly prohibited. Please
# see LICENSE file for full details.
# ==================================================================
#
# This file (postback.cgi) is meant for handling postback for "remote" payment
# methods such as PayPal or WorldPay.  Normal users should not reach this page,
# as this typically produces a blank (or nearly blank) page.  No sort of user
# authentication is performed, and no user-based functionality is provided.
# Additionally, if no postback is found, or an error occurs, an ordinary die
# (producing a 500 Internal Server Error) is performed - payment providers
# often recognize this and will post the request again after a certain amount
# of time.

# Pragmas
use strict;
use lib '/var/home/slowtwitch/slowtwitch.com/cgi-bin/articles/admin';

# Internal modules
use Links qw/$CFG $IN/;
use Links::Payment;

Links::init('/var/home/slowtwitch/slowtwitch.com/cgi-bin/articles/admin');
$| = 1;

# Start
main();

sub main {
# -----------------------------------------------------------------------------
# Unlike the other .cgi's, we don't perform the various checks (such as the
# enabled/disabled check) because we ought to receive a posted payment even if
# the site has been disabled for some reason.

    # Check for payment postbacks
    if ($CFG->{payment}->{enabled} and $CFG->{payment}->{postback} and @{$CFG->{payment}->{postback}}) {
        for my $postback (@{$CFG->{payment}->{postback}}) {
            next unless exists $CFG->{payment}->{$postback->{type}}->{methods}->{$postback->{method}}
                and exists $CFG->{payment}->{$postback->{type}}->{used}->{$postback->{method}};
            my $var = $postback->{var};
            if (my $val = $IN->param($var)) {
                if (!$postback->{var_regex} or $val =~ /$postback->{var_regex}/) {
                    if (Links::Payment->postback($postback)) {
                        return;
                    }
                }
            }
        }
    }
    Links::Payment->invalid_postback;
    die 'postback.cgi called, but no payment method postback could be identified.';
}

