Ejemplo n.º 1
0
function _pugpig_subs_edition_credentials_response($product_id, $secret, $entitled = FALSE, $state, $comments = array(), $extras = array(), $error_message = '')
{
    $writer = _pugpig_subs_start_xml_writer();
    if ($entitled) {
        $username = sha1(uniqid(mt_rand()));
        // TODO: do we need a more secure random number?
        $password = pugpig_generate_password($product_id, $username, $secret);
        $writer->startElement('credentials');
        $writer->writeElement('userid', $username);
        $writer->writeElement('password', $password);
        $writer->startElement('subscription');
        $writer->writeAttribute('state', $state);
        $writer->endElement();
        $writer->writeElement('productid', $product_id);
        foreach ($comments as $comment) {
            $writer->writeComment($comment);
        }
        foreach ($extras as $name => $value) {
            $writer->writeElement($name, $value);
        }
        $writer->endElement();
    } else {
        $writer->startElement('credentials');
        $writer->startElement('error');
        $writer->writeAttribute('status', "notentitled");
        if (!empty($error_message)) {
            $writer->writeAttribute('message', $error_message);
        }
        $writer->endElement();
        $writer->startElement('subscription');
        $writer->writeAttribute('state', $state);
        $writer->endElement();
        foreach ($comments as $comment) {
            $writer->writeComment($comment);
        }
        foreach ($extras as $name => $value) {
            $writer->writeElement($name, $value);
        }
        $writer->endElement();
        $writer->endElement();
    }
    $writer->endDocument();
    _pugpig_subs_end_xml_writer($writer);
}
                $message .= " You have access to every second issue.";
            }
        } elseif (endsWith($user, "random")) {
            $issues = patcf_get_some_issues($all_issues, true);
            $message .= " You have access to an ever changing random set. Any download may fail";
        } else {
            $issues = array();
            $message .= " We don't know who you are.";
        }
    }
}
if ($issues === NULL || in_array($product_id, $issues)) {
    $entitled = true;
} else {
    $entitled = false;
}
$extra_headers = array();
if ($user == "credserror") {
    $error_message = 'something bad happened';
    $writer = _pugpig_subs_start_xml_writer();
    $writer->startElement('credentials');
    $writer->startElement('error');
    if (!empty($error_message)) {
        $writer->writeAttribute('message', $error_message);
    }
    $writer->endElement();
    $writer->endElement();
    _pugpig_subs_end_xml_writer($writer);
    exit;
}
_pugpig_subs_edition_credentials_response($product_id, $secret, $entitled, $state, $comments, array(), $message, $token, $extra_headers);
function _pugpig_subs_edition_credentials_response($product_id, $secret, $entitled = false, $state, $comments = array(), $extras = array(), $error_message = '', $token = '', $extra_headers = array())
{
    $comments[] = "Generated: " . date(DATE_RFC822);
    $comments[] = "Requested Product ID: " . $product_id;
    $writer = _pugpig_subs_start_xml_writer();
    if ($entitled) {
        $username = empty($token) ? sha1(uniqid(mt_rand())) : $token;
        $password = pugpig_generate_password($product_id, $username, $secret);
        $writer->startElement('credentials');
        $writer->writeElement('userid', $username);
        $writer->writeElement('password', $password);
        // Do a fairly unpleasant callback to get addtional extra headers
        if (function_exists('pugpig_get_extra_credential_headers')) {
            $external_extras = pugpig_get_extra_credential_headers($product_id, $username, $comments);
            if (isset($external_extras) && !empty($external_extras)) {
                $extra_headers = array_merge($extra_headers, $external_extras);
            }
        }
        foreach ($extra_headers as $key => $value) {
            $writer->startElement('header');
            $writer->writeAttribute('name', $key);
            $writer->text($value);
            $writer->endElement();
        }
        _pugpig_subs_write_comments($writer, $comments);
        foreach ($extras as $name => $value) {
            $writer->writeElement($name, $value);
        }
        $writer->endElement();
    } else {
        $writer->startElement('credentials');
        $writer->startElement('error');
        $writer->writeAttribute('status', "notentitled");
        if (!empty($error_message)) {
            $writer->writeAttribute('message', $error_message);
        }
        $writer->endElement();
        _pugpig_subs_write_comments($writer, $comments);
        foreach ($extras as $name => $value) {
            $writer->writeElement($name, $value);
        }
        $writer->endElement();
        $writer->endElement();
    }
    $writer->endDocument();
    _pugpig_subs_end_xml_writer($writer);
}