Browse Source

Updated PHP/CppCMS session integration + Unit Test

master
Artyom Beilis 7 years ago
parent
commit
fa04d010d6
14 changed files with 229 additions and 53 deletions
  1. +14
    -0
      contrib/integration/session/php/build_ext.sh
  2. +4
    -31
      contrib/integration/session/php/cppcms.php
  3. +68
    -3
      contrib/integration/session/php/cppcms_api.c
  4. +10
    -2
      contrib/integration/session/php/cppcms_api.php
  5. +2
    -0
      contrib/integration/session/php/php_cppcms_api.h
  6. +1
    -0
      contrib/integration/session/php/test/html
  7. +3
    -0
      contrib/integration/session/php/test/index.html
  8. +2
    -0
      contrib/integration/session/php/test/run.sh
  9. +94
    -0
      contrib/integration/session/php/test/unit_test.php
  10. +4
    -3
      contrib/integration/session/reference/config.js
  11. +0
    -13
      contrib/integration/session/reference/index.html
  12. +3
    -1
      contrib/integration/session/swig/cppcms.i
  13. +24
    -0
      contrib/integration/session/wwwtest/index.html
  14. +0
    -0
      contrib/integration/session/wwwtest/tester.js

+ 14
- 0
contrib/integration/session/php/build_ext.sh View File

@@ -0,0 +1,14 @@
#!/bin/bash

rm -f cppcms_api.so

if [ "$CPPCMS_PATH" != "" ]
then
CPPCMS_INC=-I$CPPCMS_PATH/include
CPPCMS_LIB=-L$CPPCMS_PATH/lib
CPPCMS_LINK_FLAGS=-Wl,-rpath=$CPPCMS_PATH/lib
fi

PHP_FLAGS=`php-config5 --includes`

gcc -fPIC -shared -O2 -g $CPPCMS_INC $PHP_FLAGS $CPPCMS_LIB cppcms_api.c -o cppcms_api.so $CPPCMS_LINK_FLAGS -lcppcms -lbooster

+ 4
- 31
contrib/integration/session/php/cppcms.php View File

@@ -130,10 +130,13 @@ class CppCMS_Session extends CppCMS_SessioBase implements ArrayAccess {
if(isset($_COOKIE[$name])) {
$session_cookie_value = $_COOKIE[$name];
}
foreach($_COOKIE as $key => $value)
$this->api->add_cookie_name($key);
}
if($session_cookie_value == null)
$session_cookie_value = "";
$this->api->load($session_cookie_value);
$this->api->set_session_cookie($session_cookie_value);
$this->api->load();
$this->check();
}

@@ -165,33 +168,3 @@ class CppCMS_Session extends CppCMS_SessioBase implements ArrayAccess {

}


// Code Test
if (!count(debug_backtrace()))
{
$pool = CppCMS_SessionPool::from_config('cppcms-config.js');
$session = $pool->session();
$session->load();
$session['x']='yes';
$session['y']=13.4;
$session->set_exposed('y',true);
$session->save(false);
$cookies = $session->cookies();
$state='';
foreach($cookies as $c) {
echo $c,"\n";
if($c->name() == $session->get_session_cookie_name())
$state = $c->value();
}
$session = $pool->session();
$session->load($state);
$session->set_exposed('y',false);
echo implode(', ',$session->keys()),"\n";
$session->save(false);
$cookies = $session->cookies();
foreach($cookies as $c) {
echo $c,"\n";
if($c->name() == $session->get_session_cookie_name())
$state = $c->value();
}
}

+ 68
- 3
contrib/integration/session/php/cppcms_api.c View File

@@ -2239,7 +2239,7 @@ fail:
}


ZEND_NAMED_FUNCTION(_wrap_CppCMSAPISession_load) {
ZEND_NAMED_FUNCTION(_wrap_CppCMSAPISession_add_cookie_name) {
struct cppcms_capi_session *arg1 = (struct cppcms_capi_session *) 0 ;
char *arg2 = (char *) 0 ;
zval **args[2];
@@ -2252,7 +2252,7 @@ ZEND_NAMED_FUNCTION(_wrap_CppCMSAPISession_load) {
{
if(SWIG_ConvertPtr(*args[0], (void **) &arg1, SWIGTYPE_p_cppcms_capi_session, 0) < 0) {
SWIG_PHP_Error(E_ERROR, "Type error in argument 1 of CppCMSAPISession_load. Expected SWIGTYPE_p_cppcms_capi_session");
SWIG_PHP_Error(E_ERROR, "Type error in argument 1 of CppCMSAPISession_add_cookie_name. Expected SWIGTYPE_p_cppcms_capi_session");
}
}
if(!arg1) SWIG_PHP_Error(E_ERROR, "this pointer is NULL");
@@ -2266,7 +2266,70 @@ ZEND_NAMED_FUNCTION(_wrap_CppCMSAPISession_load) {
}
/*@SWIG@*/;
result = (int)cppcms_capi_session_load(arg1,(char const *)arg2);
result = (int)cppcms_capi_session_add_cookie_name(arg1,(char const *)arg2);
{
ZVAL_LONG(return_value,result);
}
return;
fail:
SWIG_FAIL();
}


ZEND_NAMED_FUNCTION(_wrap_CppCMSAPISession_set_session_cookie) {
struct cppcms_capi_session *arg1 = (struct cppcms_capi_session *) 0 ;
char *arg2 = (char *) 0 ;
zval **args[2];
int result;
SWIG_ResetError();
if(ZEND_NUM_ARGS() != 2 || zend_get_parameters_array_ex(2, args) != SUCCESS) {
WRONG_PARAM_COUNT;
}
{
if(SWIG_ConvertPtr(*args[0], (void **) &arg1, SWIGTYPE_p_cppcms_capi_session, 0) < 0) {
SWIG_PHP_Error(E_ERROR, "Type error in argument 1 of CppCMSAPISession_set_session_cookie. Expected SWIGTYPE_p_cppcms_capi_session");
}
}
if(!arg1) SWIG_PHP_Error(E_ERROR, "this pointer is NULL");
/*@SWIG:/usr/share/swig2.0/php/utils.i,62,CONVERT_STRING_IN@*/
if ((*args[1])->type==IS_NULL) {
arg2 = (char *) 0;
} else {
convert_to_string_ex(args[1]);
arg2 = (char *) Z_STRVAL_PP(args[1]);
}
/*@SWIG@*/;
result = (int)cppcms_capi_session_set_session_cookie(arg1,(char const *)arg2);
{
ZVAL_LONG(return_value,result);
}
return;
fail:
SWIG_FAIL();
}


ZEND_NAMED_FUNCTION(_wrap_CppCMSAPISession_load) {
struct cppcms_capi_session *arg1 = (struct cppcms_capi_session *) 0 ;
zval **args[1];
int result;
SWIG_ResetError();
if(ZEND_NUM_ARGS() != 1 || zend_get_parameters_array_ex(1, args) != SUCCESS) {
WRONG_PARAM_COUNT;
}
{
if(SWIG_ConvertPtr(*args[0], (void **) &arg1, SWIGTYPE_p_cppcms_capi_session, 0) < 0) {
SWIG_PHP_Error(E_ERROR, "Type error in argument 1 of CppCMSAPISession_load. Expected SWIGTYPE_p_cppcms_capi_session");
}
}
if(!arg1) SWIG_PHP_Error(E_ERROR, "this pointer is NULL");
result = (int)cppcms_capi_session_load(arg1);
{
ZVAL_LONG(return_value,result);
}
@@ -2762,6 +2825,8 @@ static zend_function_entry cppcms_api_functions[] = {
SWIG_ZEND_NAMED_FE(cppcmsapisession_set_on_server,_wrap_CppCMSAPISession_set_on_server,NULL)
SWIG_ZEND_NAMED_FE(cppcmsapisession_get_on_server,_wrap_CppCMSAPISession_get_on_server,NULL)
SWIG_ZEND_NAMED_FE(cppcmsapisession_get_session_cookie_name,_wrap_CppCMSAPISession_get_session_cookie_name,NULL)
SWIG_ZEND_NAMED_FE(cppcmsapisession_add_cookie_name,_wrap_CppCMSAPISession_add_cookie_name,NULL)
SWIG_ZEND_NAMED_FE(cppcmsapisession_set_session_cookie,_wrap_CppCMSAPISession_set_session_cookie,NULL)
SWIG_ZEND_NAMED_FE(cppcmsapisession_load,_wrap_CppCMSAPISession_load,NULL)
SWIG_ZEND_NAMED_FE(cppcmsapisession_save,_wrap_CppCMSAPISession_save,NULL)
SWIG_ZEND_NAMED_FE(cppcmsapisession_cookie_first,_wrap_CppCMSAPISession_cookie_first,NULL)


+ 10
- 2
contrib/integration/session/php/cppcms_api.php View File

@@ -230,8 +230,16 @@ class CppCMSAPISession {
return CppCMSAPISession_get_session_cookie_name($this->_cPtr);
}

function load($session_cookie_value) {
return CppCMSAPISession_load($this->_cPtr,$session_cookie_value);
function add_cookie_name($key) {
return CppCMSAPISession_add_cookie_name($this->_cPtr,$key);
}

function set_session_cookie($value) {
return CppCMSAPISession_set_session_cookie($this->_cPtr,$value);
}

function load() {
return CppCMSAPISession_load($this->_cPtr);
}

function save() {


+ 2
- 0
contrib/integration/session/php/php_cppcms_api.h View File

@@ -64,6 +64,8 @@ ZEND_NAMED_FUNCTION(_wrap_CppCMSAPISession_get_expiration);
ZEND_NAMED_FUNCTION(_wrap_CppCMSAPISession_set_on_server);
ZEND_NAMED_FUNCTION(_wrap_CppCMSAPISession_get_on_server);
ZEND_NAMED_FUNCTION(_wrap_CppCMSAPISession_get_session_cookie_name);
ZEND_NAMED_FUNCTION(_wrap_CppCMSAPISession_add_cookie_name);
ZEND_NAMED_FUNCTION(_wrap_CppCMSAPISession_set_session_cookie);
ZEND_NAMED_FUNCTION(_wrap_CppCMSAPISession_load);
ZEND_NAMED_FUNCTION(_wrap_CppCMSAPISession_save);
ZEND_NAMED_FUNCTION(_wrap_CppCMSAPISession_cookie_first);


+ 1
- 0
contrib/integration/session/php/test/html View File

@@ -0,0 +1 @@
../../wwwtest/

+ 3
- 0
contrib/integration/session/php/test/index.html View File

@@ -0,0 +1,3 @@
<html>
<head><meta http-equiv="refresh" content="0; url=/html/" /></head>
<body></body></html>

+ 2
- 0
contrib/integration/session/php/test/run.sh View File

@@ -0,0 +1,2 @@
#!/bin/bash
php5 -S 0.0.0.0:8000 -d enable_dl=On -d extension=../cppcms_api.so -t ./

+ 94
- 0
contrib/integration/session/php/test/unit_test.php View File

@@ -0,0 +1,94 @@
<?php

include_once('../cppcms.php');

$pool=CppCMS_SessionPool::from_config('../../reference/config.js');
$session=$pool->session();
$session->load();

$output="";

for($i=1;;$i++) {
$id = "_" . $i;
if(!isset($_GET["op" . $id]))
break;
$op = $_GET["op" . $id];
$key = isset($_GET["key" . $id]) ? $_GET["key" . $id] : "";
$value = isset($_GET["value" . $id]) ? $_GET["value" . $id] : "";
$result = "ok";
if($op=="is_set") {
$result = isset($session[$key]) ? "yes" : "no";
}
elseif($op == "erase") {
unset($session[$key]);
}
elseif($op == "clear") {
$session->clear();
}
elseif($op == "is_exposed") {
$result = $session->get_exposed($key) ? "yes" : "no";
}
elseif($op == "expose") {
$session->set_exposed($key,intval($value));
}
elseif($op == "get") {
$result = $session[$key];
}
elseif($op == "set") {
$session[$key]=$value;
}
elseif($op == "get_binary") {
$result = bin2hex($session->get($key));
}
elseif($op == "set_binary") {
$session->set($key,hex2bin($value));
}
elseif($op == "get_age") {
$result = strval($session->get_age());
}
elseif($op == "set_age") {
$session->set_age(intval($value));;
}
elseif($op == "default_age") {
$session->set_default_age();
}
elseif($op == "get_expiration") {
$result = strval($session->get_expiration());
}
elseif($op == "set_expiration") {
$session->set_expiration(intval($value));
}
elseif($op == "default_expiration") {
$session->set_default_expiration();
}
elseif($op == "get_on_server") {
$result = $session->get_on_server() ? "yes" : "no";
}
elseif($op == "set_on_server") {
$session->set_on_server(intval($value));
}
elseif($op == "reset_session") {
$session->reset_session();
}
elseif($op == "csrf_token") {
$result = "t=" . $session->get_csrf_token();
}
elseif($op == "keys") {
$result = "";
$keys = $session->keys();
foreach($keys as $p) {
if($result != "")
$result = $result . ",";
$result =$result . "[" . $p . "]";
}
}
else {
$result = "invalid op=" . $op;
}
$output = $output . strval($i) . ":" . $result . ";";
}

$session->save();
header("Content-Type: text/plain");

echo $output;

+ 4
- 3
contrib/integration/session/reference/config.js View File

@@ -1,7 +1,7 @@
{
"service" : {
"api" : "http",
"port" : 8080,
"port" : 8000,
"ip" : "0.0.0.0"
},
"http" : {
@@ -16,13 +16,14 @@
"hmac_key" : "3891bbf7f845fd4277008a63d72640fc13bb9a31"
},
"server" : {
"storage" : "memory"
"storage" : "files",
"shared" : true,
}

},
"security" : { "csrf" : {"enable" : true}},
"file_server" : {
"enable" : true,
"document_root" : "."
"document_root" : "../wwwtest"
},
}

+ 0
- 13
contrib/integration/session/reference/index.html View File

@@ -1,13 +0,0 @@
<!DOCTYPE html>
<html>
<head><title>Unit test</title></head>
<body>
<script src="/tester.js" ></script>
<button onclick="tester('/test')">Run Test</button><span id="wait" style="color:green"></span>
<table border='1' width='80%'>
<thead>
<tr><th width='200px'>Test</th><th width='100px'>Status</th><th>Comment</th></tr>
<tbody id='log'>
</tbody>
</table>
</body>

+ 3
- 1
contrib/integration/session/swig/cppcms.i View File

@@ -63,7 +63,9 @@ typedef struct cppcms_capi_cookie{} cppcms_capi_cookie;
int set_on_server(int is_on_server);
int get_on_server();
char const *get_session_cookie_name();
int load(char const *session_cookie_value);
int add_cookie_name(char const *key);
int set_session_cookie(char const *value);
int load();
int save();
%newobject cookie_first;
cppcms_capi_cookie *cookie_first();


+ 24
- 0
contrib/integration/session/wwwtest/index.html View File

@@ -0,0 +1,24 @@
<!DOCTYPE html>
<html>
<head><title>Unit test</title></head>
<body>
<script src="tester.js" ></script>
<script>
function get_url()
{
var sel = document.getElementById('url');
return sel.options[sel.selectedIndex].value;
}
</script>
<select id="url">
<option value="/test" selected="selected">CppCMS Reference</option>
<option value="/unit_test.php">PHP</option>
</select>
<button onclick="tester(get_url())">Run Test</button><span id="wait" style="color:green"></span>
<table border='1' width='80%'>
<thead>
<tr><th width='200px'>Test</th><th width='100px'>Status</th><th>Comment</th></tr>
<tbody id='log'>
</tbody>
</table>
</body>

contrib/integration/session/reference/tester.js → contrib/integration/session/wwwtest/tester.js View File


Loading…
Cancel
Save