From 2dfeaae772e630ae361a35bf4680257d081560c1 Mon Sep 17 00:00:00 2001 From: lost+skunk Date: Tue, 30 Jul 2024 01:06:40 +0300 Subject: [PATCH 01/24] =?UTF-8?q?=D0=9F=D0=BE=D0=B4=D0=B3=D0=BE=D1=82?= =?UTF-8?q?=D0=BE=D0=B2=D0=BA=D0=B0=20=D0=BA=20=D1=80=D0=B5=D0=BB=D0=B8?= =?UTF-8?q?=D0=B7=D1=83=20v1.3.1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 39 +++--- TODO.md | 17 ++- app/config.go | 69 ++++++--- app/parsers.go | 217 +++++++++++++++-------------- app/router.go | 11 +- app/util.go | 54 +++---- app/wrapper.go | 51 ++++--- config.example.json | 10 +- css/skunky.css | 50 ++++++- go.mod | 2 + html/about.htm | 2 +- html/{list.htm => daily.htm} | 7 +- instances.json | 11 ++ misc/logo.png | Bin 0 -> 408075 bytes services/skunkyart.example.openrc | 13 ++ services/skunkyart.example.service | 11 ++ skunkyart.example.openrc | 11 -- 17 files changed, 357 insertions(+), 218 deletions(-) rename html/{list.htm => daily.htm} (75%) create mode 100644 misc/logo.png create mode 100755 services/skunkyart.example.openrc create mode 100644 services/skunkyart.example.service delete mode 100755 skunkyart.example.openrc diff --git a/README.md b/README.md index 9e30da0..ba6e4b3 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,14 @@ +SkunkyArt + [![Matrix room](https://img.shields.io/badge/matrix-000000?style=for-the-badge&logo=Matrix&logoColor=white)](https://go.kde.org/matrix/#/#skunkyart:ebloid.ru) # Instances -|Инстанс|Yggdrasil|I2P|Tor|NSFW|Proxifying|Country| -|:-----:|:-------:|:-:|:-:|:--:|:--------:|:-----:| +|Instance|Yggdrasil|I2P|Tor|NSFW|Proxifying|Country| +|:------:|:-------:|:-:|:-:|:--:|:--------:|:-----:| |[skunky.ebloid.ru](https://skunky.ebloid.ru/art)|[Yes](http://[201:eba5:d1fc:bf7b:cfcb:a811:4b8b:7ea3]/art)|No|No| No | No | Russia | |[clovius.club](https://skunky.clovius.club)|No|No|No| Yes | Yes | Sweden | |[bloat.cat](https://skunky.bloat.cat)|No|No|No| Yes | Yes | Romania | |[frontendfriendly.xyz](https://skunkyart.frontendfriendly.xyz)|No|No|No| Yes | Yes | Finland | +|[lumaeris.com](https://skunkyart.lumaeris.com)|No|No|No| Yes | Yes | US | # EN 🇺🇸 ## Description @@ -13,12 +16,12 @@ SkunkyArt 🦨 -- alternative frontend to DeviantArt, which will work without pr ## Config The sample config is in the `config.example.json` file. To specify your own path to the config, use the CLI argument `-c` or `--config`. * `listen` -- the address and port on which SkunkyArt will listen -* `base-path` -- the path to the instance. Example: "`base-path`:"/art/" -> https://skunky.ebloid.ru/art/ +* `base-path` -- the path to the instance. Example: `"base-path":"/art/"` -> https://skunky.ebloid.ru/art/ * `cache` -- caching system; default is off. -* * `path` -- the path to the cache -* * `lifetime` -- cache file lifetime; measured in Unix milliseconds. -* * `max-size` -- maximum file size in bytes. -* `dirs-to-memory` -- this setting determines which directories will be copied to RAM when SkunkyArt is started. Required + * `path` -- the path to the cache + * `lifetime` -- the lifetime of the file in the cache. Units: i, h, d, w, m, y. I -- minute, all other units I think are self-explanatory. + * `max-size` -- maximum file size in megabytes. +* `dirs-to-memory` -- this setting determines which directories will be copied to RAM when SkunkyArt is started. Mandatory * `download-proxy` -- proxy address for downloading files. ## Examples of reverse proxies Nginx: @@ -27,17 +30,18 @@ server { listen 443 ssl; server_name skunky.example.com; - location ((BASE URL)) { # if you have a separate subdomain for the frontend, insert '/' instead of '((BASE URL))'. - proxy_set_header Scheme $scheme; + location ((BASE URL)) { # if you have a separate subdomain for the frontend, insert '/' instead of '((BASE URL)))'. + proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header Host $host; proxy_http_version 1.1; proxy_pass http://((IP)):((PORT)); } } ``` +Pretty much business as usual, except for the [`X-Forwarded-Proto`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Forwarded-Proto) header setting. ## How do I add my instance to the list? -To do this, you must either make a PR by adding your instance to the `instances.json` file, or report it to the room in Matrix. I don't think it needs any description. However, be aware, this list has a couple rules: -1. the instance must not use Cloudflare. +To do this, you must either make a PR by adding your instance to the `instances.json` and `README.md` files, or create an Issue, or report it to the room in Matrix. I don't think it needs any description. However, be warned, this list has a couple rules: +1. the Instance must not use Cloudflare. 2. If your instance has modified source code, you need to publish it to any free platform. For example, Github and Gitlab are not. ## Acknowledgements * [Лис⚛](https://go.kde.org/matrix/#/@fox:matrix.org) -- helped me understand Go and gave me a lot of useful advice on this language. @@ -48,11 +52,11 @@ SkunkyArt 🦨 -- альтернативный фронтенд к DeviantArt, ## Конфиг Пример конфига находится в файле `config.example.json`. Чтобы указать свой путь до конфига, используйте CLI-аргумент `-c` или `--config`. * `listen` -- адрес и порт, на котором будет слушать SkunkyArt -* `base-path` -- путь к инстансу. Пример: "base-path": "/art/" -> https://skunky.ebloid.ru/art/ +* `base-path` -- путь к инстансу. Пример: `"base-path": "/art/"` -> https://skunky.ebloid.ru/art/ * `cache` -- система кеширования; по умолчанию - выкл. -* * `path` -- путь до кеша -* * `lifetime` -- время жизни файла в кеше; измеряется в Unix-миллисекундах -* * `max-size` -- максимальный размер файла в байтах + * `path` -- путь до кеша + * `lifetime` -- время жизни файла в кеше. Единицы измерения: i, h, d, w, m, y. I -- минута, всё остальные единицы измерения, я считаю понятными и без объяснения. + * `max-size` -- максимальный размер файла в мегабайтах * `dirs-to-memory` -- данная настройка определяет какие каталоги будут скопированы в ОЗУ при запуске SkunkyArt. Обязательна * `download-proxy` -- адрес прокси для загрузки файлов ## Примеры reverse-прокси @@ -63,15 +67,16 @@ server { server_name skunky.example.com; location ((BASE URL)) { # если у вас отдельный поддомен для фронтенда, вместо '((BASE URL))' вставляйте '/' - proxy_set_header Scheme $scheme; + proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header Host $host; proxy_http_version 1.1; proxy_pass http://((IP)):((PORT)); } } ``` +В целом, всё как обычно, за исключением настройки заголовка [`X-Forwarded-Proto`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Forwarded-Proto). ## Как добавить свой инстанс в список? -Чтобы это сделать, вы должны либо сделать PR, добавив в файл `instances.json` свой инстанс, либо сообщить о нём в комнате в Matrix. Думаю, он не нуждается в описании. Однако учтите, у этого списка есть пара правил: +Чтобы это сделать, вы должны либо сделать PR, добавив в файлы `instances.json` и `README.md` свой инстанс, либо создать Issue, или сообщить о нём в комнате в Matrix. Думаю, он не нуждается в описании. Однако учтите, у этого списка есть пара правил: 1. Инстанс не должен использовать Cloudflare. 2. Если ваш инстанс имеет модифицированный исходный код, то вам нужно опубликовать его на любую свободную площадку. Например, Github и Gitlab таковыми не являются. ## Благодарности diff --git a/TODO.md b/TODO.md index 2334695..cdb4c95 100644 --- a/TODO.md +++ b/TODO.md @@ -1,7 +1,16 @@ # v1.3.x -* Доделать парсинг описания -* Реализовать миниатюры и оптимизировать CSS под маленькие экраны +* Написать Makefile +* Почистить говнокод +* **Доделать парсинг описания** +* Избавиться от хардкода под Linux +* ~~Реализовать стрипы в ежедневных артах~~ +* ~~Исправить баг с навигацией по страницам~~ +* ~~Сделать единицы в конфиге более понятными~~ +* Добавить возможность включить темплейты в бинарник +* ~~Реализовать миниатюры и оптимизировать CSS под маленькие экраны~~ +* **Реализовать отображение контента, отличного от картинок (видео, аудио, etc)** +* Улучшить систему кеширования: добавить рейтинг для удаления и копирование изображений в ОЗУ # v1.4 +* Реализовать API * Реализовать темы -* Реализовать многоязычный интерфейс -* Реализовать API \ No newline at end of file +* Реализовать многоязычный интерфейс \ No newline at end of file diff --git a/app/config.go b/app/config.go index c848b9c..3fb8103 100644 --- a/app/config.go +++ b/app/config.go @@ -3,14 +3,18 @@ package app import ( "encoding/json" "os" + "regexp" + "strconv" "time" + + "git.macaw.me/skunky/devianter" ) type cache_config struct { Enabled bool Path string MaxSize int64 `json:"max-size"` - Lifetime int64 + Lifetime string UpdateInterval int64 `json:"update-interval"` } @@ -20,6 +24,7 @@ type config struct { BasePath string `json:"base-path"` Cache cache_config Proxy, Nsfw bool + UserAgent string `json:"user-agent"` DownloadProxy string `json:"download-proxy"` Dirs []string `json:"dirs-to-memory"` } @@ -33,31 +38,36 @@ var CFG = config{ Path: "cache", UpdateInterval: 1, }, - Dirs: []string{"html", "css"}, - Proxy: true, - Nsfw: true, + Dirs: []string{"html", "css"}, + UserAgent: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36", + Proxy: true, + Nsfw: true, } +var lifetimeParsed int64 + func ExecuteConfig() { go func() { - defer func() { - if r := recover(); r != nil { - recover() - } - }() for { - Templates["instances.json"] = string(Download("https://git.macaw.me/skunky/SkunkyArt/raw/branch/master/instances.json").Body) - time.Sleep(1 * time.Second) + func() { + defer func() { + if r := recover(); r != nil { + recover() + } + }() + Templates["instances.json"] = string(Download("https://git.macaw.me/skunky/SkunkyArt/raw/branch/master/instances.json").Body) + }() + time.Sleep(1 * time.Hour) } }() - const helpmsg = `SkunkyArt v1.3 [refactoring] + const helpmsg = `SkunkyArt v1.3.1 [CSS improvements for mobile and strips on Daily Deviations] Usage: - [-c|--config] - path to config - [-h|--help] - returns this message Example: ./skunkyart -c config.json -Copyright lost+skunk, X11. https://git.macaw.me/skunky/skunkyart/src/tag/v1.3` +Copyright lost+skunk, X11. https://git.macaw.me/skunky/skunkyart/src/tag/v1.3.1` a := os.Args for n, x := range a { @@ -75,15 +85,42 @@ Copyright lost+skunk, X11. https://git.macaw.me/skunky/skunkyart/src/tag/v1.3` if CFG.cfg != "" { f, err := os.ReadFile(CFG.cfg) - try_with_exitstatus(err, 1) + tryWithExitStatus(err, 1) - try_with_exitstatus(json.Unmarshal(f, &CFG), 1) + tryWithExitStatus(json.Unmarshal(f, &CFG), 1) if CFG.Cache.Enabled && !CFG.Proxy { exit("Incompatible settings detected: cannot use caching media content without proxy", 1) } - if CFG.Cache.MaxSize != 0 || CFG.Cache.Lifetime != 0 { + if CFG.Cache.Enabled { + if CFG.Cache.Lifetime != "" { + var duration int64 + day := 24 * time.Hour.Milliseconds() + numstr := regexp.MustCompile("[0-9]+").FindAllString(CFG.Cache.Lifetime, -1) + num, _ := strconv.Atoi(numstr[len(numstr)-1]) + + switch unit := CFG.Cache.Lifetime[len(CFG.Cache.Lifetime)-1:]; unit { + case "i": + duration = time.Minute.Milliseconds() + case "h": + duration = time.Hour.Milliseconds() + case "d": + duration = day + case "w": + duration = day * 7 + case "m": + duration = day * 30 + case "y": + duration = day * 360 + default: + exit("Invalid unit specified: "+unit, 1) + } + + lifetimeParsed = duration * int64(num) + } + CFG.Cache.MaxSize /= 1024 ^ 2 go InitCacheSystem() } + devianter.UserAgent = CFG.UserAgent } } diff --git a/app/parsers.go b/app/parsers.go index 0665476..b39e172 100644 --- a/app/parsers.go +++ b/app/parsers.go @@ -70,17 +70,81 @@ func (s skunkyart) ParseComments(c devianter.Comments) string { return cmmts.String() } -func (s skunkyart) DeviationList(devs []devianter.Deviation, content ...DeviationList) string { - var list strings.Builder +func (s skunkyart) DeviationList(devs []devianter.Deviation, allowAtom bool, content ...DeviationList) string { if s.Atom && s.Page > 1 { s.ReturnHTTPError(400) return "" - } else if s.Atom { + } + + var list, listContent strings.Builder + + for i, l := 0, len(devs); i < l; i++ { + data := &devs[i] + if preview, fullview := ParseMedia(data.Media, 320), ParseMedia(data.Media); !(data.NSFW && !CFG.Nsfw) { + if allowAtom && s.Atom { + id := strconv.Itoa(data.ID) + listContent.WriteString(``) + listContent.WriteString(data.Author.Username) + listContent.WriteString(``) + listContent.WriteString(data.Title) + listContent.WriteString(``) + listContent.WriteString(id) + listContent.WriteString(``) + listContent.WriteString(data.PublishedTime.UTC().Format("Mon, 02 Jan 2006 15:04:05 -0700")) + listContent.WriteString(``) + listContent.WriteString(``) + listContent.WriteString(data.Title) + listContent.WriteString(`

`) + listContent.WriteString(ParseDescription(data.TextContent)) + listContent.WriteString(`

`) + } else { + listContent.WriteString(`
`) + if fullview != "" && preview != "" { + listContent.WriteString(``) + } else { + listContent.WriteString(`

[ TEXT ]

`) + } + listContent.WriteString(`
`) + listContent.WriteString(data.Author.Username) + listContent.WriteString(" - ") + listContent.WriteString(data.Title) + + if data.NSFW { + listContent.WriteString(` [NSFW]`) + } + if data.AI { + listContent.WriteString(" [🤖]") + } + if data.DD { + listContent.WriteString(` [DD]`) + } + + listContent.WriteString("
") + } + } + } + + if allowAtom && s.Atom { list.WriteString(``) + list.WriteString(``) if s.Type == 0 { list.WriteString("Daily Deviations") - } else if len(devs) != 0 { + } else if s.Type == 'g' && len(devs) != 0 { list.WriteString(devs[0].Author.Username) } else { list.WriteString("SkunkyArt") @@ -90,75 +154,16 @@ func (s skunkyart) DeviationList(devs []devianter.Deviation, content ...Deviatio list.WriteString(`<link rel="alternate" href="`) list.WriteString(Host) list.WriteString(`"/>`) + + list.WriteString(listContent.String()) + + list.WriteString("</feed>") + wr(s.Writer, list.String()) } else { list.WriteString(`<div class="content">`) - } - for _, data := range devs { - if !(data.NSFW && !CFG.Nsfw) { - url := ParseMedia(data.Media) - if s.Atom { - id := strconv.Itoa(data.ID) - list.WriteString(`<entry><author><name>`) - list.WriteString(data.Author.Username) - list.WriteString(`</name></author><title>`) - list.WriteString(data.Title) - list.WriteString(``) - list.WriteString(id) - list.WriteString(``) - list.WriteString(data.PublishedTime.UTC().Format("Mon, 02 Jan 2006 15:04:05 -0700")) - list.WriteString(``) - list.WriteString(``) - list.WriteString(data.Title) - list.WriteString(`

`) - list.WriteString(ParseDescription(data.TextContent)) - list.WriteString(`

`) - } else { - list.WriteString(`") - } - } - } - - if s.Atom { - list.WriteString("
") - s.Writer.Write([]byte(list.String())) - return "" - } else { list.WriteString("") if content != nil { list.WriteString(s.NavBase(content[0])) @@ -177,7 +182,7 @@ type text struct { } func ParseDescription(dscr devianter.Text) string { - var parseddescription strings.Builder + var parsedDescription strings.Builder TagBuilder := func(content string, tags ...string) string { l := len(tags) for x := 0; x < l; x++ { @@ -274,16 +279,18 @@ func ParseDescription(dscr devianter.Text) string { switch x.Type { case "atomic": - d := entities[x.EntityRanges[0].Key] - parseddescription.WriteString(``) + if len(x.EntityRanges) != 0 { + d := entities[x.EntityRanges[0].Key] + parsedDescription.WriteString(``) + } case "unstyled": if l := len(Styles); l != 0 { for n, r := range Styles { @@ -292,31 +299,31 @@ func ParseDescription(dscr devianter.Text) string { tag = "h2" } - parseddescription.WriteString(x.Text[:r.From]) + parsedDescription.WriteString(x.Text[:r.From]) if len(urls) != 0 && len(x.EntityRanges) != 0 { ra := &x.EntityRanges[0] - parseddescription.WriteString(``) - parseddescription.WriteString(r.TXT) - parseddescription.WriteString(``) + parsedDescription.WriteString(``) + parsedDescription.WriteString(r.TXT) + parsedDescription.WriteString(``) } else if l > n+1 { - parseddescription.WriteString(r.TXT) + parsedDescription.WriteString(r.TXT) } - parseddescription.WriteString(TagBuilder(tag, x.Text[r.To:])) + parsedDescription.WriteString(TagBuilder(tag, x.Text[r.To:])) } } else { - parseddescription.WriteString(x.Text) + parsedDescription.WriteString(x.Text) } } - parseddescription.WriteString("
") + parsedDescription.WriteString("
") } } else if dl != 0 { for tt := html.NewTokenizer(strings.NewReader(dscr.Html.Markup)); ; { switch tt.Next() { case html.ErrorToken: - return parseddescription.String() + return parsedDescription.String() case html.StartTagToken, html.EndTagToken, html.SelfClosingTagToken: token := tt.Token() switch token.Data { @@ -324,11 +331,11 @@ func ParseDescription(dscr devianter.Text) string { for _, a := range token.Attr { if a.Key == "href" { url := DeleteTrackingFromUrl(a.Val) - parseddescription.WriteString(``) - parseddescription.WriteString(GetValueOfTag(tt)) - parseddescription.WriteString(" ") + parsedDescription.WriteString(``) + parsedDescription.WriteString(GetValueOfTag(tt)) + parsedDescription.WriteString(" ") } } case "img": @@ -344,24 +351,24 @@ func ParseDescription(dscr devianter.Text) string { } if title != "" { for x := -1; x < b; x++ { - parseddescription.WriteString(``) + parsedDescription.WriteString(``) } } } case "br", "li", "ul", "p", "b": - parseddescription.WriteString(token.String()) + parsedDescription.WriteString(token.String()) case "div": - parseddescription.WriteString("

") + parsedDescription.WriteString("

") } case html.TextToken: - parseddescription.Write(tt.Text()) + parsedDescription.Write(tt.Text()) } } } - return parseddescription.String() + return parsedDescription.String() } diff --git a/app/router.go b/app/router.go index 0dd2f79..33c3189 100644 --- a/app/router.go +++ b/app/router.go @@ -1,7 +1,6 @@ package app import ( - "io" "net/http" u "net/url" "strconv" @@ -44,7 +43,7 @@ func Router() { // функция, что управляет всем handle := func(w http.ResponseWriter, r *http.Request) { - if h := r.Header["Scheme"]; len(h) != 0 && h[0] == "https" { + if h := r.Header["X-Forwarded-Proto"]; len(h) != 0 && h[0] == "https" { Host = h[0] + "://" + r.Host } else { Host = "http://" + r.Host @@ -97,10 +96,14 @@ func Router() { skunky.About() case "stylesheet": w.Header().Add("content-type", "text/css") - io.WriteString(w, Templates["skunky.css"]) + wr(w, Templates["skunky.css"]) + case "favicon.ico": + wr(w, Templates["logo.png"]) } } http.HandleFunc("/", handle) - try_with_exitstatus(http.ListenAndServe(CFG.Listen, nil), 1) + println("SkunkyArt is listening on", CFG.Listen) + + tryWithExitStatus(http.ListenAndServe(CFG.Listen, nil), 1) } diff --git a/app/util.go b/app/util.go index 3f69e47..11f81a1 100644 --- a/app/util.go +++ b/app/util.go @@ -26,7 +26,7 @@ func try(e error) { println(e.Error()) } } -func try_with_exitstatus(err error, code int) { +func tryWithExitStatus(err error, code int) { if err != nil { exit(err.Error(), code) } @@ -87,7 +87,7 @@ func Download(url string) (d Downloaded) { req, e := http.NewRequest("GET", url, nil) try(e) - req.Header.Set("User-Agent", "Mozilla/5.0 (X11; Linux x86_64; rv:123.0) Gecko/20100101 Firefox/123.0.0") + req.Header.Set("User-Agent", CFG.UserAgent) resp, e := cli.Do(req) try(e) @@ -148,14 +148,14 @@ func InitCacheSystem() { try(e) for _, a := range dirnames { a = c.Path + "/" + a - if c.Lifetime != 0 { + if c.Lifetime != "" { now := time.Now().UnixMilli() f, _ := os.Stat(a) stat := f.Sys().(*syscall.Stat_t) time := time.Unix(stat.Ctim.Unix()).UnixMilli() - if time+c.Lifetime <= now { + if time+lifetimeParsed <= now { try(os.RemoveAll(a)) } } @@ -172,19 +172,19 @@ func InitCacheSystem() { func CopyTemplatesToMemory() { for _, dirname := range CFG.Dirs { dir, e := os.ReadDir(dirname) - try_with_exitstatus(e, 1) + tryWithExitStatus(e, 1) for _, x := range dir { file, e := os.ReadFile(dirname + "/" + x.Name()) - try_with_exitstatus(e, 1) + tryWithExitStatus(e, 1) Templates[x.Name()] = string(file) } } } /* PARSING HELPERS */ -func ParseMedia(media devianter.Media) string { - url := devianter.UrlFromMedia(media) +func ParseMedia(media devianter.Media, thumb ...int) string { + url := devianter.UrlFromMedia(media, thumb...) if len(url) != 0 && CFG.Proxy { url = url[21:] dot := strings.Index(url, ".") @@ -197,9 +197,10 @@ func ParseMedia(media devianter.Media) string { func ConvertDeviantArtUrlToSkunkyArt(url string) (output string) { if len(url) > 32 && url[27:32] != "stash" { url = url[27:] - toart := strings.Index(url, "/art/") - if toart != -1 { - output = UrlBuilder("post", url[:toart], url[toart+5:]) + firstshash := strings.Index(url, "/") + lastshash := firstshash + strings.Index(url[firstshash+1:], "/") + if lastshash != -1 { + output = UrlBuilder("post", url[:firstshash], url[lastshash+2:]) } } return @@ -236,13 +237,9 @@ type DeviationList struct { // FIXME: на некоротрых артах первая страница может вызывать полное отсутствие панели навигации. func (s skunkyart) NavBase(c DeviationList) string { - // TODO: сделать понятнее - // навигация по страницам var list strings.Builder - list.WriteString("
") - p := s.Page - // функция для генерации ссылок + list.WriteString("
") prevrev := func(msg string, page int, onpage bool) { if !onpage { list.WriteString(` 0 { - // назад - for x := p - 6; x < p && x > 0; x++ { - prevrev(strconv.Itoa(x), x, false) - } - - // вперёд - for x := p; x <= p+6 && c.Pages > p+6; x++ { - if x == p { - prevrev("", x, true) - x++ + for i, x := p-6, 0; (i <= c.Pages && i <= p+6) && x < 12; i++ { + if i > 0 { + var onPage bool + if i == p { + onPage = true } - if x > p { - prevrev(strconv.Itoa(x), x, false) - } + prevrev(strconv.Itoa(i), i, onPage) + x++ } } - // вперёд-назад if c.More { prevrev("| Next =>", p+1, false) } diff --git a/app/wrapper.go b/app/wrapper.go index ca39af7..51d76a9 100644 --- a/app/wrapper.go +++ b/app/wrapper.go @@ -48,6 +48,7 @@ type skunkyart struct { } SomeList string + DDStrips string Deviation struct { Post devianter.Post Related string @@ -93,7 +94,10 @@ func (s skunkyart) GRUser() { var g devianter.Group g.Name = s.Query - s.Templates.GroupUser.GR = g.GroupFunc() + var err error + s.Templates.GroupUser.GR, err = g.GetGroup() + try(err) + group := &s.Templates.GroupUser switch s.Type { @@ -135,7 +139,7 @@ func (s skunkyart) GRUser() { group.About.Interests += interest.String() } } - group.About.Comments = s.ParseComments(devianter.CommentsFunc( + group.About.Comments = s.ParseComments(devianter.GetComments( strconv.Itoa(group.GR.Gruser.ID), "", s.Page, @@ -161,9 +165,11 @@ func (s skunkyart) GRUser() { s.Page++ } - gallery := g.Gallery(s.Page, folderid) + gallery, err := g.GetGallery(s.Page, folderid) + try(err) + if folderid > 0 { - group.Gallery.List = s.DeviationList(gallery.Content.Results, DeviationList{ + group.Gallery.List = s.DeviationList(gallery.Content.Results, true, DeviationList{ More: gallery.Content.HasMore, }) } else { @@ -204,7 +210,7 @@ func (s skunkyart) GRUser() { } if x.Name == "folder_deviations" { - group.Gallery.List = s.DeviationList(x.ModuleData.Folder.Deviations, DeviationList{ + group.Gallery.List = s.DeviationList(x.ModuleData.Folder.Deviations, true, DeviationList{ Pages: x.ModuleData.Folder.Pages, More: x.ModuleData.Folder.HasMore, }) @@ -227,7 +233,7 @@ func (s skunkyart) Deviation(author, postname string) { post := &s.Templates.Deviation id := id_search[len(id_search)-1] - post.Post = devianter.DeviationFunc(id, author) + post.Post = devianter.GetDeviation(id, author) if post.Post.Deviation.TextContent.Excerpt != "" { post.Post.Description = ParseDescription(post.Post.Deviation.TextContent) @@ -239,7 +245,7 @@ func (s skunkyart) Deviation(author, postname string) { post.Post.IMG = ParseMedia(post.Post.Deviation.Media) for _, x := range post.Post.Deviation.Extended.RelatedContent { if len(x.Deviations) != 0 { - post.Related += s.DeviationList(x.Deviations) + post.Related += s.DeviationList(x.Deviations, false) } } @@ -259,7 +265,7 @@ func (s skunkyart) Deviation(author, postname string) { post.Post.Comments.Cursor = "" } - post.Comments = s.ParseComments(devianter.CommentsFunc(id, post.Post.Comments.Cursor, s.Page, 1)) + post.Comments = s.ParseComments(devianter.GetComments(id, post.Post.Comments.Cursor, s.Page, 1)) s.ExecuteTemplate("deviantion.htm", &s) } else { @@ -268,25 +274,38 @@ func (s skunkyart) Deviation(author, postname string) { } func (s skunkyart) DD() { - dd := devianter.DailyDeviationsFunc(s.Page) - s.Templates.SomeList = s.DeviationList(dd.Deviations, DeviationList{ + dd := devianter.GetDailyDeviations(s.Page) + var strips strings.Builder + for _, x := range dd.Strips { + strips.WriteString(`

# `) + strips.WriteString(x.Title) + strips.WriteString(`

`) + + strips.WriteString(s.DeviationList(x.Deviations, false)) + } + s.Templates.DDStrips = strips.String() + s.Templates.SomeList = s.DeviationList(dd.Deviations, true, DeviationList{ Pages: 0, More: dd.HasMore, }) if !s.Atom { - s.ExecuteTemplate("list.htm", &s) + s.ExecuteTemplate("daily.htm", &s) } } func (s skunkyart) Search() { s.Atom = false - var e error + var err error ss := &s.Templates.Search switch s.Type { case 'a', 't': - ss.Content, e = devianter.SearchFunc(s.Query, s.Page, s.Type) + ss.Content, err = devianter.PerformSearch(s.Query, s.Page, s.Type) case 'g': - ss.Content, e = devianter.SearchFunc(s.Query, s.Page, s.Type, s.Args.Get("usr")) + ss.Content, err = devianter.PerformSearch(s.Query, s.Page, s.Type, s.Args.Get("usr")) case 'r': // скраппер, поскольку девиантартовцы зажопили гостевое API для поиска групп var ( usernames = make(map[int]string) @@ -333,10 +352,10 @@ func (s skunkyart) Search() { default: s.ReturnHTTPError(400) } - try(e) + try(err) if s.Type != 'r' { - ss.List = s.DeviationList(ss.Content.Results, DeviationList{ + ss.List = s.DeviationList(ss.Content.Results, false, DeviationList{ Pages: ss.Content.Pages, More: ss.Content.HasMore, }) diff --git a/config.example.json b/config.example.json index 1a78535..b4d1ce2 100644 --- a/config.example.json +++ b/config.example.json @@ -4,15 +4,17 @@ "cache": { "enabled": true, "path": "/home/skunk/projects/skunkyart/cache", - "lifetime": null, - "max-size": 100000, + "lifetime": "1w", + "max-size": 1024, "update-interval": 5 }, "dirs-to-memory": [ "/home/skunk/projects/skunkyart/html", - "/home/skunk/projects/skunkyart/css" + "/home/skunk/projects/skunkyart/css", + "/home/skunk/projects/skunkyart/misc" ], - "download-proxy": null, + "download-proxy": "http://127.0.0.1:8080", + "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36", "proxy": true, "nsfw": false } diff --git a/css/skunky.css b/css/skunky.css index 9d041f0..2126968 100644 --- a/css/skunky.css +++ b/css/skunky.css @@ -131,28 +131,64 @@ form input, button, select { } /* SCREEN OPTIMISATIONS */ -@media screen and (orientation: portrait) { - header { - scale: 155%; - justify-content: center; +@media (orientation: portrait) { + * { + font-size: 120% } + + ul { + font-size: 80% + } + + center form { + font-size: 60% + } + + header form { + font-size: 60%; + } + header, center { + text-align: center; + display: block; + clear: both; + font-size: 200%; + } + .content { margin: auto; display: inherit; scale: 100%; } .block { - max-width: 60%; + margin-top: 10%; + max-width: 200%; + } + .folder-item { + width: 25% + } + .folders { + display: flexbox; + justify-content: center + } + figure img { + width: 10% + } + figure a img { + width: 100% + } + .msg { + font-size: 60%; + max-width: 80% } } -@media screen and (max-width: 1462px) { +@media (max-width: 1462px) and (orientation: landscape) { .block { max-width: 30%; } } -@media screen and (min-width: 788px) and (max-width: 884px) { +@media (min-width: 788px) and (max-width: 884px) { .block { max-width: 35%; } diff --git a/go.mod b/go.mod index 4000554..7e5e771 100644 --- a/go.mod +++ b/go.mod @@ -2,6 +2,8 @@ module skunkyart go 1.22.3 +replace git.macaw.me/skunky/devianter v0.2.0 => /home/skunk/projects/devianter + require ( git.macaw.me/skunky/devianter v0.2.0 golang.org/x/net v0.27.0 diff --git a/html/about.htm b/html/about.htm index 54e5418..31f58c8 100644 --- a/html/about.htm +++ b/html/about.htm @@ -58,6 +58,6 @@ {{end}} -

Copyright lost+skunk, X11. SkunkyArt v1.3

+

Copyright lost+skunk, X11. SkunkyArt v1.3.1

\ No newline at end of file diff --git a/html/list.htm b/html/daily.htm similarity index 75% rename from html/list.htm rename to html/daily.htm index b2472c4..22e9275 100644 --- a/html/list.htm +++ b/html/daily.htm @@ -1,7 +1,7 @@ - SkunkyArt + SkunkyArt | Daily Deviations
@@ -17,6 +17,11 @@ + {{if ne .Templates.DDStrips ""}} +

# Strips

+ {{.Templates.DDStrips}} + {{end}} +

# Content

{{.Templates.SomeList}}
\ No newline at end of file diff --git a/instances.json b/instances.json index ebb75c2..eeb329a 100644 --- a/instances.json +++ b/instances.json @@ -44,6 +44,17 @@ "nsfw": true, "proxy": true } + }, + { + "title": "lumaeris.com", + "country": "US", + "urls": [{ + "clearnet": "https://skunkyart.lumaeris.com" + }], + "settings": { + "nsfw": true, + "proxy": true + } } ] } \ No newline at end of file diff --git a/misc/logo.png b/misc/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..e895de761bfbc760bfcf81d08aec69272889599d GIT binary patch literal 408075 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%0A?jjz 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 z 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%0A)}mY5*wGUaw8$Rf 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�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 +# command_args="-c $directory/config.json" # if SA wasn't start, try to uncomment this line +command=$directory/skunkyart + +name="SkunkyArt" +description="Privacy frontend for deviantart.com" +supervisor=supervise-daemon + +depend() { + need net +} \ No newline at end of file diff --git a/services/skunkyart.example.service b/services/skunkyart.example.service new file mode 100644 index 0000000..6531cab --- /dev/null +++ b/services/skunkyart.example.service @@ -0,0 +1,11 @@ +# Note: i didn't use systemd, so it can be not works :) + +[Unit] +Description=Privacy frontend for deviantart.com + +[Service] +Directory= +ExecStart= + +[Install] +WantedBy=multi-user.target diff --git a/skunkyart.example.openrc b/skunkyart.example.openrc deleted file mode 100755 index aba74ce..0000000 --- a/skunkyart.example.openrc +++ /dev/null @@ -1,11 +0,0 @@ -#!/sbin/openrc-run -name="SkunkyArt" -description="Privacy frontend for deviantart.com" -supervisor=supervise-daemon -command= -command_args="-c " -directory="" - -depend() { - need net -} \ No newline at end of file From c5514c3875b9b782688047d547dfd6663a5b77bb Mon Sep 17 00:00:00 2001 From: lost+skunk Date: Thu, 1 Aug 2024 22:48:05 +0300 Subject: [PATCH 02/24] v1.3 --- INSTANCES.md | 7 ++ README.md | 90 ++++------------ SETUP-RU.md | 42 ++++++++ SETUP.md | 42 ++++++++ TODO.md | 5 +- app/cli.go | 166 +++++++++++++++++++++++++++++ app/config.go | 48 ++------- app/router.go | 6 +- app/util.go | 23 +++- app/wrapper.go | 112 +++++++++---------- config.example.json | 14 +-- go.mod | 4 +- go.sum | 4 +- html/about.htm | 63 +++++------ html/daily.htm | 1 + html/deviantion.htm | 1 + html/gruser.htm | 1 + html/index.htm | 1 + html/search.htm | 1 + instances.json | 20 ++-- main.go | 18 +++- services/skunkyart.example.openrc | 23 ++-- services/skunkyart.example.service | 2 +- 23 files changed, 445 insertions(+), 249 deletions(-) create mode 100644 INSTANCES.md create mode 100644 SETUP-RU.md create mode 100644 SETUP.md create mode 100644 app/cli.go diff --git a/INSTANCES.md b/INSTANCES.md new file mode 100644 index 0000000..1637971 --- /dev/null +++ b/INSTANCES.md @@ -0,0 +1,7 @@ +|Instance|Yggdrasil|I2P|Tor|NSFW|Proxifying|Modified Sources|Country| +|:------:|:-------:|:-:|:-:|:--:|:--------:|:--------------:|:-----:| +|[skunky.ebloid.ru](https://skunky.ebloid.ru/art)|[Yes](http://[201:eba5:d1fc:bf7b:cfcb:a811:4b8b:7ea3]/art)|No|No| No | No | No | Russia | +|[clovius.club](https://skunky.clovius.club)|No|No|No| Yes | Yes | No | Sweden | +|[bloat.cat](https://skunky.bloat.cat)|No|No|No| Yes | Yes | No | Romania | +|[frontendfriendly.xyz](https://skunkyart.frontendfriendly.xyz)|No|No|No| Yes | Yes | No | Finland | +|[lumaeris.com](https://skunkyart.lumaeris.com)|No|No|No| Yes | Yes | No | US | \ No newline at end of file diff --git a/README.md b/README.md index ba6e4b3..6eaa831 100644 --- a/README.md +++ b/README.md @@ -1,83 +1,33 @@ -SkunkyArt +SkunkyArt [![Matrix room](https://img.shields.io/badge/matrix-000000?style=for-the-badge&logo=Matrix&logoColor=white)](https://go.kde.org/matrix/#/#skunkyart:ebloid.ru) -# Instances -|Instance|Yggdrasil|I2P|Tor|NSFW|Proxifying|Country| -|:------:|:-------:|:-:|:-:|:--:|:--------:|:-----:| -|[skunky.ebloid.ru](https://skunky.ebloid.ru/art)|[Yes](http://[201:eba5:d1fc:bf7b:cfcb:a811:4b8b:7ea3]/art)|No|No| No | No | Russia | -|[clovius.club](https://skunky.clovius.club)|No|No|No| Yes | Yes | Sweden | -|[bloat.cat](https://skunky.bloat.cat)|No|No|No| Yes | Yes | Romania | -|[frontendfriendly.xyz](https://skunkyart.frontendfriendly.xyz)|No|No|No| Yes | Yes | Finland | -|[lumaeris.com](https://skunkyart.lumaeris.com)|No|No|No| Yes | Yes | US | + +Instances: [`INSTANCES.md`](https://git.macaw.me/skunky/SkunkyArt/src/branch/master/INSTANCES.md) # EN 🇺🇸 ## Description -SkunkyArt 🦨 -- alternative frontend to DeviantArt, which will work without problems even on quite old hardware, due to the lack of JavaScript. -## Config -The sample config is in the `config.example.json` file. To specify your own path to the config, use the CLI argument `-c` or `--config`. -* `listen` -- the address and port on which SkunkyArt will listen -* `base-path` -- the path to the instance. Example: `"base-path":"/art/"` -> https://skunky.ebloid.ru/art/ -* `cache` -- caching system; default is off. - * `path` -- the path to the cache - * `lifetime` -- the lifetime of the file in the cache. Units: i, h, d, w, m, y. I -- minute, all other units I think are self-explanatory. - * `max-size` -- maximum file size in megabytes. -* `dirs-to-memory` -- this setting determines which directories will be copied to RAM when SkunkyArt is started. Mandatory -* `download-proxy` -- proxy address for downloading files. -## Examples of reverse proxies -Nginx: -```apache -server { - listen 443 ssl; - server_name skunky.example.com; - - location ((BASE URL)) { # if you have a separate subdomain for the frontend, insert '/' instead of '((BASE URL)))'. - proxy_set_header X-Forwarded-Proto $scheme; - proxy_set_header Host $host; - proxy_http_version 1.1; - proxy_pass http://((IP)):((PORT)); - } -} -``` -Pretty much business as usual, except for the [`X-Forwarded-Proto`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Forwarded-Proto) header setting. -## How do I add my instance to the list? -To do this, you must either make a PR by adding your instance to the `instances.json` and `README.md` files, or create an Issue, or report it to the room in Matrix. I don't think it needs any description. However, be warned, this list has a couple rules: +SkunkyArt 🦨 — alternative frontend for DevianArt, which works without JS. +## Setup +The sample config is in the `config.example.json` file. For custom config, use `--config` option. +See the [`SETUP.md`](https://git.macaw.me/skunky/SkunkyArt/src/branch/master/SETUP.md) file for more info about directives. +## Adding instance to the list +To do this, you must either make a PR by adding your instance to the `instances.json` and `INSTANCES.md` files (you can use `--add-instance` cli-argument to automatically add the instance to these files), or create an Issue, or report it to the room in Matrix. Keep in mind that your instance must comply with the following rules: 1. the Instance must not use Cloudflare. 2. If your instance has modified source code, you need to publish it to any free platform. For example, Github and Gitlab are not. ## Acknowledgements -* [Лис⚛](https://go.kde.org/matrix/#/@fox:matrix.org) -- helped me understand Go and gave me a lot of useful advice on this language. +* [Лис⚛](https://go.kde.org/matrix/#/@fox:matrix.org) — helped me understand Go and gave me a lot of useful advice on this language. +* [meoww](https://codeberg.org/meoww) — translated some sentences into English and wrote a service for openrc # RU 🇷🇺 ## Описание -SkunkyArt 🦨 -- альтернативный фронтенд к DeviantArt, который будет работать без проблем даже на довольно старом оборудовании, за счёт отсутствия JavaScript. -## Конфиг -Пример конфига находится в файле `config.example.json`. Чтобы указать свой путь до конфига, используйте CLI-аргумент `-c` или `--config`. -* `listen` -- адрес и порт, на котором будет слушать SkunkyArt -* `base-path` -- путь к инстансу. Пример: `"base-path": "/art/"` -> https://skunky.ebloid.ru/art/ -* `cache` -- система кеширования; по умолчанию - выкл. - * `path` -- путь до кеша - * `lifetime` -- время жизни файла в кеше. Единицы измерения: i, h, d, w, m, y. I -- минута, всё остальные единицы измерения, я считаю понятными и без объяснения. - * `max-size` -- максимальный размер файла в мегабайтах -* `dirs-to-memory` -- данная настройка определяет какие каталоги будут скопированы в ОЗУ при запуске SkunkyArt. Обязательна -* `download-proxy` -- адрес прокси для загрузки файлов -## Примеры reverse-прокси -Nginx: -```apache -server { - listen 443 ssl; - server_name skunky.example.com; - - location ((BASE URL)) { # если у вас отдельный поддомен для фронтенда, вместо '((BASE URL))' вставляйте '/' - proxy_set_header X-Forwarded-Proto $scheme; - proxy_set_header Host $host; - proxy_http_version 1.1; - proxy_pass http://((IP)):((PORT)); - } -} -``` -В целом, всё как обычно, за исключением настройки заголовка [`X-Forwarded-Proto`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Forwarded-Proto). -## Как добавить свой инстанс в список? -Чтобы это сделать, вы должны либо сделать PR, добавив в файлы `instances.json` и `README.md` свой инстанс, либо создать Issue, или сообщить о нём в комнате в Matrix. Думаю, он не нуждается в описании. Однако учтите, у этого списка есть пара правил: -1. Инстанс не должен использовать Cloudflare. +SkunkyArt 🦨 — альтернативный фронтенд к DeviantArt, который полностью работает без JS (JavaScript). +## Настройка +Пример конфига находится в файле `config.example.json`. Чтобы указать свой конфиг, используйте cli-аргумент `--config`. +См. [`SETUP-RU.md`](https://git.macaw.me/skunky/SkunkyArt/src/branch/master/SETUP-RU.md) для информации о настройки фронтенда. +## Добавление инстанса в список +Чтобы это сделать, вы должны либо сделать PR, добавив в файлы `instances.json` и `INSTANCES.md` свой инстанс (можете воспользоваться cli-аргументом `--add-instance`, который автоматически это сделает), либо создать Issue, или сообщить о нём в комнате в Matrix. Учтите, что ваш инстанс должен соблюсти следущие правила: +1. Инстанс не должен использовать Cloudflare итп. 2. Если ваш инстанс имеет модифицированный исходный код, то вам нужно опубликовать его на любую свободную площадку. Например, Github и Gitlab таковыми не являются. ## Благодарности -* [Лис⚛](https://go.kde.org/matrix/#/@fox:matrix.org) -- помог разобраться в Go и много чего полезного посоветовал по этому языку. \ No newline at end of file +* [Лис⚛](https://go.kde.org/matrix/#/@fox:matrix.org) — помог разобраться в Go и много чего полезного посоветовал по этому языку. +* [meoww](https://codeberg.org/meoww) — перевела некоторые предложения на английский язык и написала сервис для openrc \ No newline at end of file diff --git a/SETUP-RU.md b/SETUP-RU.md new file mode 100644 index 0000000..6ff3c23 --- /dev/null +++ b/SETUP-RU.md @@ -0,0 +1,42 @@ +[English version 🇬🇧](https://git.macaw.me/skunky/SkunkyArt/src/branch/master/SETUP.md) + +# Единицы измерения +Размер файла в кеше измеряется в мегабайтах.
+Единицы времени: +* `i` — минуты +* `h` — часы +* `w` — недели +* `m` — месяца +* `y` — года + +# Конфигурация +* `listen` — IP и порт для слушанья; заполняется по такой форме: ip:port +* `uri` — URI инстанса. Пример: `"uri":"/art/"` -> https://skunky.ebloid.ru/art/ +* `cache` — Система кеширования; по умолчанию выключена. + * `enabled` — Состояние системы кеширования; требуется булёвое значение + * `path` — Полный путь до каталога, куда будет сохраняться кеш + * `lifetime` — Время жизни файла в кеше, требует целочисленное значение, дополненное суффиксом времени (см. 'Единицы времени') + * `max-size` — Максимальный размер файла + * `update-interval` — Интервал для автоматической ротации кеша +* `dirs-to-memory` — Массив, заполнив который скопируются все файлы из указанных каталогов +* `download-proxy` — Адрес прокси для загрузки файлов +* `user-agent` — Строка, которая используется в качестве User-Agent'а + +# Настройка обратного прокси +Если вы собираетесь хостить инстанс в Интернете, то вам следует настроить заголовок прокси [`X-Forwarded-Proto`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Forwarded-Proto). В противном случае, все ссылки на вашем инстансе будут вида "http". Ниже есть информация о том, как настроить обратное проксирование: + +Nginx: +```apache +server { + listen 443 ssl; + server_name skunky.example.com; + + # Если используется поддомен, то вместо ((BASE_URL)), укажите '/'. + location ((BASE_URL)) { + proxy_set_header X-Forwarded-Proto $scheme; + proxy_set_header Host $host; + proxy_http_version 1.1; + proxy_pass http://((IP)):((PORT)); + } +} +``` \ No newline at end of file diff --git a/SETUP.md b/SETUP.md new file mode 100644 index 0000000..ab30165 --- /dev/null +++ b/SETUP.md @@ -0,0 +1,42 @@ +[Версия на русском языке 🇷🇺](https://git.macaw.me/skunky/SkunkyArt/src/branch/master/SETUP-RU.md) + +# Units +Maximum file size in megabytes, requires numeric value.
+Time units: +* `i` — minutes +* `h` — hours +* `w` — weeks +* `m` — months +* `y` — years + +# Config +* `listen` — IP and port to listen on in the following form: ip:port +* `uri` — Instance URI. Example: `"uri":"/art/"` -> https://skunky.ebloid.ru/art/ +* `cache` — Caching system; default is off. + * `enabled` — Caching system state, requires boolean value + * `path` — Path to cache directory, requires absolute filesystem path + * `lifetime` — Cached file life time, requires numeric value, followed by multiplicative suffix (see Time Units for details) + * `max-size` — Maximum file size in megabytes + * `update-interval` — Automatic rotation interval +* `dirs-to-memory` — This setting determines which directories will be copied to RAM when SkunkyArt is started. Mandatory +* `download-proxy` — Proxy address for downloading files. +* `user-agent` — String, which SkunkyArt uses as UA + +# Setting up reverse proxy +Pretty much business as usual, except for the [`X-Forwarded-Proto`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Forwarded-Proto) header setting. + +Nginx example configuration: +```apache +server { + listen 443 ssl; + server_name skunky.example.com; + + # In case of subdomain, use / instend of ((BASE_URL)) + location ((BASE_URL)) { + proxy_set_header X-Forwarded-Proto $scheme; + proxy_set_header Host $host; + proxy_http_version 1.1; + proxy_pass http://((IP)):((PORT)); + } +} +``` \ No newline at end of file diff --git a/TODO.md b/TODO.md index cdb4c95..ee50111 100644 --- a/TODO.md +++ b/TODO.md @@ -1,14 +1,17 @@ # v1.3.x -* Написать Makefile * Почистить говнокод * **Доделать парсинг описания** * Избавиться от хардкода под Linux * ~~Реализовать стрипы в ежедневных артах~~ +* Сделать нормальное отображение ошибок * ~~Исправить баг с навигацией по страницам~~ * ~~Сделать единицы в конфиге более понятными~~ * Добавить возможность включить темплейты в бинарник * ~~Реализовать миниатюры и оптимизировать CSS под маленькие экраны~~ +* Написать Makefile и скрипт для автоматического развёртывания инстанса * **Реализовать отображение контента, отличного от картинок (видео, аудио, etc)** +* Исправить баг с эмоджи, когда некоторые кастомные эмоции могут не отображаться +* Добавить флаг сборки, который позволит собрать бинарник со встроенными темплейтами * Улучшить систему кеширования: добавить рейтинг для удаления и копирование изображений в ОЗУ # v1.4 * Реализовать API diff --git a/app/cli.go b/app/cli.go new file mode 100644 index 0000000..4d4f849 --- /dev/null +++ b/app/cli.go @@ -0,0 +1,166 @@ +package app + +import ( + "bufio" + "bytes" + "encoding/json" + "os" + "time" +) + +func ExecuteCommandLineArguments() { + const helpmsg = `SkunkyArt v1.3.1 [CSS improvements for mobile and the strips on Daily Deviations] +Usage: + - [-c|--config] | path to config + - [-a|--add-instance] | generates 'instances.json' and 'INSTANCES.md' files with ur instance + - [-h|--help] | returns this message +Example: + ./skunkyart -c config.json +Copyright lost+skunk, X11. https://git.macaw.me/skunky/skunkyart/src/tag/v1.3.1` + + a := os.Args[1:] + for n, x := range a { + switch x { + case "-c", "--config": + if len(a) >= 2 { + CFG.cfg = a[n+1] + } else { + exit("Not enought arguments", 1) + } + case "-h", "--help": + exit(helpmsg, 0) + case "-a", "--add-instance": + addInstance() + } + } +} + +type settingsUrls struct { + I2P string `json:"i2p,omitempty"` + Ygg string `json:"ygg,omitempty"` + Tor string `json:"tor,omitempty"` + Clearnet string `json:"clearnet,omitempty"` +} + +type settingsParams struct { + Nsfw bool `json:"nsfw"` + Proxy bool `json:"proxy"` +} + +type settings struct { + Title string `json:"title"` + Country string `json:"country"` + ModifiedSrc string `json:"modified-src,omitempty"` + Urls settingsUrls `json:"urls"` + Settings settingsParams `json:"settings"` +} + +func addInstance() { + prompt := func(txt string, necessary bool) string { + input := bufio.NewScanner(os.Stdin) + for { + print(txt) + print(": ") + input.Scan() + + if i := input.Text(); necessary && i == "" { + println("Please specify the", txt) + } else { + return i + } + } + } + + var settingsVar struct { + Instances []settings `json:"instances"` + } + instancesJson, err := os.OpenFile("instances.test.json", os.O_CREATE|os.O_WRONLY, 0644) + try(err) + defer instancesJson.Close() + + instances, err := os.OpenFile("INSTANCES.md", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644) + try(err) + defer instances.Close() + + for { + if Templates["instances.json"] == "" { + print("\rDownloading instance list...") + } else { + println("\r\033[2KDownloaded!") + try(json.Unmarshal([]byte(Templates["instances.json"]), &settingsVar)) + + settingsVar.Instances = append(settingsVar.Instances, settings{ + Title: prompt("Title", true), + Country: prompt("Country", true), + ModifiedSrc: prompt("Link to modified sources", false), + Settings: settingsParams{ + Nsfw: CFG.Nsfw, + Proxy: CFG.Proxy, + }, + Urls: settingsUrls{ + Clearnet: prompt("Clearnet link", false), + Ygg: prompt("Yggdrasil link", false), + Tor: prompt("Onion link", false), + I2P: prompt("I2P link", false), + }, + }) + + j, err := json.MarshalIndent(&settingsVar, "", " ") + try(err) + + instancesJson.Write(j) + + settingsVar := &settingsVar.Instances[len(settingsVar.Instances)-1] + var mdstr bytes.Buffer + + mdstr.WriteString("\n|") + if settingsVar.Urls.Clearnet != "" { + mdstr.WriteString("[") + mdstr.WriteString(settingsVar.Title) + mdstr.WriteString("](") + mdstr.WriteString(settingsVar.Urls.Clearnet) + mdstr.WriteString(")") + } else { + mdstr.WriteString(settingsVar.Title) + } + mdstr.WriteString("|") + + urls := []string{settingsVar.Urls.Ygg, settingsVar.Urls.I2P, settingsVar.Urls.Tor} + for i, l := 0, len(urls); i < l; i++ { + url := urls[i] + if url != "" { + mdstr.WriteString("[Yes](") + mdstr.WriteString(url) + mdstr.WriteString(")|") + } else { + mdstr.WriteString("No|") + } + } + + settings := []bool{settingsVar.Settings.Nsfw, settingsVar.Settings.Proxy} + for i, l := 0, len(settings); i < l; i++ { + if settings[i] { + mdstr.WriteString("Yes|") + } else { + mdstr.WriteString("No|") + } + } + + if settingsVar.ModifiedSrc != "" { + mdstr.WriteString("[Yes](") + mdstr.WriteString(settingsVar.ModifiedSrc) + mdstr.WriteString(")|") + } else { + mdstr.WriteString("No|") + } + + mdstr.WriteString(settingsVar.Country) + mdstr.WriteString("|") + + instances.Write(mdstr.Bytes()) + break + } + time.Sleep(500 * time.Millisecond) + } + exit("Done! Now add the files 'instances.json' and 'INSTANCES.md' to the 'master' branch in the repository https://git.macaw.me/skunky/SkunkyArt", 0) +} diff --git a/app/config.go b/app/config.go index 3fb8103..a6ac756 100644 --- a/app/config.go +++ b/app/config.go @@ -21,7 +21,7 @@ type cache_config struct { type config struct { cfg string Listen string - BasePath string `json:"base-path"` + URI string `json:"uri"` Cache cache_config Proxy, Nsfw bool UserAgent string `json:"user-agent"` @@ -30,15 +30,15 @@ type config struct { } var CFG = config{ - cfg: "config.json", - Listen: "127.0.0.1:3003", - BasePath: "/", + cfg: "config.json", + Listen: "127.0.0.1:3003", + URI: "/", Cache: cache_config{ - Enabled: true, + Enabled: false, Path: "cache", UpdateInterval: 1, }, - Dirs: []string{"html", "css"}, + Dirs: []string{"html", "css", "misc"}, UserAgent: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36", Proxy: true, Nsfw: true, @@ -47,42 +47,6 @@ var CFG = config{ var lifetimeParsed int64 func ExecuteConfig() { - go func() { - for { - func() { - defer func() { - if r := recover(); r != nil { - recover() - } - }() - Templates["instances.json"] = string(Download("https://git.macaw.me/skunky/SkunkyArt/raw/branch/master/instances.json").Body) - }() - time.Sleep(1 * time.Hour) - } - }() - - const helpmsg = `SkunkyArt v1.3.1 [CSS improvements for mobile and strips on Daily Deviations] -Usage: - - [-c|--config] - path to config - - [-h|--help] - returns this message -Example: - ./skunkyart -c config.json -Copyright lost+skunk, X11. https://git.macaw.me/skunky/skunkyart/src/tag/v1.3.1` - - a := os.Args - for n, x := range a { - switch x { - case "-c", "--config": - if len(a) >= 3 { - CFG.cfg = a[n+1] - } else { - exit("Not enought arguments", 1) - } - case "-h", "--help": - exit(helpmsg, 0) - } - } - if CFG.cfg != "" { f, err := os.ReadFile(CFG.cfg) tryWithExitStatus(err, 1) diff --git a/app/router.go b/app/router.go index 33c3189..f87aa50 100644 --- a/app/router.go +++ b/app/router.go @@ -11,7 +11,7 @@ var Host string func Router() { parsepath := func(path string) map[int]string { - if l := len(CFG.BasePath); len(path) > l { + if l := len(CFG.URI); len(path) > l { path = path[l-1:] } else { path = "/" @@ -54,7 +54,7 @@ func Router() { var skunky skunkyart skunky.Writer = w skunky.Args = r.URL.Query() - skunky.BasePath = CFG.BasePath + skunky.BasePath = CFG.URI arg := skunky.Args.Get skunky.QueryRaw = arg("q") @@ -75,7 +75,7 @@ func Router() { default: skunky.ReturnHTTPError(404) case "": - skunky.ExecuteTemplate("index.htm", &CFG.BasePath) + skunky.ExecuteTemplate("index.htm", &CFG.URI) case "post": skunky.Deviation(path[2], path[3]) case "search": diff --git a/app/util.go b/app/util.go index 11f81a1..8c26760 100644 --- a/app/util.go +++ b/app/util.go @@ -32,6 +32,20 @@ func tryWithExitStatus(err error, code int) { } } +func RefreshInstances() { + for { + func() { + defer func() { + if r := recover(); r != nil { + recover() + } + }() + Templates["instances.json"] = string(Download("https://git.macaw.me/skunky/SkunkyArt/raw/branch/master/instances.json").Body) + }() + time.Sleep(1 * time.Hour) + } +} + // some crap for frontend func (s skunkyart) ExecuteTemplate(file string, data any) { var buf strings.Builder @@ -46,7 +60,7 @@ func UrlBuilder(strs ...string) string { var str strings.Builder l := len(strs) str.WriteString(Host) - str.WriteString(CFG.BasePath) + str.WriteString(CFG.URI) for n, x := range strs { str.WriteString(x) if n+1 < l && !(strs[n+1][0] == '?' || strs[n+1][0] == '&') && !(x[0] == '?' || x[0] == '&') { @@ -220,11 +234,10 @@ func BuildUserPlate(name string) string { func GetValueOfTag(t *html.Tokenizer) string { for tt := t.Next(); ; { - switch tt { - default: - return "" - case html.TextToken: + if tt == html.TextToken { return string(t.Text()) + } else { + return "" } } } diff --git a/app/wrapper.go b/app/wrapper.go index 51d76a9..250e88b 100644 --- a/app/wrapper.go +++ b/app/wrapper.go @@ -31,20 +31,7 @@ type skunkyart struct { About struct { Proxy bool Nsfw bool - Instances []struct { - Title string - Country string - Urls []struct { - I2P string `json:"i2p"` - Ygg string - Tor string - Clearnet string - } - Settings struct { - Nsfw bool - Proxy bool - } - } + Instances []settings } SomeList string @@ -229,48 +216,49 @@ func (s skunkyart) GRUser() { // посты func (s skunkyart) Deviation(author, postname string) { id_search := regexp.MustCompile("[0-9]+").FindAllString(postname, -1) - if len(id_search) >= 1 { - post := &s.Templates.Deviation - - id := id_search[len(id_search)-1] - post.Post = devianter.GetDeviation(id, author) - - if post.Post.Deviation.TextContent.Excerpt != "" { - post.Post.Description = ParseDescription(post.Post.Deviation.TextContent) - } else { - post.Post.Description = ParseDescription(post.Post.Deviation.Extended.DescriptionText) - } - // время публикации - post.StringTime = post.Post.Deviation.PublishedTime.UTC().String() - post.Post.IMG = ParseMedia(post.Post.Deviation.Media) - for _, x := range post.Post.Deviation.Extended.RelatedContent { - if len(x.Deviations) != 0 { - post.Related += s.DeviationList(x.Deviations, false) - } - } - - // хештэги - for _, x := range post.Post.Deviation.Extended.Tags { - var tag strings.Builder - tag.WriteString(`
#`) - tag.WriteString(x.Name) - tag.WriteString("") - - post.Tags += tag.String() - } - - if post.Post.Comments.Total <= 50 { - post.Post.Comments.Cursor = "" - } - - post.Comments = s.ParseComments(devianter.GetComments(id, post.Post.Comments.Cursor, s.Page, 1)) - - s.ExecuteTemplate("deviantion.htm", &s) - } else { + if len(id_search) < 1 { s.ReturnHTTPError(400) + return } + + post := &s.Templates.Deviation + + id := id_search[len(id_search)-1] + post.Post = devianter.GetDeviation(id, author) + + if post.Post.Deviation.TextContent.Excerpt != "" { + post.Post.Description = ParseDescription(post.Post.Deviation.TextContent) + } else { + post.Post.Description = ParseDescription(post.Post.Deviation.Extended.DescriptionText) + } + // время публикации + post.StringTime = post.Post.Deviation.PublishedTime.UTC().String() + post.Post.IMG = ParseMedia(post.Post.Deviation.Media) + for _, x := range post.Post.Deviation.Extended.RelatedContent { + if len(x.Deviations) != 0 { + post.Related += s.DeviationList(x.Deviations, false) + } + } + + // хештэги + for _, x := range post.Post.Deviation.Extended.Tags { + var tag strings.Builder + tag.WriteString(` #`) + tag.WriteString(x.Name) + tag.WriteString("") + + post.Tags += tag.String() + } + + if post.Post.Comments.Total <= 50 { + post.Post.Comments.Cursor = "" + } + + post.Comments = s.ParseComments(devianter.GetComments(id, post.Post.Comments.Cursor, s.Page, 1)) + + s.ExecuteTemplate("deviantion.htm", &s) } func (s skunkyart) DD() { @@ -298,7 +286,6 @@ func (s skunkyart) DD() { } func (s skunkyart) Search() { - s.Atom = false var err error ss := &s.Templates.Search switch s.Type { @@ -365,15 +352,16 @@ func (s skunkyart) Search() { } func (s skunkyart) Emojitar(name string) { - if name != "" && (s.Type == 'a' || s.Type == 'e') { - ae, e := devianter.AEmedia(name, s.Type) - if e != nil { - s.ReturnHTTPError(404) - } - wr(s.Writer, ae) - } else { + if name == "" || !(s.Type == 'a' || s.Type == 'e') { s.ReturnHTTPError(400) + return } + + ae, e := devianter.AEmedia(name, s.Type) + if e != nil { + s.ReturnHTTPError(404) + } + wr(s.Writer, ae) } func (s skunkyart) About() { diff --git a/config.example.json b/config.example.json index b4d1ce2..0934fe7 100644 --- a/config.example.json +++ b/config.example.json @@ -1,17 +1,17 @@ { - "listen": "0.0.0.0:3003", - "base-path": "/", + "listen": "0:3003", + "uri": "/", "cache": { "enabled": true, - "path": "/home/skunk/projects/skunkyart/cache", - "lifetime": "1w", + "path": "cache", + "lifetime": null, "max-size": 1024, "update-interval": 5 }, "dirs-to-memory": [ - "/home/skunk/projects/skunkyart/html", - "/home/skunk/projects/skunkyart/css", - "/home/skunk/projects/skunkyart/misc" + "html", + "css", + "misc" ], "download-proxy": "http://127.0.0.1:8080", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36", diff --git a/go.mod b/go.mod index 7e5e771..8016fa3 100644 --- a/go.mod +++ b/go.mod @@ -2,9 +2,7 @@ module skunkyart go 1.22.3 -replace git.macaw.me/skunky/devianter v0.2.0 => /home/skunk/projects/devianter - require ( - git.macaw.me/skunky/devianter v0.2.0 + git.macaw.me/skunky/devianter v0.2.5 golang.org/x/net v0.27.0 ) diff --git a/go.sum b/go.sum index 59de12e..8e79784 100644 --- a/go.sum +++ b/go.sum @@ -1,4 +1,4 @@ -git.macaw.me/skunky/devianter v0.2.0 h1:2vnMPb1Dax37CbAOfmHcSoK8+1goFkWHbtbh31Ytsww= -git.macaw.me/skunky/devianter v0.2.0/go.mod h1:ZLn527xBlnpXrUB1B8z/MhyeiWVK4nPWjyfnhWOE8Is= +git.macaw.me/skunky/devianter v0.2.5 h1:aAc6CG/ghvG130Ob7gGUdK4IV3MSeCD5t3QIJjto1M0= +git.macaw.me/skunky/devianter v0.2.5/go.mod h1:ZLn527xBlnpXrUB1B8z/MhyeiWVK4nPWjyfnhWOE8Is= golang.org/x/net v0.27.0 h1:5K3Njcw06/l2y9vpGCSdcxWOYHOUk3dVNGDXN+FvAys= golang.org/x/net v0.27.0/go.mod h1:dDi0PyhWNoiUOrAS8uXv/vnScO4wnHQO4mj9fn/RytE= diff --git a/html/about.htm b/html/about.htm index 31f58c8..edb576d 100644 --- a/html/about.htm +++ b/html/about.htm @@ -3,6 +3,7 @@ SkunkyArt +
@@ -21,43 +22,43 @@ SkunkyArt is an alternative frontend for deviantart.com, written in Go.

Room in Matrix

-

Instance settings:

+ Instance settings:
  • NSFW: {{if .Templates.About.Nsfw}}YES{{else}}NO{{end}}
  • Proxyfing: {{if .Templates.About.Proxy}}YES{{else}}NO{{end}}
-

Instances:

-
    - {{range .Templates.About.Instances}} -
  • {{.Title}}: -
      -
    • Country: {{.Country}}
    • -
    • URLs:
    • +
      + Instances: +
        + {{range .Templates.About.Instances}} +
      • {{.Title}}:
          - {{range .Urls}} - {{if ne .I2P ""}} -
        • I2P: Yes
        • - {{end}} - {{if ne .Ygg ""}} -
        • Ygg: Yes
        • - {{end}} - {{if ne .Tor ""}} -
        • Tor: Yes
        • - {{end}} - {{if ne .Clearnet ""}} -
        • Clearnet: {{.Clearnet}}
        • - {{end}} - {{end}} +
        • Country: {{.Country}}
        • +
        • URLs:
        • +
            + {{if ne .Urls.I2P ""}} +
          • I2P: Yes
          • + {{end}} + {{if ne .Urls.Ygg ""}} +
          • Ygg: Yes
          • + {{end}} + {{if ne .Urls.Tor ""}} +
          • Tor: Yes
          • + {{end}} + {{if ne .Urls.Clearnet ""}} +
          • Clearnet: {{.Urls.Clearnet}}
          • + {{end}} +
          +
        • Settings:
        • +
            +
          • NSFW: {{if .Settings.Nsfw}}YES{{else}}NO{{end}}
          • +
          • Proxyfing: {{if .Settings.Proxy}}YES{{else}}NO{{end}}
          • +
        -
      • Settings:
      • -
          -
        • NSFW: {{if .Settings.Nsfw}}YES{{else}}NO{{end}}
        • -
        • Proxyfing: {{if .Settings.Proxy}}YES{{else}}NO{{end}}
        • -
        -
      - - {{end}} -
    +
  • + {{end}} +
+

Copyright lost+skunk, X11. SkunkyArt v1.3.1

\ No newline at end of file diff --git a/html/daily.htm b/html/daily.htm index 22e9275..c464268 100644 --- a/html/daily.htm +++ b/html/daily.htm @@ -3,6 +3,7 @@ SkunkyArt | Daily Deviations +
diff --git a/html/deviantion.htm b/html/deviantion.htm index c00c1ae..50710b6 100644 --- a/html/deviantion.htm +++ b/html/deviantion.htm @@ -4,6 +4,7 @@ SkunkyArt | {{.Templates.Deviation.Post.Deviation.Author.Username}} - {{.Templates.Deviation.Post.Deviation.Title}} +
diff --git a/html/gruser.htm b/html/gruser.htm index ee7de73..a219e36 100644 --- a/html/gruser.htm +++ b/html/gruser.htm @@ -9,6 +9,7 @@ {{end}} +
diff --git a/html/index.htm b/html/index.htm index 3347306..08feba5 100644 --- a/html/index.htm +++ b/html/index.htm @@ -3,6 +3,7 @@ SkunkyArt +
diff --git a/html/search.htm b/html/search.htm index fee5ada..df1cf85 100644 --- a/html/search.htm +++ b/html/search.htm @@ -3,6 +3,7 @@ SkunkyArt | Search "{{.QueryRaw}}" +
diff --git a/instances.json b/instances.json index eeb329a..cd95b78 100644 --- a/instances.json +++ b/instances.json @@ -3,10 +3,10 @@ { "title": "skunky.ebloid.ru", "country": "Russia", - "urls": [{ + "urls": { "ygg": "http://[201:eba5:d1fc:bf7b:cfcb:a811:4b8b:7ea3]/art", "clearnet": "https://skunky.ebloid.ru/art" - }], + }, "settings": { "nsfw": false, "proxy": false @@ -15,9 +15,9 @@ { "title": "clovius.club", "country": "Sweden", - "urls": [{ + "urls": { "clearnet": "https://skunky.clovius.club" - }], + }, "settings": { "nsfw": true, "proxy": true @@ -26,9 +26,9 @@ { "title": "bloat.cat", "country": "Romania", - "urls": [{ + "urls": { "clearnet": "https://skunky.bloat.cat" - }], + }, "settings": { "nsfw": true, "proxy": true @@ -37,9 +37,9 @@ { "title": "frontendfriendly.xyz", "country": "Finland", - "urls": [{ + "urls": { "clearnet": "https://skunkyart.frontendfriendly.xyz" - }], + }, "settings": { "nsfw": true, "proxy": true @@ -48,9 +48,9 @@ { "title": "lumaeris.com", "country": "US", - "urls": [{ + "urls": { "clearnet": "https://skunkyart.lumaeris.com" - }], + }, "settings": { "nsfw": true, "proxy": true diff --git a/main.go b/main.go index 43b95f0..0224816 100644 --- a/main.go +++ b/main.go @@ -2,17 +2,27 @@ package main import ( "skunkyart/app" + "time" "git.macaw.me/skunky/devianter" ) func main() { + go app.RefreshInstances() + + app.ExecuteCommandLineArguments() app.ExecuteConfig() app.CopyTemplatesToMemory() - err := devianter.UpdateCSRF() - if err != nil { - println(err.Error()) - } + + go func() { + for { + err := devianter.UpdateCSRF() + if err != nil { + println(err.Error()) + } + time.Sleep(12 * time.Hour) + } + }() app.Router() } diff --git a/services/skunkyart.example.openrc b/services/skunkyart.example.openrc index d89d5b2..9309251 100755 --- a/services/skunkyart.example.openrc +++ b/services/skunkyart.example.openrc @@ -1,13 +1,20 @@ #!/sbin/openrc-run - -directory= -# command_args="-c $directory/config.json" # if SA wasn't start, try to uncomment this line -command=$directory/skunkyart - -name="SkunkyArt" -description="Privacy frontend for deviantart.com" supervisor=supervise-daemon +user=skunkyart:skunkyart +name=SkunkyArt +directory=/opt/skunkyart +command=$directory/bin/skunkyart +description="Privacy-oriented frontend for DeviantArt" +error_logger=logger +output_logger=logger +no_new_privs=true +umask=0077 + +# if you use old version openrc, uncomment function lower +# start_pre() { +# cd $directory +# } depend() { - need net + need net localmount bootmisc } \ No newline at end of file diff --git a/services/skunkyart.example.service b/services/skunkyart.example.service index 6531cab..2699d83 100644 --- a/services/skunkyart.example.service +++ b/services/skunkyart.example.service @@ -1,7 +1,7 @@ # Note: i didn't use systemd, so it can be not works :) [Unit] -Description=Privacy frontend for deviantart.com +Description=Privacy-oriented frontend for DeviantArt [Service] Directory= From 4db018fb7f01669cb5e4c1da4b56ccfe3dbadd6f Mon Sep 17 00:00:00 2001 From: lost+skunk Date: Thu, 1 Aug 2024 22:54:59 +0300 Subject: [PATCH 03/24] instances.test.json -> instances.json --- app/cli.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/cli.go b/app/cli.go index 4d4f849..2247223 100644 --- a/app/cli.go +++ b/app/cli.go @@ -74,7 +74,7 @@ func addInstance() { var settingsVar struct { Instances []settings `json:"instances"` } - instancesJson, err := os.OpenFile("instances.test.json", os.O_CREATE|os.O_WRONLY, 0644) + instancesJson, err := os.OpenFile("instances.json", os.O_CREATE|os.O_WRONLY, 0644) try(err) defer instancesJson.Close() From 1537da9b16dfda1ecb2730b5d1de3b9005397618 Mon Sep 17 00:00:00 2001 From: lost+skunk Date: Tue, 13 Aug 2024 15:59:52 +0300 Subject: [PATCH 04/24] =?UTF-8?q?=D1=82=D0=B5=D0=BC=D0=BF=D0=BB=D0=B5?= =?UTF-8?q?=D0=B9=D1=82=D1=8B=20=D0=B2=20=D0=B1=D0=B8=D0=BD=D0=B0=D1=80?= =?UTF-8?q?=D0=BD=D0=B8=D0=BA=D0=B5=20=D0=B8=20=D1=83=D0=BB=D1=83=D1=87?= =?UTF-8?q?=D1=88=D0=B5=D0=BD=D0=BD=D0=B0=D1=8F=20=D1=81=D0=B8=D1=81=D1=82?= =?UTF-8?q?=D0=B5=D0=BC=D0=B0=20=D0=BA=D0=B5=D1=88=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 8 +- SETUP-RU.md | 2 +- SETUP.md | 2 +- TODO.md | 18 ++-- app/cache.go | 132 ++++++++++++++++++++++++ app/cli.go | 63 ++++++------ app/config.go | 16 +-- app/parsers.go | 8 +- app/router.go | 33 ++++-- app/stat-freebsd.go | 13 +++ app/stat.go | 13 +++ app/util.go | 136 ++++++------------------ app/wrapper.go | 40 +++++--- config.example.json | 6 +- html/daily.htm | 28 ----- html/search.htm | 30 ------ main.go | 3 +- {css => static/css}/skunky.css | 13 ++- {html => static/html}/about.htm | 19 +--- static/html/daily.htm | 13 +++ {html => static/html}/deviantion.htm | 20 +--- {html => static/html}/gruser.htm | 16 +-- static/html/head.htm | 24 +++++ static/html/header.htm | 14 +++ {html => static/html}/index.htm | 8 +- static/html/search.htm | 16 +++ {misc => static/images}/logo.png | Bin static/templates-noembed.go | 148 +++++++++++++++++++++++++++ static/templates.go | 16 +++ 29 files changed, 555 insertions(+), 303 deletions(-) create mode 100644 app/cache.go create mode 100644 app/stat-freebsd.go create mode 100644 app/stat.go delete mode 100644 html/daily.htm delete mode 100644 html/search.htm rename {css => static/css}/skunky.css (94%) rename {html => static/html}/about.htm (74%) create mode 100644 static/html/daily.htm rename {html => static/html}/deviantion.htm (72%) rename {html => static/html}/gruser.htm (87%) create mode 100644 static/html/head.htm create mode 100644 static/html/header.htm rename {html => static/html}/index.htm (61%) create mode 100644 static/html/search.htm rename {misc => static/images}/logo.png (100%) create mode 100644 static/templates-noembed.go create mode 100644 static/templates.go diff --git a/README.md b/README.md index 6eaa831..735cc17 100644 --- a/README.md +++ b/README.md @@ -1,15 +1,15 @@ -SkunkyArt +SkunkyArt [![Matrix room](https://img.shields.io/badge/matrix-000000?style=for-the-badge&logo=Matrix&logoColor=white)](https://go.kde.org/matrix/#/#skunkyart:ebloid.ru) -Instances: [`INSTANCES.md`](https://git.macaw.me/skunky/SkunkyArt/src/branch/master/INSTANCES.md) +Instances: [`INSTANCES.md`](/skunky/SkunkyArt/src/branch/master/INSTANCES.md) # EN 🇺🇸 ## Description SkunkyArt 🦨 — alternative frontend for DevianArt, which works without JS. ## Setup The sample config is in the `config.example.json` file. For custom config, use `--config` option. -See the [`SETUP.md`](https://git.macaw.me/skunky/SkunkyArt/src/branch/master/SETUP.md) file for more info about directives. +See the [`SETUP.md`](/skunky/SkunkyArt/src/branch/master/SETUP.md) file for more info about directives. ## Adding instance to the list To do this, you must either make a PR by adding your instance to the `instances.json` and `INSTANCES.md` files (you can use `--add-instance` cli-argument to automatically add the instance to these files), or create an Issue, or report it to the room in Matrix. Keep in mind that your instance must comply with the following rules: 1. the Instance must not use Cloudflare. @@ -23,7 +23,7 @@ To do this, you must either make a PR by adding your instance to the `instances. SkunkyArt 🦨 — альтернативный фронтенд к DeviantArt, который полностью работает без JS (JavaScript). ## Настройка Пример конфига находится в файле `config.example.json`. Чтобы указать свой конфиг, используйте cli-аргумент `--config`. -См. [`SETUP-RU.md`](https://git.macaw.me/skunky/SkunkyArt/src/branch/master/SETUP-RU.md) для информации о настройки фронтенда. +См. [`SETUP-RU.md`](/skunky/SkunkyArt/src/branch/master/SETUP-RU.md) для информации о настройки фронтенда. ## Добавление инстанса в список Чтобы это сделать, вы должны либо сделать PR, добавив в файлы `instances.json` и `INSTANCES.md` свой инстанс (можете воспользоваться cli-аргументом `--add-instance`, который автоматически это сделает), либо создать Issue, или сообщить о нём в комнате в Matrix. Учтите, что ваш инстанс должен соблюсти следущие правила: 1. Инстанс не должен использовать Cloudflare итп. diff --git a/SETUP-RU.md b/SETUP-RU.md index 6ff3c23..994f193 100644 --- a/SETUP-RU.md +++ b/SETUP-RU.md @@ -1,4 +1,4 @@ -[English version 🇬🇧](https://git.macaw.me/skunky/SkunkyArt/src/branch/master/SETUP.md) +[English version 🇬🇧](/skunky/SkunkyArt/src/branch/master/SETUP.md) # Единицы измерения Размер файла в кеше измеряется в мегабайтах.
diff --git a/SETUP.md b/SETUP.md index ab30165..169e7a0 100644 --- a/SETUP.md +++ b/SETUP.md @@ -1,4 +1,4 @@ -[Версия на русском языке 🇷🇺](https://git.macaw.me/skunky/SkunkyArt/src/branch/master/SETUP-RU.md) +[Версия на русском языке 🇷🇺](/skunky/SkunkyArt/src/branch/master/SETUP-RU.md) # Units Maximum file size in megabytes, requires numeric value.
diff --git a/TODO.md b/TODO.md index ee50111..84678b0 100644 --- a/TODO.md +++ b/TODO.md @@ -1,19 +1,21 @@ # v1.3.x * Почистить говнокод +* ~~Сделать порт под FreeBSD~~ ✔️ * **Доделать парсинг описания** -* Избавиться от хардкода под Linux -* ~~Реализовать стрипы в ежедневных артах~~ +* ~~Реализовать стрипы в ежедневных артах~~ ✔️ +* ~~Исправить баг с навигацией по страницам~~ ✔️ * Сделать нормальное отображение ошибок -* ~~Исправить баг с навигацией по страницам~~ -* ~~Сделать единицы в конфиге более понятными~~ -* Добавить возможность включить темплейты в бинарник -* ~~Реализовать миниатюры и оптимизировать CSS под маленькие экраны~~ +* ~~Сделать единицы в конфиге более понятными~~ ✔️ +* Добавить просмотр понравившихся артов пользователю +* Добавить возможность включить темплейты в бинарник [P] +* ~~Реализовать миниатюры и оптимизировать CSS под маленькие экраны~~ ✔️ * Написать Makefile и скрипт для автоматического развёртывания инстанса * **Реализовать отображение контента, отличного от картинок (видео, аудио, etc)** * Исправить баг с эмоджи, когда некоторые кастомные эмоции могут не отображаться -* Добавить флаг сборки, который позволит собрать бинарник со встроенными темплейтами -* Улучшить систему кеширования: добавить рейтинг для удаления и копирование изображений в ОЗУ +* ~~Добавить аргумент &filename, который будет выдавать файл с нормально выглядещем именем~~ ✔️ +* ~~Улучшить систему кеширования: добавить рейтинг для удаления и копирование изображений в ОЗУ~~ # v1.4 * Реализовать API * Реализовать темы +* Перейти на арены в кеше * Реализовать многоязычный интерфейс \ No newline at end of file diff --git a/app/cache.go b/app/cache.go new file mode 100644 index 0000000..dedba83 --- /dev/null +++ b/app/cache.go @@ -0,0 +1,132 @@ +// TODO: реализовать кеширование JSON и почистить код +package app + +import ( + "crypto/sha1" + "encoding/hex" + "io" + "os" + "strings" + "sync" + "syscall" + "time" +) + +type file struct { + Score int + Content []byte +} + +var tempFS = make(map[[20]byte]*file) +var mx = &sync.RWMutex{} + +func (s skunkyart) DownloadAndSendMedia(subdomain, path string) { + var url strings.Builder + url.WriteString("https://images-wixmp-") + url.WriteString(subdomain) + url.WriteString(".wixmp.com/") + url.WriteString(path) + url.WriteString("?token=") + url.WriteString(s.Args.Get("token")) + + var response []byte + + switch { + case CFG.Cache.Enabled: + fileName := sha1.Sum([]byte(subdomain + path)) + filePath := CFG.Cache.Path + "/" + hex.EncodeToString(fileName[:]) + + mx.Lock() + if tempFS[fileName] == nil { + tempFS[fileName] = &file{} + } + f := *tempFS[fileName] + mx.Unlock() + + if f.Content != nil { + f.Score += 2 + } else { + file, err := os.Open(filePath) + if err != nil { + if dwnld := Download(url.String()); dwnld.Status == 200 && dwnld.Headers["Content-Type"][0][:5] == "image" { + f.Content = dwnld.Body + try(os.WriteFile(filePath, f.Content, 0700)) + } else { + s.ReturnHTTPError(dwnld.Status) + return + } + } else { + file, e := io.ReadAll(file) + try(e) + f.Content = file + } + + go func() { + defer restore() + for { + time.Sleep(1 * time.Minute) + + mx.Lock() + if tempFS[fileName].Score <= 0 { + delete(tempFS, fileName) + mx.Unlock() + return + } + tempFS[fileName].Score-- + mx.Unlock() + } + }() + } + + mx.Lock() + tempFS[fileName] = &f + mx.Unlock() + response = f.Content + case CFG.Proxy: + dwnld := Download(url.String()) + if dwnld.Status != 200 { + s.ReturnHTTPError(dwnld.Status) + return + } + response = dwnld.Body + default: + s.Writer.WriteHeader(403) + response = []byte("Sorry, butt proxy on this instance are disabled.") + } + + s.Writer.Write(response) +} + +func InitCacheSystem() { + c := &CFG.Cache + os.Mkdir(c.Path, 0700) + for { + dir, e := os.Open(c.Path) + try(e) + stat, e := dir.Stat() + try(e) + + dirnames, e := dir.Readdirnames(-1) + try(e) + for _, a := range dirnames { + a = c.Path + "/" + a + if c.Lifetime != "" { + now := time.Now().UnixMilli() + + f, _ := os.Stat(a) + stat := f.Sys().(*syscall.Stat_t) + time := statTime(stat) + + if time+lifetimeParsed <= now { + try(os.RemoveAll(a)) + } + } + if c.MaxSize != 0 && stat.Size() > c.MaxSize { + try(os.RemoveAll(a)) + } + } + + dir.Close() + time.Sleep(time.Second * time.Duration(c.UpdateInterval)) + } +} diff --git a/app/cli.go b/app/cli.go index 2247223..261e103 100644 --- a/app/cli.go +++ b/app/cli.go @@ -78,16 +78,16 @@ func addInstance() { try(err) defer instancesJson.Close() - instances, err := os.OpenFile("INSTANCES.md", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644) + instancesFile, err := os.OpenFile("INSTANCES.md", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644) try(err) - defer instances.Close() + defer instancesFile.Close() for { - if Templates["instances.json"] == "" { + if string(instances) == "" { print("\rDownloading instance list...") } else { println("\r\033[2KDownloaded!") - try(json.Unmarshal([]byte(Templates["instances.json"]), &settingsVar)) + try(json.Unmarshal(instances, &settingsVar)) settingsVar.Instances = append(settingsVar.Instances, settings{ Title: prompt("Title", true), @@ -113,51 +113,46 @@ func addInstance() { settingsVar := &settingsVar.Instances[len(settingsVar.Instances)-1] var mdstr bytes.Buffer - mdstr.WriteString("\n|") - if settingsVar.Urls.Clearnet != "" { - mdstr.WriteString("[") - mdstr.WriteString(settingsVar.Title) - mdstr.WriteString("](") - mdstr.WriteString(settingsVar.Urls.Clearnet) - mdstr.WriteString(")") - } else { - mdstr.WriteString(settingsVar.Title) + mdbuilder := func(yes bool, link string, title string) { + switch { + case yes && (title != "" && link != ""): + mdstr.WriteString("[") + mdstr.WriteString(title) + mdstr.WriteString("](") + mdstr.WriteString(link) + mdstr.WriteString(")") + case yes && link != "": + mdstr.WriteString("[Yes](") + mdstr.WriteString(link) + mdstr.WriteString(")") + case yes: + mdstr.WriteString("Yes") + default: + mdstr.WriteString("No") + } + mdstr.WriteString("|") } - mdstr.WriteString("|") + + mdstr.WriteString("\n|") + mdbuilder(settingsVar.Urls.Clearnet != "", settingsVar.Urls.Clearnet, settingsVar.Title) urls := []string{settingsVar.Urls.Ygg, settingsVar.Urls.I2P, settingsVar.Urls.Tor} for i, l := 0, len(urls); i < l; i++ { url := urls[i] - if url != "" { - mdstr.WriteString("[Yes](") - mdstr.WriteString(url) - mdstr.WriteString(")|") - } else { - mdstr.WriteString("No|") - } + mdbuilder(url != "", url, "") } settings := []bool{settingsVar.Settings.Nsfw, settingsVar.Settings.Proxy} for i, l := 0, len(settings); i < l; i++ { - if settings[i] { - mdstr.WriteString("Yes|") - } else { - mdstr.WriteString("No|") - } + mdbuilder(settings[i], "", "") } - if settingsVar.ModifiedSrc != "" { - mdstr.WriteString("[Yes](") - mdstr.WriteString(settingsVar.ModifiedSrc) - mdstr.WriteString(")|") - } else { - mdstr.WriteString("No|") - } + mdbuilder(settingsVar.ModifiedSrc != "", settingsVar.ModifiedSrc, "") mdstr.WriteString(settingsVar.Country) mdstr.WriteString("|") - instances.Write(mdstr.Bytes()) + instancesFile.Write(mdstr.Bytes()) break } time.Sleep(500 * time.Millisecond) diff --git a/app/config.go b/app/config.go index a6ac756..7d159e7 100644 --- a/app/config.go +++ b/app/config.go @@ -4,6 +4,7 @@ import ( "encoding/json" "os" "regexp" + "skunkyart/static" "strconv" "time" @@ -24,9 +25,9 @@ type config struct { URI string `json:"uri"` Cache cache_config Proxy, Nsfw bool - UserAgent string `json:"user-agent"` - DownloadProxy string `json:"download-proxy"` - Dirs []string `json:"dirs-to-memory"` + UserAgent string `json:"user-agent"` + DownloadProxy string `json:"download-proxy"` + StaticPath string `json:"static-path"` } var CFG = config{ @@ -38,10 +39,10 @@ var CFG = config{ Path: "cache", UpdateInterval: 1, }, - Dirs: []string{"html", "css", "misc"}, - UserAgent: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36", - Proxy: true, - Nsfw: true, + StaticPath: "static", + UserAgent: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36", + Proxy: true, + Nsfw: true, } var lifetimeParsed int64 @@ -56,6 +57,7 @@ func ExecuteConfig() { exit("Incompatible settings detected: cannot use caching media content without proxy", 1) } + static.StaticPath = CFG.StaticPath if CFG.Cache.Enabled { if CFG.Cache.Lifetime != "" { var duration int64 diff --git a/app/parsers.go b/app/parsers.go index b39e172..f93c18d 100644 --- a/app/parsers.go +++ b/app/parsers.go @@ -41,7 +41,9 @@ func (s skunkyart) ParseComments(c devianter.Comments) string { cmmts.WriteString(" ") if x.Parent > 0 { - cmmts.WriteString(` In reply to `) if replied[x.Parent] == "" { @@ -80,7 +82,7 @@ func (s skunkyart) DeviationList(devs []devianter.Deviation, allowAtom bool, con for i, l := 0, len(devs); i < l; i++ { data := &devs[i] - if preview, fullview := ParseMedia(data.Media, 320), ParseMedia(data.Media); !(data.NSFW && !CFG.Nsfw) { + if preview, fullview := ParseMedia(data.Media, data.Title, 320), ParseMedia(data.Media, data.Title); !(data.NSFW && !CFG.Nsfw) { if allowAtom && s.Atom { id := strconv.Itoa(data.ID) listContent.WriteString(``) @@ -284,7 +286,7 @@ func ParseDescription(dscr devianter.Text) string { parsedDescription.WriteString(` c.MaxSize { - try(os.RemoveAll(a)) - } - } - - dir.Close() - time.Sleep(time.Second * time.Duration(CFG.Cache.UpdateInterval)) - } -} - -func CopyTemplatesToMemory() { - for _, dirname := range CFG.Dirs { - dir, e := os.ReadDir(dirname) - tryWithExitStatus(e, 1) - - for _, x := range dir { - file, e := os.ReadFile(dirname + "/" + x.Name()) - tryWithExitStatus(e, 1) - Templates[x.Name()] = string(file) - } - } -} - /* PARSING HELPERS */ -func ParseMedia(media devianter.Media, thumb ...int) string { - url := devianter.UrlFromMedia(media, thumb...) - if len(url) != 0 && CFG.Proxy { - url = url[21:] - dot := strings.Index(url, ".") +func ParseMedia(media devianter.Media, filename string, thumb ...int) string { + mediaUrl := devianter.UrlFromMedia(media, thumb...) + if len(mediaUrl) != 0 && CFG.Proxy { + mediaUrl = mediaUrl[21:] + dot := strings.Index(mediaUrl, ".") - return UrlBuilder("media", "file", url[:dot], url[dot+11:]) + return UrlBuilder("media", "file", mediaUrl[:dot], mediaUrl[dot+11:], "&filename=", url.QueryEscape(filename)) } - return url + return mediaUrl } func ConvertDeviantArtUrlToSkunkyArt(url string) (output string) { @@ -255,7 +181,9 @@ func (s skunkyart) NavBase(c DeviationList) string { list.WriteString("
") prevrev := func(msg string, page int, onpage bool) { if !onpage { - list.WriteString(`
`) @@ -180,7 +180,7 @@ func (s skunkyart) GRUser() { } folders.WriteString("
") - folders.WriteString(` - - - SkunkyArt | Daily Deviations - - - -
-
-

HOME | DD | RSS

-
- - - -
-
- {{if ne .Templates.DDStrips ""}} -

# Strips

- {{.Templates.DDStrips}} - {{end}} -

# Content

- {{.Templates.SomeList}} -
- \ No newline at end of file diff --git a/html/search.htm b/html/search.htm deleted file mode 100644 index df1cf85..0000000 --- a/html/search.htm +++ /dev/null @@ -1,30 +0,0 @@ - - - - SkunkyArt | Search "{{.QueryRaw}}" - - - -
-
-

HOME | DD

-
- - - -
-
- {{if ne .Templates.Search.List ""}} - {{if ne .Templates.Search.Content.Total 0}} -

Results by request '{{.QueryRaw}}': {{.Templates.Search.Content.Total}}

- {{end}} - {{.Templates.Search.List}} - {{else}} -

No results :(

- {{end}} -
- \ No newline at end of file diff --git a/main.go b/main.go index 0224816..190d79b 100644 --- a/main.go +++ b/main.go @@ -2,6 +2,7 @@ package main import ( "skunkyart/app" + "skunkyart/static" "time" "git.macaw.me/skunky/devianter" @@ -12,7 +13,7 @@ func main() { app.ExecuteCommandLineArguments() app.ExecuteConfig() - app.CopyTemplatesToMemory() + static.CopyTemplatesToMemory() go func() { for { diff --git a/css/skunky.css b/static/css/skunky.css similarity index 94% rename from css/skunky.css rename to static/css/skunky.css index 2126968..bdc894c 100644 --- a/css/skunky.css +++ b/static/css/skunky.css @@ -22,12 +22,19 @@ header form { header { display: flex; } +form { + font-size: 0; + border: solid #164e3e 1px; + max-width: fit-content; +} form input, button, select { background-color: #134134; padding: 5px; color: whitesmoke; - border: 0px; - border-radius: 1px; + border: 0; +} +input:focus { + outline: none; } /* BLOCKS */ @@ -146,6 +153,8 @@ form input, button, select { header form { font-size: 60%; + max-width: unset; + border: 0; } header, center { text-align: center; diff --git a/html/about.htm b/static/html/about.htm similarity index 74% rename from html/about.htm rename to static/html/about.htm index edb576d..d2278d6 100644 --- a/html/about.htm +++ b/static/html/about.htm @@ -1,23 +1,8 @@ - - SkunkyArt - - - + {{template "head" .}}
-
-

HOME | DD

-
- - - -
-
+ {{template "header" .}}

SkunkyArt is an alternative frontend for deviantart.com, written in Go.

diff --git a/static/html/daily.htm b/static/html/daily.htm new file mode 100644 index 0000000..b3b6044 --- /dev/null +++ b/static/html/daily.htm @@ -0,0 +1,13 @@ + + + {{template "head" . }} +
+ {{template "header" . }} + {{if ne .Templates.DDStrips ""}} +

# Strips

+ {{.Templates.DDStrips}} + {{end}} +

# Content

+ {{.Templates.SomeList}} +
+ \ No newline at end of file diff --git a/html/deviantion.htm b/static/html/deviantion.htm similarity index 72% rename from html/deviantion.htm rename to static/html/deviantion.htm index 50710b6..f357dd7 100644 --- a/html/deviantion.htm +++ b/static/html/deviantion.htm @@ -1,24 +1,8 @@ - - SkunkyArt | {{.Templates.Deviation.Post.Deviation.Author.Username}} - {{.Templates.Deviation.Post.Deviation.Title}} - - - - + {{template "head" . }}
-
-

HOME | DD

-
- - - -
-
+ {{template "header" . }}
{{.Templates.Deviation.Post.Deviation.Author.Username}} — {{if (.Templates.Deviation.Post.Deviation.DD)}} diff --git a/html/gruser.htm b/static/html/gruser.htm similarity index 87% rename from html/gruser.htm rename to static/html/gruser.htm index a219e36..c8227ef 100644 --- a/html/gruser.htm +++ b/static/html/gruser.htm @@ -1,21 +1,11 @@ - - SkunkyArt | - {{if eq .Type 'a'}} - {{.Templates.GroupUser.GR.Owner.Username}} - {{else}} - gallery of {{.Templates.GroupUser.GR.Owner.Username}} - {{end}} - - - - + {{template "head" . }}

HOME | DD - | Gallery{{else}}about">About{{end}} - | RSS

+ | Gallery{{else}}about">About{{end}} + | RSS
diff --git a/static/html/head.htm b/static/html/head.htm new file mode 100644 index 0000000..f7f6b91 --- /dev/null +++ b/static/html/head.htm @@ -0,0 +1,24 @@ +{{define "head"}} + + SkunkyArt | + {{if eq .Endpoint "search"}} + "{{.QueryRaw}}" + {{else if eq .Endpoint "post"}} + {{.Templates.Deviation.Post.Deviation.Author.Username}} — {{.Templates.Deviation.Post.Deviation.Title}} + {{else if eq .Type 'a'}} + {{if .Templates.GroupUser.GR.Owner.Username}} + {{.Templates.GroupUser.GR.Owner.Username}} + {{else}} + gallery of {{.Templates.GroupUser.GR.Owner.Username}} + {{end}} + {{else}} + {{.Endpoint}} + {{end}} + + + + + + + +{{end}} \ No newline at end of file diff --git a/static/html/header.htm b/static/html/header.htm new file mode 100644 index 0000000..f8537a3 --- /dev/null +++ b/static/html/header.htm @@ -0,0 +1,14 @@ +{{define "header"}} +
+

HOME | DD {{if eq .Endpoint "dd"}}| RSS{{end}}

+ + + + + +
+{{end}} \ No newline at end of file diff --git a/html/index.htm b/static/html/index.htm similarity index 61% rename from html/index.htm rename to static/html/index.htm index 08feba5..78f1d8a 100644 --- a/html/index.htm +++ b/static/html/index.htm @@ -2,12 +2,12 @@ SkunkyArt - - + +
-
+
-

Daily Deviations | About | Source Code

+

Daily Deviations | About | Source Code

\ No newline at end of file diff --git a/static/html/search.htm b/static/html/search.htm new file mode 100644 index 0000000..74bbd38 --- /dev/null +++ b/static/html/search.htm @@ -0,0 +1,16 @@ + + + {{template "head" . }} +
+ {{template "header" . }} + + {{if ne .Templates.Search.List ""}} + {{if ne .Templates.Search.Content.Total 0}} +

Results by request '{{.QueryRaw}}': {{.Templates.Search.Content.Total}}

+ {{end}} + {{.Templates.Search.List}} + {{else}} +

No results :(

+ {{end}} +
+ \ No newline at end of file diff --git a/misc/logo.png b/static/images/logo.png similarity index 100% rename from misc/logo.png rename to static/images/logo.png diff --git a/static/templates-noembed.go b/static/templates-noembed.go new file mode 100644 index 0000000..7a3c541 --- /dev/null +++ b/static/templates-noembed.go @@ -0,0 +1,148 @@ +//go:build !embed +// +build !embed + +package static + +import ( + "bytes" + "io/fs" + "os" + "strings" + "time" +) + +var Templates FS + +type file struct { + path string + name string + content []byte +} + +var templateNames = []string{} +var templates = make(map[string][]file) +var StaticPath string + +func CopyTemplatesToMemory() { + baseDir, err := os.ReadDir(StaticPath) + try(err) + + for _, c := range baseDir { + if c.IsDir() { + templateNames = append(templateNames, c.Name()) + + var filePath strings.Builder + filePath.WriteString(StaticPath) + filePath.WriteString("/") + filePath.WriteString(c.Name()) + + dir, err := os.ReadDir(filePath.String()) + try(err) + + filePath.WriteString("/") + for _, cd := range dir { + f, err := os.ReadFile(filePath.String() + cd.Name()) + try(err) + templates[c.Name()] = append(templates[c.Name()], file{ + content: f, + name: cd.Name(), + path: c.Name() + "/" + cd.Name(), + }) + } + } + } +} + +type FS struct{} + +func (FS) Open(name string) (fs.File, error) { + for i, l := 0, len(templateNames); i < l; i++ { + for _, x := range templates[templateNames[i]] { + if x.content != nil && name == x.path { + return &File{ + name: x.path, + content: bytes.NewBuffer(x.content), + }, nil + } + } + } + return nil, &fs.PathError{} +} + +func (FS) Glob(pattern string) ([]string, error) { + trimmed := strings.Split(pattern, "/") + var matches = []string{} + for x, s := range templates { + for i, l := 0, len(s); i < l && trimmed[0] == x; i++ { + s := s[i] + matches = append(matches, s.path) + } + } + if len(matches) != 0 { + return matches, nil + } + return nil, &fs.PathError{} +} + +func try(err error) { + if err != nil { + println(err.Error()) + os.Exit(1) + } +} + +/* сделано на основе https://github.com/psanford/memfs; требуется для корректной работы templates.ParseFS */ +type fileInfo struct { + name string +} + +func (fi fileInfo) Name() string { + return fi.name +} + +func (fi fileInfo) Size() int64 { + return 4096 +} + +func (fileInfo) Mode() fs.FileMode { + return 0 +} + +func (fileInfo) ModTime() time.Time { + return time.Time{} +} + +func (fileInfo) IsDir() bool { + return false +} + +func (fileInfo) Sys() interface{} { + return nil +} + +type File struct { + name string + content *bytes.Buffer + closed bool +} + +func (f *File) Stat() (fs.FileInfo, error) { + return fileInfo{ + name: f.name, + }, nil +} + +func (f *File) Read(b []byte) (int, error) { + if f.closed { + return 0, fs.ErrClosed + } + return f.content.Read(b) +} + +func (f *File) Close() error { + if f.closed { + return fs.ErrClosed + } + f.closed = true + return nil +} diff --git a/static/templates.go b/static/templates.go new file mode 100644 index 0000000..28a057a --- /dev/null +++ b/static/templates.go @@ -0,0 +1,16 @@ +//go:build embed +// +build embed + +package static + +import "embed" + +//go:embed * +var Templates embed.FS +var Enabled bool = true + +var StaticPath string + +func CopyTemplatesToMemory() { + _ = StaticPath +} From 9d2361ef6e7784accef0c445402a13bf2dd14fcf Mon Sep 17 00:00:00 2001 From: lost+skunk Date: Tue, 13 Aug 2024 16:01:38 +0300 Subject: [PATCH 05/24] =?UTF-8?q?=D0=BD=D0=B5=D0=B1=D0=BE=D0=BB=D1=8C?= =?UTF-8?q?=D1=88=D0=BE=D0=B9=20=D0=BE=D0=B1=D0=BE=D1=81=D1=80=D0=B0=D0=BC?= =?UTF-8?q?=D1=81=20=D1=81=20=D0=BF=D1=80=D0=B8=D0=BC=D0=B5=D1=80=D0=BD?= =?UTF-8?q?=D1=8B=D0=BC=D0=B8=20=D1=81=D1=81=D1=8B=D0=BB=D0=BA=D0=B0=D0=BC?= =?UTF-8?q?=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 735cc17..7081701 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -SkunkyArt +SkunkyArt [![Matrix room](https://img.shields.io/badge/matrix-000000?style=for-the-badge&logo=Matrix&logoColor=white)](https://go.kde.org/matrix/#/#skunkyart:ebloid.ru) From d9a6cf4d62bc807709736b2311e7354bbf4ad11e Mon Sep 17 00:00:00 2001 From: lost+skunk Date: Tue, 13 Aug 2024 16:03:00 +0300 Subject: [PATCH 06/24] =?UTF-8?q?=D0=B4=D0=B0=20=D0=B1=D0=BB=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 7081701..3af7e64 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -SkunkyArt +SkunkyArt [![Matrix room](https://img.shields.io/badge/matrix-000000?style=for-the-badge&logo=Matrix&logoColor=white)](https://go.kde.org/matrix/#/#skunkyart:ebloid.ru) From 513543cc7a24330e3d9ce96d3b55e4726397af50 Mon Sep 17 00:00:00 2001 From: lost+skunk Date: Tue, 13 Aug 2024 16:04:24 +0300 Subject: [PATCH 07/24] =?UTF-8?q?[=D0=B8=D0=BD=D1=84=D0=BE=D1=80=D0=BC?= =?UTF-8?q?=D0=B0=D1=82=D0=B8=D0=B2=D0=BD=D0=B0=D1=8F=20=D0=BF=D0=BE=D0=B4?= =?UTF-8?q?=D0=BF=D0=B8=D1=81=D1=8C=20=D0=BA=20=D0=BA=D0=BE=D0=BC=D0=BC?= =?UTF-8?q?=D0=B8=D1=82=D1=83]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 3af7e64..cfc302f 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -SkunkyArt +SkunkyArt [![Matrix room](https://img.shields.io/badge/matrix-000000?style=for-the-badge&logo=Matrix&logoColor=white)](https://go.kde.org/matrix/#/#skunkyart:ebloid.ru) From 2f8c35ba322e3c8c6e0bff8f7818d4eedf002928 Mon Sep 17 00:00:00 2001 From: lost+skunk Date: Wed, 14 Aug 2024 19:18:06 +0300 Subject: [PATCH 08/24] user favourites --- INSTANCES.md | 2 +- TODO.md | 2 +- app/cache.go | 32 +++++----- app/util.go | 59 +++++++++++++++++ app/wrapper.go | 142 ++++++++++++++--------------------------- go.mod | 1 + instances.json | 2 +- static/html/gruser.htm | 17 ++++- static/html/head.htm | 11 ++-- 9 files changed, 147 insertions(+), 121 deletions(-) diff --git a/INSTANCES.md b/INSTANCES.md index 1637971..d032d24 100644 --- a/INSTANCES.md +++ b/INSTANCES.md @@ -2,6 +2,6 @@ |:------:|:-------:|:-:|:-:|:--:|:--------:|:--------------:|:-----:| |[skunky.ebloid.ru](https://skunky.ebloid.ru/art)|[Yes](http://[201:eba5:d1fc:bf7b:cfcb:a811:4b8b:7ea3]/art)|No|No| No | No | No | Russia | |[clovius.club](https://skunky.clovius.club)|No|No|No| Yes | Yes | No | Sweden | -|[bloat.cat](https://skunky.bloat.cat)|No|No|No| Yes | Yes | No | Romania | +|[bloat.cat](https://skunky.bloat.cat)|No|No|No| Yes | Yes | No | Germany | |[frontendfriendly.xyz](https://skunkyart.frontendfriendly.xyz)|No|No|No| Yes | Yes | No | Finland | |[lumaeris.com](https://skunkyart.lumaeris.com)|No|No|No| Yes | Yes | No | US | \ No newline at end of file diff --git a/TODO.md b/TODO.md index 84678b0..5a0da71 100644 --- a/TODO.md +++ b/TODO.md @@ -6,7 +6,7 @@ * ~~Исправить баг с навигацией по страницам~~ ✔️ * Сделать нормальное отображение ошибок * ~~Сделать единицы в конфиге более понятными~~ ✔️ -* Добавить просмотр понравившихся артов пользователю +* ~~Добавить просмотр понравившихся артов пользователю~~ ✔️ * Добавить возможность включить темплейты в бинарник [P] * ~~Реализовать миниатюры и оптимизировать CSS под маленькие экраны~~ ✔️ * Написать Makefile и скрипт для автоматического развёртывания инстанса diff --git a/app/cache.go b/app/cache.go index dedba83..6506cfc 100644 --- a/app/cache.go +++ b/app/cache.go @@ -99,34 +99,36 @@ func (s skunkyart) DownloadAndSendMedia(subdomain, path string) { func InitCacheSystem() { c := &CFG.Cache - os.Mkdir(c.Path, 0700) for { - dir, e := os.Open(c.Path) - try(e) - stat, e := dir.Stat() - try(e) + dir, err := os.ReadDir(c.Path) + if err != nil { + if os.IsNotExist(err) { + os.Mkdir(c.Path, 0700) + continue + } + println(err.Error()) + } + + for _, file := range dir { + fileName := c.Path + "/" + file.Name() + fileInfo, err := file.Info() + try(err) - dirnames, e := dir.Readdirnames(-1) - try(e) - for _, a := range dirnames { - a = c.Path + "/" + a if c.Lifetime != "" { now := time.Now().UnixMilli() - f, _ := os.Stat(a) - stat := f.Sys().(*syscall.Stat_t) + stat := fileInfo.Sys().(*syscall.Stat_t) time := statTime(stat) if time+lifetimeParsed <= now { - try(os.RemoveAll(a)) + try(os.RemoveAll(fileName)) } } - if c.MaxSize != 0 && stat.Size() > c.MaxSize { - try(os.RemoveAll(a)) + if c.MaxSize != 0 && fileInfo.Size() > c.MaxSize { + try(os.RemoveAll(fileName)) } } - dir.Close() time.Sleep(time.Second * time.Duration(c.UpdateInterval)) } } diff --git a/app/util.go b/app/util.go index a5b978d..8e8ef6e 100644 --- a/app/util.go +++ b/app/util.go @@ -16,6 +16,8 @@ import ( ) /* INTERNAL */ +var wr = io.WriteString + func exit(msg string, code int) { println(msg) os.Exit(code) @@ -50,6 +52,63 @@ func RefreshInstances() { } // some crap for frontend +type skunkyart struct { + Writer http.ResponseWriter + + Args url.Values + Page int + Type rune + Atom bool + + BasePath, Endpoint string + Query, QueryRaw string + + Templates struct { + About struct { + Proxy bool + Nsfw bool + Instances []settings + } + + SomeList string + DDStrips string + Deviation struct { + Post devianter.Post + Related string + StringTime string + Tags string + Comments string + } + + GroupUser struct { + GR devianter.GRuser + Admins string + Group bool + CreationDate string + + About struct { + A devianter.About + + DescriptionFormatted string + Interests, Social string + Comments string + BG string + BGMeta devianter.Deviation + } + + Gallery struct { + Folders string + Pages int + List string + } + } + Search struct { + Content devianter.Search + List string + } + } +} + func (s skunkyart) ExecuteTemplate(file, dir string, data any) { var buf strings.Builder tmp := template.New(file) diff --git a/app/wrapper.go b/app/wrapper.go index 5e8b6c1..e0e5054 100644 --- a/app/wrapper.go +++ b/app/wrapper.go @@ -2,9 +2,6 @@ package app import ( "encoding/json" - "io" - "net/http" - "net/url" "regexp" "strconv" "strings" @@ -14,65 +11,6 @@ import ( "golang.org/x/net/html" ) -var wr = io.WriteString - -type skunkyart struct { - Writer http.ResponseWriter - - Args url.Values - Page int - Type rune - Atom bool - - BasePath, Endpoint string - Query, QueryRaw string - - Templates struct { - About struct { - Proxy bool - Nsfw bool - Instances []settings - } - - SomeList string - DDStrips string - Deviation struct { - Post devianter.Post - Related string - StringTime string - Tags string - Comments string - } - - GroupUser struct { - GR devianter.GRuser - Admins string - Group bool - CreationDate string - - About struct { - A devianter.About - - DescriptionFormatted string - Interests, Social string - Comments string - BG string - BGMeta devianter.Deviation - } - - Gallery struct { - Folders string - Pages int - List string - } - } - Search struct { - Content devianter.Search - List string - } - } -} - func (s skunkyart) GRUser() { if len(s.Query) < 1 { s.ReturnHTTPError(400) @@ -82,7 +20,7 @@ func (s skunkyart) GRUser() { var g devianter.Group g.Name = s.Query var err error - s.Templates.GroupUser.GR, err = g.GetGroup() + s.Templates.GroupUser.GR, err = g.Get() try(err) group := &s.Templates.GroupUser @@ -146,51 +84,65 @@ func (s skunkyart) GRUser() { } } - case 'g': + case 'g', 'f': + var all bool + var content devianter.Group + folderid, _ := strconv.Atoi(s.Args.Get("folder")) + + if a := s.Args.Get("all"); a == "true" { + all = true + } + if s.Page == 0 { s.Page++ } - gallery, err := g.GetGallery(s.Page, folderid) - try(err) + if s.Type == 'f' { + content = g.Favourites(s.Page, all, folderid) + } else { + content, err = g.Gallery(s.Page, folderid) + try(err) + } - if folderid > 0 { - group.Gallery.List = s.DeviationList(gallery.Content.Results, true, DeviationList{ - More: gallery.Content.HasMore, + if folderid > 0 || (s.Type == 'f' && all) { + group.Gallery.List = s.DeviationList(content.Content.Results, true, DeviationList{ + More: content.Content.HasMore, }) } else { - for _, x := range gallery.Content.Gruser.Page.Modules { + for _, x := range content.Content.Gruser.Page.Modules { if l := len(x.ModuleData.Folders.Results); l != 0 { var folders strings.Builder folders.WriteString(`

# Folders


`) for _, x := range x.ModuleData.Folders.Results { - folders.WriteString(`
`) + if x.FolderId != -1 && x.Size != 0 { + folders.WriteString(`
`) - if !(x.Thumb.NSFW && !CFG.Nsfw) { - folders.WriteString(``) - } else { - folders.WriteString(`

[ NSFW ]

`) + if !(x.Thumb.NSFW && !CFG.Nsfw) { + folders.WriteString(``) + } else { + folders.WriteString(`

[ NSFW ]

`) + } + folders.WriteString("
") + + folders.WriteString(``) + folders.WriteString(x.Name) + folders.WriteString(``) + + folders.WriteString("
") } - folders.WriteString("
") - - folders.WriteString(``) - folders.WriteString(x.Name) - folders.WriteString(``) - - folders.WriteString("
") } folders.WriteString(`

# Content

`) group.Gallery.Folders = folders.String() @@ -296,7 +248,7 @@ func (s skunkyart) Search() { switch s.Type { case 'a', 't': ss.Content, err = devianter.PerformSearch(s.Query, s.Page, s.Type) - case 'g': + case 'g', 'f': ss.Content, err = devianter.PerformSearch(s.Query, s.Page, s.Type, s.Args.Get("usr")) case 'r': // скраппер, поскольку девиантартовцы зажопили гостевое API для поиска групп var ( diff --git a/go.mod b/go.mod index 8016fa3..2b4844e 100644 --- a/go.mod +++ b/go.mod @@ -2,6 +2,7 @@ module skunkyart go 1.22.3 +replace git.macaw.me/skunky/devianter v0.2.5 => /home/skunk/projects/devianter require ( git.macaw.me/skunky/devianter v0.2.5 golang.org/x/net v0.27.0 diff --git a/instances.json b/instances.json index cd95b78..74049be 100644 --- a/instances.json +++ b/instances.json @@ -25,7 +25,7 @@ }, { "title": "bloat.cat", - "country": "Romania", + "country": "Germany", "urls": { "clearnet": "https://skunky.bloat.cat" }, diff --git a/static/html/gruser.htm b/static/html/gruser.htm index c8227ef..6593951 100644 --- a/static/html/gruser.htm +++ b/static/html/gruser.htm @@ -3,14 +3,25 @@ {{template "head" . }}
-

HOME | DD - | Gallery{{else}}about">About{{end}} - | RSS

+

+ HOME + | DD + {{if ne .Type 'f'}} + | Gallery{{else}}about">About{{end}} + | Favourites + {{else}} + | About + | Gallery + | Favourites + {{end}} + | RSS +

-

Daily Deviations | About | Source Code

+

Daily Deviations | About | Source Code

\ No newline at end of file From db53a8bd9004098e6a1507e5826a833fd9efa954 Mon Sep 17 00:00:00 2001 From: lost+skunk Date: Tue, 3 Sep 2024 15:36:19 +0300 Subject: [PATCH 10/24] =?UTF-8?q?=D0=94=D0=B2=D0=B0=20API-=D1=8D=D0=BD?= =?UTF-8?q?=D0=B4=D0=BF=D0=BE=D0=B8=D0=BD=D1=82=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- TODO.md | 5 +++- app/api.go | 61 +++++++++++++++++++++++++++++++++++-------- app/cli.go | 11 +++++--- app/config.go | 5 ++++ app/router.go | 58 ++++++++++++++++++++-------------------- app/util.go | 14 +++++++++- app/wrapper.go | 1 - go.mod | 2 +- main.go | 2 ++ static/html/about.htm | 4 +-- 10 files changed, 115 insertions(+), 48 deletions(-) diff --git a/TODO.md b/TODO.md index 0853df6..fbca5d8 100644 --- a/TODO.md +++ b/TODO.md @@ -1,11 +1,13 @@ # v1.3.x * Почистить говнокод +* Добавить фильтры поиска * ~~Сделать порт под FreeBSD~~ ✔️ * **Доделать парсинг описания** * ~~Реализовать стрипы в ежедневных артах~~ ✔️ * ~~Исправить баг с навигацией по страницам~~ ✔️ * Сделать нормальное отображение ошибок * ~~Сделать единицы в конфиге более понятными~~ ✔️ +* Добавить чекер инстанса на работоспособность * ~~Добавить просмотр понравившихся артов пользователю~~ ✔️ * Добавить возможность включить темплейты в бинарник [P] * ~~Реализовать миниатюры и оптимизировать CSS под маленькие экраны~~ ✔️ @@ -13,9 +15,10 @@ * **Реализовать отображение контента, отличного от картинок (видео, аудио, etc)** * Исправить баг с эмоджи, когда некоторые кастомные эмоции могут не отображаться * ~~Добавить аргумент &filename, который будет выдавать файл с нормально выглядещем именем~~ ✔️ -* ~~Улучшить систему кеширования: добавить рейтинг для удаления и копирование изображений в ОЗУ~~ BUG: почему-то всё переодически встаёт раком +* ~~Улучшить систему кеширования: добавить рейтинг для удаления и копирование изображений в ОЗУ~~ ✔️ # v1.4 * Реализовать API * Реализовать темы * Перейти на арены в кеше * Реализовать многоязычный интерфейс + diff --git a/app/api.go b/app/api.go index ddc67c1..3d0871c 100644 --- a/app/api.go +++ b/app/api.go @@ -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 + } } diff --git a/app/cli.go b/app/cli.go index 261e103..0480bdb 100644 --- a/app/cli.go +++ b/app/cli.go @@ -4,19 +4,20 @@ import ( "bufio" "bytes" "encoding/json" + "html/template" "os" "time" ) func ExecuteCommandLineArguments() { - const helpmsg = `SkunkyArt v1.3.1 [CSS improvements for mobile and the strips on Daily Deviations] + var helpmsg = `SkunkyArt v{{.Version}} [{{.Description}}] Usage: - [-c|--config] | path to config - [-a|--add-instance] | generates 'instances.json' and 'INSTANCES.md' files with ur instance - [-h|--help] | returns this message Example: ./skunkyart -c config.json -Copyright lost+skunk, X11. https://git.macaw.me/skunky/skunkyart/src/tag/v1.3.1` +Copyright lost+skunk, X11. https://git.macaw.me/skunky/skunkyart/src/tag/v{{.Version}}` a := os.Args[1:] for n, x := range a { @@ -28,7 +29,11 @@ Copyright lost+skunk, X11. https://git.macaw.me/skunky/skunkyart/src/tag/v1.3.1` exit("Not enought arguments", 1) } case "-h", "--help": - exit(helpmsg, 0) + var buf bytes.Buffer + t := template.New("help") + t.Parse(helpmsg) + t.Execute(&buf, &Release) + exit(buf.String(), 0) case "-a", "--add-instance": addInstance() } diff --git a/app/config.go b/app/config.go index 7d159e7..eff9ee8 100644 --- a/app/config.go +++ b/app/config.go @@ -11,6 +11,11 @@ import ( "git.macaw.me/skunky/devianter" ) +var Release struct { + Version string + Description string +} + type cache_config struct { Enabled bool Path string diff --git a/app/router.go b/app/router.go index 2bcaf41..cc58f93 100644 --- a/app/router.go +++ b/app/router.go @@ -13,10 +13,9 @@ var Host, Path string func Router() { parsepath := func(path string) map[int]string { + path = "/" if l := len(CFG.URI); len(path) > l { path = path[l-1:] - } else { - path = "/" } parsedpath := make(map[int]string) @@ -54,44 +53,42 @@ func Router() { // функция, что управляет всем handle := func(w http.ResponseWriter, r *http.Request) { - if h := r.Header["X-Forwarded-Proto"]; len(h) != 0 && h[0] == "https" { - Host = h[0] + "://" + r.Host - } else { - Host = "http://" + r.Host - } - Path = r.URL.Path path := parsepath(Path) - // структура с функциями - var skunky skunkyart + Host = "http://" + r.Host + + if h := r.Header["X-Forwarded-Proto"]; len(h) != 0 && h[0] == "https" { + Host = "https://" + r.Host + } + + var skunky = skunkyart{Version: Release.Version} + + arg := skunky.Args.Get + p, _ := strconv.Atoi(arg("p")) + + skunky.Endpoint = path[1] + skunky.API.main = &skunky skunky.Writer = w skunky.Args = r.URL.Query() skunky.BasePath = CFG.URI - - arg := skunky.Args.Get skunky.QueryRaw = arg("q") skunky.Query = u.QueryEscape(skunky.QueryRaw) + skunky.Page = p if t := arg("type"); len(t) > 0 { skunky.Type = rune(t[0]) } - p, _ := strconv.Atoi(arg("p")) - skunky.Page = p if arg("atom") == "true" { skunky.Atom = true } - skunky.Endpoint = path[1] - skunky.API.skunkyartLink = &skunky - - // пути switch skunky.Endpoint { - default: - skunky.ReturnHTTPError(404) - + // main case "": skunky.ExecuteTemplate("index.htm", "html", &CFG.URI) + case "about": + skunky.About() case "post": skunky.Deviation(path[2], path[3]) case "search": @@ -101,33 +98,38 @@ func Router() { case "group_user": skunky.GRUser() + // media case "media": switch path[2] { case "file": if a := arg("filename"); a != "" { - var filename strings.Builder - filename.WriteString(`filename="`) - filename.WriteString(a) - filename.WriteString(`"`) - w.Header().Add("Content-Disposition", filename.String()) + skunky.SetFilename(a) } skunky.DownloadAndSendMedia(path[3], next(path, 4)) case "emojitar": skunky.Emojitar(path[3]) } - case "about": - skunky.About() case "stylesheet": w.Header().Add("content-type", "text/css") w.Write(open("css/skunky.css")) case "favicon.ico": w.Write(open("images/logo.png")) + // API case "api": + w.Header().Add("Content-Type", "application/json") switch path[2] { + case "instance": + skunky.API.Info() case "random": skunky.API.Random() + default: + skunky.API.Error("Not Found", 404) } + + // 404 + default: + skunky.ReturnHTTPError(404) } } diff --git a/app/util.go b/app/util.go index 71e7d89..c992466 100644 --- a/app/util.go +++ b/app/util.go @@ -64,6 +64,7 @@ type skunkyart struct { Query, QueryRaw string API API + Version string Templates struct { About struct { @@ -131,7 +132,7 @@ func UrlBuilder(strs ...string) string { str.WriteString(CFG.URI) for n, x := range strs { str.WriteString(x) - if n+1 < l && !(strs[n+1][0] == '?' || strs[n+1][0] == '&') && !(x[0] == '?' || x[0] == '&') { + if n := n+1; n < l && len(strs[n]) != 0 && !(strs[n][0] == '?' || strs[n][0] == '&') && !(x[0] == '?' || x[0] == '&') { str.WriteString("/") } } @@ -153,6 +154,14 @@ func (s skunkyart) ReturnHTTPError(status int) { wr(s.Writer, msg.String()) } +func (s skunkyart) SetFilename(name string) { + var filename strings.Builder + filename.WriteString(`filename="`) + filename.WriteString(name) + filename.WriteString(`"`) + s.Writer.Header().Add("Content-Disposition", filename.String()) +} + type Downloaded struct { Headers http.Header Status int @@ -189,6 +198,9 @@ func ParseMedia(media devianter.Media, thumb ...int) string { if len(mediaUrl) != 0 && CFG.Proxy { mediaUrl = mediaUrl[21:] dot := strings.Index(mediaUrl, ".") + if filename == "" { + filename = "image.gif" + } return UrlBuilder("media", "file", mediaUrl[:dot], mediaUrl[dot+11:], "&filename=", filename) } return mediaUrl diff --git a/app/wrapper.go b/app/wrapper.go index f78d8c8..a3d251b 100644 --- a/app/wrapper.go +++ b/app/wrapper.go @@ -42,7 +42,6 @@ func (s skunkyart) GRUser() { group.About.A = x.ModuleData.About var about = &group.About.A group.CreationDate = time.Unix(time.Now().Unix()-x.ModuleData.About.RegDate, 0).UTC().String() - group.About.DescriptionFormatted = ParseDescription(about.Description) for _, val := range x.ModuleData.About.SocialLinks { diff --git a/go.mod b/go.mod index c7dc4e6..a3cbd52 100644 --- a/go.mod +++ b/go.mod @@ -2,7 +2,7 @@ module skunkyart go 1.18 -// replace git.macaw.me/skunky/devianter v0.2.5 => /home/skunk/projects/devianter +replace git.macaw.me/skunky/devianter v0.2.5 => /home/skunk/projects/devianter require ( git.macaw.me/skunky/devianter v0.2.5 golang.org/x/net v0.27.0 diff --git a/main.go b/main.go index 190d79b..3dc4374 100644 --- a/main.go +++ b/main.go @@ -9,6 +9,8 @@ import ( ) func main() { + app.Release.Version = "1.3.2-alpha" + app.Release.Description = "Two API endpoints and template embedding into binary" go app.RefreshInstances() app.ExecuteCommandLineArguments() diff --git a/static/html/about.htm b/static/html/about.htm index d2278d6..94bbf5c 100644 --- a/static/html/about.htm +++ b/static/html/about.htm @@ -44,6 +44,6 @@ {{end}} -

Copyright lost+skunk, X11. SkunkyArt v1.3.1

+

Copyright lost+skunk, X11. SkunkyArt v{{.Version}}

- \ No newline at end of file + From 5a8a0987a2db22de6b9dd184bf40a3e2d16c5bbf Mon Sep 17 00:00:00 2001 From: lost+skunk Date: Tue, 3 Sep 2024 16:14:19 +0300 Subject: [PATCH 11/24] =?UTF-8?q?=D1=84=D0=B8=D0=BA=D1=81=20=D0=BD=D0=B5?= =?UTF-8?q?=D0=B1=D0=BE=D0=BB=D1=8C=D1=88=D0=BE=D0=B3=D0=BE=20=D0=BE=D0=B1?= =?UTF-8?q?=D0=BE=D1=81=D1=80=D0=B0=D0=BC=D1=81=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/router.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/router.go b/app/router.go index cc58f93..2625374 100644 --- a/app/router.go +++ b/app/router.go @@ -13,9 +13,10 @@ var Host, Path string func Router() { parsepath := func(path string) map[int]string { - path = "/" if l := len(CFG.URI); len(path) > l { path = path[l-1:] + } else { + path = "/" } parsedpath := make(map[int]string) From c39399403e031a8c1ad53969770e4261d2c9e7aa Mon Sep 17 00:00:00 2001 From: lost+skunk Date: Wed, 4 Sep 2024 20:22:58 +0300 Subject: [PATCH 12/24] =?UTF-8?q?=D0=BE=D1=82=D0=BE=D0=B1=D1=80=D0=B0?= =?UTF-8?q?=D0=B6=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BE?= =?UTF-8?q?=D0=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- TODO.md | 3 +-- app/api.go | 6 ++++- app/cache.go | 1 + app/config.go | 2 +- app/parsers.go | 6 ++++- app/router.go | 8 +++--- app/util.go | 15 +++++++++++- app/wrapper.go | 59 ++++++++++++++++++++++++++++++--------------- config.example.json | 2 +- go.mod | 3 +-- go.sum | 4 +-- 11 files changed, 74 insertions(+), 35 deletions(-) diff --git a/TODO.md b/TODO.md index fbca5d8..01bc524 100644 --- a/TODO.md +++ b/TODO.md @@ -5,14 +5,13 @@ * **Доделать парсинг описания** * ~~Реализовать стрипы в ежедневных артах~~ ✔️ * ~~Исправить баг с навигацией по страницам~~ ✔️ -* Сделать нормальное отображение ошибок +* ~~Сделать нормальное отображение ошибок~~ ✔️ * ~~Сделать единицы в конфиге более понятными~~ ✔️ * Добавить чекер инстанса на работоспособность * ~~Добавить просмотр понравившихся артов пользователю~~ ✔️ * Добавить возможность включить темплейты в бинарник [P] * ~~Реализовать миниатюры и оптимизировать CSS под маленькие экраны~~ ✔️ * Написать Makefile и скрипт для автоматического развёртывания инстанса -* **Реализовать отображение контента, отличного от картинок (видео, аудио, etc)** * Исправить баг с эмоджи, когда некоторые кастомные эмоции могут не отображаться * ~~Добавить аргумент &filename, который будет выдавать файл с нормально выглядещем именем~~ ✔️ * ~~Улучшить систему кеширования: добавить рейтинг для удаления и копирование изображений в ОЗУ~~ ✔️ diff --git a/app/api.go b/app/api.go index 3d0871c..fdf8270 100644 --- a/app/api.go +++ b/app/api.go @@ -58,8 +58,12 @@ func (a API) Random() { 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') + s, err, daErr := devianter.PerformSearch(string(rand.Intn(999)), rand.Intn(30), 'a') try(err) + if daErr.RAW != nil { + continue + } + deviation := &s.Results[rand.Intn(len(s.Results))] if deviation.NSFW && !CFG.Nsfw { diff --git a/app/cache.go b/app/cache.go index cbf2432..975fa0a 100644 --- a/app/cache.go +++ b/app/cache.go @@ -127,6 +127,7 @@ func InitCacheSystem() { try(os.RemoveAll(fileName)) } } + if c.MaxSize != 0 && fileInfo.Size() > c.MaxSize { try(os.RemoveAll(fileName)) } diff --git a/app/config.go b/app/config.go index eff9ee8..745d2f4 100644 --- a/app/config.go +++ b/app/config.go @@ -89,7 +89,7 @@ func ExecuteConfig() { lifetimeParsed = duration * int64(num) } - CFG.Cache.MaxSize /= 1024 ^ 2 + CFG.Cache.MaxSize *= 1024 ^ 2 go InitCacheSystem() } devianter.UserAgent = CFG.UserAgent diff --git a/app/parsers.go b/app/parsers.go index 3a318be..b7f15fd 100644 --- a/app/parsers.go +++ b/app/parsers.go @@ -9,7 +9,11 @@ import ( "golang.org/x/net/html" ) -func (s skunkyart) ParseComments(c devianter.Comments) string { +func (s skunkyart) ParseComments(c devianter.Comments, daError devianter.Error) string { + if daError.RAW != nil { + return "Failed to fetch comments :(" + } + var cmmts strings.Builder replied := make(map[int]string) diff --git a/app/router.go b/app/router.go index 2625374..32488cb 100644 --- a/app/router.go +++ b/app/router.go @@ -64,13 +64,13 @@ func Router() { var skunky = skunkyart{Version: Release.Version} + skunky.Args = r.URL.Query() arg := skunky.Args.Get p, _ := strconv.Atoi(arg("p")) skunky.Endpoint = path[1] skunky.API.main = &skunky skunky.Writer = w - skunky.Args = r.URL.Query() skunky.BasePath = CFG.URI skunky.QueryRaw = arg("q") skunky.Query = u.QueryEscape(skunky.QueryRaw) @@ -128,9 +128,9 @@ func Router() { skunky.API.Error("Not Found", 404) } - // 404 - default: - skunky.ReturnHTTPError(404) + // 404 + default: + skunky.ReturnHTTPError(404) } } diff --git a/app/util.go b/app/util.go index c992466..c698090 100644 --- a/app/util.go +++ b/app/util.go @@ -139,6 +139,19 @@ func UrlBuilder(strs ...string) string { return str.String() } +func (s skunkyart) Error(dAerr devianter.Error) { + s.Writer.WriteHeader(502) + + var msg strings.Builder + msg.WriteString(`

DeviantArt error — '`) + msg.WriteString(dAerr.Error) + msg.WriteString("'

") + + wr(s.Writer, msg.String()) +} + func (s skunkyart) ReturnHTTPError(status int) { s.Writer.WriteHeader(status) @@ -203,7 +216,7 @@ func ParseMedia(media devianter.Media, thumb ...int) string { } return UrlBuilder("media", "file", mediaUrl[:dot], mediaUrl[dot+11:], "&filename=", filename) } - return mediaUrl + return "" } func ConvertDeviantArtUrlToSkunkyArt(url string) (output string) { diff --git a/app/wrapper.go b/app/wrapper.go index a3d251b..a2e0fa4 100644 --- a/app/wrapper.go +++ b/app/wrapper.go @@ -18,10 +18,15 @@ func (s skunkyart) GRUser() { } var g devianter.Group + var daError devianter.Error g.Name = s.Query var err error - s.Templates.GroupUser.GR, err = g.Get() + s.Templates.GroupUser.GR, err, daError = g.Get() try(err) + if daError.RAW != nil { + s.Error(daError) + return + } group := &s.Templates.GroupUser @@ -63,12 +68,7 @@ func (s skunkyart) GRUser() { group.About.Interests += interest.String() } } - group.About.Comments = s.ParseComments(devianter.GetComments( - strconv.Itoa(group.GR.Gruser.ID), - "", - s.Page, - 4, - )) + group.About.Comments = s.ParseComments(devianter.GetComments(strconv.Itoa(group.GR.Gruser.ID),"",s.Page,4)) case "cover_deviation": group.About.BGMeta = x.ModuleData.CoverDeviation.Deviation @@ -98,12 +98,17 @@ func (s skunkyart) GRUser() { } if s.Type == 'f' { - content = g.Favourites(s.Page, all, folderid) + content, daError = g.Favourites(s.Page, all, folderid) } else { - content, err = g.Gallery(s.Page, folderid) + content, err, daError = g.Gallery(s.Page, folderid) try(err) } + if daError.RAW != nil { + s.Error(daError) + return + } + if folderid > 0 || (s.Type == 'f' && all) { group.Gallery.List = s.DeviationList(content.Content.Results, true, DeviationList{ More: content.Content.HasMore, @@ -172,19 +177,26 @@ func (s skunkyart) Deviation(author, postname string) { return } + var err devianter.Error post := &s.Templates.Deviation id := id_search[len(id_search)-1] - post.Post = devianter.GetDeviation(id, author) + post.Post, err = devianter.GetDeviation(id, author) + if err.RAW != nil { + s.Error(err) + return + } + + if post.Post.Comments.Total <= 50 { + post.Post.Comments.Cursor = "" + } if post.Post.Deviation.TextContent.Excerpt != "" { post.Post.Description = ParseDescription(post.Post.Deviation.TextContent) } else { post.Post.Description = ParseDescription(post.Post.Deviation.Extended.DescriptionText) } - // время публикации - post.StringTime = post.Post.Deviation.PublishedTime.UTC().String() - post.Post.IMG = ParseMedia(post.Post.Deviation.Media) + for _, x := range post.Post.Deviation.Extended.RelatedContent { if len(x.Deviations) != 0 { post.Related += s.DeviationList(x.Deviations, false) @@ -203,17 +215,19 @@ func (s skunkyart) Deviation(author, postname string) { post.Tags += tag.String() } - if post.Post.Comments.Total <= 50 { - post.Post.Comments.Cursor = "" - } - post.Comments = s.ParseComments(devianter.GetComments(id, post.Post.Comments.Cursor, s.Page, 1)) + post.StringTime = post.Post.Deviation.PublishedTime.UTC().String() + post.Post.IMG = ParseMedia(post.Post.Deviation.Media) s.ExecuteTemplate("deviantion.htm", "html", &s) } func (s skunkyart) DD() { - dd := devianter.GetDailyDeviations(s.Page) + dd, err := devianter.GetDailyDeviations(s.Page) + if err.RAW != nil { + s.Error(err) + return + } var strips strings.Builder for _, x := range dd.Strips { strips.WriteString(`

/home/skunk/projects/devianter require ( - git.macaw.me/skunky/devianter v0.2.5 + git.macaw.me/skunky/devianter v0.2.6-0.20240904171839-b3c99749f133 golang.org/x/net v0.27.0 ) diff --git a/go.sum b/go.sum index 8e79784..323fd90 100644 --- a/go.sum +++ b/go.sum @@ -1,4 +1,4 @@ -git.macaw.me/skunky/devianter v0.2.5 h1:aAc6CG/ghvG130Ob7gGUdK4IV3MSeCD5t3QIJjto1M0= -git.macaw.me/skunky/devianter v0.2.5/go.mod h1:ZLn527xBlnpXrUB1B8z/MhyeiWVK4nPWjyfnhWOE8Is= +git.macaw.me/skunky/devianter v0.2.6-0.20240904171839-b3c99749f133 h1:ziutYUyDmdbsptR8Lj4lNmZUxfgwGsNbHM1mO9ATph8= +git.macaw.me/skunky/devianter v0.2.6-0.20240904171839-b3c99749f133/go.mod h1:ZLn527xBlnpXrUB1B8z/MhyeiWVK4nPWjyfnhWOE8Is= golang.org/x/net v0.27.0 h1:5K3Njcw06/l2y9vpGCSdcxWOYHOUk3dVNGDXN+FvAys= golang.org/x/net v0.27.0/go.mod h1:dDi0PyhWNoiUOrAS8uXv/vnScO4wnHQO4mj9fn/RytE= From 191984b31ef228c4077904a2831a2af593352670 Mon Sep 17 00:00:00 2001 From: lost+skunk Date: Mon, 23 Sep 2024 09:38:32 +0300 Subject: [PATCH 13/24] v1.3.2 --- .gitignore | 1 + INSTANCES.md | 6 ++- README.md | 12 ++++++ REDIRECTS.md | 13 +++++++ SETUP-RU.md | 4 +- SETUP.md | 2 +- app/api.go | 91 +++++++++++++++++++++---------------------- app/cache.go | 8 ++-- app/config.go | 9 ++++- app/router.go | 31 +++++++++------ app/util.go | 23 +++++++---- app/wrapper.go | 27 +++++-------- config.example.json | 4 +- instances.json | 22 +++++------ main.go | 2 +- static/css/skunky.css | 22 +++++------ static/html/about.htm | 2 +- static/html/head.htm | 1 + static/html/index.htm | 74 +++++++++++++++++++++++++++++++++-- 19 files changed, 230 insertions(+), 124 deletions(-) create mode 100644 REDIRECTS.md diff --git a/.gitignore b/.gitignore index 4686488..b52ba21 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ **/cache **/config.json **/skunkyart +**/skunkyart-* diff --git a/INSTANCES.md b/INSTANCES.md index 70b68dc..32b0e50 100644 --- a/INSTANCES.md +++ b/INSTANCES.md @@ -1,7 +1,9 @@ +JSON variant should be used from master — https://git.macaw.me/skunky/SkunkyArt/raw/branch/master/instances.json + |Instance|Yggdrasil|I2P|Tor|NSFW|Proxifying|Modified Sources|Country| |:------:|:-------:|:-:|:-:|:--:|:--------:|:--------------:|:-----:| -|[skunky.ebloid.ru](https://skunky.ebloid.ru/art)|[Yes](http://[201:eba5:d1fc:bf7b:cfcb:a811:4b8b:7ea3]/art)|No|No| No | No | No | Russia | +|[skunky.ebloid.ru](https://skunky.ebloid.ru/art)|[Yes](http://[201:eba5:d1fc:bf7b:cfcb:a811:4b8b:7ea3]/art)|No|No| No | Yes | No | Russia | |[clovius.club](https://skunky.clovius.club)|No|No|No| Yes | Yes | No | Sweden | |[bloat.cat](https://skunky.bloat.cat)|No|No|No| Yes | Yes | No | Germany | |[lumaeris.com](https://skunkyart.lumaeris.com)|No|No|No| Yes | Yes | No | Germany | -|[art.bloat.cat](https://art.bloat.cat)|No|No|No| Yes | Yes | No | Germany | +|[art.bloat.cat](https://art.bloat.cat)|No|No|No| Yes | Yes | No | Germany | \ No newline at end of file diff --git a/README.md b/README.md index cfc302f..b61b0bd 100644 --- a/README.md +++ b/README.md @@ -7,6 +7,12 @@ Instances: [`INSTANCES.md`](/skunky/SkunkyArt/src/branch/master/INSTANCES.md) # EN 🇺🇸 ## Description SkunkyArt 🦨 — alternative frontend for DevianArt, which works without JS. +## Build (translated via DeepL) +It is recommended to build with the 'embed' tag because it embeds the presets in the binary. If you plan to modify the templates, then do not use this tag. You can also add the `-ldflags "-w -s"` argument (GCCGO has a different name for it — `gccgoflags`) to reduce the size of the output file. Here is an example: + +`go build -tags embed -ldflags "-w -s"` + +Pre-compiled binaries can be found in the [Releases](https://git.macaw.me/skunky/skunkyart/releases) tab. ## Setup The sample config is in the `config.example.json` file. For custom config, use `--config` option. See the [`SETUP.md`](/skunky/SkunkyArt/src/branch/master/SETUP.md) file for more info about directives. @@ -21,6 +27,12 @@ To do this, you must either make a PR by adding your instance to the `instances. # RU 🇷🇺 ## Описание SkunkyArt 🦨 — альтернативный фронтенд к DeviantArt, который полностью работает без JS (JavaScript). +## Сборка +Рекомендуется производить сборку с тегом 'embed', поскольку он встраивает заготовки в бинарный файл. Если вы планируете изменять заготовки, то не используйте этот тег. Также вы можете добавить аргумент `-ldflags "-w -s"` (у GCCGO он называется по-другому — `gccgoflags`) для уменьшения размера выходного файла. Вот пример: + +`go build -tags embed -ldflags "-w -s"` + +Готовые бинари находятся во вкладке [Releases](https://git.macaw.me/skunky/skunkyart/releases). ## Настройка Пример конфига находится в файле `config.example.json`. Чтобы указать свой конфиг, используйте cli-аргумент `--config`. См. [`SETUP-RU.md`](/skunky/SkunkyArt/src/branch/master/SETUP-RU.md) для информации о настройки фронтенда. diff --git a/REDIRECTS.md b/REDIRECTS.md new file mode 100644 index 0000000..2469977 --- /dev/null +++ b/REDIRECTS.md @@ -0,0 +1,13 @@ +# Search +* `deviantart.com/search?q=$QUERY` => `/search?q=$QUERY&type=all` +# Daily Deviations +* `deviantart.com` => `/dd` +# Deviations +* (`$USER_GROUP.deviantart.com/art/$ID`|`deviantart.com/$USER_GROUP/art/$ID`) => `/post/$USER_GROUP/$ID` +# Groups and users +## Main user page +* (`$USER_GROUP.deviantart.com`|`deviantart.com/$USER_GROUP`) => `/group_user?type=about&q=$USER_GROUP` +## Gallery +* (`$USER_GROUP.deviantart.com/gallery`|`deviantart.com/$USER_GROUP/gallery`) => `/group_user?type=gallery&q=$USER_GROUP` +## Favourites +* (`$USER_GROUP.deviantart.com/favourites`|`deviantart.com/$USER_GROUP/favourites`) => `/group_user?type=favourites&q=$USER_GROUP` diff --git a/SETUP-RU.md b/SETUP-RU.md index 994f193..7d7d04c 100644 --- a/SETUP-RU.md +++ b/SETUP-RU.md @@ -12,13 +12,13 @@ # Конфигурация * `listen` — IP и порт для слушанья; заполняется по такой форме: ip:port * `uri` — URI инстанса. Пример: `"uri":"/art/"` -> https://skunky.ebloid.ru/art/ -* `cache` — Система кеширования; по умолчанию выключена. +* `cache` — Система кеширования; по умолчанию выключена * `enabled` — Состояние системы кеширования; требуется булёвое значение * `path` — Полный путь до каталога, куда будет сохраняться кеш * `lifetime` — Время жизни файла в кеше, требует целочисленное значение, дополненное суффиксом времени (см. 'Единицы времени') * `max-size` — Максимальный размер файла * `update-interval` — Интервал для автоматической ротации кеша -* `dirs-to-memory` — Массив, заполнив который скопируются все файлы из указанных каталогов +* `static-path` — Строка, являющаяся путём до статики. SkunkyArt при запуске скопирует содержимое этого каталога в ОЗУ. Однако, если вы собрали фронтенд с тегом 'embed', то этого не произайдёт * `download-proxy` — Адрес прокси для загрузки файлов * `user-agent` — Строка, которая используется в качестве User-Agent'а diff --git a/SETUP.md b/SETUP.md index 169e7a0..cc89118 100644 --- a/SETUP.md +++ b/SETUP.md @@ -18,7 +18,7 @@ Time units: * `lifetime` — Cached file life time, requires numeric value, followed by multiplicative suffix (see Time Units for details) * `max-size` — Maximum file size in megabytes * `update-interval` — Automatic rotation interval -* `dirs-to-memory` — This setting determines which directories will be copied to RAM when SkunkyArt is started. Mandatory +* `static-path` — This setting determines path to static, which will be copied to RAM when SkunkyArt is started. Useless if you're use binary compiled with 'embed' tag. * `download-proxy` — Proxy address for downloading files. * `user-agent` — String, which SkunkyArt uses as UA diff --git a/app/api.go b/app/api.go index fdf8270..048bc2a 100644 --- a/app/api.go +++ b/app/api.go @@ -9,69 +9,68 @@ import ( ) type API struct { - main *skunkyart + main *skunkyart } type info struct { - Version string `json:"version"` - Settings settingsParams `json:"settings"` + 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 + json, err := json.Marshal(info{ + Version: a.main.Version, + Settings: settingsParams{ + Nsfw: CFG.Nsfw, + Proxy: CFG.Proxy, + }, + }) + try(err) + a.main.Writer.Write(json) } 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()) + 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) + mediaUrl, name := devianter.UrlFromMedia(d.Media) a.main.SetFilename(name) - - if len(mediaUrl) != 0 { - mediaUrl = mediaUrl[21:] + + if len(mediaUrl) != 0 { + mediaUrl = mediaUrl[21:] dot := strings.Index(mediaUrl, ".") a.main.Writer.Header().Del("Content-Type") - a.main.DownloadAndSendMedia(mediaUrl[:dot], mediaUrl[dot+11:]) - } + a.main.DownloadAndSendMedia(mediaUrl[:dot], mediaUrl[dot+11:]) + } } // TODO: сделать фильтры func (a API) Random() { - 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, daErr := devianter.PerformSearch(string(rand.Intn(999)), rand.Intn(30), 'a') - try(err) - if daErr.RAW != nil { - continue - } - - deviation := &s.Results[rand.Intn(len(s.Results))] - - if deviation.NSFW && !CFG.Nsfw { - attempt++ - continue - } - - a.sendMedia(deviation) - return - } + 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, daErr := devianter.PerformSearch(string(rand.Intn(999)), rand.Intn(30), 'a') + try(err) + if daErr.RAW != nil { + continue + } + + deviation := &s.Results[rand.Intn(len(s.Results))] + + if deviation.NSFW && !CFG.Nsfw { + attempt++ + continue + } + + a.sendMedia(deviation) + return + } } diff --git a/app/cache.go b/app/cache.go index 975fa0a..f9225be 100644 --- a/app/cache.go +++ b/app/cache.go @@ -27,10 +27,10 @@ func (s skunkyart) DownloadAndSendMedia(subdomain, path string) { url.WriteString(".wixmp.com/") url.WriteString(path) if t := s.Args.Get("token"); t != "" { - url.WriteString("?token=") - url.WriteString(t) + url.WriteString("?token=") + url.WriteString(t) } - + var response []byte switch { @@ -127,7 +127,7 @@ func InitCacheSystem() { try(os.RemoveAll(fileName)) } } - + if c.MaxSize != 0 && fileInfo.Size() > c.MaxSize { try(os.RemoveAll(fileName)) } diff --git a/app/config.go b/app/config.go index 745d2f4..2ba39a9 100644 --- a/app/config.go +++ b/app/config.go @@ -56,13 +56,11 @@ func ExecuteConfig() { if CFG.cfg != "" { f, err := os.ReadFile(CFG.cfg) tryWithExitStatus(err, 1) - tryWithExitStatus(json.Unmarshal(f, &CFG), 1) if CFG.Cache.Enabled && !CFG.Proxy { exit("Incompatible settings detected: cannot use caching media content without proxy", 1) } - static.StaticPath = CFG.StaticPath if CFG.Cache.Enabled { if CFG.Cache.Lifetime != "" { var duration int64 @@ -92,6 +90,13 @@ func ExecuteConfig() { CFG.Cache.MaxSize *= 1024 ^ 2 go InitCacheSystem() } + + About = instanceAbout{ + Proxy: CFG.Proxy, + Nsfw: CFG.Nsfw, + } + + static.StaticPath = CFG.StaticPath devianter.UserAgent = CFG.UserAgent } } diff --git a/app/router.go b/app/router.go index 32488cb..eddf0a9 100644 --- a/app/router.go +++ b/app/router.go @@ -3,7 +3,7 @@ package app import ( "io" "net/http" - u "net/url" + url "net/url" "skunkyart/static" "strconv" "strings" @@ -57,7 +57,7 @@ func Router() { Path = r.URL.Path path := parsepath(Path) Host = "http://" + r.Host - + if h := r.Header["X-Forwarded-Proto"]; len(h) != 0 && h[0] == "https" { Host = "https://" + r.Host } @@ -67,13 +67,13 @@ func Router() { skunky.Args = r.URL.Query() arg := skunky.Args.Get p, _ := strconv.Atoi(arg("p")) - + skunky.Endpoint = path[1] skunky.API.main = &skunky skunky.Writer = w skunky.BasePath = CFG.URI skunky.QueryRaw = arg("q") - skunky.Query = u.QueryEscape(skunky.QueryRaw) + skunky.Query = url.QueryEscape(skunky.QueryRaw) skunky.Page = p if t := arg("type"); len(t) > 0 { @@ -84,12 +84,21 @@ func Router() { skunky.Atom = true } + if CFG.Proxy { + w.Header().Add("Content-Security-Policy", "default-src 'self'; script-src 'none'; style-src 'self' 'unsafe-inline'") + } else { + w.Header().Add("Content-Security-Policy", "default-src 'self'; img-src 'self' *.wixmp.com; script-src 'none'; style-src 'self' 'unsafe-inline'") + } + + w.Header().Add("X-Frame-Options", "DENY") + switch skunky.Endpoint { // main case "": skunky.ExecuteTemplate("index.htm", "html", &CFG.URI) case "about": - skunky.About() + skunky.Templates.About = About + skunky.ExecuteTemplate("about.htm", "html", &skunky) case "post": skunky.Deviation(path[2], path[3]) case "search": @@ -120,12 +129,12 @@ func Router() { case "api": w.Header().Add("Content-Type", "application/json") switch path[2] { - case "instance": - skunky.API.Info() - case "random": - skunky.API.Random() - default: - skunky.API.Error("Not Found", 404) + case "instance": + skunky.API.Info() + case "random": + skunky.API.Random() + default: + skunky.API.Error("Not Found", 404) } // 404 diff --git a/app/util.go b/app/util.go index c698090..9c8d400 100644 --- a/app/util.go +++ b/app/util.go @@ -1,6 +1,7 @@ package app import ( + "encoding/json" "io" "net/http" "net/url" @@ -40,18 +41,26 @@ func restore() { } var instances []byte +var About instanceAbout func RefreshInstances() { for { func() { defer restore() instances = Download("https://git.macaw.me/skunky/SkunkyArt/raw/branch/master/instances.json").Body + try(json.Unmarshal(instances, &About)) }() time.Sleep(1 * time.Hour) } } // some crap for frontend +type instanceAbout struct { + Proxy bool + Nsfw bool + Instances []settings +} + type skunkyart struct { Writer http.ResponseWriter @@ -63,15 +72,11 @@ type skunkyart struct { BasePath, Endpoint string Query, QueryRaw string - API API - Version string + API API + Version string Templates struct { - About struct { - Proxy bool - Nsfw bool - Instances []settings - } + About instanceAbout SomeList string DDStrips string @@ -132,7 +137,7 @@ func UrlBuilder(strs ...string) string { str.WriteString(CFG.URI) for n, x := range strs { str.WriteString(x) - if n := n+1; n < l && len(strs[n]) != 0 && !(strs[n][0] == '?' || strs[n][0] == '&') && !(x[0] == '?' || x[0] == '&') { + if n := n + 1; n < l && len(strs[n]) != 0 && !(strs[n][0] == '?' || strs[n][0] == '&') && !(x[0] == '?' || x[0] == '&') { str.WriteString("/") } } @@ -215,6 +220,8 @@ func ParseMedia(media devianter.Media, thumb ...int) string { filename = "image.gif" } return UrlBuilder("media", "file", mediaUrl[:dot], mediaUrl[dot+11:], "&filename=", filename) + } else if !CFG.Proxy { + return mediaUrl } return "" } diff --git a/app/wrapper.go b/app/wrapper.go index a2e0fa4..5cac175 100644 --- a/app/wrapper.go +++ b/app/wrapper.go @@ -1,7 +1,6 @@ package app import ( - "encoding/json" "regexp" "strconv" "strings" @@ -24,8 +23,8 @@ func (s skunkyart) GRUser() { s.Templates.GroupUser.GR, err, daError = g.Get() try(err) if daError.RAW != nil { - s.Error(daError) - return + s.Error(daError) + return } group := &s.Templates.GroupUser @@ -68,7 +67,7 @@ func (s skunkyart) GRUser() { group.About.Interests += interest.String() } } - group.About.Comments = s.ParseComments(devianter.GetComments(strconv.Itoa(group.GR.Gruser.ID),"",s.Page,4)) + group.About.Comments = s.ParseComments(devianter.GetComments(strconv.Itoa(group.GR.Gruser.ID), "", s.Page, 4)) case "cover_deviation": group.About.BGMeta = x.ModuleData.CoverDeviation.Deviation @@ -225,8 +224,8 @@ func (s skunkyart) Deviation(author, postname string) { func (s skunkyart) DD() { dd, err := devianter.GetDailyDeviations(s.Page) if err.RAW != nil { - s.Error(err) - return + s.Error(err) + return } var strips strings.Builder for _, x := range dd.Strips { @@ -312,12 +311,13 @@ func (s skunkyart) Search() { return } try(err) - if daError.RAW != nil { - s.Error(daError) - return - } if s.Type != 'r' { + if daError.RAW != nil { + s.Error(daError) + return + } + ss.List = s.DeviationList(ss.Content.Results, false, DeviationList{ Pages: ss.Content.Pages, More: ss.Content.HasMore, @@ -339,10 +339,3 @@ func (s skunkyart) Emojitar(name string) { } wr(s.Writer, ae) } - -func (s skunkyart) About() { - s.Templates.About.Nsfw = CFG.Nsfw - s.Templates.About.Proxy = CFG.Proxy - try(json.Unmarshal(instances, &s.Templates.About)) - s.ExecuteTemplate("about.htm", "html", &s) -} diff --git a/config.example.json b/config.example.json index f4909a7..b38e47e 100644 --- a/config.example.json +++ b/config.example.json @@ -1,6 +1,6 @@ { "listen": "0.0.0.0:3003", - "uri": "/huy/", + "uri": "/", "cache": { "enabled": true, "path": "cache", @@ -12,5 +12,5 @@ "download-proxy": "http://127.0.0.1:8080", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36", "proxy": true, - "nsfw": false + "nsfw": true } diff --git a/instances.json b/instances.json index 4b43a06..a3a2f4a 100644 --- a/instances.json +++ b/instances.json @@ -8,8 +8,8 @@ "clearnet": "https://skunky.ebloid.ru/art" }, "settings": { - "nsfw": false, - "proxy": false + "proxy": true, + "nsfw": false } }, { @@ -19,8 +19,8 @@ "clearnet": "https://skunky.clovius.club" }, "settings": { - "nsfw": true, - "proxy": true + "proxy": true, + "nsfw": true } }, { @@ -30,8 +30,8 @@ "clearnet": "https://skunky.bloat.cat" }, "settings": { - "nsfw": true, - "proxy": true + "proxy": true, + "nsfw": true } }, { @@ -41,8 +41,8 @@ "clearnet": "https://skunkyart.lumaeris.com" }, "settings": { - "nsfw": true, - "proxy": true + "proxy": true, + "nsfw": true } }, { @@ -52,9 +52,9 @@ "clearnet": "https://art.bloat.cat" }, "settings": { - "nsfw": true, - "proxy": true + "proxy": true, + "nsfw": true } } ] -} +} \ No newline at end of file diff --git a/main.go b/main.go index 3dc4374..d7009ae 100644 --- a/main.go +++ b/main.go @@ -9,7 +9,7 @@ import ( ) func main() { - app.Release.Version = "1.3.2-alpha" + app.Release.Version = "1.3.2" app.Release.Description = "Two API endpoints and template embedding into binary" go app.RefreshInstances() diff --git a/static/css/skunky.css b/static/css/skunky.css index bdc894c..a7258c8 100644 --- a/static/css/skunky.css +++ b/static/css/skunky.css @@ -19,11 +19,10 @@ header h1 { header form { align-self: center; } -header { +header, form { display: flex; } form { - font-size: 0; border: solid #164e3e 1px; max-width: fit-content; } @@ -147,21 +146,18 @@ input:focus { font-size: 80% } - center form { - font-size: 60% - } - - header form { - font-size: 60%; - max-width: unset; - border: 0; - } - header, center { + header { + margin-left: 3%; text-align: center; - display: block; + display: inline-block; clear: both; font-size: 200%; } + + form { + font-size: 60%; + border: solid #164e3e 5px; + } .content { margin: auto; diff --git a/static/html/about.htm b/static/html/about.htm index 94bbf5c..eac4e47 100644 --- a/static/html/about.htm +++ b/static/html/about.htm @@ -6,7 +6,7 @@

SkunkyArt is an alternative frontend for deviantart.com, written in Go.

-

Room in Matrix

+

Room in [matrix]

Instance settings:

+

Room in [matrix]

Instance settings:
  • NSFW: {{if .Templates.About.Nsfw}}YES{{else}}NO{{end}}
  • @@ -44,6 +44,6 @@ {{end}}
-

Copyright lost+skunk, X11. SkunkyArt v{{.Version}}

+

Copyright lost+skunk, X11. SkunkyArt v{{.Version}}

From f857340dceb7a7499b92af34557d6bf214fceb29 Mon Sep 17 00:00:00 2001 From: lost+skunk Date: Fri, 15 Nov 2024 22:43:56 +0300 Subject: [PATCH 15/24] =?UTF-8?q?=D0=BE=D1=84=D1=80=D1=86=D0=B2=D0=B0?= =?UTF-8?q?=D0=B3=D1=80=D0=B3=D1=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/router.go | 2 -- 1 file changed, 2 deletions(-) diff --git a/app/router.go b/app/router.go index c7dd623..ac65c3d 100644 --- a/app/router.go +++ b/app/router.go @@ -11,8 +11,6 @@ import ( var Host string -// var Path *string - func Router() { parsepath := func(path string) map[int]string { if l := len(CFG.URI); len(path) > l { From f692d1eb2d99e9a5c8030b196729a9fe896bb328 Mon Sep 17 00:00:00 2001 From: lost+skunk Date: Fri, 15 Nov 2024 23:34:29 +0300 Subject: [PATCH 16/24] =?UTF-8?q?=D0=B7=D0=B0=D0=B1=D1=8B=D0=BB=20=D0=BD?= =?UTF-8?q?=D0=B0=D0=B6=D0=B0=D1=82=D1=8C=20^s...?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- instances.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/instances.json b/instances.json index a3a2f4a..3024c59 100644 --- a/instances.json +++ b/instances.json @@ -1,11 +1,11 @@ { "instances": [ { - "title": "skunky.ebloid.ru", - "country": "Russia", + "title": "ls.404.mn", + "country": "Germany", "urls": { - "ygg": "http://[201:eba5:d1fc:bf7b:cfcb:a811:4b8b:7ea3]/art", - "clearnet": "https://skunky.ebloid.ru/art" + "ygg": "http://[201:f137:d1ac:920e:cd42:bfd1:1e83:da1d]/skunkyart", + "clearnet": "https://ls.404.mn/skunkyart" }, "settings": { "proxy": true, From 86203ebb7b37e8f14f8fbed31710d07f37d2b473 Mon Sep 17 00:00:00 2001 From: vlnst Date: Tue, 26 Nov 2024 02:32:05 +0300 Subject: [PATCH 17/24] Add Docker --- .dockerignore | 6 ++++++ .gitignore | 1 + Dockerfile | 23 +++++++++++++++++++++++ compose.example.yaml | 12 ++++++++++++ 4 files changed, 42 insertions(+) create mode 100644 .dockerignore create mode 100644 Dockerfile create mode 100644 compose.example.yaml diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..6833fbe --- /dev/null +++ b/.dockerignore @@ -0,0 +1,6 @@ +cache +compose.yaml +*.json +LICENSE +*.md +services diff --git a/.gitignore b/.gitignore index b52ba21..63ca398 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ **/cache +**/compose.yaml **/config.json **/skunkyart **/skunkyart-* diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..fdc1919 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,23 @@ +ARG GO_VERSION=1.18 + +FROM --platform=$BUILDPLATFORM golang:${GO_VERSION} AS build +ARG TARGETOS +ARG TARGETARCH + +WORKDIR /build +COPY . . +RUN CGO_ENABLED=0 GOARCH=${TARGETARCH} GOOS=${TARGETOS} go build -ldflags "-s -w -extldflags '-static'" && \ + echo "skunkyart:x:10000:10000:SkunkyArt user:/:/sbin/nologin" > /etc/minimal-passwd && \ + echo "skunkyart:x:10000:" > /etc/minimal-group + +FROM scratch + +COPY --from=build /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ +COPY --from=build /build/static /static +COPY --from=build /build/skunkyart /skunkyart +COPY --from=build /etc/minimal-passwd /etc/passwd +COPY --from=build /etc/minimal-group /etc/group + +USER skunkyart + +ENTRYPOINT ["/skunkyart"] diff --git a/compose.example.yaml b/compose.example.yaml new file mode 100644 index 0000000..5eead70 --- /dev/null +++ b/compose.example.yaml @@ -0,0 +1,12 @@ +services: + skunkyart: + container_name: skunkyart + restart: unless-stopped + build: . + ports: + - "127.0.0.1:3003:3003" + security_opt: + - no-new-privileges:true + volumes: + - ./config.json:/config.json:ro + - ./cache:/cache # Ensure cache folder has a 10000:10000 ownership. From 866429cafc8a3a85a8f5b28eb876adf2003e5491 Mon Sep 17 00:00:00 2001 From: lost+skunk Date: Sat, 4 Jan 2025 22:29:34 +0300 Subject: [PATCH 18/24] New domain and acknowledgement to vlnst --- INSTANCES.md | 2 +- README.md | 3 ++- instances.json | 4 ++-- static/html/about.htm | 4 ++-- 4 files changed, 7 insertions(+), 6 deletions(-) diff --git a/INSTANCES.md b/INSTANCES.md index c9a198a..49f21d8 100644 --- a/INSTANCES.md +++ b/INSTANCES.md @@ -2,7 +2,7 @@ JSON variant should be used from master — https://git.macaw.me/skunky/SkunkyAr |Instance|Yggdrasil|I2P|Tor|NSFW|Proxifying|Modified Sources|Country| |:------:|:-------:|:-:|:-:|:--:|:--------:|:--------------:|:-----:| -|[ls.404.mn](https://ls.404.mn/skunkyart)|[Yes](http://[201:f137:d1ac:920e:cd42:bfd1:1e83:da1d]/skunkyart)|No|No| No | Yes | No | Germany | +|[lost-skunk.cc](https://lost-skunk.cc/skunkyart)|[Yes](http://[201:f137:d1ac:920e:cd42:bfd1:1e83:da1d]/skunkyart)|No|No| No | Yes | No | Germany | |[clovius.club](https://skunky.clovius.club)|No|No|No| Yes | Yes | No | Sweden | |[bloat.cat](https://skunky.bloat.cat)|No|No|No| Yes | Yes | No | Germany | |[lumaeris.com](https://skunkyart.lumaeris.com)|No|No|No| Yes | Yes | No | Germany | diff --git a/README.md b/README.md index f4b1b14..7f914bc 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ SkunkyArt -[![Matrix room](https://img.shields.io/badge/matrix-000000?style=for-the-badge&logo=Matrix&logoColor=white)](https://go.kde.org/matrix/#/#skunkyart:ls.404.mn) +[![Matrix room](https://img.shields.io/badge/matrix-000000?style=for-the-badge&logo=Matrix&logoColor=white)](https://go.kde.org/matrix/#/#skunkyart:gnulinux.club) Instances: [`INSTANCES.md`](/skunky/SkunkyArt/src/branch/master/INSTANCES.md) @@ -45,5 +45,6 @@ SkunkyArt 🦨 — альтернативный фронтенд к DeviantArt, 1. Инстанс не должен использовать Cloudflare итп. 2. Если ваш инстанс имеет модифицированный исходный код, то вам нужно опубликовать его на любую свободную площадку. Например, Github и Gitlab таковыми не являются. ## Благодарности +* [vlnst](https://git.bloat.cat/vlnst) — написал Docker-файл. * [Лис⚛](https://go.kde.org/matrix/#/@fox:matrix.org) — помог разобраться в Go и много чего полезного посоветовал по этому языку. * [meoww](https://codeberg.org/meoww) — перевела некоторые предложения на английский язык и написала сервис для openrc \ No newline at end of file diff --git a/instances.json b/instances.json index 3024c59..a38c86c 100644 --- a/instances.json +++ b/instances.json @@ -1,11 +1,11 @@ { "instances": [ { - "title": "ls.404.mn", + "title": "lost-skunk.cc", "country": "Germany", "urls": { "ygg": "http://[201:f137:d1ac:920e:cd42:bfd1:1e83:da1d]/skunkyart", - "clearnet": "https://ls.404.mn/skunkyart" + "clearnet": "https://lost-skunk.cc/skunkyart" }, "settings": { "proxy": true, diff --git a/static/html/about.htm b/static/html/about.htm index f6502af..ae2da3f 100644 --- a/static/html/about.htm +++ b/static/html/about.htm @@ -6,7 +6,7 @@

SkunkyArt is an alternative frontend for deviantart.com, written in Go.

-

Room in [matrix]

+

Room in [matrix]

Instance settings:
  • NSFW: {{if .Templates.About.Nsfw}}YES{{else}}NO{{end}}
  • @@ -44,6 +44,6 @@ {{end}}
-

Copyright lost+skunk, X11. SkunkyArt v{{.Version}}

+

Copyright lost+skunk, X11. SkunkyArt v{{.Version}}

From 92d4f4864a35ce3d121ae61166bdd229b78c7d94 Mon Sep 17 00:00:00 2001 From: lost+skunk Date: Sat, 4 Jan 2025 22:32:18 +0300 Subject: [PATCH 19/24] =?UTF-8?q?=D0=B1=D0=B5=D0=B7=20=D0=B2=D1=82=D0=BE?= =?UTF-8?q?=D1=80=D0=BE=D0=B3=D0=BE=20=D0=BA=D0=BE=D0=BC=D0=BC=D0=B8=D1=82?= =?UTF-8?q?=D0=B0=20=D0=BD=D1=83=20=D0=BD=D0=B8=D0=BA=D0=B0=D0=BA..?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 7f914bc..e5f404d 100644 --- a/README.md +++ b/README.md @@ -25,6 +25,7 @@ To do this, you must either make a PR by adding your instance to the `instances. 1. the Instance must not use Cloudflare. 2. If your instance has modified source code, you need to publish it to any free platform. For example, Github and Gitlab are not. ## Acknowledgements +* [vlnst](https://git.bloat.cat/vlnst) — wrote a Docker file. * [Лис⚛](https://go.kde.org/matrix/#/@fox:matrix.org) — helped me understand Go and gave me a lot of useful advice on this language. * [meoww](https://codeberg.org/meoww) — translated some sentences into English and wrote a service for openrc From 32c61ec8ea577fdd37f7d50e1c176273960aa3e0 Mon Sep 17 00:00:00 2001 From: lost+skunk Date: Tue, 11 Feb 2025 23:37:59 +0300 Subject: [PATCH 20/24] clovius.club >> orehus.club --- INSTANCES.md | 2 +- instances.json | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/INSTANCES.md b/INSTANCES.md index 49f21d8..836b2fe 100644 --- a/INSTANCES.md +++ b/INSTANCES.md @@ -3,7 +3,7 @@ JSON variant should be used from master — https://git.macaw.me/skunky/SkunkyAr |Instance|Yggdrasil|I2P|Tor|NSFW|Proxifying|Modified Sources|Country| |:------:|:-------:|:-:|:-:|:--:|:--------:|:--------------:|:-----:| |[lost-skunk.cc](https://lost-skunk.cc/skunkyart)|[Yes](http://[201:f137:d1ac:920e:cd42:bfd1:1e83:da1d]/skunkyart)|No|No| No | Yes | No | Germany | -|[clovius.club](https://skunky.clovius.club)|No|No|No| Yes | Yes | No | Sweden | +|[orehus.club](https://sa.orehus.club)|No|No|No| Yes | No | No | Germany | |[bloat.cat](https://skunky.bloat.cat)|No|No|No| Yes | Yes | No | Germany | |[lumaeris.com](https://skunkyart.lumaeris.com)|No|No|No| Yes | Yes | No | Germany | |[art.bloat.cat](https://art.bloat.cat)|No|No|No| Yes | Yes | No | Germany | \ No newline at end of file diff --git a/instances.json b/instances.json index a38c86c..0b5972c 100644 --- a/instances.json +++ b/instances.json @@ -13,13 +13,13 @@ } }, { - "title": "clovius.club", - "country": "Sweden", + "title": "orehus.club", + "country": "Germany", "urls": { - "clearnet": "https://skunky.clovius.club" + "clearnet": "https://sa.orehus.club" }, "settings": { - "proxy": true, + "proxy": false, "nsfw": true } }, From 048bb470ab8dc3adce83d2e615f3ab369efa2199 Mon Sep 17 00:00:00 2001 From: lost+skunk Date: Sat, 22 Feb 2025 15:30:29 +0300 Subject: [PATCH 21/24] =?UTF-8?q?=D0=9F=D0=B5=D1=80=D0=B5=D0=BA=D0=BB?= =?UTF-8?q?=D1=8E=D1=87=D0=B0=D1=82=D0=B5=D0=BB=D1=8C=20=D0=BA=D0=B5=D1=88?= =?UTF-8?q?=D0=B0=20=D0=B2=20=D0=BE=D0=B7=D1=83,=20=D0=BD=D0=B5=D0=B1?= =?UTF-8?q?=D0=BE=D0=BB=D1=8C=D1=88=D0=B8=D0=B5=20=D1=83=D0=BB=D1=83=D1=87?= =?UTF-8?q?=D1=88=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=BA=D1=81=D1=81,=20=D1=84?= =?UTF-8?q?=D0=B8=D0=BA=D1=81=20=D0=BD=D1=81=D1=84=D0=B2,=20=D1=84=D0=B8?= =?UTF-8?q?=D0=BA=D1=81=20=D0=BC=D0=B0=D0=BA=D1=81=D0=B8=D0=BC=D0=B0=D0=BB?= =?UTF-8?q?=D1=8C=D0=BD=D0=BE=D0=B3=D0=BE=20=D1=80=D0=B0=D0=B7=D0=BC=D0=B5?= =?UTF-8?q?=D1=80=D0=B0=20=D0=BA=D0=B5=D1=88=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/api.go | 8 ++++- app/cache.go | 72 +++++++++++++++++++++++++----------------- app/config.go | 7 ++-- app/wrapper.go | 13 ++++++-- config.example.json | 3 +- static/css/skunky.css | 30 ++++++++++++------ static/html/gruser.htm | 2 +- 7 files changed, 88 insertions(+), 47 deletions(-) diff --git a/app/api.go b/app/api.go index 048bc2a..d2a5655 100644 --- a/app/api.go +++ b/app/api.go @@ -41,12 +41,18 @@ func (a API) Error(description string, status int) { func (a API) sendMedia(d *devianter.Deviation) { mediaUrl, name := devianter.UrlFromMedia(d.Media) a.main.SetFilename(name) - if len(mediaUrl) != 0 { + return + } + + if CFG.Proxy { mediaUrl = mediaUrl[21:] dot := strings.Index(mediaUrl, ".") a.main.Writer.Header().Del("Content-Type") a.main.DownloadAndSendMedia(mediaUrl[:dot], mediaUrl[dot+11:]) + } else { + a.main.Writer.Header().Add("Location", mediaUrl) + a.main.Writer.WriteHeader(302) } } diff --git a/app/cache.go b/app/cache.go index f9225be..e03db67 100644 --- a/app/cache.go +++ b/app/cache.go @@ -38,17 +38,7 @@ func (s skunkyart) DownloadAndSendMedia(subdomain, path string) { fileName := sha1.Sum([]byte(subdomain + path)) filePath := CFG.Cache.Path + "/" + hex.EncodeToString(fileName[:]) - mx.Lock() - if tempFS[fileName] == nil { - tempFS[fileName] = &file{} - } - mx.Unlock() - - if tempFS[fileName].Content != nil { - response = tempFS[fileName].Content - tempFS[fileName].Score += 2 - break - } else { + c := func() { file, err := os.Open(filePath) if err != nil { if dwnld := Download(url.String()); dwnld.Status == 200 && dwnld.Headers["Content-Type"][0][:5] == "image" { @@ -63,27 +53,44 @@ func (s skunkyart) DownloadAndSendMedia(subdomain, path string) { try(e) response = file } + } - go func() { - defer restore() + if CFG.Cache.MemCache { + mx.Lock() + if tempFS[fileName] == nil { + tempFS[fileName] = &file{} + } + mx.Unlock() - mx.RLock() - tempFS[fileName].Content = response - mx.RUnlock() + if tempFS[fileName].Content != nil { + response = tempFS[fileName].Content + tempFS[fileName].Score += 2 + break + } else { + c() + go func() { + defer restore() - for { - time.Sleep(1 * time.Minute) + mx.RLock() + tempFS[fileName].Content = response + mx.RUnlock() - mx.Lock() - if tempFS[fileName].Score <= 0 { - delete(tempFS, fileName) + for { + time.Sleep(1 * time.Minute) + + mx.Lock() + if tempFS[fileName].Score <= 0 { + delete(tempFS, fileName) + mx.Unlock() + return + } + tempFS[fileName].Score-- mx.Unlock() - return } - tempFS[fileName].Score-- - mx.Unlock() - } - }() + }() + } + } else { + c() } case CFG.Proxy: dwnld := Download(url.String()) @@ -112,6 +119,7 @@ func InitCacheSystem() { println(err.Error()) } + var total int64 for _, file := range dir { fileName := c.Path + "/" + file.Name() fileInfo, err := file.Info() @@ -128,9 +136,15 @@ func InitCacheSystem() { } } - if c.MaxSize != 0 && fileInfo.Size() > c.MaxSize { - try(os.RemoveAll(fileName)) - } + total += fileInfo.Size() + // if c.MaxSize != 0 && fileInfo.Size() > c.MaxSize { + // try(os.RemoveAll(fileName)) + // } + } + + if c.MaxSize != 0 && total > c.MaxSize { + try(os.RemoveAll(c.Path)) + os.Mkdir(c.Path, 0700) } time.Sleep(time.Second * time.Duration(c.UpdateInterval)) diff --git a/app/config.go b/app/config.go index 2ba39a9..813453c 100644 --- a/app/config.go +++ b/app/config.go @@ -12,12 +12,13 @@ import ( ) var Release struct { - Version string + Version string Description string } type cache_config struct { Enabled bool + MemCache bool `json:"memcache"` Path string MaxSize int64 `json:"max-size"` Lifetime string @@ -93,9 +94,9 @@ func ExecuteConfig() { About = instanceAbout{ Proxy: CFG.Proxy, - Nsfw: CFG.Nsfw, + Nsfw: CFG.Nsfw, } - + static.StaticPath = CFG.StaticPath devianter.UserAgent = CFG.UserAgent } diff --git a/app/wrapper.go b/app/wrapper.go index 5cac175..5fe1dde 100644 --- a/app/wrapper.go +++ b/app/wrapper.go @@ -36,13 +36,12 @@ func (s skunkyart) GRUser() { for _, x := range g.Gruser.Page.Modules { switch x.Name { case "about", "group_about": - switch g.Owner.Group { - case true: + if g.Owner.Group { var about = &x.ModuleData.GroupAbout group.Group = true group.CreationDate = x.ModuleData.GroupAbout.FoundatedAt.UTC().String() group.About.DescriptionFormatted = ParseDescription(about.Description) - case false: + } else if false { group.About.A = x.ModuleData.About var about = &group.About.A group.CreationDate = time.Unix(time.Now().Unix()-x.ModuleData.About.RegDate, 0).UTC().String() @@ -186,6 +185,14 @@ func (s skunkyart) Deviation(author, postname string) { return } + if post.Post.Deviation.NSFW { + s.Writer.WriteHeader(403) + wr(s.Writer, `

NSFW content are disabled on this instance.

`) + return + } + if post.Post.Comments.Total <= 50 { post.Post.Comments.Cursor = "" } diff --git a/config.example.json b/config.example.json index b38e47e..70e1c1b 100644 --- a/config.example.json +++ b/config.example.json @@ -6,11 +6,12 @@ "path": "cache", "lifetime": null, "max-size": 200, + "memcache": false, "update-interval": 5 }, "static-path": "static", "download-proxy": "http://127.0.0.1:8080", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36", "proxy": true, - "nsfw": true + "nsfw": false } diff --git a/static/css/skunky.css b/static/css/skunky.css index a7258c8..09cc71c 100644 --- a/static/css/skunky.css +++ b/static/css/skunky.css @@ -1,6 +1,6 @@ /* TAGS */ html { - font-family: Ubuntu; + font-family: ubuntu, system-ui; background-color:black; color: rgb(234, 216, 216); } @@ -45,24 +45,22 @@ input:focus { justify-content: center; } .block { - max-width: 20%; - height: 0%; - padding: 4px; - border-radius: 2px; - border: 3px solid #091f19; + padding: 0px 0px 6px 0px; + border: 3px solid #000; word-break: break-all; background-color: #091f19; margin-left: 5px; margin-top: 5px; text-align: center; } +.block h1 { + padding: 8.5vh; +} .block:hover { border: 3px solid #4d27d6; transition: 400ms; } -.block img, .plates .user-plate img { - width: 100%; -} + .block p { word-break: break-all; } @@ -185,6 +183,20 @@ input:focus { font-size: 60%; max-width: 80% } + .block img, .plates .user-plate img { + width: 100%; + } +} + +@media (orientation: landscape) { + .block { + width: 20%; + } + .block img, .plates .user-plate img { + width: 100%; + height: 30vh; + object-fit: cover; + } } @media (max-width: 1462px) and (orientation: landscape) { diff --git a/static/html/gruser.htm b/static/html/gruser.htm index 6593951..4e8e3d1 100644 --- a/static/html/gruser.htm +++ b/static/html/gruser.htm @@ -30,7 +30,7 @@

| {{.Templates.GroupUser.GR.Owner.Username}}

{{if eq .Type 'a'}} - {{if ne .Templates.GroupUser.About.BG ""}} + {{if and (and (ne .Templates.About.Nsfw true) (ne .Templates.GroupUser.About.BGMeta.NSFW true)) (ne .Templates.GroupUser.About.BG "")}} {{end}} From 40d3d89623836fbcdea6efbcdbc4611f20528cfe Mon Sep 17 00:00:00 2001 From: lost+skunk Date: Sun, 23 Feb 2025 22:03:02 +0300 Subject: [PATCH 22/24] =?UTF-8?q?=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/wrapper.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/wrapper.go b/app/wrapper.go index 5fe1dde..ef1fb31 100644 --- a/app/wrapper.go +++ b/app/wrapper.go @@ -185,7 +185,7 @@ func (s skunkyart) Deviation(author, postname string) { return } - if post.Post.Deviation.NSFW { + if post.Post.Deviation.NSFW && !CFG.Nsfw { s.Writer.WriteHeader(403) wr(s.Writer, ` Date: Wed, 19 Mar 2025 14:45:29 +0300 Subject: [PATCH 23/24] Add sa.dc09.ru --- instances.json | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/instances.json b/instances.json index 0b5972c..725e524 100644 --- a/instances.json +++ b/instances.json @@ -55,6 +55,17 @@ "proxy": true, "nsfw": true } + }, + { + "title": "dc09.ru", + "country": "Russia", + "urls": { + "clearnet": "https://sa.dc09.ru" + }, + "settings": { + "proxy": true, + "nsfw": false + } } ] } \ No newline at end of file From 71a07e074edf9251b4d53c3bf4031f08cdc48027 Mon Sep 17 00:00:00 2001 From: lost+skunk Date: Wed, 19 Mar 2025 14:49:35 +0300 Subject: [PATCH 24/24] Add sa.dc09.ru --- INSTANCES.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/INSTANCES.md b/INSTANCES.md index 836b2fe..e5fffdd 100644 --- a/INSTANCES.md +++ b/INSTANCES.md @@ -6,4 +6,5 @@ JSON variant should be used from master — https://git.macaw.me/skunky/SkunkyAr |[orehus.club](https://sa.orehus.club)|No|No|No| Yes | No | No | Germany | |[bloat.cat](https://skunky.bloat.cat)|No|No|No| Yes | Yes | No | Germany | |[lumaeris.com](https://skunkyart.lumaeris.com)|No|No|No| Yes | Yes | No | Germany | -|[art.bloat.cat](https://art.bloat.cat)|No|No|No| Yes | Yes | No | Germany | \ No newline at end of file +|[art.bloat.cat](https://art.bloat.cat)|No|No|No| Yes | Yes | No | Germany | +|[dc09.ru](https://sa.dc09.ru)|No|No|No| No | Yes | No | Russia | \ No newline at end of file

vevwfY`Obzp4>XN^GV4FRBcrR{uDRU@w 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%0D*&} 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