1
0

Pug templates.

This commit is contained in:
Alexander Andreev 2023-02-05 04:43:34 +04:00
parent 0823166ec9
commit 58af75b075
Signed by: Arav
GPG Key ID: 0388CC8FAA51063F
11 changed files with 710 additions and 0 deletions

33
web/templates/403.pug Executable file
View File

@ -0,0 +1,33 @@
extends base.pug
block append head
style(type="text/css").
#error {
font-size: 3.5rem;
line-height: 5rem;
text-align: center;
margin: 6rem 0; }
#error h1 { font-size: 8rem; }
#description p { text-align: center; }
#description p:first-child { font-size: 1.4rem; }
block nav
a(href='/') Home
a(href='/stuff') Stuff
a(href='/mindflow') Mindflow
a(href='/about') About
a(href='/guestbook') Guestbook
h1 Whoa whoa, watcha tryin'?
block content
section#error
h1 403
| Forbidden
if (error)
section#description
p= error.Error
p= error.Message

24
web/templates/404.pug Executable file
View File

@ -0,0 +1,24 @@
extends base.pug
block append head
style(type="text/css").
#error {
font-size: 3.5rem;
line-height: 5rem;
text-align: center;
margin: 6rem 0; }
#error h1 { font-size: 8rem; }
block nav
a(href='/') Home
a(href='/stuff') Stuff
a(href='/mindflow') Mindflow
a(href='/about') About
a(href='/guestbook') Guestbook
h1 Oh, you lost? Bad for ya.
block content
section#error
h1 404
| Page Not Found

33
web/templates/500.pug Executable file
View File

@ -0,0 +1,33 @@
extends base.pug
block append head
style(type="text/css").
#error {
font-size: 3.5rem;
line-height: 5rem;
text-align: center;
margin: 6rem 0; }
#error h1 { font-size: 8rem; }
#description p { text-align: center; }
#description p:first-child { font-size: 1.4rem; }
block nav
a(href='/') Home
a(href='/stuff') Stuff
a(href='/mindflow') Mindflow
a(href='/about') About
a(href='/guestbook') Guestbook
h1 Ohh... Shite!
block content
section#error
h1 50x
| Internal Server Error
if (error)
section#description
p= error.Error
p= error.Message

266
web/templates/about.pug Executable file
View File

@ -0,0 +1,266 @@
extends base.pug
block meta_description
meta(name='description' content="This is a page where I'm telling about me and my home server.")
block append head
link(href='/assets/css/about.css' rel='stylesheet')
block nav
a(href='/') Home
a(href='/stuff') Stuff
a(href='/mindflow') Mindflow
a(href='/guestbook') Guestbook
h1 About
mixin isServiceUp(header, service)
if (services[service])
h3.service-up= header
else
h3.service-down= header
block content
:go:func About(title, files_site string, services util.Services)
section#about-me
h2 Me
p #[span.highlighted Who am I?] My name is Alexander Andreev. I'm a russian guy of age 29 who likes tinkering with computers.
p #[span.highlighted Why am I doing all of this?] Machines are up 24/7 anyway, so let they do some useful work.
p #[span.highlighted Why am I almost “doxxing” myself?] Yes, my real first and last names, and age are here, and since I self-host you can get my city as well. And I simply don't see this as a problem. :|
p #[span.highlighted Why particularly that slogan?] I just wanted sort of a slogan that would fit under the logo and this was the first thing came on mind. I actually like it. Don't you think of your websites as of very special place of your own? Of course you do. :) And who we are if not the wanderers who are looking for something in the vastness of Intenet? xD And yes, it's a pain in the ass to make it fit under logo across different browsers. That was the moment when I found out that different browsers render text differently.
p #[span.highlighted Why English only?] I want this place to be accessible for a wide audience, and English happen to be todays lingua franca. Second, to practice English. And third, I'm lazy to maintain two versions of the website, neither see a good reason for that.
p Contact information and banners are #[a(href='#contacts') at the bottom of this page]. Yes, I totally agree with you not wanting to add my banner since I don't have a link page myself, neither participate in any webring. :) Well, it's way easier to make a banner than a links page. :)
p Now a little break for...
section#my-cat
h2 My kot Boris :3
div.columns.figs
figure
a(href='/assets/img/my_cat.webp')
img(src='/assets/img/my_cat_thumb.webp' title=':3' alt='My cat. :3')
figure
a(href='/assets/img/my_cat_2.webp')
img(src='/assets/img/my_cat_2_thumb.webp' title='xDDDD' alt='xDDDD')
p And here we continue. :)
section#more-about-me
h3 Hobbies
p Video games (since 1997)
p Computers (since 11th November 2004)
p #[s Wasting my life on] Surfing the Internets (since February 2006)
p Mapping for Half-life 2, Counter-Strike: Source (since 2006, discontinued in 2009) (everything's fuarrkin' lost)
p Music writing (since 2007, last track was made in 2010)
p Programming (since 2007)
p #[s (LARP'ing as a system administrator)] Home servers (since 1st January 2017)
p Software Defined Radio (since June 2018)
h3 What I know
h4 Human languages
p #[span.highlighted English] is my main foreign language and I think that I know it quite well, but every time I reread what I wrote here I constantly catch cringe vibes. xD I have a nice pronunciation (my teacher once said so :)) and tend to British non-rhotic variant. Of course I end up with a mix of all the flavours of different dialects. What I struggle from is a lack of speaking practice and vocabulary is also still a problem.
p #[span.highlighted Ukrainian (Українська)] is a special case. :) Russian and ukrainian are related languages, so mutually understandable (must be), yet many russians are struggling to understand it, and I don't know why. But it is a matter of putting some little effort to negatiate it. I never learnt it, aside from reading it here and there, and especially throughout past 8 years I saw enough material to learn it to a decent level of understanding and some speaking.
p Агась, нiколи спецiйно не вчив українську, користував перекладач тiльки як словник, за цi вiсрокiв було досить матерiалiв. :) P.S.: Слава Українi у складi Росiї! :)
p I like learning languages, but me being a lazy fuck won't let me learn something up to a reasonable level. I ended up with being able to +- read some languages, like norwegian, german, polish, french, japanese (hiragana + some yet not forgotten kanji). So, now I main only english.
h4 Computer languages
p #[span.highlighted For programming and scripting:] Python, Go, JavaScript, and Bash for now are most used by me. Later I used or tasted: Pascal, Delphi, C#, C, C++, Java, PHP.
p #[span.highlighted Markup and declarative:] SQL (SQLite3, MariaDB), HTML5, CSS3, LaTeX, Markdown, XML, and JSON.
p And I don't know what else to put here. :^)
h3 What I like
h4 Anime
p Ghost in the Shell, Shaman King, Hellsing, Steins;Gate, Cowboy Beebop, Ergo Proxy, Jin-Rou, Black Lagoon, Jojo's Bizzare Adventures, Spice and Wolf, Konosuba, Demon Slayer: Kimetsu no Yaiba
h4 Films
p Movies with Jackie Chan, Blade Runner (1982), WarGames (1983), Robocop (1987), Stargate (1994), Hackers (1995), Johnny Mnemonic (1995), Matrix (1999, 2003), Snatch (2000), The Day After Tomorrow (2004), Lucky Number Slevin (2006), I Am Legend (2007), Valhalla Rising (2009), Filth (2013), Mandariinid (2013), Who am I (2014), Arrival (2016), Contratiempo (2016), Everything Everywhere All at Once (2022)
h4 TV shows
p X-Files (1993—2002), Lost (2004—2010), Stargate: SG-1 (1997—2007), Stargate: Atlantis (2004—2009), Два холма (two hills) (2022), Narcos (2015—2017)
p These lists aren't complete, will extend when remember or like something.
p I actually don't watch much, and if I watch I go for a marathon, and if only I take a break in the middle of a show, then that break could last for years. xD And if I download some film it could sit for years, as it was with Valhalla Rising, it was waiting for me to watch for 3 fucking years. xD Oh, what made me to watch it? An one and a half hour long power outage. xD
h4 Games for SEGA Mega Drive
p Not a lot of games I've played.
p Bubba'n'Stix, Battletoads, Granada, Demolition Man, Road Rash, Doom Troopers - The Mutant Chronicles, The Lost Vikings, Ghostbusters, Mig-29 Fighter Pilot.
h4 Games for PC
p Grand Theft Auto: Vice City, Half-Life (all), StarCraft, Diablo 2, Far Cry (2004), Grand Theft Auto: San Andreas, Boiling Point: Road to Hell, Portal, Freelancer, F.E.A.R., S.T.A.L.K.E.R., Grand Theft Auto 4, Lineage 2, The Elder Scrolls V: Skyrim, The Walking Dead, The Wolf Among Us, Payday 2, The Witcher (1st, 2nd, 3rd didn't finished yet), Minecraft, Terraria, Starbound, Euro Truck Simulator 2, Mount & Blade: Warband, Papers, Please, Insurgency, Elite: Dangerous, theHunter: Call of the Wild, American Truck Simulator, Rocket League, Sea Of Thieves.
p I'm CMDR Arav in Elite: Dangerous. My <a href="https://www.edsm.net/en/user/profile/id/22541/cmdr/Arav" rel="noopener noreferrer">EDSM profile</a>.
p I play TruckersMP mod for Euro Truck Simulator 2 and American Truck Simulator. Nickname is Arav with a tag [RU64].
h4 Music
p My favorites that I like almost fully are Falkenbach, Korpiklaani, Sólstafir, Lacrimosa, Enigma, Röyksopp, Nagrobki, Burzum, maybe I forgot to mention something. You can see what I like on #[a(href=files_site+"/music") file share]. I have a tendency to listening to the same music for a long time, so only way for me to know about other music are online-radios and WEBM threads on IBs. :)
section#servers-summary
h2 My servers
p I have two of them, the first one is a #[a(href='https://www.raspberrypi.org/products/raspberry-pi-3-model-b/' rel='nofollow noreferrer') Raspberry Pi 3 rev. B] single board computer and the second one is a laptop. Yeah, not quite impressive, but they do their work just fine.
p Laptop is Acer Packard Bell TE69CX that has a 2 core Intel Pentium 2117U 1.8GHz and 10GB RAM (2GB + 8GB), the system disk is a 120GB SSD and the other one is 2TB HDD where all the shit I have is stored. I've replaced my good old 500GB disk with 2TB one, since it became a little too tight, now it is a system disk for Raspberry Pi. Everything that have just a bit of importantance to me is backed up, encrypted and stored in the clouds. :)
p #[span.highlighted TL;DR about services.] Laptop runs a network file share, a public file upload service, a seedbox, a HTTP public file share, TeamSpeak 3, Mumble, #[s Matrix], I2P, an internet-radio, git server, ClamAV for email server, a web-server, and a database. Raspberry Pi 3 runs #[s OpenVPN], BIND9, DNSCrypt-proxy, #[s a Tor relay], an email server, and a XMPP server.
section#servers-photos
div.columns.figs
figure
a(href='/assets/img/raspi.webp')
img(src='/assets/img/raspi_thumb.webp' alt='Raspberry Pi 3 rev. B')
figcaption Raspberry Pi 3 rev. B
figure
a(href='/assets/img/acer.webp')
img(src='/assets/img/acer_thumb.webp' title='Screen and keyboard are broken anyway.' alt='Laptop')
figcaption Acer Packard Bell TE69CX
section#servers-public-services
h2 Public services
p.center That are available for everyone.
div.columns
div
+isServiceUp("Internet-radio", "liquidsoap")
p
a(href='https://radio.arav.top') radio.arav.top
| .
a(href='http://wsmkgnmhmzqm7kyzv7jnzzafvgm7xlmlfvzhgorpapd5or2arnhuktqd.onion') #[s onion]
| .
a(href='http://radio.arav.i2p') i2p
p Runs using Liquidsoap through Icecast, which goes through NGiNX. I broadcast almost everything I have. Sorry, but I'm too lazy to make some kind of broadcasting program to stream so I just randomise the playlist and throw new music there from time to time.
p This project grew from MPD I used to stream music over LAN for myself. Then I let it out and placed a player on my Neocities website. Then Icecast was added to see if there are listeners. I wasn't happy on how MPD was nearly overloading CPU, and later, after moving the radio off to a laptop, MPD was replaced by Liquidsoap.
div
+isServiceUp("File share", "dwelling-files")
p
a(href='https://files.arav.top') files.arav.top
| .
a(href='http://qf5e43nlhvnrutmikuvbdfj3cmtthokpbaxtkm6mjlslttzvtgm4fxid.onion') #[s onion]
| .
a(href='http://files.arav.i2p') i2p
p There you'll find music, videos, films, animes, TV shows, books, games, programs, drivers (a very few), OS images (Winblows :)). Go check it out!
div
+isServiceUp("File upload", "dwelling-upload")
p
a(href='https://upload.arav.top') upload.arav.top
| .
a(href='http://.onion') #[s onion]
| .
a(href='http://upload.arav.i2p') i2p
p I've made a file upload service for ya with a limit of 128MiB per file, keeping it for 36 hours, and overall storage I dedicated for it is 100GiB.
div
+isServiceUp("Git", "gitea")
p
a(href='https://git.arav.top') git.arav.top
| .
a(href='http://qqitm7qlsbbubwmjos4cqzmvkqidg34rfnbyhuydhalep33fbvh22xyd.onion') #[s onion]
| .
a(href='http://git.arav.i2p') i2p
p Gitea. This is a place where I put source code of everything I ever wrote and consider useful and worth sharing.
div
h3 Tor relay
p #[a(href='https://metrics.torproject.org/rs.html#details/CEF2FD0E1973EA04D1444DDAEFF1B0BC3C0C39B1' rel='nofollow noreferrer') metrics.torproject.org]
p It is set to use 8 MBits of my Internet connection. It cannot became a guard node because of dynamic IP-address.
p #[b Since 1st December 2021 Tor is blocked in Russia, so the relay is down.]
div
h3 I2P router
p I help the network using an official #[a(href='https://geti2p.net' rel='nofollow noreferrer') I2P router].
section#servers-private-services
h2 Private services
p.center That are available for a narrow circle of people.
div.columns
div
+isServiceUp("E-Mail server", "postfix")
p Postfix, Dovecot (w/Sieve), Spamassassin, ClamAV, OpenDMARC and OpenDKIM.
p Alas, I don't have a static IP. And there is not much sense in it because my ISP doesn't offer reverse DNS for regular clients (it'd be bloody awesome).
p It results in my messages ends up in a spam box at best. Well, Yandex, Google, Microsoft Live, and Rambler lets me in an Inbox. :) But if service use Spamhaus' blocklists then I'm being rejected.
p #[b TLDR; I may not be able to send a reply].
div
+isServiceUp("XMPP/Jabber", "prosody")
p Prosody.
div
+isServiceUp("Matrix", "synapse.app")
p #[a(href='https://the.arav.top') the.arav.top]
p Synapse.
p #[b Taken down because has no use.]
div
+isServiceUp("Mumble", "murmurd")
p #[a(href="mumble://arav.top") mumble://arav.top]
p It's private, but you still can join an entrance room where you can only write messages. A certificate is necessary.
div
+isServiceUp("TeamSpeak 3", "ts3server")
p #[a(href="ts3server://arav.top") ts3server://arav.top]
p Same as with Mumble applies to TS. It's security level is set to 29, so is yours identifier's level should be at least that high.
div
h3 Game servers
p All game servers are private, if there's exception I'll mention it in its description. They are listed in a section below.
p Some servers are listed in an in-game server list and theirs names looks like &ldquo;Arav's dwelling / &lt;Game name&gt;&rdquo;.
p And, of course, I don't run them simultaneously and start them only when needed.
p Expect poor performance because the server is a low-end laptop.
section#servers-games
h2 Game servers
div.columns
div
+isServiceUp("Minecraft", "forge-1.16.5")
p.highlighted arav.top:25565
p Version is 1.16.5 currently. I homebrew clients for it. Here is #[a(href=files_site+"/games/minecraft/aravsdwelling-minecraft-1.16.5.exe") an installer for Windows] (412MiB) I make with NSIS. And a #[a(href=files_site+"/games/minecraft/aravsdwelling-minecraft-1.16.5.tar.gz") TAR.GZ archive] (424 MiB) that is for both Windows and Linux. You'll need to set a PLAYER and MC_DIR variables in scripts. And change JVM_PARAMS to your preferences (-Xmx usually needs to be adjusted).
div
+isServiceUp("Starbound", "starbound_server")
p.highlighted arav.top:21065
p Server is using a Frackin' Universe mod.
p Don't forget to set &ldquo;Allow assets mismatch&rdquo; option that you can find on the first page of the &ldquo;Options&rdquo; menu.
p Access is restricted using accounts. Contact me if you want to play here, you'll need to give me a nickname and a password.
div
+isServiceUp("Avorion", "AvorionServer")
p Server is listed in a server list as &ldquo;Arav's dwelling / Avorion&rdquo;. Whitelist is enabled. Bring your SteamID64 if you want to play here.
div
+isServiceUp("Project Zomboid", "ProjectZomboid")
p.highlighted arav.top:16261
p Server is listed as &ldquo;Arav's dwelling / Project Zomboid&rdquo;. Whitelist is enabled.
div
+isServiceUp("Don't Starve Together", "dontstarve_dedicated_server_nullrenderer_x64")
p.highlighted arav.top:10899
p Server is listed as &ldquo;Arav's dwelling / Don't Starve Together&rdquo;.
section#servers-inner-services
h2 Inner services
p.center Services that maintains other services or used exclusively by me.
div.columns
div
h3 Web-server
p NGiNX + PHP-FPM (just for phpMyAdmin) + NodeJS + Go.
div
h3 Database server
p MariaDB managed with phpMyAdmin.
div
h3 VPN
p #[s OpenVPN] Wireguard.
div
h3 Network file share
p Samba.
div
h3 Torrent seedbox
p Transmission-cli gets shit done.
p The only annoying thing is that it sometimes creates .part files for one of unchecked files.
div
h3 Print server
p CUPS with CCP (Canon CAPT printer).
p Holy shit, it finally works! Wow, even after kernel update it doesn't require a reboot anymore!
div
h3 DNS server
p BIND9 via DNSCrypt-proxy.
p For LAN I use &ldquo;home.arpa&rdquo; special-use domain introduced by RFC 8375. And for uniqueness &ldquo;arav.home.arpa&rdquo; specifically.
section#contacts
h2 Contacts
span E-Mail:&nbsp;#[a(href="mailto:me@arav.top" title='May not be able to reply due to being blacklisted because of residental dynamic IP.') me@arav.top]
span Jabber:&nbsp;#[a(href="xmpp://arav@arav.top") arav@arav.top]
span
s Matrix:&nbsp;#[a(href="https://matrix.to/#/@arav:arav.top") @arav:arav.top]
br
span
| PGP&nbsp;key:&nbsp;#[a(href="~arav/68959406BDEDC57682C09FA60388CC8FAA51063F.asc") 6895 9406 BDED C576 82C0 9FA6 0388 CC8F AA51 063F] (available through #[a(href="https://wiki.gnupg.org/WKD" rel="nofollow noreferrer") Web Key Directory])
br
span
| Jabber OMEMO fingerprint: 1DAE0A91 8DEFCFDF 9558BBBE 5ECFA46D 9D120E03 970A9FE2 3D17F648 C84BDD72
section#donation
h2 Donation
a(href="monero:48namnfX17TX1kEGCpkXaRWhtw8p92cQjd5uQg7ivybgUuW4BTVaX8egxQhEi75JwuUGn3MDLKHYGNhu4eCfM6dRAAL2QAq") monero:
| 48namnfX17TX1kEGCpkXaRWhtw8p92cQjd5uQg7ivybgUuW4BTVaX8egxQhEi75JwuUGn3MDLKHYGNhu4eCfM6dRAAL2QAq
br
| #[a(href="https://www.donationalerts.com/r/arav") DonationAlerts]
| #[a(href="https://qiwi.com/n/UPPON082") QIWI]
section#banners
h2 Banners
p In case you found my site anyhow useful and would like to add me to your links page here are the banners for you.
div.banners
figure
img(src="/assets/img/banner_88x31.gif" alt="Light banner 88x31")
figure
img(src="/assets/img/banner_dark_88x31.gif" alt="Dark banner 88x31")
div.banners
figure
img(src="/assets/img/banner_240x60.gif" alt="Light banner 240x60")
figure
img(src="/assets/img/banner_dark_240x60.gif" alt="Dark banner 240x60")
section#privacy-statements
h2 Privacy statements
p Logs are collected and include a date and time of access, your IP-address, User-Agent, referer URL, and a request.
p JavaScript is used at guestbook page to refresh CAPTCHA, and at mindflow page to filter posts by categories.

26
web/templates/article.pug Normal file
View File

@ -0,0 +1,26 @@
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='#{host}/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
time(datetime=util.ToClientTimezone(date, r).Format("2006-01-02")) #{util.ToClientTimezone(date, r).Format("02 January 2006")}
| !{body}

25
web/templates/base.pug Executable file
View File

@ -0,0 +1,25 @@
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&mdash;2023 Arav &lt;#[a(href='mailto:me@arav.top') me@arav.top]&gt;

61
web/templates/guestbook.pug Executable file
View File

@ -0,0 +1,61 @@
extends base.pug
mixin entryLine(line)
if (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='')
block nav
a(href='/') Home
a(href='/stuff') Stuff
a(href='/mindflow') Mindflow
a(href='/about') About
h1 Guestbook
block content
:go:func About(title, captcha_id string, posts []guestbook.Posts)
form#new-post(action='/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)]
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 (posts)
each post in posts
article
header
| Post ##{post.ID} by #[span.highlighted= post.Name] #{post.Website} on #[time(datetime=post.Created)= date_(post.Created, tz)]
each line in post.message.split("\n")
+entryLine(line)
if post.feedback
.reply
header
| Reply by #[span.highlighted #{owner}] on #[time(datetime=post.feedback_created)= date_(post.feedback_created, tz)]
each line in post.feedback.split("\n")
+entryLine(line)
else
if (posts === null)
p.center Cannot establish database connection.
else
p.center No posts.
if pages_count > 1
section#pagination
- let n = 1;
while n <= pages_count
a(href='/guestbook?p='+n)= n++

66
web/templates/index.pug Executable file
View File

@ -0,0 +1,66 @@
extends base.pug
block meta_description
meta(name='description' content="A homepage of a russian guy Arav. Not just homepage, but FTP, radio, and smth more as well.")
block append head
link(href='assets/css/index.css' rel='stylesheet')
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.top') arav.top
| .
a(href='http://moq7aejnf4xk5k2bkaltli3ftkhusy2mbrd3pj23nrca343ku2mgk4yd.onion') #[s 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.top') radio
| .
a(href='http://wsmkgnmhmzqm7kyzv7jnzzafvgm7xlmlfvzhgorpapd5or2arnhuktqd.onion') #[s 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.top') files
| .
a(href='http://qf5e43nlhvnrutmikuvbdfj3cmtthokpbaxtkm6mjlslttzvtgm4fxid.onion') #[s 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.top') upload
| .
a(href='#') #[s 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.top') git
| .
a(href='http://qqitm7qlsbbubwmjos4cqzmvkqidg34rfnbyhuydhalep33fbvh22xyd.onion') #[s 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 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. :)

38
web/templates/mindflow.pug Executable file
View File

@ -0,0 +1,38 @@
extends base.pug
block meta_description
meta(name='description' content="Here I will post 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='')
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, 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
button(name='update') Updates
button(name='diary') Diary
section
if (len(posts) > 0)
each post in posts
article(id=`${strings.ToLower(post.Category)}-${post.Date.UTC().Format("20060102-150405")}`)
header
a(href=`#${strings.ToLower(post.Category)}-${post.Date.UTC().Format("20060102-150405")}`)
h3= post.Category + ": " + post.Title
each line in strings.Split(post.Body, "\n")
p!= line
footer
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.

23
web/templates/rss.pug Executable file
View File

@ -0,0 +1,23 @@
: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
link= host
each post in posts
item
title= post.Title
category= post.Category
guid!= `${strings.ToLower(post.Category)}-${post.Date.UTC().Format("20060102-150405")}`
pubDate= util.ToClientTimezone(post.Date, r).Format("20060102-150405")
link!= `${host}/mindflow#${strings.ToLower(post.Category)}-${post.Date.UTC().Format("20060102-150405")}`
author!= author
description
| <![CDATA[
each line in strings.Split(post.Body, "\n")
p!= line
| ]]>

115
web/templates/stuff.pug Executable file
View File

@ -0,0 +1,115 @@
extends base.pug
block meta_description
meta(name='description' content="Here I share my programs, scripts, articles, may be other 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)
p.center Here lies everything I've made that I'm willing to share.
section#articles
h2 Articles
p These articles are more like the sysadmin's notes. I describe those parts here that I did myself. The date here represents when article was updated last time.
table
tr
td
time(datetime='2022-05-20') 20 May 2022
td
a(href='stuff/article/hardening_mikrotik') Hardening Mikrotik
tr
td
time(datetime='2021-11-15') 15 November 2021
td
a(href='stuff/article/nginx_recipes_and_tips') NGiNX's recipes &amp; tips
tr
td
time(datetime='2022-07-17') 17 July 2022
td
a(href='stuff/article/setting_up_a_mail_server') Setting up a mail server
tr
td
time(datetime='2020-08-15') 15 August 2020
td
a(href='stuff/article/setting_up_a_tor_proxy_relay_hiddenserv') Setting up a Tor proxy, relay and hidden service
tr
td
time(datetime='2022-05-19') 19 May 2022
td
a(href='stuff/article/rpi_root_on_external_drive') How to move a root partition from SD card off to external drive on Raspberry Pi
section#programs-scripts
h2 Programs and scripts
p.center Simple, yet useful (at least for me) programs and scripts I made.
table
tr
td justcaptcha
td 2.0.0 (20 October 2022)
td Go
td MIT
td
a(href=git_site+'/Arav/justcaptcha') source
tr
td(colspan='5')
p A simple CAPTCHA service implementation.
tr
td kwh-cost
td 1.0.0 (24 December 2021)
td C
td MIT+NIGGER
td
a(href=git_site+'/Arav/kwh-cost') source
tr
td(colspan='5')
p KWh cost calculator in C. What?.. That license? xD Learn at #[a(href='https://plusnigger.autism.exposed/') plusnigger.autism.exposed] about it. xD
tr
td httpprocprobed
td 2.0.0 (9 October 2022)
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.
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].