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