diff options
| author | lost+skunk <[email protected]> | 2024-09-03 15:36:19 +0300 |
|---|---|---|
| committer | lost+skunk <[email protected]> | 2024-09-03 15:36:19 +0300 |
| commit | db53a8bd9004098e6a1507e5826a833fd9efa954 (patch) | |
| tree | b5530d4f9af52a4fbc8b9d7bb7c89bdba8ace250 /app/api.go | |
| parent | 14645842643c4e5fa542def715ac1629e182388c (diff) | |
| download | skunky-art-db53a8bd9004098e6a1507e5826a833fd9efa954.tar.gz skunky-art-db53a8bd9004098e6a1507e5826a833fd9efa954.tar.bz2 skunky-art-db53a8bd9004098e6a1507e5826a833fd9efa954.zip | |
Два API-эндпоинта
Diffstat (limited to 'app/api.go')
| -rw-r--r-- | app/api.go | 61 |
1 files changed, 50 insertions, 11 deletions
@@ -1,6 +1,7 @@ package app import ( + "encoding/json" "math/rand" "strings" @@ -8,27 +9,65 @@ import ( ) type API struct { - skunkyartLink *skunkyart + main *skunkyart +} + +type info struct { + Version string `json:"version"` + Settings settingsParams `json:"settings"` +} + +func (a API) Info() { + json, err := json.Marshal(info{ + Version: a.main.Version, + Settings: settingsParams{ + Nsfw: CFG.Nsfw, + Proxy: CFG.Proxy, + }, + }) + try(err) + a.main.Writer.Write(json) + return +} + +func (a API) Error(description string, status int) { + a.main.Writer.WriteHeader(status) + var response strings.Builder + response.WriteString(`{"error":"`) + response.WriteString(description) + response.WriteString(`"}`) + wr(a.main.Writer, response.String()) } func (a API) sendMedia(d *devianter.Deviation) { mediaUrl, name := devianter.UrlFromMedia(d.Media) - - var filename strings.Builder - filename.WriteString(`filename="`) - filename.WriteString(name) - filename.WriteString(`"`) - a.skunkyartLink.Writer.Header().Add("Content-Disposition", filename.String()) + a.main.SetFilename(name) if len(mediaUrl) != 0 { mediaUrl = mediaUrl[21:] dot := strings.Index(mediaUrl, ".") - a.skunkyartLink.DownloadAndSendMedia(mediaUrl[:dot], mediaUrl[dot+11:]) + a.main.Writer.Header().Del("Content-Type") + a.main.DownloadAndSendMedia(mediaUrl[:dot], mediaUrl[dot+11:]) } } +// TODO: сделать фильтры func (a API) Random() { - s, err := devianter.PerformSearch(string(rand.Intn(999)), rand.Intn(30), 'a') - try(err) - a.sendMedia(&s.Results[rand.Intn(len(s.Results))]) + for attempt := 1;; { + if attempt > 3 { + a.Error("Sorry, butt NSFW on this are disabled, and the instance failed to find a random art without NSFW", 500) + } + + s, err := devianter.PerformSearch(string(rand.Intn(999)), rand.Intn(30), 'a') + try(err) + deviation := &s.Results[rand.Intn(len(s.Results))] + + if deviation.NSFW && !CFG.Nsfw { + attempt++ + continue + } + + a.sendMedia(deviation) + return + } } |
