API Anon.Cat

Adres

Zrób POST z plikiem na https://up.anon.cat/upload; domyślnie dostaniesz odpowiedź w json.

Jeśli chcesz coś innego niż json, dorzuć parametr mówiący jaki format, na przykład https://up.anon.cat/upload?output=csv.

Dozwolone typy odpowiedzi to: json, csv, text, html i gyazo.

Jeden plik na żądanie, do 1 GB.

Przykład z curl

curl -i -F files[]=@yourfile.jpeg https://up.anon.cat/upload

Wysyłka w ciele żądania

Plik możesz też wysłać prosto w ciele żądania zamiast formularzem multipart, podając nazwę w query. Przy dużych plikach to lepsze wyjście: rozmiar jest znany od razu, nie ma koperty multipart, i sama strona robi to właśnie tak.

curl -i -T yourfile.iso "https://up.anon.cat/upload?filename=yourfile.iso"

Obie drogi lecą strumieniem prosto do CDN, więc żadnej z nich nie ogranicza miejsce na dysku serwera.

Usuwanie metadanych

Z parametrem scrub=1 plik zostaje oczyszczony z metadanych w drodze do CDN: Exif i GPS z pliku JPEG, bloki tekstowe i eXIf z PNG, Exif i XMP z WebP. Piksele pozostają nietknięte, a wszystko, co nie jest jednym z tych trzech formatów, zapisywane jest dokładnie tak, jak zostało wysłane.

curl -i -T photo.jpg "https://up.anon.cat/upload?filename=photo.jpg&scrub=1"

Strona wysyła go przy każdym przesłaniu. Przy przesyłaniu wznawialnym parametr należy do wywołania /upload/finish, a nie do każdej części.

API notatek

Anon.Notes ma własne API i jest to coś innego niż punkt wysyłki powyżej: pisze do jednej konkretnej notatki, a nie do publicznego hostingu plików. Klucz tworzy się wewnątrz notatki, na jej stronie ustawień, i nie może zrobić nic żadnej innej notatce.

Do czego to służy: notatka jako odbiornik. Skrypt wdrożeniowy, zadanie CI, cron albo bot wpycha do niej linijki, a ty czytasz je później na telefonie. Nie ma się do czego rejestrować i nie ma czego odpytywać: notatka jest skrzynką.

Adres bazowy to https://anon.cat/api/notes/. Wszystko mówi w JSON-ie i wszystko uwierzytelnia się tak samo.

Klucze

Otwórz notatkę, wejdź w Ustawienia i utwórz klucz w sekcji API dla programistów. Pokazuje się raz - skopiuj go wtedy, bo po tej stronie nic już go potem nie odczyta.

Klucz ma zakres: append może dopisywać wpisy i niczego nie czyta, read może czytać i niczego nie zapisuje, a rw może jedno i drugie oraz zarządza powiadomieniami. Daj maszynie najwęższy zakres, przy którym wykona swoją pracę.

Wysyłaj go jako token bearer. W query stringu nigdy nie jest przyjmowany, bo query string trafia do logu dostępu.

curl -H "Authorization: Bearer $ANON_KEY" https://anon.cat/api/notes/ping

Unieważnienie klucza to jedno kliknięcie w tym samym panelu, działa natychmiast i nie rusza ani notatki, ani żadnego innego klucza. Twoje hasło nie pojawia się tu w ogóle, a klucz nie może go odczytać, zmienić ani usunąć notatki.

Dopisanie wpisu

POST na /api/notes/append, z tekstem w polu text albo jako całe ciało żądania. Oba sposoby robią to samo:

curl -H "Authorization: Bearer $ANON_KEY" -d "text=deploy 1.9.9 finished" https://anon.cat/api/notes/append

curl -H "Authorization: Bearer $ANON_KEY" -H "Content-Type: application/json" -d '{"text":"deploy 1.9.9 finished"}' https://anon.cat/api/notes/append

tail -n 20 build.log | curl -H "Authorization: Bearer $ANON_KEY" --data-binary @- https://anon.cat/api/notes/append

Notatka-dziennik dostaje jeden wpis więcej. Notatka-strona rośnie: tekst dokleja się na końcu dokumentu, nigdy na niego, żeby skrypt ze starą kopią nie skasował tego, co w międzyczasie napisałeś sam.

Odpowiedź to 201 ze stanem notatki. Dodaj notify=false, żeby pominąć powiadomienia w jednym wywołaniu - tego potrzebuje pętla nadrabiająca stare linijki.

Czytanie notatki

Kluczem read albo rw /api/notes/entries zwraca wpisy odszyfrowane, od najstarszego. limit i offset stronicują, a order=desc zaczyna od najnowszego, czego potrzebuje program regularnie odpytujący notatkę.

curl -H "Authorization: Bearer $ANON_KEY" "https://anon.cat/api/notes/entries?limit=10&order=desc"

/api/notes/note zwraca notatkę bez treści: ile ma wpisów, kiedy ostatnio do niej pisano i ile jej zostało, zanim zabrałoby ją czyszczenie nieużywanych. Każde sięgnięcie przez API również zeruje ten zegar, więc notatka, do której bot pisze codziennie, nigdy nie wygasa.

Powiadomienia

Notatka może dać znać, kiedy pisze do niej klucz - na Discordzie albo na Telegramie. Kiedy piszesz do niej sam, nie idzie nic: chodzi o to, żeby usłyszeć o maszynie, a nie o sobie.

Ustaw je w Ustawieniach albo przez API kluczem rw. Test leci w chwili utworzenia, więc źle skopiowany adres webhooka to kod odpowiedzi, który widzisz od razu.

curl -H "Authorization: Bearer $ANON_KEY" -H "Content-Type: application/json" -d '{"kind":"discord","url":"https://discord.com/api/webhooks/…","label":"deploys"}' https://anon.cat/api/notes/hooks

curl -H "Authorization: Bearer $ANON_KEY" -H "Content-Type: application/json" -d '{"kind":"telegram","bot":"123456789:AA…","chat":"-1001234567890"}' https://anon.cat/api/notes/hooks

Domyślnie powiadomienie nie niesie żadnego tekstu z notatki: mówi, że coś przyszło, ile tego było, który klucz to przysłał, i linkuje z powrotem tutaj - a notatka nadal stoi za swoim hasłem. Podaj preview=true, a poleci też sam wpis, czyli oddasz swój tekst Discordowi albo Telegramowi. To prawdziwy kompromis i dlatego jest wyłączony, dopóki o niego nie poprosisz.

Przyjmowane są wyłącznie adresy webhooków Discorda i boty Telegrama. Dowolny URL celowo nie jest oferowany: to ten serwer byłby tym, który po niego sięga.