diff --git a/web/templates/article.pug b/web/templates/article.pug
deleted file mode 100644
index c24cb83..0000000
--- a/web/templates/article.pug
+++ /dev/null
@@ -1,27 +0,0 @@
-extends base.pug
-
-block meta_description
- meta(name='description' content=description)
-
-block append head
- link(href='/assets/css/articles.css' rel='stylesheet')
- link(rel='canonical' href='/stuff/article/'+canonical)
-
-block nav
- a(href='/') Home
- a(href='/stuff') Stuff
- a(href='/mindflow') Mindflow
- a(href='/about') About
- a(href='/guestbook') Guestbook
- h1 Articles
-
-block content
- :go:func Article(title, description, body string, date time.Time, host, canonical string, r *http.Request)
- article
- header
- h2= title
- div.menu
- a(href='/stuff#articles') Go back to articles list
- - dctz := util.ToClientTimezone(date, r)
- time(datetime=dctz.Format("2006-01-02")) #{dctz.Format("02 January 2006")}
- | !{body}
\ No newline at end of file
diff --git a/web/templates/base.pug b/web/templates/base.pug
deleted file mode 100755
index 30d774c..0000000
--- a/web/templates/base.pug
+++ /dev/null
@@ -1,25 +0,0 @@
-doctype html
-html(lang='en')
- head
- block head
- title Arav's dwelling #{title}
- meta(charset='utf-8')
- meta(http-equiv='X-UA-Compatible' content='IE=edge')
- meta(name='viewport' content='width=device-width, initial-scale=1.0')
- meta(name='theme-color' content='#cd2682')
- block meta_description
- link(rel='icon' href='/assets/img/favicon.svg' sizes='any' type='image/svg+xml')
- link(rel='alternate' href='/rss.xml' type='application/rss+xml' title="Arav's dwelling")
- link(href='/assets/css/main.css' rel='stylesheet')
- body
- header
- svg#logo(viewBox='0 -25 216 40')
- text.logo Arav's dwelling
- text.under(y='11') Welcome to my sacred place, wanderer
- nav
- block nav
- block content
- footer
- a(href='/rss.xml' title="Stay up to date on what's going on.") RSS feed
- br
- | © 2017—2024 Alexander "Arav" Andreev <#[a(href='mailto:me@arav.su') me@arav.su]> #[a(href='/privacy') Privacy statements]
diff --git a/web/templates/errorXXX.pug b/web/templates/errorXXX.pug
deleted file mode 100755
index 4d038ba..0000000
--- a/web/templates/errorXXX.pug
+++ /dev/null
@@ -1,28 +0,0 @@
-extends base.pug
-
-block meta_description
- meta(name='description' content=http.StatusText(code))
-
-block append head
- link(href='/assets/css/error.css' rel='stylesheet')
-
-block nav
- a(href='/') Home
- a(href='/stuff') Stuff
- a(href='/mindflow') Mindflow
- a(href='/about') About
- a(href='/guestbook') Guestbook
- h1 #{http.StatusText(code)}
-
-block content
- :go:func ErrorXXX(title, reason, message, referer string, code int)
- section#error
- h1 #{code}
- | #{http.StatusText(code)}
- if reason != ""
- p #{reason}
- if message != ""
- p #{message}
- if referer != ""
- section
- h2 #[a(href=referer) Go back]
diff --git a/web/templates/guestbook.pug b/web/templates/guestbook.pug
deleted file mode 100755
index 2d40436..0000000
--- a/web/templates/guestbook.pug
+++ /dev/null
@@ -1,68 +0,0 @@
-extends base.pug
-
-mixin entryLine(line)
- if (len(line) > 0 && line[0] == '>')
- p.quote= line
- else
- p= line
-
-block meta_description
- meta(name='description' content="This is my guestbook. Welcome.")
-
-block append head
- link(href='/assets/css/guestbook.css' rel='stylesheet')
- script(src='/assets/js/captcha_refresh.js' defer='')
- link(rel='canonical' href='/guestbook')
-
-block nav
- a(href='/') Home
- a(href='/stuff') Stuff
- a(href='/mindflow') Mindflow
- a(href='/about') About
- h1 Guestbook
-
-block content
- :go:import "git.arav.su/Arav/justguestbook"
- :go:func Guestbook(title, owner, captcha_id string, pages_count int64, entries []*justguestbook.Entry, r *http.Request)
- form#new-post(action='/api/guestbook', method='POST')
- input(type='text' maxlength='80' placeholder='Name (Anonymous if left blank)' name='name')
- input(type='text' maxlength='255' placeholder='Website (optional)' name='website')
- textarea(maxlength='4096' placeholder='Your message' name="message" required='')
- span.checkboxes
- input(type='checkbox' id='hide-website' name='hide_website' checked='')
- label(for='hide-website') Hide website #[small (only I can see if set)]
- br
- small Use > to make a quote.
- span.captcha
- input(type='hidden' value=captcha_id name='captcha_id')
- img(src='/api/captcha/'+captcha_id+'/image', alt="CAPTCHA" width='160' height='40')
- input(type='text' maxlength='6' placeholder='CAPTCHA' name='captcha_answer' required='')
- small Valid for #[b 10] minutes.
- input(type='submit' value='Send a post')
- section#posts
- if (len(entries) > 0)
- each entry in entries
- article
- header
- - var created_tz = util.ToClientTimezone(entry.Created, r).Format("Monday _2 January 2006 15:04:05 -07:00")
- - var website = ""
- if (!entry.HideWebsite)
- - website = entry.Website
- | ##{entry.ID} by #[span.highlighted #{entry.Name}] #[em #{website}] on #[time(datetime=created_tz) #{created_tz}]
- each line in strings.Split(entry.Message, "\n")
- +entryLine(line)
- if (entry.Reply != nil)
- .reply
- header
- - var reply_created_tz = util.ToClientTimezone(entry.Reply.Created, r).Format("Monday _2 January 2006 15:04:05 -07:00")
- | Reply by #[span.highlighted #{owner}] on #[time(datetime=reply_created_tz) #{reply_created_tz}]
- each line in strings.Split(entry.Reply.Message, "\n")
- +entryLine(line)
- else
- p.center No posts.
- if pages_count > 1
- section#pagination
- - var n int64 = 1;
- while n <= pages_count
- a(href='/guestbook?p='+fmt.Sprint(n))= n
- - n += 1
diff --git a/web/templates/index.pug b/web/templates/index.pug
deleted file mode 100755
index 1213c20..0000000
--- a/web/templates/index.pug
+++ /dev/null
@@ -1,67 +0,0 @@
-extends base.pug
-
-block meta_description
- meta(name='description' content="A homepage of a russian guy Alexander aka Arav. Not just homepage, but something more...")
-
-block append head
- link(href='assets/css/index.css' rel='stylesheet')
- link(rel='canonical' href='/')
-
-block nav
- a(href='/stuff') Stuff
- a(href='/mindflow') Mindflow
- a(href='/about') About
- a(href='/guestbook') Guestbook
-
-block content
- :go:func Index(title string)
- section#services
- span
- a(href='https://arav.su') arav.su
- | .
- a(href='http://moq7aejnf4xk5k2bkaltli3ftkhusy2mbrd3pj23nrca343ku2mgk4yd.onion') onion
- | .
- a(href='http://[300:a98d:d6d0:8a08::f]') ygg
- | .
- a(href='http://arav.i2p') i2p
- sup #[a(href="http://arav.i2p/?i2paddresshelper=5Kl-DiWbbk6wf7m0v6zBSNHYq3sXlnrWLIWVeGdpPbPyc9CBS~zrzDYpP43rv1fRiIkbVCD5hTEpY6joQGlk-dFkWWD6201qa6ecsDVQMaE3Q7UTYICd0VEBRoqDUSrvsM-P2y5oG4Z-77RmoGKpbcRgNuMVbQ7AGJNqVSGej-lSyscDWTIZT5dCT505lfRwprdD~emZqkwnn22X16Wpj-X4A4ifph4idrThGioz4UW6PrCpa-oebMCo217s0Zyl9VKaU-o9cx5eFUEwnshoUjqwh7VE-S45NDz854J08xldCATM3wwTRVXhc2NUypsJLKFKiV0z3EXN-ApCdxsV60C-eiXUTX5vYcHHH~imA79v8WKFybjnsyUBst5BBEPQIUifTceLUrTmQ9TUpaMV90EsD5SCshmCfOs8R5y2dK6EfQu8iyYAB5VFSH4M1CLiBZUsDTEFiOomn2JGMDnbPho8lMB8ss4SMuwZShb2LlGqLxJ38kRHlvC68VmJO7InBQAEAAcAAA==" title="address helper") ah]
- a(href='https://arav.neocities.org') arav.neocities.org
- br
- span
- a(href='https://radio.arav.su') radio
- | .
- a(href='http://wsmkgnmhmzqm7kyzv7jnzzafvgm7xlmlfvzhgorpapd5or2arnhuktqd.onion') onion
- | .
- a(href='http://[300:a98d:d6d0:8a08::e]') ygg
- | .
- a(href='http://radio.arav.i2p') i2p
- sup #[a(href="http://radio.arav.i2p/?i2paddresshelper=NfCKBu9vjLFiBMEPQGiZT9AzGlhkKHzYrKM66FL-ESeDbnYUY--NzukO9UA28s3WThhDQVge2TmyfYsaZiUw~AjuLsykxS13pebs7lkAVY1jm77La-eFFIAQ22Vtd2YgS0vbhRMzuDxKkCR1vPwNax8R2o6a07xsQvvDml6UQxG4p5vt44JA2geQNvQfm8cEiSa6gNJZJSW3rWuLDg6~1Jy3D70oSVSlNfihmG4JtNV6tVBjJE2h5gUxfhYZACttpGTPM~UNF~lrSujlBQsCqdzvLswdMw~FnvpfGzJcJroeFTerRyH6oUkkDSOK7uWwl0e70vKxrIbFgJjKtjlLWlUCI5N0TnJP4Hzt2pttB~R0hSr2vVl8ky0yJEtN3rwnrJkw7q0ZIH30ngTfxsCTbolAzl6liN9Ez5YF97zDOPnVFmvQ6Eg1PyFdypQO1PiUHqF56SWhx3utGwecUS6jJCvsKIJJVEIMVcD6h7S0z1g1rqQ4jbg5UfXPwFEgFOlzBQAEAAcAAA==" title="address helper") ah]
- span
- a(href='https://files.arav.su') files
- | .
- a(href='http://qf5e43nlhvnrutmikuvbdfj3cmtthokpbaxtkm6mjlslttzvtgm4fxid.onion') onion
- | .
- a(href='http://[300:a98d:d6d0:8a08::d]') ygg
- | .
- a(href='http://files.arav.i2p') i2p
- sup #[a(href="http://files.arav.i2p/?i2paddresshelper=48vtYgeVnju7B2FaR0zxUL3MQXN9QjK~Ggya45aANwm86mtpemuEkaskJmEQaFSd4FcDAFIiXHfNpfGqoupLwNmtgBmGRcuVV8xb2W~W6lM0oOhovjB37EUaMWs3AI5aIES84QOqApgwYX-ANIcwa~Kg6AbMuX8D8qnejuhBbuCffYah-TD8e~O0cnyqxzLTmxIGCyk2egdYXwanJyYFDocomIVfcqfJ0MgjIHhFQtkcb0e84bxvDzcAFIpEDrzAo4GVrFn-TCu0Lyf2ccqmVpucFl0UGhuVRxEt19KLd3PxlfwHv2lmzTZtq9CbnfaoPntUPx1sf84QnZDmrXWhVK8p3VvuPZMxjyz9KyhPjrGkO4E0oibDlvKuMsGEm-GkZsKxgXo~CrdcVtN8suAwW6rACAuk8gq2jUMBZBZ12migPZ7miHftEkOFHfgfUiKBwirrw~y9Zi261WX4-EVe2oD4pkhQOrqOKIoI-vv5z9CpQ7PKL531kgkipcBseXybBQAEAAcAAA==" title="address helper") ah]
- span
- a(href='https://upload.arav.su') upload
- | .
- a(href='http://4usftbmjpfexkr2x5xbp5ukmygpmg4fgrnx2wbifsexqctooz5hmviyd.onion') onion
- | .
- a(href='http://[300:a98d:d6d0:8a08::c]') ygg
- | .
- a(href='http://upload.arav.i2p') i2p
- sup #[a(href="http://upload.arav.i2p/?i2paddresshelper=b5NWA2vNydWSv6~8KN4e~td2UVGkYsayKPa1PnXI87A3gsg6m978tIehHLVN4XcCfUq4aB-59hqqZicorRnHKfV3lVdx9mdhC8Bhj~bMAcwMgWoXidqZNrWMoFGzWotFsa3nWh4zsRUSfrokecC8u9Y06byfSS1siyak0J6xpsggXRqqgNF0-8ncPeqvzBxHB9NRDXWEVJGS9HSpydWl1UpjgZffcd~NZroxkSAfughHcFAn2OLKkaZRe6WqCJQfJoXTCyz4wkFmYbH1CSddWlddmWaaU7icsbQrZm3XEqKTVKvm86G6ehxmzyHqCumc4GOWswcP0E51UQVOv-WA8R6SWQAj6ZnZhnCoCNFFEfW2lBiDmTnLJbfm-C-AdI6G1~dQ1~3FCH6wXWy-2DebpyoVVt9epzU7l4l2MVeaOUahbf6wcol1UbxPoR0XlGCXDe9700TYePjtpOU9vNkk2B1dQiZ1usgwseYuO26cRogSvbi8poz4BlCNO733HR1XBQAEAAcAAA==" title="address helper") ah ]
- span
- a(href='https://git.arav.su') git
- | .
- a(href='http://qqitm7qlsbbubwmjos4cqzmvkqidg34rfnbyhuydhalep33fbvh22xyd.onion') onion
- | .
- a(href='http://[300:a98d:d6d0:8a08::b]') ygg
- | .
- a(href='http://git.arav.i2p') i2p
- sup #[a(href="http://git.arav.i2p/?i2paddresshelper=eFIfcBUv3lHFSnglHfncs5XXtYwm9gCpmAYuio~9CeENBAXKRggPiY1tQC-otCon2hCSpr56WlVBeZk1txKuUnbjHTN7GBFaKW5wJEO2WmKEWPKdcjUDOYZN0D3TwXaYfiBuELD3200lBfDmPEJ01iC2o7B5yvpOqtEKDcaqkIp4vafDuPPumJ~XiCGdUAe~vr52w3Tbuz5x7wbltk-gUELY0-ZAQBos4jOJ6QT1W1lhycHPhAK8qslgwfk94opyIl2pkRyuJhU-2VHc6Fsd621VXC86YAMT1SIfTZlFpoGVCFXDM~BXaLvygFaKf62qardAe0T48Ax6GxosAKXe-yLCVRaiD3KErULfwZXl23kQzRfxM4odG4DWeXawtuvypOmTjHT1skQHU0h52ujye5nT~2bOy14HkCoCnxJ7gSj3MjkmWLd1JhBsPH4ymRmI7jFJR1GYl8Wp5IigMBBzWfJUEEjS7QDHaRo5TCZJ9SXz6sgkGdfh74~r8FWL559gBQAEAAcAAA==" title="address helper") ah]
- section
- p Welcome, Anon. I'm Alexander aka Arav, I self-host some services for myself, friends and you. Not much I have to offer, but maybe you'll find something useful for yourself. :)
\ No newline at end of file
diff --git a/web/templates/mindflow.pug b/web/templates/mindflow.pug
deleted file mode 100755
index 389bdad..0000000
--- a/web/templates/mindflow.pug
+++ /dev/null
@@ -1,46 +0,0 @@
-extends base.pug
-
-block meta_description
- meta(name='description' content="Updates on my infrastructure, my very important opinions and thoughts.")
-
-block append head
- link(href='/assets/css/mindflow.css' rel='stylesheet')
- script(src='/assets/js/mindflow.js' defer='')
- link(rel='canonical' href='/mindflow')
-
-block nav
- a(href='/') Home
- a(href='/stuff') Stuff
- a(href='/about') About
- a(href='/guestbook') Guestbook
- h1 Mindflow
-
-block content
- :go:func Mindflow(title string, posts []mindflow.Post, categories []mindflow.Category, r *http.Request)
- p.center Here I post updates on websites and infrastructure, my very important opinions and thoughts no one asked for. If you'd like to subscribe to this bullshittery then #[a(href='/rss.xml') RSS feed] at your service. :)
-
- section#filter.hidden
- p.center
- button(name='all') All
- each category in categories
- button(name=strings.ToLower(category.Name)) #{category.Name}
- section
- if (len(posts) > 0)
- each post in posts
- article(id=`${post.PostID()}`)
- header
- a(href=`#${post.PostID()}`)
- h3= post.Category.Name + ": " + post.Title
- each line in strings.Split(post.Body, "\n")
- if (len(line) > 0 && line[0] == '>')
- p.quote!= line
- else
- p!= line
- footer
- if (post.URL != "")
- a(href=post.PostURL(r.Host, false)) #{post.PostURL(r.Host, false)}
- else
- span
- time(datetime=util.ToClientTimezone(post.Date, r))= util.ToClientTimezone(post.Date, r).Format(time.RFC1123)
- else
- p.center Nothing? There must be some... Looks like database went down.
diff --git a/web/templates/privacy.pug b/web/templates/privacy.pug
deleted file mode 100644
index 16e36b8..0000000
--- a/web/templates/privacy.pug
+++ /dev/null
@@ -1,34 +0,0 @@
-extends base.pug
-
-block meta_description
- meta(name='description' content="Privacy statements for all of my services.")
-
-block append head
- link(rel='canonical' href='/privacy')
-
-block nav
- a(href='/') Home
- a(href='/stuff') Stuff
- a(href='/mindflow') Mindflow
- a(href='/about') About
- a(href='/guestbook') Guestbook
-
-block content
- :go:func Privacy(title, radioSrvc, filesSrvc, uploadSrvc string)
- section#privacy
- h2 Privacy statements
- h3 General data
- p Across all of my Web-services following data is being collected: date of access, IP-address, User-Agent, referer URL, request URL.
- h3 Use of JavaScript
- p JS is used on a #[a(href='/') main website] at a guestbook page to refresh CAPTCHA; at mindflow page to filter posts by categories.
- p #[a(href=radioSrvc) Radio service] uses JS to update Last N songs list section, and to get current radio statistics.
- p #[a(href=filesSrvc) Files service] uses JS to add functionality such as an overlay to view files without the need to leave a site, and implements some keyboard control for convenience.
- h3 Upload service specific
- p Every action (upload, download, and delete) is being logged and includes this additional data:
- ol
- li File's name it was uploaded/downloaded with;
- li Unsalted SHA-256 hash of a file;
- li A salted hash encoded as base64 in raw URL variant that is used to download/delete a file;
- li File's size.
- p And I will cooperate with law enforcements and provide them with all information (logs and a file itself if it is still present).
- p As already stated at #[a(href=uploadSrvc) Upload service]'s page, file's content must comply with law of Russian Federation. Anything like extremist materials, CP, and so on is forbidden.
\ No newline at end of file
diff --git a/web/templates/rss.pug b/web/templates/rss.pug
deleted file mode 100755
index 18da5bc..0000000
--- a/web/templates/rss.pug
+++ /dev/null
@@ -1,23 +0,0 @@
-:go:func RSS(host, author string, posts []mindflow.Post, r *http.Request)
-doctype xml
-
-rss(version='2.0')
- channel
- title Arav's dwelling
- description Updates on my websites and infrastructure.
- language en-gb
- | #{host}
-
- each post in posts
- item
- title= post.Title
- category= post.Category.Name
- guid!= `${post.PostID()}`
- pubDate= util.ToClientTimezone(post.Date, r).Format(time.RFC1123Z)
- | #{post.PostURL(r.Host, true)}
- author!= author
- description
- |
\ No newline at end of file
diff --git a/web/templates/stuff.pug b/web/templates/stuff.pug
deleted file mode 100755
index 9fc60fa..0000000
--- a/web/templates/stuff.pug
+++ /dev/null
@@ -1,133 +0,0 @@
-extends base.pug
-
-block meta_description
- meta(name='description' content="Here I share my programs, scripts, articles, may be other stuff.")
-
-block append head
- link(rel='canonical' href='/stuff')
-
-block nav
- a(href='/') Home
- a(href='/mindflow') Mindflow
- a(href='/about') About
- a(href='/guestbook') Guestbook
- h1 Stuff
-
-block content
- :go:func Stuff(title, git_site, files_site string, metadata []ArticleMetadata)
- p.center Here lies everything I've made that I'm willing to share.
- section#articles
- h2 Articles
- table
- tr
- th Last Update
- th Article
- each entry in metadata
- tr
- td
- time(datetime=entry.Date.Format("2006-01-02")) #{entry.Date.Format("02 January 2006")}
- td
- a(href=entry.URL) #{entry.Title}
- section#programs-scripts
- h2 Programs and scripts
- table
- tr
- td mccl
- td 0.1.2 (14 December 2023)
- td Go
- td GPLv3
- td
- a(href=git_site+'/Arav/mccl') source
- a(href=git_site+'/Arav/mccl/releases') releases
- tr
- td(colspan='5')
- p A console Minecraft launcher. Take a look at README.md for explanation.
- tr
- td httpr
- td 0.3.2 (20 September 2023)
- td Go
- td MIT
- td
- a(href=git_site+'/Arav/httpr') source
- a(href=git_site+'/Arav/httpr/releases') releases
- tr
- td(colspan='5')
- p A simple HTTP router that supports having both regular and parametrised path's parts at the same level, like #[code /assets/*filepath] and #[code /:a/:b] with the same HTTP method.
- p Yeah, not as efficient as httprouter is, but in my case no performance loose was noticed (on a small amount of paths). Yet I gained prettiness because it allowed me, for example, to ditch #[code /f/] part and leave just #[code /:hash/:name] instead of #[code /f/:hash/:name] in a dwelling-upload service.
- tr
- td justguestbook
- td 1.3.2 (22 May 2023)
- td Go
- td MIT
- td
- a(href=git_site+'/Arav/justguestbook') source
- tr
- td(colspan='5')
- p A simple guestbook with owner's replies implementation made into a library.
- tr
- td justcaptcha
- td 2.1.0 (12 August 2023)
- td Go
- td MIT
- td
- a(href=git_site+'/Arav/justcaptcha') source
- tr
- td(colspan='5')
- p A simple CAPTCHA implementation.
- tr
- td kwh-cost
- td 1.1.1 (23 September 2023)
- td C
- td MIT+NIGGER
- td
- a(href=git_site+'/Arav/kwh-cost') source
- tr
- td(colspan='5')
- p KWh cost calculator in C.
- tr
- td httpprocprobed
- td 3.1.0 (16 December 2023)
- td Go
- td MIT+NIGGER
- td
- a(href=git_site+'/Arav/httpprocprobed') source
- tr
- td(colspan='5')
- p It returns a list of processes and if they are running in a JSON, XML or plain text format via HTTP GET request on /processes endpoint. Under the hood it searches a /proc/ directory. It is being used on about page to show wether service's running or not.
- tr
- td ScrapTheChan
- td 0.5.0 (3 May 2021)
- td Python
- td MIT
- td
- a(href=git_site+'/Arav/ScrapTheChan') source
- |
- a(href=git_site+'/Arav/ScrapTheChan/releases') releases
- tr
- td(colspan='5')
- p Imageboards file scraper using theirs JSON API. Currently supported: 4chan.org, lainchan.org, 2ch.hk and 8kun.top.
- tr
- td OpenNIC active domains extraction script
- td 10 July 2020
- td Bash
- td MIT
- td
- a(href=git_site+'/Arav/opennic-extract-domains') source
- tr
- td(colspan='5')
- p Bash script for BIND9 that extracts domains from zone files of OpenNIC and forms a list of domains that have an IP-address.
- tr
- td PiggyBank
- td 1.0.0 (8 July 2020)
- td Python
- td MIT
- td
- a(href=git_site+'/Arav/PiggyBank') source
- |
- a(href=git_site+'/Arav/PiggyBank/releases') releases
- tr
- td(colspan='5')
- p A program to help you to keep track of your piggy bank. A simple script I once wrote that I rewrote and made into a package just to learn how to do it.
- section#music
- h2 Music
- p There was a period in my life when I was playing with audio sequencers. I lost all project files and only 3 tracks survived in mp3 that #[a(href=files_site+"/music/My%20tracks,%20that%20survived/") you can get here].
\ No newline at end of file