1
0
Fork 0

Compare commits

...

10 Commits

13 changed files with 69 additions and 44 deletions

View File

@ -5,7 +5,7 @@ SYSDDIR_=${shell pkg-config systemd --variable=systemdsystemunitdir}
SYSDDIR=${SYSDDIR_:/%=%} SYSDDIR=${SYSDDIR_:/%=%}
DESTDIR=/ DESTDIR=/
VERSION=23.31.1 VERSION=23.34.0
FLAGS=-trimpath -mod=readonly -modcacherw FLAGS=-trimpath -mod=readonly -modcacherw
LDFLAGS=-ldflags "-s -w -X main.version=${VERSION}" -tags osusergo,netgo LDFLAGS=-ldflags "-s -w -X main.version=${VERSION}" -tags osusergo,netgo

View File

@ -1,6 +1,6 @@
# Maintainer: Alexander "Arav" Andreev <me@arav.su> # Maintainer: Alexander "Arav" Andreev <me@arav.su>
pkgname=dwelling-upload pkgname=dwelling-upload
pkgver=23.31.1 pkgver=23.34.0
pkgrel=1 pkgrel=1
pkgdesc="Arav's Dwelling / Upload" pkgdesc="Arav's Dwelling / Upload"
arch=('i686' 'x86_64' 'arm' 'armv6h' 'armv7h' 'aarch64') arch=('i686' 'x86_64' 'arm' 'armv6h' 'armv7h' 'aarch64')

View File

@ -11,7 +11,7 @@ server {
ssl_certificate_key /etc/letsencrypt/live/arav.su/privkey.pem; ssl_certificate_key /etc/letsencrypt/live/arav.su/privkey.pem;
add_header Content-Security-Policy "default-src 'self'; script-src 'none'; style-src 'self' 'unsafe-inline'; img-src 'self'; media-src 'self'; object-src 'none'; frame-src 'none'; frame-ancestors 'none'; font-src 'self'; form-action 'self'"; add_header Content-Security-Policy "default-src 'self'; script-src 'none'; style-src 'self'; img-src 'self'; media-src 'self'; object-src 'none'; frame-src 'none'; frame-ancestors 'none'; font-src 'self'; form-action 'self'";
add_header X-Frame-Options "DENY"; add_header X-Frame-Options "DENY";
add_header X-Content-Type-Options "nosniff"; add_header X-Content-Type-Options "nosniff";
add_header X-XSS-Protection "1; mode=block"; add_header X-XSS-Protection "1; mode=block";

2
go.mod
View File

@ -4,4 +4,4 @@ go 1.17
require github.com/pkg/errors v0.9.1 require github.com/pkg/errors v0.9.1
require git.arav.su/Arav/httpr v0.2.1 require git.arav.su/Arav/httpr v0.3.1

4
go.sum
View File

@ -1,4 +1,4 @@
git.arav.su/Arav/httpr v0.2.1 h1:wtago8iYOqeoyOvio1uhMItXaTHXiBVfsshtYWSURhw= git.arav.su/Arav/httpr v0.3.1 h1:8ba90SJ4XYUWfIlC3V0Zuw3+CcOb9IYVkOZ/2mB9JO0=
git.arav.su/Arav/httpr v0.2.1/go.mod h1:z0SVYwe5dBReeVuFU9QH2PmBxICJwchxqY5OfZbeVzU= git.arav.su/Arav/httpr v0.3.1/go.mod h1:z0SVYwe5dBReeVuFU9QH2PmBxICJwchxqY5OfZbeVzU=
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=

View File

@ -19,18 +19,33 @@ LockPersonality=true
MemoryDenyWriteExecute=true MemoryDenyWriteExecute=true
NoNewPrivileges=true NoNewPrivileges=true
PrivateDevices=true PrivateDevices=true
PrivateTmp=true
PrivateUsers=true
ProcSubset=pid
ProtectClock=true ProtectClock=true
ProtectControlGroups=true ProtectControlGroups=true
ProtectHome=true ProtectHome=true
ProtectHostname=true
ProtectKernelLogs=true ProtectKernelLogs=true
ProtectKernelModules=true ProtectKernelModules=true
ProtectKernelTunables=true ProtectKernelTunables=true
ProtectProc=noaccess
ProtectSystem=strict ProtectSystem=strict
RestrictAddressFamilies= RestrictAddressFamilies=AF_INET AF_INET6 AF_UNIX
RestrictNamespaces=true RestrictNamespaces=true
RestrictRealtime=true RestrictRealtime=true
RestrictSUIDSGID=true RestrictSUIDSGID=true
SystemCallArchitectures=native SystemCallArchitectures=native
SystemCallFilter=~@clock
SystemCallFilter=~@cpu-emulation
SystemCallFilter=~@debug
SystemCallFilter=~@module
SystemCallFilter=~@mount
SystemCallFilter=~@obsolete
SystemCallFilter=~@privileged
SystemCallFilter=~@raw-io
SystemCallFilter=~@reboot
SystemCallFilter=~@swap
[Install] [Install]
WantedBy=multi-user.target WantedBy=multi-user.target

View File

@ -28,18 +28,33 @@ LockPersonality=true
MemoryDenyWriteExecute=true MemoryDenyWriteExecute=true
NoNewPrivileges=true NoNewPrivileges=true
PrivateDevices=true PrivateDevices=true
PrivateTmp=true
PrivateUsers=true
ProcSubset=pid
ProtectClock=true ProtectClock=true
ProtectControlGroups=true ProtectControlGroups=true
ProtectHome=true ProtectHome=true
ProtectHostname=true
ProtectKernelLogs=true ProtectKernelLogs=true
ProtectKernelModules=true ProtectKernelModules=true
ProtectKernelTunables=true ProtectKernelTunables=true
ProtectProc=noaccess
ProtectSystem=strict ProtectSystem=strict
RestrictAddressFamilies=AF_INET AF_INET6 AF_UNIX RestrictAddressFamilies=AF_INET AF_INET6 AF_UNIX
RestrictNamespaces=true RestrictNamespaces=true
RestrictRealtime=true RestrictRealtime=true
RestrictSUIDSGID=true RestrictSUIDSGID=true
SystemCallArchitectures=native SystemCallArchitectures=native
SystemCallFilter=~@clock
SystemCallFilter=~@cpu-emulation
SystemCallFilter=~@debug
SystemCallFilter=~@module
SystemCallFilter=~@mount
SystemCallFilter=~@obsolete
SystemCallFilter=~@privileged
SystemCallFilter=~@raw-io
SystemCallFilter=~@reboot
SystemCallFilter=~@swap
[Install] [Install]
WantedBy=multi-user.target WantedBy=multi-user.target

View File

@ -33,6 +33,8 @@
background-color: var(--secondary-color); background-color: var(--secondary-color);
color: var(--background-color); } color: var(--background-color); }
.center { text-align: center; }
a, a,
button { button {
color: var(--primary-color); color: var(--primary-color);
@ -50,8 +52,8 @@ input[type="file"] {
color: var(--text-color); color: var(--text-color);
font: inherit; } font: inherit; }
input[type="file"]::file-selector-button, button,
button { input[type="file"]::file-selector-button {
background: none; background: none;
border: none; border: none;
color: var(--primary-color); color: var(--primary-color);
@ -91,8 +93,6 @@ h2 {
small { font-size: .8rem; } small { font-size: .8rem; }
.center { text-align: center; }
html { margin-left: calc(100vw - 100%); } html { margin-left: calc(100vw - 100%); }
body { body {
@ -109,24 +109,22 @@ header {
flex-wrap: wrap; flex-wrap: wrap;
justify-content: space-between; } justify-content: space-between; }
#logo { header svg { width: 360px; }
display: block;
width: 360px; }
#logo text { fill: var(--text-color); } header svg text { fill: var(--text-color); }
#logo .logo { header svg text:first-child {
font-size: 2rem; font-size: 2rem;
font-variant-caps: small-caps; font-variant-caps: small-caps;
font-weight: bold; } font-weight: bold; }
header svg text:last-child { font-size: .88rem; }
@media screen and (-webkit-min-device-pixel-ratio:0) { @media screen and (-webkit-min-device-pixel-ratio:0) {
#logo .logo { font-size: 2.082rem; } } header svg text:first-child { font-size: 2.082rem; } }
@-moz-document url-prefix() { @-moz-document url-prefix() {
#logo .logo { font-size: 2rem; } } header svg text:first-child { font-size: 2rem; } }
#logo .under { font-size: .88rem; }
nav { margin-top: .5rem; } nav { margin-top: .5rem; }
@ -138,6 +136,14 @@ nav h1 {
section { margin-top: 1rem; } section { margin-top: 1rem; }
#error {
font-size: 3.5rem;
line-height: 5rem;
text-align: center;
margin: 6rem 0; }
#error h1 { font-size: 8rem; }
footer { footer {
font-size: .8rem; font-size: .8rem;
text-align: center; text-align: center;
@ -146,7 +152,7 @@ footer {
@media screen and (max-width: 640px) { @media screen and (max-width: 640px) {
header { display: block; } header { display: block; }
#logo { header svg {
margin: 0 auto; margin: 0 auto;
width: 100%; } width: 100%; }

View File

@ -1,2 +1,3 @@
User-agent: * User-agent: *
Disallow: /assets/ Allow: /$
Disallow: /

View File

@ -12,9 +12,9 @@ html(lang="en")
block head block head
body body
header header
svg#logo(viewBox="0 -25 216 40") svg(viewBox="0 -25 216 40")
text.logo Arav's dwelling text Arav's dwelling
text.under(y="11") Welcome to my sacred place, wanderer text(y="11") Welcome to my sacred place, wanderer
nav nav
a(href=mainSite title="Arav's dwelling") Back to main website a(href=mainSite title="Arav's dwelling") Back to main website
block header block header

View File

@ -1,20 +1,10 @@
extends base.jade extends base.jade
block head
:go:func ErrorXXX(mainSite string, code int, errorMsg string)
style(type="text/css").
#error {
font-size: 3.5rem;
line-height: 5rem;
text-align: center;
margin: 6rem 0; }
#error h1 { font-size: 8rem; }
block header block header
h1 Еггог h1 Еггог
block body block body
:go:func ErrorXXX(mainSite string, code int, errorMsg string)
section#error section#error
h1 #{code} h1 #{code}
| #{http.StatusText(code)} | #{http.StatusText(code)}

View File

@ -5,11 +5,11 @@ block header
block body block body
:go:func Index(mainSite string, keepForHours int, fileMaxSize, storageAvailableStr string) :go:func Index(mainSite string, keepForHours int, fileMaxSize, storageAvailableStr string)
section#rules section
h2 Rules h2 Rules
p Maximum file size is #[b #{fileMaxSize}] and it will be kept for #[b #{keepForHours}] hours. p Maximum file size is #[b #{fileMaxSize}] and it will be kept for #[b #{keepForHours}] hours.
p Content you upload should comply with Russian Federation's law. Generally speaking, anything illegal, like CP, extremist literature, and so on is forbidden. p Content you upload should comply with Russian Federation's law. Generally speaking, anything illegal, like CP, extremist literature, and so on is forbidden.
section#upload.center section.center
h2 Upload h2 Upload
form(action="/" method="POST" enctype="multipart/form-data") form(action="/" method="POST" enctype="multipart/form-data")
input(type="file" name="file" multiple=false) input(type="file" name="file" multiple=false)
@ -17,14 +17,12 @@ block body
p.center #[b #{storageAvailableStr}] left. p.center #[b #{storageAvailableStr}] left.
section section
p Using cURL: #[code curl -F 'file=@somefile.ext' https://upload.arav.su] p Using cURL: #[code curl -F 'file=@somefile.ext' https://upload.arav.su]
p Over I2P: #[code curl --proxy 127.0.0.1:4444 -F 'file=@somefile.ext' http://upload.arav.i2p] p Also works under other networks (I2P, Tor, Yggdrasil). For Tor and I2P you'll need to add a #[code --proxy] option for cURL. Same for deletion.
p Same for Tor, just set #[code --proxy] and replace a domain. p A resulted link has the following structure: #[code &lt;site&gt;/&lt;hash&gt;/&lt;file&gt;.&lt;ext&gt;].
p A resulted link looks like this: #[code /base64rawURL(salted SHA-256)/filename.ext].
section.center section.center
h2 Delete h2 Delete
form(action="/delete" method="POST") form(action="/delete" method="POST")
input(type="text", name="hash" placeholder="File hash goes here" minlength="43" maxlength="43" size="43" required="") input(type="text", name="hash" placeholder="File hash goes here" minlength="43" maxlength="43" size="43" required="")
button(type="submit") Delete button(type="submit") Delete
section section
p Using cURL: #[code curl -XDELETE https://upload.arav.su/&lt;hash&gt;] p Using cURL: #[code curl -XDELETE https://upload.arav.su/&lt;hash&gt;]
p Over I2P: #[code curl --proxy 127.0.0.1:4444 -XDELETE http://upload.arav.i2p/&lt;hash&gt;]

View File

@ -5,7 +5,7 @@ block header
block body block body
:go:func Uploaded(mainSite, site, downloadLink string, keepForHours int) :go:func Uploaded(mainSite, site, downloadLink string, keepForHours int)
section#file section
h2 Your link h2 Your link
center center
a(href=downloadLink) #{site}#{downloadLink} a(href=downloadLink) #{site}#{downloadLink}