Main page. Just simple HTML, CSS and JS. https://asxp.io
  • Ruby 67.7%
  • HTML 23.6%
  • CSS 5.4%
  • JavaScript 2.5%
  • Nix 0.3%
  • Other 0.5%
Find a file
Sergei Poljanski 4c10221727
All checks were successful
Build and Deploy to Production / test (push) Successful in 27s
Build and Deploy to Production / build (push) Successful in 1m3s
Build and Deploy to Production / deploy (push) Successful in 40s
admin: publish files to the public bucket
There was no way to put a file up for public use short of running an
S3 client with the uploader key. Add a "files" area to the admin:
upload one or more files, copy the link, edit the note, replace the
contents under the same link, delete. It has its own read/write/delete
permission flags like the other areas, and every action is audited.

The objects go to the storage stack's public bucket and are served by
Garage at s3.asxp.io/public/<key>, not by this app. The app's key can
only put and delete there, so a public_files table is the record of
what was published. Keys get a random prefix: links are not guessable
and names never collide.

That host is same-site with the admin, so a file that can carry script
must not render there. Only a fixed list of types (images, PDF, plain
text, audio, video) is served inline; the rest, HTML and SVG included,
is stored as an attachment. Image metadata is stripped by default, as
for the bingo photos, because of GPS tags.

A per-file limit and a total quota keep the small disk on asxpio-ops
from filling up.

Assisted-by: Claude:fable-5-2
2026-11-12 05:52:10 +04:00
.forgejo/workflows admin: publish files to the public bucket 2026-11-12 05:52:10 +04:00
bin bingo: add a reachability monitor for the status page 2026-10-18 10:31:00 +04:00
db admin: publish files to the public bucket 2026-11-12 05:52:10 +04:00
lib admin: publish files to the public bucket 2026-11-12 05:52:10 +04:00
public invoices: let the admin set the payment date 2026-11-03 01:47:03 +04:00
test admin: publish files to the public bucket 2026-11-12 05:52:10 +04:00
views admin: publish files to the public bucket 2026-11-12 05:52:10 +04:00
.dockerignore docker: ship bin/monitor in the image 2026-10-18 10:36:01 +04:00
.env.example admin: publish files to the public bucket 2026-11-12 05:52:10 +04:00
.gitignore ltc payments 2026-06-08 18:43:01 +03:00
asxpio.rb admin: publish files to the public bucket 2026-11-12 05:52:10 +04:00
CLAUDE.md admin: publish files to the public bucket 2026-11-12 05:52:10 +04:00
config.ru bingo: move the public site to the datacenterbingo repo 2026-10-12 03:52:30 +04:00
docker-compose.yml bingo: add a reachability monitor for the status page 2026-10-18 10:31:00 +04:00
Dockerfile bingo: SEO pass and resized photos 2026-10-10 06:26:03 +04:00
flake.lock ruby rework with contact form 2026-05-05 00:45:27 +04:00
flake.nix gems: add pg, sequel, prawn, aws-sdk-s3 for invoicing 2026-05-26 17:29:21 +03:00
Gemfile tests: minitest + rack-test suite, bin/test with ephemeral Postgres 2026-07-02 17:32:14 +04:00
Gemfile.lock tests: minitest + rack-test suite, bin/test with ephemeral Postgres 2026-07-02 17:32:14 +04:00
Rakefile tests: minitest + rack-test suite, bin/test with ephemeral Postgres 2026-07-02 17:32:14 +04:00