1d4afb5ceSopenharmony_ci# Deaddrop: File upload and sharing plugin
2d4afb5ceSopenharmony_ci
3d4afb5ceSopenharmony_ci## Building the plugin
4d4afb5ceSopenharmony_ci
5d4afb5ceSopenharmony_ciJust configure lws with `cmake .. -DLWS_WITH_PLUGINS=1` and build lws as normal.
6d4afb5ceSopenharmony_ci
7d4afb5ceSopenharmony_ci## Configurable settings
8d4afb5ceSopenharmony_ci
9d4afb5ceSopenharmony_ci|pvo name|value meaning|
10d4afb5ceSopenharmony_ci|---|---|
11d4afb5ceSopenharmony_ci|upload-dir|A writeable directory where uploaded files will go|
12d4afb5ceSopenharmony_ci|max-size|Maximum individual file size in bytes|
13d4afb5ceSopenharmony_ci|basic-auth|Path to basic auth credential file so wss can also be protected|
14d4afb5ceSopenharmony_ci
15d4afb5ceSopenharmony_ci## Required mounts
16d4afb5ceSopenharmony_ci
17d4afb5ceSopenharmony_ciTo use deaddrop meaningfully, all the mounts and the ws protocol must be
18d4afb5ceSopenharmony_ciprotected by basic auth.  And to use basic auth securely, the connection must
19d4afb5ceSopenharmony_cibe protected from snooping by tls.
20d4afb5ceSopenharmony_ci
21d4afb5ceSopenharmony_ci1) Set the basic-auth pvo to require valid credentials as described above
22d4afb5ceSopenharmony_ci
23d4afb5ceSopenharmony_ci2) Protect your basic fileserving mount by the same basic auth file... this is
24d4afb5ceSopenharmony_ci   used to serve index.html, the css etc.
25d4afb5ceSopenharmony_ci
26d4afb5ceSopenharmony_ci3) Add a callback mount into "lws-deaddrop" protocol at "upload"... so if your
27d4afb5ceSopenharmony_ci   URL for deaddrop is "/tools/share", this would be at "/tools/share/upload".
28d4afb5ceSopenharmony_ci   It must also be protected by the basic auth file.
29d4afb5ceSopenharmony_ci
30d4afb5ceSopenharmony_ci4) Add a fileserving mount at the url "get" (continuing the example above, it
31d4afb5ceSopenharmony_ci   would be "/tools/share/get" whose origin matches the "upload-dir" pvo
32d4afb5ceSopenharmony_ci   value you selected.  This mount needs any additional mimtype mappings since
33d4afb5ceSopenharmony_ci   it's where the uploaded files are shared from.
34d4afb5ceSopenharmony_ci
35d4afb5ceSopenharmony_ci## Using with C
36d4afb5ceSopenharmony_ci
37d4afb5ceSopenharmony_ciSee ./minimal-examples/http-server/minimal-example-http-server-deaddrop for
38d4afb5ceSopenharmony_cihow to use the plugin directly with C.
39d4afb5ceSopenharmony_ci
40d4afb5ceSopenharmony_ci## Using with lwsws / lejp-conf
41d4afb5ceSopenharmony_ci
42d4afb5ceSopenharmony_ciAs a plugin, you can configure the mounts and pvos per-vhost easily in JSON.
43d4afb5ceSopenharmony_ci
44d4afb5ceSopenharmony_ciAll the snippets here 
45d4afb5ceSopenharmony_ci
46d4afb5ceSopenharmony_ciThe mountpoints would look something like this (added to vhost/mounts)
47d4afb5ceSopenharmony_ci
48d4afb5ceSopenharmony_ci```
49d4afb5ceSopenharmony_ci	{
50d4afb5ceSopenharmony_ci         "mountpoint": "/tools/share",
51d4afb5ceSopenharmony_ci         "origin": "file:///var/www/deaddrop",
52d4afb5ceSopenharmony_ci         "default": "index.html",
53d4afb5ceSopenharmony_ci         "basic-auth": "/var/www/ba"
54d4afb5ceSopenharmony_ci        }, {
55d4afb5ceSopenharmony_ci         "mountpoint": "/tools/share/upload",
56d4afb5ceSopenharmony_ci         "origin": "callback://lws-deaddrop",
57d4afb5ceSopenharmony_ci         "basic-auth": "/var/www/ba"
58d4afb5ceSopenharmony_ci        }, {
59d4afb5ceSopenharmony_ci         "mountpoint": "/tools/share/get",
60d4afb5ceSopenharmony_ci         "origin": "file:///var/cache/deaddrop-uploads",
61d4afb5ceSopenharmony_ci         "basic-auth": "/var/www/ba",
62d4afb5ceSopenharmony_ci
63d4afb5ceSopenharmony_ci	 "extra-mimetypes": {
64d4afb5ceSopenharmony_ci		".bin": "application/octet-stream",
65d4afb5ceSopenharmony_ci		".ttf": "application/x-font-truetype",
66d4afb5ceSopenharmony_ci		".otf": "application/font-sfnt",
67d4afb5ceSopenharmony_ci		".zip": "application/zip",
68d4afb5ceSopenharmony_ci		".webm": "video/webm",
69d4afb5ceSopenharmony_ci		".romfs": "application/octet-stream",
70d4afb5ceSopenharmony_ci		".pdf": "application/pdf",
71d4afb5ceSopenharmony_ci		".odt": "application/vnd.oasis.opendocument.text",
72d4afb5ceSopenharmony_ci		".tgz": "application/x-gzip",
73d4afb5ceSopenharmony_ci		".tar.gz": "application/x-gzip"
74d4afb5ceSopenharmony_ci	  }
75d4afb5ceSopenharmony_ci	}
76d4afb5ceSopenharmony_ci```
77d4afb5ceSopenharmony_ci
78d4afb5ceSopenharmony_ciThis enables the plugin on the vhost, configures the pvos, and makes
79d4afb5ceSopenharmony_cithe wss serving also depend on having a valid basic auth credential.
80d4afb5ceSopenharmony_ci
81d4afb5ceSopenharmony_ci```
82d4afb5ceSopenharmony_ci         "ws-protocols": [{
83d4afb5ceSopenharmony_ci                  "lws-deaddrop": {
84d4afb5ceSopenharmony_ci                  "status": "ok",
85d4afb5ceSopenharmony_ci                  "upload-dir": "/var/cache/deaddrop-uploads",
86d4afb5ceSopenharmony_ci                  "max-size": "52428800",
87d4afb5ceSopenharmony_ci                  "basic-auth": "/var/www/ba"
88d4afb5ceSopenharmony_ci                }
89d4afb5ceSopenharmony_ci          }],
90d4afb5ceSopenharmony_ci```
91d4afb5ceSopenharmony_ci
92