Initial commit
This commit is contained in:
commit
5efead129e
15
LICENSE
Normal file
15
LICENSE
Normal file
@ -0,0 +1,15 @@
|
||||
Copyright (C) 2023 Jack-Benny Persson <jack-benny@cyberinfo.se>
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
18
README.md
Normal file
18
README.md
Normal file
@ -0,0 +1,18 @@
|
||||
# Encrypted form
|
||||
This is a small project to send encrypted form data to a recipient.
|
||||
The data is encrypted using the form recipient's PGP key.
|
||||
|
||||
## Requirements
|
||||
Apache/NGINX with PHP and the GnuGP PHP module. The module is installed with
|
||||
`apt install php-gnupg` on Debian and Ubuntu systems.
|
||||
|
||||
The Apache/NGINX process also needs write permission to the GnuPG home
|
||||
directory (set the GnuPG home directory in `contact.php`).
|
||||
|
||||
You also need to set the following variables in `contact.php`:
|
||||
|
||||
* `$recipient` (email of the form recipient)
|
||||
* `$subject` (a subject line for the email)
|
||||
* `$key` (the **public** PGP key of the recipient)
|
||||
* `$fingerprint` (the fingerprint of the public PGP key)
|
||||
|
26
contact.html
Normal file
26
contact.html
Normal file
@ -0,0 +1,26 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta http-equiv="X-UA-Compatible" content="ie=edge">
|
||||
<title>Contact form</title>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<form action="contact.php" method="POST" name="myform" id="myform">
|
||||
<fieldset>
|
||||
<legend>Contact us</legend>
|
||||
<label for="name">Name: </label><input type="text" id="name" name="name" required>
|
||||
<label for="email">E-mail: </label><input type="email" id="email" name="_replyto" required>
|
||||
<label for="message">Message:
|
||||
</label><textarea id="message" name="message" rows="8" required></textarea>
|
||||
|
||||
</fieldset>
|
||||
<br>
|
||||
|
||||
<input type="submit" value="Send" name="contactform">
|
||||
</form>
|
||||
|
||||
</body>
|
||||
</html>
|
84
contact.php
Normal file
84
contact.php
Normal file
@ -0,0 +1,84 @@
|
||||
<?php
|
||||
// Where GnuPG should store keys and other stuff.
|
||||
// This directory must be writable by the Apache/NGINX process
|
||||
putenv('GNUPGHOME=/home/apache/gnupg');
|
||||
|
||||
// The recipient email and a subject line
|
||||
$recipient = "me@example.com";
|
||||
$subject = "Encrypted form";
|
||||
|
||||
//The public PGP key of the recipient
|
||||
$key = "-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
...
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
||||
";
|
||||
|
||||
// The fingerprint for the above key
|
||||
$fingerprint = "...";
|
||||
|
||||
|
||||
// The form data from the HTML form
|
||||
$name = trim(stripslashes(htmlspecialchars($_POST['name'])));
|
||||
$message = trim(stripslashes(htmlspecialchars($_POST['message'])));
|
||||
$email = trim(stripslashes(htmlspecialchars($_POST['_replyto'])));
|
||||
|
||||
// Check that user has entered a name, an e-mail address and a message
|
||||
if (empty($name))
|
||||
{
|
||||
echo "No name provided; the message has not been sent\n";
|
||||
exit;
|
||||
}
|
||||
|
||||
if (empty($email))
|
||||
{
|
||||
echo "No email provided; the mssage has not been sent\n";
|
||||
exit;
|
||||
}
|
||||
|
||||
if (empty($message))
|
||||
{
|
||||
echo "No message provided; the message has not been sent\n";
|
||||
exit;
|
||||
}
|
||||
|
||||
|
||||
// Initialize GnuPG
|
||||
$gpg = new gnupg();
|
||||
|
||||
// Import the recipient's key
|
||||
$gpg->import($key);
|
||||
|
||||
// Add the key
|
||||
$gpg->addencryptkey($fingerprint);
|
||||
|
||||
// Encryt the message
|
||||
$encrypted_message = $gpg->encrypt("Name: $name\nE-mail: $email\n\nMessage: $message");
|
||||
|
||||
$headers = 'From: "Contact form" <info@example.com>' . "\r\n" .
|
||||
'Reply-To: info@example.com' . "\r\n" .
|
||||
'Content-Type: text/plain; charset=UTF-8' . "\r\n" .
|
||||
'X-Mailer: PHP/' . phpversion();
|
||||
|
||||
|
||||
// Send the mail (this requires a fully working SMTP-server on the host)
|
||||
mail($recipient, $subject, $encrypted_message, $headers);
|
||||
|
||||
?>
|
||||
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>Your message has been sent</title>
|
||||
</head>
|
||||
<body>
|
||||
<h1>Your message has been sent</h1>
|
||||
<p>
|
||||
Thank you for your message<br>
|
||||
<strong><i>Best regards, NNN</i></strong>
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
|
Loading…
x
Reference in New Issue
Block a user