AUTHOR updated to new homepage
This commit is contained in:
@@ -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');");
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
@@ -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';");
|
||||
|
@@ -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');
|
||||
}
|
||||
?>
|
||||
|
@@ -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 {
|
||||
|
@@ -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);
|
||||
|
@@ -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]);
|
||||
|
@@ -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');
|
||||
}
|
||||
?>
|
||||
|
Reference in New Issue
Block a user