The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
<?
# zxid/zxidwspdemo.php  -  Hello World Id-WSF WSP using zxid PHP extension
#
# Copyright (c) 2010 Sampo Kellomaki (sampo@iki.fi), All Rights Reserved.
# Copyright (c) 2009 Symlabs (symlabs@symlabs.com), All Rights Reserved.
# Author: Sampo Kellomaki (sampo@iki.fi)
# This is confidential unpublished proprietary source code of the author.
# NO WARRANTY, not even implied warranties. Contains trade secrets.
# Distribution prohibited unless authorized in writing.
# Licensed under Apache License 2.0, see file COPYING.
# $Id$
# 27.11.2009, Created, --Sampo
#
# QUERY_STRING=o=B REQUEST_METHOD=GET php ./zxidwspdemo.php
# Discovery registration: ./zxcot -e http://sp.tas3.pt:8082/zxidwspdemo.php 'TAS3 WSP PHP Demo' http://sp.tas3.pt:8082/zxidwspdemo.php?o=B urn:x-foobar | ./zxcot -d -b /var/zxid/idpdimd

dl("php_zxid.so");  # These three lines can go to initialization: they only need to run once
# CONFIG: You must have created /var/zxid directory hierarchy. See `make dir'
# CONFIG: You must edit the URL to match your domain name and port
#$conf = "URL=https://sp1.zxidsp.org:5443/zxidwspdemo.php&PATH=/var/zxid/";
$conf = "PATH=/var/zxid/&URL=http://sp.tas3.pt:8082/zxidwspdemo.php";
$cf = zxid_new_conf_to_cf($conf);
zxid_set_opt_cstr($cf, 2, "\tzxphp");
?>
<?
zxid_set_opt_cstr($cf, 3, "wsp: ");
$fullURL = "http://" + $_SERVER['HTTP_HOST'] + $_SERVER['SCRIPT_NAME'];
#zxid_url_set($cf, $fullURL);  # Virtual host support
error_log("fullURL($fullURL)");

# For every page that is accessed. Debug: QUERY_STRING=o=E REQUEST_METHOD=GET ./zxidhlo.php
#print_r(phpinfo());
#print_r($_SERVER);
$qs = $_SERVER['REQUEST_METHOD'] == 'GET'
      ? $_SERVER['QUERY_STRING']
      : file_get_contents('php://input');
error_log("zxidphp: qs($qs)");

if ($qs == "o=B") {   # As a pure WSP, we only support metadata request. No SSO here.
    $res = zxid_simple_cf($cf, -1, $qs, null, 0x1814);
    error_log("zxidphp: res($res) conf($conf)");
    switch (substr($res, 0, 1)) {
    case 'L': header($res); zxid_set_opt_cstr($cf, 4, "wsp: "); exit;  # Redirect (Location header)
    case '<': header('Content-type: text/xml'); echo $res; zxid_set_opt_cstr($cf, 4, "wsp: "); exit;  # Metadata or SOAP
    default:  zxid_set_opt_cstr($cf, 4, "wsp: "); die("Unhandled zxid_simple() res($res)");
    }
}

error_log("zxidphp: processing SOAP request ");

$ses = zxid_fetch_ses($cf, $attr['sesid']);

$nid = zxid_wsp_validate($cf, $ses, null, $qs);

error_log("working for nid($nid)");

if (zxid_az_cf_ses($cf, "Action=Call", $ses)) {
    echo zxid_wsp_decorate($cf, $ses, null,
			   "<barfoo>" +
			   "<lu:Status code=\"OK\" comment=\"Permit\"></lu:Status>" +
			   "<data>nid="+nid+"</data>" +
			   "</barfoo>");
} else {
    echo zxid_wsp_decorate($cf, $ses, null,
			   "<barfoo>" +
			   "<lu:Status code=\"Fail\" comment=\"Deny\"></lu:Status>" +
			   "<data>Deny: nid="+nid+"</data>" +
			   "</barfoo>");
}

zxid_set_opt_cstr($cf, 4, "wsp: ");

?>