Merge branch 'master' into privatekey2

This commit is contained in:
Mark Pemberton 2011-05-21 21:38:25 -04:00
commit b105867e75
13 changed files with 139 additions and 66 deletions

4
.gitignore vendored
View file

@ -3,4 +3,6 @@ dist/
build.properties build.properties
package.xml package.xml
semanticscuttle-dump.sql semanticscuttle-dump.sql
data/config.unittest.php data/config.php
data/config.testing.php
data/config.testing-tmp.php

1
data/.gitignore vendored
View file

@ -1 +0,0 @@
config.php

View file

@ -14,6 +14,7 @@ ChangeLog for SemantiScuttle
- Update php-gettext library to 1.0.10 - Update php-gettext library to 1.0.10
- api/posts/add respects the "replace" parameter now - api/posts/add respects the "replace" parameter now
- Fix privacy issue when fetching tags of several users - Fix privacy issue when fetching tags of several users
- Fix Google custom search XML
- Only URLs with an allowed protocol may be added to the database - Only URLs with an allowed protocol may be added to the database
- Support HTTPS connections when $root is not configured - Support HTTPS connections when $root is not configured
- SQL schema version table to ease future database upgrades - SQL schema version table to ease future database upgrades

View file

@ -94,7 +94,14 @@ you use.
Apache configuration Apache configuration
-------------------- --------------------
To make use of SSL client certificates, you need to deliver SemanticScuttle To make use of SSL client certificates, you need to deliver SemanticScuttle
via HTTPS. via HTTPS.
Note that you can equip several virtual hosts with SSL certificates
and keep them on the same, standard SSL port by using SNI -
`Server Name Indication`__.
.. _SNI: http://wiki.apache.org/httpd/NameBasedSSLVHostsWithSNI
__ SNI_
A basic virtual host configuration with SSL looks like this: A basic virtual host configuration with SSL looks like this:

View file

@ -130,7 +130,7 @@ class SemanticScuttle_Service_AuthUser extends SemanticScuttle_Service_User
//FIXME: caching? //FIXME: caching?
$name = $this->auth->getUsername(); $name = $this->auth->getUsername();
if (!$name) { if (!$name) {
return false; return parent::getCurrentUserId();
} }
return $this->getIdFromUser($name); return $this->getIdFromUser($name);
} }

View file

@ -455,8 +455,8 @@ class SemanticScuttle_Service_User extends SemanticScuttle_DbService
if ($ssls->hasValidCert()) { if ($ssls->hasValidCert()) {
$id = $ssls->getUserIdFromCert(); $id = $ssls->getUserIdFromCert();
if ($id !== false) { if ($id !== false) {
$this->setCurrentUserId($id); $this->setCurrentUserId($id, true);
return (int)$_SESSION[$this->getSessionKey()]; return $this->currentuserId;
} }
} }
return false; return false;

View file

@ -14,7 +14,6 @@
* @link http://sourceforge.net/projects/semanticscuttle * @link http://sourceforge.net/projects/semanticscuttle
*/ */
$_SERVER['HTTP_HOST'] = 'http://localhost/'; $_SERVER['HTTP_HOST'] = 'http://localhost/';
define('UNIT_TEST_MODE', true);
require_once dirname(__FILE__) . '/header.php'; require_once dirname(__FILE__) . '/header.php';
?> ?>

View file

@ -46,14 +46,21 @@ if (isset($_GET['unittestMode']) && $_GET['unittestMode'] == 1
die("Unittestmode is not allowed\n"); die("Unittestmode is not allowed\n");
} }
$unittestConfigFile = $datadir . '/config.unittest.php';
if (file_exists($unittestConfigFile)) {
require_once $unittestConfigFile;
}
define('HTTP_UNIT_TEST_MODE', true); define('HTTP_UNIT_TEST_MODE', true);
define('UNIT_TEST_MODE', true); define('UNIT_TEST_MODE', true);
} }
if (defined('UNIT_TEST_MODE')) { if (defined('UNIT_TEST_MODE')) {
//load configuration for unit tests
$testingConfigFile = $datadir . '/config.testing.php';
if (file_exists($testingConfigFile)) {
require_once $testingConfigFile;
}
//test-specific configuration file
$unittestConfigFile = $datadir . '/config.testing-tmp.php';
if (file_exists($unittestConfigFile)) {
require_once $unittestConfigFile;
}
//make local config vars global - needed for unit tests //make local config vars global - needed for unit tests
//run with phpunit //run with phpunit
foreach (get_defined_vars() as $var => $value) { foreach (get_defined_vars() as $var => $value) {
@ -107,7 +114,7 @@ T_bind_textdomain_codeset($domain, 'UTF-8');
T_textdomain($domain); T_textdomain($domain);
// 4 // Session // 4 // Session
if (!defined('UNIT_TEST_MODE') || defined('HTTP_UNIT_TEST_MODE')) { if (isset($_SERVER['REMOTE_ADDR'])) {
session_start(); session_start();
if ($GLOBALS['enableVoting']) { if ($GLOBALS['enableVoting']) {
if (isset($_SESSION['lastUrl'])) { if (isset($_SESSION['lastUrl'])) {

View file

@ -50,8 +50,9 @@ class TestBaseApi extends TestBase
$this->url = $GLOBALS['unittestUrl'] . $this->urlPart; $this->url = $GLOBALS['unittestUrl'] . $this->urlPart;
//clean up before test //clean up before test
if (file_exists($GLOBALS['datadir'] . '/config.unittest.php')) { $configFile = $GLOBALS['datadir'] . '/config.testing-tmp.php';
unlink($GLOBALS['datadir'] . '/config.unittest.php'); if (file_exists($configFile)) {
unlink($configFile);
} }
$this->us = SemanticScuttle_Service_Factory::get('User'); $this->us = SemanticScuttle_Service_Factory::get('User');
@ -71,19 +72,36 @@ class TestBaseApi extends TestBase
* @param string $urlSuffix Suffix for the URL * @param string $urlSuffix Suffix for the URL
* *
* @return HTTP_Request2 HTTP request object * @return HTTP_Request2 HTTP request object
*
* @uses $url
*/ */
protected function getRequest($urlSuffix = null) protected function getRequest($urlSuffix = null)
{ {
$req = new HTTP_Request2( $url = $this->getTestUrl($urlSuffix);
$this->url . $urlSuffix, $req = new HTTP_Request2($url, HTTP_Request2::METHOD_GET);
HTTP_Request2::METHOD_GET
);
return $req; return $req;
} }
/**
* Creates an URL from $this->url plus $urlSuffix and an appended
* unittestMode=1 parameter.
*
* @param string $urlSuffix Suffix for the URL
*
* @return string URL
*
* @uses $url
*/
protected function getTestUrl($urlSuffix = null)
{
$url = $this->url . $urlSuffix;
if (strpos($urlSuffix, '?') !== false) {
$url .= '&unittestMode=1';
} else {
$url .= '?unittestMode=1';
}
return $url;
}
/** /**
* Completes an URL that's missing the protocol. * Completes an URL that's missing the protocol.
@ -165,7 +183,7 @@ class TestBaseApi extends TestBase
$uid = $this->addUser($username, $password); $uid = $this->addUser($username, $password);
$req = new HTTP_Request2( $req = new HTTP_Request2(
$GLOBALS['unittestUrl'] . '/login.php', $GLOBALS['unittestUrl'] . '/login.php?unittestMode=1',
HTTP_Request2::METHOD_POST HTTP_Request2::METHOD_POST
); );
$cookies = $req->setCookieJar()->getCookieJar(); $cookies = $req->setCookieJar()->getCookieJar();
@ -230,7 +248,7 @@ class TestBaseApi extends TestBase
$this->assertInternalType( $this->assertInternalType(
'integer', 'integer',
file_put_contents($GLOBALS['datadir'] . '/config.unittest.php', $str), file_put_contents($GLOBALS['datadir'] . '/config.testing-tmp.php', $str),
'Writing config.unittest.php failed' 'Writing config.unittest.php failed'
); );
} }

View file

@ -22,7 +22,7 @@ $_SERVER['HTTP_HOST'] = 'http://localhost/';
define('UNIT_TEST_MODE', true); define('UNIT_TEST_MODE', true);
if ('@data_dir@' == '@' . 'data_dir@') { if ('@data_dir@' == '@' . 'data_dir@') {
//non pear-install //non pear-installation (i.e. git checkout)
require_once dirname(__FILE__) . '/../src/SemanticScuttle/header.php'; require_once dirname(__FILE__) . '/../src/SemanticScuttle/header.php';
} else { } else {
//pear installation; files are in include path //pear installation; files are in include path
@ -35,7 +35,7 @@ if ($GLOBALS['debugMode'] == true
&& $GLOBALS['dbtype'] == 'mysql4' && $GLOBALS['dbtype'] == 'mysql4'
) { ) {
echo "\n" echo "\n"
. '!!! The combination of debugMode and dbtype==mysql4' . '!! The combination of debugMode and dbtype==mysql4'
. ' will wreck some tests' . "\n\n"; . ' will wreck some tests' . "\n\n";
} }
?> ?>

View file

@ -41,7 +41,7 @@ class www_SearchTest extends TestBaseApi
'No bookmark found', false 'No bookmark found', false
); );
$res = $this->getRequest('/all/baz bat')->send(); $res = $this->getRequest('/all/baz%20bat')->send();
$this->assertSelectCount( $this->assertSelectCount(
'.xfolkentry', false, $res->getBody(), '.xfolkentry', false, $res->getBody(),
'Bookmarks found', false 'Bookmarks found', false

View file

@ -1,27 +1,43 @@
<?php <?php
/**
* Google custom search context information for SemanticScuttle.
* Tells Google meta data about the search.
*
* SemanticScuttle - your social bookmark manager.
*
* PHP version 5.
*
* @category Bookmarking
* @package SemanticScuttle
* @author Benjamin Huynh-Kim-Bang <mensonge@users.sourceforge.net>
* @author Christian Weiske <cweiske@cweiske.de>
* @author Eric Dane <ericdane@users.sourceforge.net>
* @license GPL http://www.gnu.org/licenses/gpl.html
* @link http://sourceforge.net/projects/semanticscuttle
* @link http://www.google.com/cse/docs/cref.html
*/
require_once '../www-header.php'; require_once '../www-header.php';
if($GLOBALS['enableGoogleCustomSearch'] == false) { if ($GLOBALS['enableGoogleCustomSearch'] == false) {
echo "Google Custom Search disabled. You can enable it into the config.php file."; header('HTTP/1.0 403 Forbidden');
die; header('Content-Type: text/plain; charset=utf-8');
echo "Google Custom Search disabled."
. " You can enable it into the config.php file.\n";
die();
} }
?> ?>
<?xml version="1.0" encoding="UTF-8" ?>
<!--?xml version="1.0" encoding="UTF-8" ?-->
<GoogleCustomizations> <GoogleCustomizations>
<CustomSearchEngine> <CustomSearchEngine>
<Title><?php echo $GLOBALS['sitename'] ?></Title> <Title><?php echo htmlspecialchars($GLOBALS['sitename']) ?></Title>
<Description><?php echo filter($GLOBALS['welcomeMessage']) ?></Description> <Description><?php echo filter($GLOBALS['welcomeMessage']) ?></Description>
<Context> <Context>
<BackgroundLabels> <BackgroundLabels>
<Label name="include" mode="FILTER" /> <Label name="include" mode="FILTER" />
</BackgroundLabels> </BackgroundLabels>
</Context> </Context>
<LookAndFeel nonprofit="false"> <LookAndFeel nonprofit="false">
</LookAndFeel> </LookAndFeel>
</CustomSearchEngine> </CustomSearchEngine>
<Include type="Annotations" href="<?php echo ROOT;?>api/export_gcs.php?xml=1" />
<Include type="Annotations" href="<?php echo ROOT;?>api/export_gcs.php?xml=1" />
</GoogleCustomizations> </GoogleCustomizations>

View file

@ -1,17 +1,41 @@
<?php require_once '../www-header.php'; <?php
/**
* Google custom search for SemanticScuttle.
* This is a "linked CSE", a linked custom search engine.
* See the linked docs for more info.
*
* SemanticScuttle - your social bookmark manager.
*
* PHP version 5.
*
* @category Bookmarking
* @package SemanticScuttle
* @author Benjamin Huynh-Kim-Bang <mensonge@users.sourceforge.net>
* @author Christian Weiske <cweiske@cweiske.de>
* @author Eric Dane <ericdane@users.sourceforge.net>
* @license GPL http://www.gnu.org/licenses/gpl.html
* @link http://sourceforge.net/projects/semanticscuttle
* @link http://www.google.com/cse/docs/cref.html
*/
require_once '../www-header.php';
if($GLOBALS['enableGoogleCustomSearch']==false) { if ($GLOBALS['enableGoogleCustomSearch'] == false) {
echo "Google Custom Search disabled. You can enable it into the config.php file."; header('HTTP/1.0 403 Forbidden');
die; header('Content-Type: text/plain; charset=utf-8');
echo "Google Custom Search disabled."
. " You can enable it into the config.php file.\n";
die();
} }
?> ?>
<?xml version="1.0" encoding="utf-8"?>
<html> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<title><?php echo $GLOBALS['sitename'] ?></title> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<body> <head>
<center> <title><?php echo htmlspecialchars($GLOBALS['sitename']); ?></title>
<br /> </head>
<body>
<div style="text-align: center; padding-top: 2em">
<!-- Google CSE Search Box Begins --> <!-- Google CSE Search Box Begins -->
<form id="cref" action="http://www.google.com/cse"> <form id="cref" action="http://www.google.com/cse">
@ -27,21 +51,21 @@ if($GLOBALS['enableGoogleCustomSearch']==false) {
<small><a href="<?php echo ROOT?>"><?php echo T_('Come back to ').$GLOBALS['sitename'] ?>...</a></small> <small><a href="<?php echo ROOT?>"><?php echo T_('Come back to ').$GLOBALS['sitename'] ?>...</a></small>
<?php if($userservice->isLoggedOn() && $currentUser->isAdmin()){ <?php if ($userservice->isLoggedOn() && $currentUser->isAdmin()) {
echo '<p><small>'; echo '<p><small>';
echo T_('Admin tips: '); echo T_('Admin tips: ');
echo T_('To refresh manually Google Custom Search Engine, goes to: '); echo T_('To refresh manually Google Custom Search Engine, goes to: ');
echo '<a href="http://www.google.com/coop/cse/cref?cref=' echo '<a href="http://www.google.com/coop/cse/cref?cref='
. ROOT . 'gsearch/context.php">http://www.google.com/coop/cse/cref</a>' . ROOT . 'gsearch/context.php">http://www.google.com/coop/cse/cref</a>'
. '<br/>'; . '<br/>';
echo T_('If no result appears, check that all the urls are valid in the admin section.'); echo T_('If no result appears, check that all the urls are valid in the admin section.');
echo '</small></p>'; echo '</small></p>';
} }
?> ?>
</center> </div>
</body> </body>
</html> </html>