Initial commit
This commit is contained in:
commit
cc27efba98
|
@ -0,0 +1,15 @@
|
|||
.dub
|
||||
docs.json
|
||||
__dummy.html
|
||||
docs/
|
||||
/drop
|
||||
drop.so
|
||||
drop.dylib
|
||||
drop.dll
|
||||
drop.a
|
||||
drop.lib
|
||||
drop-test-*
|
||||
*.exe
|
||||
*.o
|
||||
*.obj
|
||||
*.lst
|
|
@ -0,0 +1,44 @@
|
|||
# Drop
|
||||
|
||||
The dropper is part the of the deaddrop project.
|
||||
|
||||
It is the server that handles the requests of clients.
|
||||
By default it listens on localhost port 8080.
|
||||
The repo includes a simple script to create an onion service
|
||||
for this server.
|
||||
|
||||
## Required software:
|
||||
|
||||
- dmd
|
||||
- dub
|
||||
|
||||
## Building
|
||||
|
||||
```bash
|
||||
$ git clone http://repourl/dropper.git drop
|
||||
$ cd dropper
|
||||
$ dub build --build=release
|
||||
```
|
||||
|
||||
## Simple usage:
|
||||
|
||||
```bash
|
||||
./drop
|
||||
```
|
||||
|
||||
## Running as an onion service
|
||||
|
||||
Append the following lines to your /etc/tor/torrc config:
|
||||
|
||||
```bash
|
||||
HiddenServiceDir /var/lib/tor/deaddrop/
|
||||
HiddenServicePort 80 127.0.0.1:8080
|
||||
HiddenServiceVersion 3
|
||||
```
|
||||
|
||||
To get the onion address simple run this command:
|
||||
|
||||
```bash
|
||||
$ sudo cat /var/lib/tor/deaddrop/hostname
|
||||
```
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
{
|
||||
"authors": [
|
||||
"anon"
|
||||
],
|
||||
"copyright": "Copyright © 2021, anon",
|
||||
"dependencies": {
|
||||
"vibe-d": "~>0.9",
|
||||
"vibe-d:tls": "*"
|
||||
},
|
||||
"description": "A simple vibe.d server application.",
|
||||
"license": "proprietary",
|
||||
"name": "drop",
|
||||
"subConfigurations": {
|
||||
"vibe-d:tls": "botan"
|
||||
},
|
||||
"versions": ["VibeDefaultMain"]
|
||||
}
|
|
@ -0,0 +1,17 @@
|
|||
{
|
||||
"fileVersion": 1,
|
||||
"versions": {
|
||||
"botan": "1.12.19",
|
||||
"botan-math": "1.0.3",
|
||||
"diet-ng": "1.7.4",
|
||||
"eventcore": "0.9.13",
|
||||
"libasync": "0.8.6",
|
||||
"memutils": "1.0.4",
|
||||
"mir-linux-kernel": "1.0.1",
|
||||
"openssl": "1.1.6+1.0.1g",
|
||||
"stdx-allocator": "2.77.5",
|
||||
"taggedalgebraic": "0.11.19",
|
||||
"vibe-core": "1.13.0",
|
||||
"vibe-d": "0.9.3"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,15 @@
|
|||
#!/bin/bash
|
||||
|
||||
if [ "$EUID" -ne 0 ]
|
||||
then echo "Please run as root"
|
||||
exit
|
||||
fi
|
||||
|
||||
echo "HiddenServiceDir /var/lib/tor/deaddrop/
|
||||
HiddenServicePort 80 127.0.0.1:8080
|
||||
HiddenServiceVersion 3" >> /etc/tor/torrc
|
||||
|
||||
sv restart tor
|
||||
hostname=$(cat /var/lib/tor/deaddrop/hostname)
|
||||
|
||||
echo "Add the following to your clients torrc: HidServAuth $hostname"
|
|
@ -0,0 +1,13 @@
|
|||
import vibe.vibe;
|
||||
import datastore;
|
||||
|
||||
shared static this()
|
||||
{
|
||||
auto router = new URLRouter;
|
||||
router.registerWebInterface(new Backend);
|
||||
|
||||
auto settings = new HTTPServerSettings;
|
||||
settings.port = 8080;
|
||||
settings.bindAddresses = ["127.0.0.1"];
|
||||
listenHTTP(settings, router);
|
||||
}
|
|
@ -0,0 +1,90 @@
|
|||
module datastore;
|
||||
|
||||
import std.conv;
|
||||
import vibe.d;
|
||||
|
||||
/// This class handles
|
||||
/// the postage of new message
|
||||
/// to the drop
|
||||
/// FIXME: add sqlite backend for message
|
||||
/// storage so messages survive restarts
|
||||
class Backend
|
||||
{
|
||||
private struct Message
|
||||
{
|
||||
string recipient;
|
||||
string payload;
|
||||
}
|
||||
|
||||
private Message[] p_message;
|
||||
|
||||
private string serializeMessage(Message msg)
|
||||
{
|
||||
immutable string msg_template = `
|
||||
{
|
||||
"recipient": "%s",
|
||||
"payload": "%s"
|
||||
}
|
||||
`;
|
||||
|
||||
import std.format : format;
|
||||
return format(msg_template, msg.recipient, msg.payload);
|
||||
}
|
||||
|
||||
/// This function gets all the posted
|
||||
/// messages as a json array
|
||||
@path("/messages")
|
||||
@safe
|
||||
Json getMessages(HTTPServerResponse res,)
|
||||
{
|
||||
return serializeToJson(p_message);
|
||||
}
|
||||
|
||||
/// This function is
|
||||
/// used to add a new
|
||||
/// message to the drop-point
|
||||
/// post data like so
|
||||
/// {
|
||||
/// "recipient": "base64 encoded publickey",
|
||||
/// "sender": "base64 encoded publickey",
|
||||
/// "payload": "base64 encoded payload data",
|
||||
/// "nonce": "base64 encoded nonce"
|
||||
/// }
|
||||
@path("/add-message")
|
||||
@method(HTTPMethod.POST)
|
||||
@safe
|
||||
void addMessage(
|
||||
string recipient,
|
||||
string payload,
|
||||
HTTPServerResponse res,
|
||||
)
|
||||
{
|
||||
logInfo(text("Backend: POST /add-message for : ", recipient));
|
||||
|
||||
auto m = Message(recipient, payload);
|
||||
|
||||
this.p_message ~= m;
|
||||
|
||||
res.writeBody("");
|
||||
}
|
||||
|
||||
@path("/getmessages")
|
||||
@method(HTTPMethod.POST)
|
||||
@safe
|
||||
Json getMessageForPubkeys(string pubkey)
|
||||
{
|
||||
logInfo(text("Backend: POST /getmessages for : ", pubkey));
|
||||
|
||||
Message[] user_messages;
|
||||
|
||||
foreach (Message key; p_message)
|
||||
{
|
||||
if (key.recipient == pubkey)
|
||||
{
|
||||
user_messages ~= key;
|
||||
}
|
||||
}
|
||||
|
||||
return serializeToJson(user_messages);
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue