new way to generate database fromseparate schema.sql

This commit is contained in:
Marc Wäckerlin
2015-11-09 11:13:34 +00:00
parent bd02ae565c
commit 4f8d997805
20 changed files with 314 additions and 125 deletions

View File

@@ -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) {

View File

@@ -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);
}

View File

@@ -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");

View File

@@ -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');
}
?>

View File

@@ -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
View 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');
}
?>

View File

@@ -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 {

View File

@@ -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
View 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";

View File

@@ -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);

View File

@@ -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');
}
?>

View File

@@ -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';