From 58af75b075a147496088ced24c7b483f4b79b787 Mon Sep 17 00:00:00 2001 From: "Alexander \"Arav\" Andreev" Date: Sun, 5 Feb 2023 04:43:34 +0400 Subject: [PATCH] Pug templates. --- web/templates/403.pug | 33 +++++ web/templates/404.pug | 24 ++++ web/templates/500.pug | 33 +++++ web/templates/about.pug | 266 ++++++++++++++++++++++++++++++++++++ web/templates/article.pug | 26 ++++ web/templates/base.pug | 25 ++++ web/templates/guestbook.pug | 61 +++++++++ web/templates/index.pug | 66 +++++++++ web/templates/mindflow.pug | 38 ++++++ web/templates/rss.pug | 23 ++++ web/templates/stuff.pug | 115 ++++++++++++++++ 11 files changed, 710 insertions(+) create mode 100755 web/templates/403.pug create mode 100755 web/templates/404.pug create mode 100755 web/templates/500.pug create mode 100755 web/templates/about.pug create mode 100644 web/templates/article.pug create mode 100755 web/templates/base.pug create mode 100755 web/templates/guestbook.pug create mode 100755 web/templates/index.pug create mode 100755 web/templates/mindflow.pug create mode 100755 web/templates/rss.pug create mode 100755 web/templates/stuff.pug diff --git a/web/templates/403.pug b/web/templates/403.pug new file mode 100755 index 0000000..589e37e --- /dev/null +++ b/web/templates/403.pug @@ -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 \ No newline at end of file diff --git a/web/templates/404.pug b/web/templates/404.pug new file mode 100755 index 0000000..1000a22 --- /dev/null +++ b/web/templates/404.pug @@ -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 \ No newline at end of file diff --git a/web/templates/500.pug b/web/templates/500.pug new file mode 100755 index 0000000..d85802f --- /dev/null +++ b/web/templates/500.pug @@ -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 \ No newline at end of file diff --git a/web/templates/about.pug b/web/templates/about.pug new file mode 100755 index 0000000..588b465 --- /dev/null +++ b/web/templates/about.pug @@ -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ал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 EDSM profile. + 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 “Arav's dwelling / <Game name>”. + 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 “Allow assets mismatch” option that you can find on the first page of the “Options” 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 “Arav's dwelling / Avorion”. 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 “Arav's dwelling / Project Zomboid”. Whitelist is enabled. + div + +isServiceUp("Don't Starve Together", "dontstarve_dedicated_server_nullrenderer_x64") + p.highlighted arav.top:10899 + p Server is listed as “Arav's dwelling / Don't Starve Together”. + 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 “home.arpa” special-use domain introduced by RFC 8375. And for uniqueness “arav.home.arpa” specifically. + section#contacts + h2 Contacts + span E-Mail: #[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: #[a(href="xmpp://arav@arav.top") arav@arav.top] + span + s Matrix: #[a(href="https://matrix.to/#/@arav:arav.top") @arav:arav.top] + br + span + | PGP key: #[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. \ No newline at end of file diff --git a/web/templates/article.pug b/web/templates/article.pug new file mode 100644 index 0000000..f14bcb6 --- /dev/null +++ b/web/templates/article.pug @@ -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} \ No newline at end of file diff --git a/web/templates/base.pug b/web/templates/base.pug new file mode 100755 index 0000000..b20593b --- /dev/null +++ b/web/templates/base.pug @@ -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—2023 Arav <#[a(href='mailto:me@arav.top') me@arav.top]> diff --git a/web/templates/guestbook.pug b/web/templates/guestbook.pug new file mode 100755 index 0000000..ac6a311 --- /dev/null +++ b/web/templates/guestbook.pug @@ -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++ diff --git a/web/templates/index.pug b/web/templates/index.pug new file mode 100755 index 0000000..d3aa65a --- /dev/null +++ b/web/templates/index.pug @@ -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. :) \ No newline at end of file diff --git a/web/templates/mindflow.pug b/web/templates/mindflow.pug new file mode 100755 index 0000000..224099d --- /dev/null +++ b/web/templates/mindflow.pug @@ -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. diff --git a/web/templates/rss.pug b/web/templates/rss.pug new file mode 100755 index 0000000..4cec3a9 --- /dev/null +++ b/web/templates/rss.pug @@ -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 + | \ No newline at end of file diff --git a/web/templates/stuff.pug b/web/templates/stuff.pug new file mode 100755 index 0000000..0a0797b --- /dev/null +++ b/web/templates/stuff.pug @@ -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 & 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]. \ No newline at end of file