AUTHOR updated to new homepage

This commit is contained in:
Marc Wäckerlin
2015-11-03 22:02:51 +00:00
parent 75e29bfbe3
commit f11d2c7c56
18 changed files with 336 additions and 104 deletions

View File

@@ -34,4 +34,53 @@ function success($txt) {
exit;
}
function getoption($name, $default) {
if (!isset($OPTION[$name])) {
$q = $db->query("select value from options where name='$name';");
if ($q->num_rows==1) {
$OPTION[$name]=$q->fetch_row()[0];
} else {
if (isset($_SERVER[$name]))
$OPTION[$name]=$_SERVER[$name];
else
$OPTION[$name]=$default;
$q = $db->query("insert into options (name, value) values ('$name', '$value');");
}
}
return $OPTION[$name];
}
/// Create user safechat as server's identity
/** Server has reserved username @c safechat */
function createSafechatUser() {
$q = $db->query("select pubkey from user where name='safechat';");
if ($q->num_rows!=1 && $user=="safechat") {
$KEY_LENGTH=getoption("KEYLEN", "4096");
$SAFECHAT_NAME=getoption("NAME", "Safe Chat");
$SAFECHAT_COMMENT=getoption("COMMENT", "https://safechat.ch");
$SAFECHAT_EMAIL=getoption("EMAIL", "server@safechat.ch");
$PASSWORD=getoption("PASSWORD", "s3Cr37");
$create_key_cmd=<<<EOT
gpg -v -v --gen-key --batch <<EOF
Key-Type: RSA
Key-Length: 4096
Subkey-Type: RSA
Subkey-Length: 4096
Name-Real: ${SAFECHAT_NAME}
Name-Comment: ${SAFECHAT_COMMENT}
Name-Email: ${SAFECHAT_EMAIL}
Expire-Date: 0
Passphrase: ${PASSWORD}
%echo generating key for ${SAFECHAT_NAME} ...
%commit
%echo done.
EOF
EOT;
system($create_key_cmd);
gnupg_setarmor($pgp, 1);
$export = gnupg_export($pgp, ${SAFECHAT_NAME});
$q = $db->query("insert into user (name, pubkey) values ('safechat', '$export');");
}
}
?>

View File

@@ -28,8 +28,7 @@ try {
require_once("usertable.php");
$user = $db->real_escape_string($_REQUEST['user']);
$pubkey = $db->real_escape_string($_REQUEST['pubkey']);
$pgp = gnupg_init();
if (!$pgp) error("pgp on server failed");
if ($user=="safechat") error("username safechat is reserved for server");
$verify = gnupg_import($pgp, $_REQUEST['pubkey']);
if (!$verify) error("wrong identity");
$q = $db->query("select * from user where name='$user' and pubkey='$pubkey';");

View File

@@ -21,16 +21,12 @@
// 1 2 3 4 5 6 7 8
// 45678901234567890123456789012345678901234567890123456789012345678901234567890
require_once("functions.php");
mysqli_report(MYSQLI_REPORT_STRICT);
require_once("opendb.php");
try {
$db = new mysqli("mysql", "root", $_SERVER["MYSQL_ENV_MYSQL_ROOT_PASSWORD"]);
$db->query("create database if not exists safechat;");
$db->select_db("safechat");
$db->query('create table if not exists message (id int primary key not null auto_increment, time timestamp default current_timestamp, user varchar(50) not null, msg longtext not null);');
$db->query('set global max_allowed_packet=1000000000');
$db->query('set global net_buffer_length=1000000');
} catch (Exception $e) {
echo json_encode(null);
error('database error on server');
}
?>

View File

@@ -29,6 +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) {
echo json_encode($q->fetch_row()[0]);
} else {

View File

@@ -286,7 +286,7 @@ function checkpartner(user) {
function createkeypair(user, pwd) {
status("generate keys");
openpgp.generateKeyPair({
numBits: 1024,
numBits: 4096,
userId: user,
passphrase: pwd
}).then(function(keyPair) {
@@ -403,6 +403,37 @@ function setreceiver(name) {
$("#msg").focus();
}
var userMap = null;
/// Get a user's public key.
/** The first time, gets it from the server, later from the cache. */
function getPublicKey(user) {
var deferredObject = $.Deferred();
if (userMap == null) {
if (localStorage.userMap) {
userMap = JSON.parse(localStorage.userMap);
console.log("got userMap from localStorage");
} else {
userMap = new Array();
}
}
if (userMap[user]) {
console.log("user "+user+" is in cache");
deferredObject.resolve(userMap[user]);
} else {
$.post("pubkey.php", {user: user}) // get sender's key
.done(function(pk) {
console.log("got user "+user+" from server");
userMap[user] = pk;
localStorage.userMap = JSON.stringify(userMap);
deferredObject.resolve(pk);
}).fail(function(e) {
error("offline");
deferredObject.reject(e);
});
}
return deferredObject.promise();
}
var startmsg = 0; ///< number of last downloaded message
/// Poll For New Messages, Get And Show Them
/** The global variable @ref startmsg stores the id of the last
@@ -421,7 +452,7 @@ function get() {
if (msgs) {
msgs.forEach(function(e) { // one single message
if (startmsg<Number(e.id)) startmsg = Number(e.id);
$.post("pubkey.php", {user: e.user}) // get sender's key
getPublicKey(e.user) // get sender's key
.done(function(pk) {
var res=JSON.parse(pk);
var key=openpgp.key.readArmored(res);
@@ -481,7 +512,7 @@ function get() {
function sendmessage(recv, txt) {
notice("1/3 preparing message ...");
$("#message").fadeOut("slow");
$.post("pubkey.php", {user: recv}) // get receiver's public key
getPublicKey(recv) // get receiver's public key
.done(function(pk) {
var res=JSON.parse(pk);
var key=openpgp.key.readArmored(res);

View File

@@ -29,9 +29,7 @@ try {
require_once("usertable.php");
$user = $db->real_escape_string($_REQUEST['user']);
$msg = $db->real_escape_string($_REQUEST['msg']);
$pgp = gnupg_init();
if (strlen($_REQUEST['msg'])>100000) error("message is too long");
if (!$pgp) error("pgp on server failed");
$q = $db->query("select pubkey from user where name='$user';");
if (!$q || $q->num_rows!=1) error("user not found on server");
$pubkey = gnupg_import($pgp, $q->fetch_row()[0]);

View File

@@ -22,14 +22,10 @@
// 1 2 3 4 5 6 7 8
// 45678901234567890123456789012345678901234567890123456789012345678901234567890
require_once("functions.php");
mysqli_report(MYSQLI_REPORT_STRICT);
require_once("opendb.php");
try {
$db = new mysqli("mysql", "root", $_SERVER["MYSQL_ENV_MYSQL_ROOT_PASSWORD"]);
$db->query("create database if not exists safechat;");
$db->select_db("safechat");
$db->query('create table if not exists user (name varchar(50) not null unique key, pubkey text not null);');
} catch (Exception $e) {
echo json_encode(null);
error('database error on server');
}
?>