new way to generate database fromseparate schema.sql
This commit is contained in:
18
ChangeLog
18
ChangeLog
@@ -1,3 +1,21 @@
|
||||
2015-11-07 10:47 marc
|
||||
|
||||
* bootstrap.sh: there is no qt4-default
|
||||
|
||||
2015-11-07 09:23 marc
|
||||
|
||||
* bootstrap.sh: there is no qt4-default
|
||||
|
||||
2015-11-06 15:39 marc
|
||||
|
||||
* html/makefile.am, html/messagetable.php, html/messagetable.sql,
|
||||
html/usertable.php, html/usertable.sql: split sql schema from php
|
||||
|
||||
2015-11-05 16:01 marc
|
||||
|
||||
* ChangeLog, html/messagetable.php, html/usertable.php:
|
||||
documentation added to tables
|
||||
|
||||
2015-11-05 13:24 marc
|
||||
|
||||
* ChangeLog, bootstrap.sh,
|
||||
|
@@ -13,6 +13,7 @@ m4_define(x_least, m4_ifdef([x_least_diff], mrw_esyscmd_s([
|
||||
for path in . .. ../..; do
|
||||
if svn info $path 2>&1 > /dev/null; then
|
||||
SVN_REVISION=$(LANG= svn info $path | sed -n 's/Last Changed Rev: //p')
|
||||
if test -z "${SVN_REVISION}"; then SVN_REVISION=0; fi
|
||||
break;
|
||||
fi
|
||||
done
|
||||
@@ -22,6 +23,7 @@ m4_define(x_least, m4_ifdef([x_least_diff], mrw_esyscmd_s([
|
||||
for path in . .. ../..; do
|
||||
if svn info $path 2>&1 > /dev/null; then
|
||||
SVN_REVISION=$(LANG= svn info $path | sed -n 's/Last Changed Rev: //p')
|
||||
if test -z "${SVN_REVISION}"; then SVN_REVISION=0; fi
|
||||
break;
|
||||
fi
|
||||
done
|
||||
@@ -36,6 +38,7 @@ m4_define(x_minor_diff, mrw_esyscmd_s([
|
||||
for path in . .. ../..; do
|
||||
if svn info $path 2>&1 > /dev/null; then
|
||||
SVN_REVISION=$(LANG= svn info $path | sed -n 's/Last Changed Rev: //p')
|
||||
if test -z "${SVN_REVISION}"; then SVN_REVISION=0; fi
|
||||
break;
|
||||
fi;
|
||||
done
|
||||
@@ -342,7 +345,7 @@ EOF
|
||||
|
||||
# use this in configure.ac to support debian packages
|
||||
AC_DEFUN([AX_USE_DEBIAN_PACKAGING], [
|
||||
README_DEB=$(tail -n +3 README | sed -e 's/^$/./g' -e 's/^/ /g')
|
||||
README_DEB=$(tail -n +3 README | sed -e 's/^ *$/./g' -e 's/^/ /g')
|
||||
AC_SUBST(README_DEB)
|
||||
_AM_SUBST_NOTMAKE([README_DEB])
|
||||
AC_CONFIG_FILES([debian/changelog debian/control])
|
||||
|
62
bootstrap.sh
62
bootstrap.sh
@@ -111,6 +111,7 @@ GENERATED FILES
|
||||
* build-in-docker.sh - script to build the project encapsulated in a docker container
|
||||
* build-resource-file.sh - build resource.qrc file from a resource directory
|
||||
* mac-create-app-bundle.sh - script to create apple mac os-x app-bundle
|
||||
* test/runtests.sh - template file to run test scripts, i.e. docker based
|
||||
* AUTHORS - replace your name in AUTHORS before first run
|
||||
* NEWS - empty file add your project's news
|
||||
* README - add project description (first line is header, followed by an empty line)
|
||||
@@ -120,7 +121,7 @@ GENERATED FILES
|
||||
* src/version.hxx - if you enabled AX_USE_CXX
|
||||
* src/version.cxx - if you enabled AX_USE_CXX
|
||||
* html/makefile.am - if you enabled AX_BUILD_HTML
|
||||
* scripts/makefile.in - if you enabled AX_USE_SCRIPTS
|
||||
* scripts/makefile.am - if you enabled AX_USE_SCRIPTS
|
||||
* doc/makefile.am - if you enabled AX_USE_DOXYGEN
|
||||
* doc/doxyfile.in - if you enabled AX_USE_DOXYGEN
|
||||
* test/makefile.am - if you enabled AX_BUILD_TEST or AX_USE_CPPUNIT
|
||||
@@ -196,7 +197,7 @@ FILES
|
||||
<ou can access the readme by calling
|
||||
${DEFAULT_PROJECT_NAME}::description().
|
||||
* ChangeLog: Your changelog is automatically maintained from
|
||||
subversion history, using svn2cl | subversion-tools. You don't need to
|
||||
subversion history, using svn2cl. You don't need to
|
||||
care about.
|
||||
* configure.ac: This file becomes very short and simple. You provide
|
||||
the project name, the major and minor version. The
|
||||
@@ -332,7 +333,7 @@ to() {
|
||||
case "$1" in
|
||||
(--condition) shift # test for a tag, abort if not set
|
||||
if ! testtag "$1"; then
|
||||
return
|
||||
return 0
|
||||
fi;;
|
||||
(--mode) shift # test for a tag, abort if not set
|
||||
mode="$1";;
|
||||
@@ -373,7 +374,14 @@ copy() {
|
||||
# file already exists and must not be rebuilt
|
||||
return
|
||||
fi
|
||||
run cp "${0%/*}/$1" "$1"
|
||||
local source="${0%/*}/$1"
|
||||
if ! test -r "${source}"; then
|
||||
source="../${source}"
|
||||
if ! test -r "${source}"; then
|
||||
source="${0%/*}/$1"
|
||||
fi
|
||||
fi
|
||||
run cp "${source}" "$1"
|
||||
if test $exists -eq 0; then
|
||||
run svn add "$1"
|
||||
run svn propset svn:keywords "Id" "$1"
|
||||
@@ -402,6 +410,12 @@ doxyadd() {
|
||||
fi
|
||||
}
|
||||
|
||||
# Check if we are in subversion root, if so, create trunk, branches, tags:
|
||||
if test "$(LANG= svn info | sed -n 's,Relative URL: *,,p')" = "^/"; then
|
||||
svn mkdir trunk branches tags
|
||||
cd trunk
|
||||
fi
|
||||
|
||||
# Initialize the environment:
|
||||
copy ${MY_NAME}
|
||||
copy ax_init_standard_project.m4
|
||||
@@ -412,6 +426,7 @@ copy resolve-rpmbuilddeps.sh
|
||||
copy build-in-docker.sh
|
||||
copy build-resource-file.sh
|
||||
copy mac-create-app-bundle.sh
|
||||
if testtag AX_BUILD_TEST; then copy test/runtests.sh; fi
|
||||
AUTHOR=$(gpg -K | sed -n 's,uid *,,p' | sort | head -1)
|
||||
if test -z "${AUTHOR}"; then
|
||||
AUTHOR="FIRSTNAME LASTNAME (URL) <EMAIL>"
|
||||
@@ -427,8 +442,7 @@ ${DEFAULT_PROJECT_NAME}
|
||||
|
||||
add description for ${DEFAULT_PROJECT_NAME}
|
||||
EOF
|
||||
to configure.ac <<EOF && \
|
||||
( notice "please edit configure.ac, then rerun $0"; exit 0 )
|
||||
to configure.ac <<EOF && notice "please edit configure.ac, then rerun $0" && exit 0
|
||||
${HEADER}m4_define(x_package_name, ${DEFAULT_PROJECT_NAME}) # project's name
|
||||
m4_define(x_major, 0) # project's major version
|
||||
m4_define(x_minor, 0) # project's minor version
|
||||
@@ -700,7 +714,11 @@ namespace NAMESPACE {
|
||||
const std::string IDENT("\$Id: " PACKAGE_STRING);
|
||||
}
|
||||
EOF
|
||||
echo "${HEADER}MAINTAINERCLEANFILES = makefile.in" | to --condition AX_USE_SCRIPTS scripts/makefile.am
|
||||
to --condition AX_USE_SCRIPTS scripts/makefile.am <<EOF
|
||||
${HEADER}dist_bin_SCRIPTS =
|
||||
|
||||
MAINTAINERCLEANFILES = makefile.in
|
||||
EOF
|
||||
echo "${HEADER}MAINTAINERCLEANFILES = makefile.in" | to --condition AX_USE_DOXYGEN doc/makefile.am
|
||||
to --condition 'AX_BUILD_TEST|AX_USE_CPPUNIT' test/makefile.am <<EOF
|
||||
${HEADER}$(if testtag AX_USE_CXX; then
|
||||
@@ -819,12 +837,12 @@ if testtag AX_USE_DEBIAN_PACKAGING; then
|
||||
|
||||
-- @AUTHOR@ @BUILD_DATE@
|
||||
EOF
|
||||
BUILD_DEPENDS="debhelper, subversion, pkg-config, automake, libtool, autotools-dev, lsb-release $(if testtag AX_USE_DOXYGEN; then echo -n ", doxygen, graphviz, mscgen"; fi; if testtag AX_USE_CPPUNIT; then echo -n ", libcppunit-dev"; fi; if testtag AX_CXX_QT || testtag AX_CHECK_QT AX_REQUIRE_QT; then echo -n ", qt5-default | libqt4-core | qt5-qmake | qt4-qmake, qtbase5-dev | libqt4-dev, qtbase5-dev-tools | qt4-dev-tools, qttools5-dev-tools | qt4-dev-tools, qttools5-dev-tools | qt4-dev-tools"; fi)"
|
||||
BUILD_DEPENDS="debhelper, subversion, pkg-config, automake, libtool, autotools-dev, lsb-release $(if testtag AX_USE_DOXYGEN; then echo -n ", doxygen, graphviz, mscgen"; fi; if testtag AX_USE_CPPUNIT; then echo -n ", libcppunit-dev"; fi; if testtag AX_CXX_QT || testtag AX_CHECK_QT AX_REQUIRE_QT; then echo -n ", qt5-default | libqt4-core, qt5-qmake | qt4-qmake, qtbase5-dev | libqt4-dev, qtbase5-dev-tools | qt4-dev-tools, qttools5-dev-tools | qt4-dev-tools, qttools5-dev-tools | qt4-dev-tools"; fi)"
|
||||
to debian/control.in <<EOF
|
||||
Source: @PACKAGE_NAME@
|
||||
Priority: extra
|
||||
Maintainer: @AUTHOR@
|
||||
Build-Depends: ${BUILD-DEPENDS}
|
||||
Build-Depends: ${BUILD_DEPENDS}
|
||||
|
||||
Package: @PACKAGE_NAME@
|
||||
Section: $(if testtag AX_USE_LIBTOOL; then echo "libs"; fi)
|
||||
@@ -838,7 +856,7 @@ $( if testtag AX_USE_LIBTOOL; then
|
||||
Package: @PACKAGE_NAME@-dev
|
||||
Section: libdevel
|
||||
Architecture: any
|
||||
Depends: @PACKAGE_NAME@ (= \${binary:Version}), ${BUILD-DEPENDS}
|
||||
Depends: @PACKAGE_NAME@ (= \${binary:Version}), ${BUILD_DEPENDS}
|
||||
Description: @DESCRIPTION@ - Development Package
|
||||
@README_DEB@
|
||||
EOF2
|
||||
@@ -983,8 +1001,28 @@ fi)
|
||||
|
||||
EOF
|
||||
SUBDIRS=""
|
||||
if testtag AX_USE_CXX; then
|
||||
SUBDIRS="${SUBDIRS} src"
|
||||
fi
|
||||
if testtag AX_BUILD_TEST AX_USE_CPPUNIT; then
|
||||
SUBDIRS="${SUBDIRS} test"
|
||||
fi
|
||||
if testtag AX_USE_SCRIPTS; then
|
||||
SUBDIRS="${SUBDIRS} scripts"
|
||||
fi
|
||||
if testtag AX_USE_DOXYGEN; then
|
||||
SUBDIRS="${SUBDIRS} doc"
|
||||
fi
|
||||
if testtag AX_BUILD_EXAMPLES; then
|
||||
SUBDIRS="${SUBDIRS} examples"
|
||||
fi
|
||||
if testtag AX_BUILD_HTML; then
|
||||
SUBDIRS="${SUBDIRS} html"
|
||||
fi
|
||||
for d in src test scripts doc examples html; do
|
||||
test -d $d && SUBDIRS="${SUBDIRS} $d"
|
||||
if test -d "$d" -a "${SUBDIRS//$d/}" = "${SUBDIRS}"; then
|
||||
SUBDIRS="${SUBDIRS} $d"
|
||||
fi
|
||||
done
|
||||
to makefile.am<<EOF
|
||||
${HEADER}SUBDIRS =${SUBDIRS}
|
||||
@@ -1014,7 +1052,7 @@ if test -f makefile; then
|
||||
fi
|
||||
|
||||
#### Bootstrap Before Configure ####
|
||||
run --no-check svn2cl | subversion-tools
|
||||
run --no-check svn2cl
|
||||
run aclocal
|
||||
if testtag AX_USE_LIBTOOL; then run libtoolize --force; fi
|
||||
run automake -a
|
||||
|
@@ -23,6 +23,7 @@ AX_USE_DEBIAN_PACKAGING
|
||||
AX_BUILD_HTML
|
||||
AX_USE_RPM_PACKAGING
|
||||
#AX_USE_CPPUNIT
|
||||
AX_BUILD_TEST
|
||||
#AX_BUILD_EXAMPLES
|
||||
|
||||
# qt features, uncomment, what you need:
|
||||
|
@@ -1,5 +1,5 @@
|
||||
<?xml version='1.0' encoding='utf-8'?>
|
||||
<manifest android:hardwareAccelerated="true" android:versionCode="337" android:versionName="0.3.37" package="ch.safechat" xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<manifest android:hardwareAccelerated="true" android:versionCode="344" android:versionName="0.3.44" package="ch.safechat" xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<supports-screens android:anyDensity="true" android:largeScreens="true" android:normalScreens="true" android:resizeable="true" android:smallScreens="true" android:xlargeScreens="true" />
|
||||
<uses-permission android:name="android.permission.INTERNET" />
|
||||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
||||
|
@@ -1,5 +1,5 @@
|
||||
<?xml version='1.0' encoding='utf-8'?>
|
||||
<widget id="ch.safechat" version="0.3.37" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
|
||||
<widget id="ch.safechat" version="0.3.44" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
|
||||
<preference name="loglevel" value="DEBUG" />
|
||||
<feature name="Whitelist">
|
||||
<param name="android-package" value="org.apache.cordova.whitelist.WhitelistPlugin" />
|
||||
|
@@ -23,8 +23,8 @@
|
||||
// 1 2 3 4 5 6 7 8
|
||||
// 45678901234567890123456789012345678901234567890123456789012345678901234567890
|
||||
|
||||
require_once("usertable.php");
|
||||
try {
|
||||
require_once("opendb.php");
|
||||
$user = $db->real_escape_string($_REQUEST['user']);
|
||||
$q = $db->query("select * from user where name='$user';");
|
||||
if ($q->num_rows==0) {
|
||||
|
@@ -28,11 +28,12 @@
|
||||
*/
|
||||
// 1 2 3 4 5 6 7 8
|
||||
// 45678901234567890123456789012345678901234567890123456789012345678901234567890
|
||||
require_once("messagetable.php");
|
||||
try {
|
||||
require_once("opendb.php");
|
||||
$start = $db->real_escape_string($_REQUEST['start']);
|
||||
$q = $db->query("select id, UNIX_TIMESTAMP(time) as time, user, msg from message where id>$start;");
|
||||
echo json_encode($q->fetch_all(MYSQLI_ASSOC));
|
||||
if ($q) echo json_encode($q->fetch_all(MYSQLI_ASSOC));
|
||||
else echo json_encode(null);
|
||||
} catch (Exception $e) {
|
||||
echo json_encode(null);
|
||||
}
|
||||
|
@@ -25,7 +25,7 @@
|
||||
// 1 2 3 4 5 6 7 8
|
||||
// 45678901234567890123456789012345678901234567890123456789012345678901234567890
|
||||
try {
|
||||
require_once("usertable.php");
|
||||
require_once("opendb.php");
|
||||
$user = $db->real_escape_string($_REQUEST['user']);
|
||||
$pubkey = $db->real_escape_string($_REQUEST['pubkey']);
|
||||
if ($user=="safechat") error("username safechat is reserved for server");
|
||||
|
@@ -1,32 +0,0 @@
|
||||
<?php
|
||||
/*! @file
|
||||
|
||||
@id $Id$
|
||||
|
||||
@see @ref messagetable for the database schema
|
||||
|
||||
@page database Database
|
||||
|
||||
@section messagetable Message Table
|
||||
|
||||
<table>
|
||||
<caption>Table: message</caption>
|
||||
<tr><th>Colum Name</th><th>SQL Type</th><th>Description</th></tr>
|
||||
<tr><td>id</td><td>int, primary key</td><td>Incrementing message id starting at 1.</td></tr>
|
||||
<tr><td>time</td><td>timestamp</td><td>Time when message has been stored in the database.</td></tr>
|
||||
<tr><td>user</td><td>varchar(50), references \ref usertable "user (name)"</td><td>The sender's user name (pseudonym).</td></tr>
|
||||
<tr><td>msg</td><td>longtext</td><td>The encryped and armored message text.</td></tr>
|
||||
</table>
|
||||
*/
|
||||
// 1 2 3 4 5 6 7 8
|
||||
// 45678901234567890123456789012345678901234567890123456789012345678901234567890
|
||||
|
||||
require_once("opendb.php");
|
||||
try {
|
||||
$db->query(file_get_contents("messagetable.sql"));
|
||||
$db->query('set global max_allowed_packet=1000000000');
|
||||
$db->query('set global net_buffer_length=1000000');
|
||||
} catch (Exception $e) {
|
||||
error('database error on server');
|
||||
}
|
||||
?>
|
@@ -1,20 +0,0 @@
|
||||
create table if not exists
|
||||
'message' (
|
||||
'id'
|
||||
int primary key not null auto_increment
|
||||
comment "id of the message, it is used in the client to check if a message has already been downloaded or not",
|
||||
'time'
|
||||
timestamp default current_timestamp
|
||||
comment "time when the message has been stored on the server",
|
||||
'user'
|
||||
varchar(50) not null
|
||||
comment "name of the user that sent the message",
|
||||
'msg'
|
||||
longtext not null
|
||||
comment "message content, must be armored gnupg encrypted format",
|
||||
foreign key ('user')
|
||||
references 'user'('name')
|
||||
on delete cascade
|
||||
on update cascade
|
||||
) character set utf8 engine=innodb
|
||||
comment="table to hold all messages for later download by the receiver";
|
48
html/opendb.php
Normal file
48
html/opendb.php
Normal file
@@ -0,0 +1,48 @@
|
||||
<?php
|
||||
/*! @file
|
||||
|
||||
@id $Id$
|
||||
|
||||
@see @ref usertable for the database schema
|
||||
|
||||
@page database Database
|
||||
|
||||
@tableofcontents
|
||||
|
||||
@section usertable User Table
|
||||
|
||||
<table>
|
||||
<caption>Table: user</caption>
|
||||
<tr><th>Colum Name</th><th>SQL Type</th><th>Description</th></tr>
|
||||
<tr><td>name</td><td>varchar(50)</td><td>The user's name (pseudonym).</td></tr>
|
||||
<tr><td>pubkey</td><td>text</td><td>The user's public key.</td></tr>
|
||||
</table>
|
||||
|
||||
*/
|
||||
// 1 2 3 4 5 6 7 8
|
||||
// 45678901234567890123456789012345678901234567890123456789012345678901234567890
|
||||
|
||||
mysqli_report(MYSQLI_REPORT_STRICT);
|
||||
require_once("functions.php");
|
||||
try {
|
||||
if (!isset($pgp)) {
|
||||
$pgp = gnupg_init();
|
||||
if (!$pgp) error("pgp on server failed");
|
||||
}
|
||||
} catch (Exception $e) {
|
||||
error('cannot start pgp on server');
|
||||
}
|
||||
try {
|
||||
if (!isset($db)) {
|
||||
$db = new mysqli("mysql", "root", $_SERVER["MYSQL_ENV_MYSQL_ROOT_PASSWORD"]);
|
||||
if (!$db) error("database connection failed on server");
|
||||
$db->query("create database if not exists safechat;");
|
||||
$db->select_db("safechat");
|
||||
if (!$db) error("cannot create database for safechat");
|
||||
$db->query(file_get_contents("schema.sql"));
|
||||
if (!$db) error("cannot create database tables");
|
||||
}
|
||||
} catch (Exception $e) {
|
||||
error('database error on server');
|
||||
}
|
||||
?>
|
@@ -29,11 +29,11 @@ try {
|
||||
require_once("usertable.php");
|
||||
$user = $db->real_escape_string($_REQUEST['user']);
|
||||
$q = $db->query("select pubkey from user where name='$user';");
|
||||
if ($q->num_rows!=1 && $user=="safechat") {
|
||||
require_once("optionstable.php");
|
||||
createSafechatUser();
|
||||
$q = $db->query("select pubkey from user where name='$user';");
|
||||
}
|
||||
/* if ($q->num_rows!=1 && $user=="safechat") { */
|
||||
/* require_once("optionstable.php"); */
|
||||
/* createSafechatUser(); */
|
||||
/* $q = $db->query("select pubkey from user where name='$user';"); */
|
||||
/* } */
|
||||
if ($q->num_rows==1) {
|
||||
echo json_encode($q->fetch_row()[0]);
|
||||
} else {
|
||||
|
@@ -56,7 +56,7 @@ function error(data, stay) {
|
||||
$("#status").html(data);
|
||||
console.log("error: "+data);
|
||||
} else {
|
||||
$("#status").html('error');
|
||||
$("#status").html('unknown error: '+JSON.stringify(data));
|
||||
console.log("error: "+JSON.stringify(data));
|
||||
}
|
||||
} else {
|
||||
@@ -686,13 +686,12 @@ function start() {
|
||||
}
|
||||
|
||||
/// On Load, Call @ref start
|
||||
$(
|
||||
window.onbeforeunload = function() {
|
||||
return "Are you sure you want to navigate away?";
|
||||
}
|
||||
window.onunload = function () { // you probably don't want to leave now...
|
||||
alert('You are trying to leave.');
|
||||
return false;
|
||||
}
|
||||
start();
|
||||
);
|
||||
$(window.onbeforeunload = function() {
|
||||
return "Are you sure you want to navigate away?";
|
||||
});
|
||||
$(window.onunload = function() { // you probably don't want to leave now...
|
||||
alert('You are trying to leave.');
|
||||
return false;
|
||||
});
|
||||
$(start);
|
||||
|
||||
|
30
html/schema.sql
Normal file
30
html/schema.sql
Normal file
@@ -0,0 +1,30 @@
|
||||
CREATE TABLE IF NOT EXISTS `user` (
|
||||
`name` varchar(50) NOT NULL UNIQUE COMMENT 'unique name of the user',
|
||||
`pubkey` text NOT NULL COMMENT 'armored gnupg public key of the user',
|
||||
PRIMARY KEY (`name`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='list of all registered users and their public keys';
|
||||
create table if not exists `message` (
|
||||
`id`
|
||||
int not null auto_increment
|
||||
comment "id of the message, it is used in the client to check if a message has already been downloaded or not",
|
||||
`time`
|
||||
timestamp default current_timestamp
|
||||
comment "time when the message has been stored on the server",
|
||||
`user`
|
||||
varchar(50) not null
|
||||
comment "name of the user that sent the message",
|
||||
`msg`
|
||||
longtext not null
|
||||
comment "message content, must be armored gnupg encrypted format",
|
||||
primary key (id),
|
||||
foreign key (user)
|
||||
references user(name)
|
||||
on delete cascade
|
||||
on update cascade
|
||||
) character set utf8 engine=innodb
|
||||
comment="table to hold all messages for later download by the receiver";
|
||||
create table if not exists options (
|
||||
name varchar(50) not null unique comment "option name",
|
||||
value text not null comment "option value",
|
||||
primary key (name)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8 comment="table for system settings";
|
@@ -26,7 +26,7 @@
|
||||
// 1 2 3 4 5 6 7 8
|
||||
// 45678901234567890123456789012345678901234567890123456789012345678901234567890
|
||||
try {
|
||||
require_once("usertable.php");
|
||||
require_once("opendb.php");
|
||||
$user = $db->real_escape_string($_REQUEST['user']);
|
||||
$msg = $db->real_escape_string($_REQUEST['msg']);
|
||||
if (strlen($_REQUEST['msg'])>100000) error("message is too long");
|
||||
@@ -34,7 +34,6 @@ try {
|
||||
if (!$q || $q->num_rows!=1) error("user not found on server");
|
||||
$pubkey = gnupg_import($pgp, $q->fetch_row()[0]);
|
||||
if (!$pubkey) error("wrong identity");
|
||||
require_once("messagetable.php");
|
||||
$q = $db->query("insert into message (user, msg) values ('$user', '$msg');");
|
||||
if (!$q) {
|
||||
error_log("Error storing message: ".$db->error);
|
||||
|
@@ -1,31 +0,0 @@
|
||||
<?php
|
||||
/*! @file
|
||||
|
||||
@id $Id$
|
||||
|
||||
@see @ref usertable for the database schema
|
||||
|
||||
@page database Database
|
||||
|
||||
@tableofcontents
|
||||
|
||||
@section usertable User Table
|
||||
|
||||
<table>
|
||||
<caption>Table: user</caption>
|
||||
<tr><th>Colum Name</th><th>SQL Type</th><th>Description</th></tr>
|
||||
<tr><td>name</td><td>varchar(50), primary key</td><td>The user's name (pseudonym).</td></tr>
|
||||
<tr><td>pubkey</td><td>text</td><td>The user's public key.</td></tr>
|
||||
</table>
|
||||
|
||||
*/
|
||||
// 1 2 3 4 5 6 7 8
|
||||
// 45678901234567890123456789012345678901234567890123456789012345678901234567890
|
||||
|
||||
require_once("opendb.php");
|
||||
try {
|
||||
$db->query(file_get_contents("usertable.sql"));
|
||||
} catch (Exception $e) {
|
||||
error('database error on server');
|
||||
}
|
||||
?>
|
@@ -1,5 +0,0 @@
|
||||
CREATE TABLE IF NOT EXISTS `user` (
|
||||
`name` varchar(50) NOT NULL COMMENT 'unique name of the user',
|
||||
`pubkey` text NOT NULL COMMENT 'armored gnupg public key of the user',
|
||||
PRIMARY KEY (`name`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='list of all registered users and their public keys';
|
15
test/makefile.am
Normal file
15
test/makefile.am
Normal file
@@ -0,0 +1,15 @@
|
||||
## @id $Id$
|
||||
##
|
||||
## This file has been added:
|
||||
## - by bootstrap.sh
|
||||
## - on Sat, 07 November 2015 16:02:44 +0100
|
||||
## Feel free to change it or even remove and rebuild it, up to your needs
|
||||
##
|
||||
## 1 2 3 4 5 6 7 8
|
||||
## 45678901234567890123456789012345678901234567890123456789012345678901234567890
|
||||
|
||||
|
||||
|
||||
TESTS =
|
||||
|
||||
MAINTAINERCLEANFILES = makefile.in
|
125
test/runtests.sh
Executable file
125
test/runtests.sh
Executable file
@@ -0,0 +1,125 @@
|
||||
#!/bin/bash -e
|
||||
|
||||
#check for a text in a docker volume log
|
||||
function check() {
|
||||
if test $(docker inspect -f {{.State.Running}} $1) = "false"; then
|
||||
echo
|
||||
echo "**** ERROR: container $1 not running"
|
||||
exit 1
|
||||
fi
|
||||
docker logs $1 2>&1 | grep -q "$2"
|
||||
}
|
||||
|
||||
# call with volume name
|
||||
function wait_for_mysql() {
|
||||
check $1 "mysqld: ready for connections"
|
||||
}
|
||||
|
||||
# run a countdown and call a check function
|
||||
# $1: expected time in seconds
|
||||
# $2-: check function
|
||||
function countdown() {
|
||||
set +x
|
||||
expect=$1
|
||||
shift
|
||||
max=$1
|
||||
shift
|
||||
for ((i=0; i<$((expect+max)); ++i)); do
|
||||
echo -en "\rPlease wait: $((expect-i))s "
|
||||
$* && break || sleep 1
|
||||
done
|
||||
echo -e "\rdone in ${i}s: $* "
|
||||
echo
|
||||
set -x
|
||||
}
|
||||
|
||||
# should not be called with sudo root
|
||||
if test "$(whoami)" = "root"; then
|
||||
echo "**** ERROR: call as non root user"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# option checks
|
||||
NEED_XVFB=0
|
||||
NEED_DOCKER=0
|
||||
NEED_WEBTESTER=0
|
||||
while test $# -gt 0; do
|
||||
case "$1" in
|
||||
(--help|-h)
|
||||
echo "$0 [OPTIONS] [PORTS <port>]"
|
||||
echo
|
||||
echo "OPTIONS:"
|
||||
echo
|
||||
exit 0
|
||||
;;
|
||||
(*) echo "**** ERROR: unknown option '$1', try --help"; exit 1;;
|
||||
esac
|
||||
if test $# -eq 0; then
|
||||
echo "**** ERROR: missing value, try --help"; exit 1;
|
||||
fi
|
||||
shift
|
||||
done
|
||||
|
||||
error=0;
|
||||
|
||||
# test for xvfb (needed by webtester)
|
||||
if test ${NEED_XVFB} -eq 1 -a \! -e "$(which xvfb-run)"; then
|
||||
echo "**** ERROR: XVFB Not Installed"
|
||||
echo "you need to install xvfb"
|
||||
echo "please execute as root:"
|
||||
echo " apt-get install xvfb"
|
||||
error=1
|
||||
fi
|
||||
|
||||
# test for docker if needed
|
||||
if test ${NEED_DOCKER} -eq 1 -a \! -e "$(which docker)"; then
|
||||
echo "**** ERROR: Docker Not Installed"
|
||||
echo "you need to install the latest docker"
|
||||
echo "please execute as root:"
|
||||
echo " apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 \\"
|
||||
echo " --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9"
|
||||
echo " echo 'deb https://get.docker.io/ubuntu docker main' \\"
|
||||
echo " > /etc/apt/sources.list.d/docker.list"
|
||||
echo " apt-get update"
|
||||
echo " apt-get install lxc-docker"
|
||||
echo " adduser $(whoami) docker"
|
||||
echo "you need to add the following line to /etc/default/docker:"
|
||||
echo ' DOCKER_OPTS="--insecure-registry dev0004:5000"'
|
||||
echo "logout $(whoami) and login again to run $(whoami) with group docker"
|
||||
echo "additionals note:"
|
||||
echo " if you run docker inside a VM (not recommended), you probably"
|
||||
echo " need to foollow the instructions in chapter \"Changing Bridge"
|
||||
echo " Subnetwork\" on https://marc.wäckerlin.ch/computer/docker-overview"
|
||||
echo "introduction to docker, see:"
|
||||
echo " https://marc.wäckerlin.ch/computer/docker-overview"
|
||||
error=1
|
||||
fi
|
||||
|
||||
# check for webtester
|
||||
if test ${NEED_WEBTESTER} -eq 1 -a \! -e "$(which webrunner)"; then
|
||||
echo "**** ERROR: Webtester Not Installed"
|
||||
echo "you need to install webtester"
|
||||
echo "please execute as root:"
|
||||
echo " apt-get install -y wget software-properties-common apt-transport-https"
|
||||
echo " apt-add-repository https://dev.marc.waeckerlin.org/repository"
|
||||
echo " wget -O- https://dev.marc.waeckerlin.org/repository/PublicKey \\"
|
||||
echo " | apt-key add -"
|
||||
echo " apt-get update -y"
|
||||
echo " apt-get install -y webtester"
|
||||
echo "more information, see:"
|
||||
echo " https://dev.marc.waeckerlin.org/redmine/projects/webtester"
|
||||
error=1
|
||||
fi
|
||||
|
||||
if test "$error" = "1"; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
set -x
|
||||
|
||||
# Add tests here
|
||||
MYSQL=$(docker run -d -e MYSQL_ROOT_PASSWORD=TopSecretLOL mysql)
|
||||
PHP=$(docker run -d --volume $(pwd)/../html:/usr/share/nginx/html:ro --link ${MYSQL}:mysql mwaeckerlin/php-fpm)
|
||||
NGINX=$(docker run -d --volumes-from ${PHP} --link ${PHP}:php -p 8080:80 mwaeckerlin/nginx)
|
||||
trap "docker rm -f ${NGINX} ${PHP} ${MYSQL}" INT TERM EXIT
|
||||
sleep 60
|
Reference in New Issue
Block a user