Steal from elsewhere; initial commit and content

This commit is contained in:
Théophile Bastian 2025-03-31 23:40:09 +02:00
commit edb4710cd2
28 changed files with 3225 additions and 0 deletions

2
.gitignore vendored Normal file
View file

@ -0,0 +1,2 @@
.hugo_build.lock
public

17
LICENCE Normal file
View file

@ -0,0 +1,17 @@
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
of the Software, and to permit persons to whom the Software is furnished to do
so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

5
archetypes/default.md Normal file
View file

@ -0,0 +1,5 @@
+++
date = '{{ .Date }}'
draft = true
title = '{{ replace .File.ContentBaseName "-" " " | title }}'
+++

27
config.yaml Normal file
View file

@ -0,0 +1,27 @@
---
baseURL: "https://tobast.dn42/"
languageCode: "en-en"
title: "tobast — dn42"
disableHugoGeneratorInject: true
params:
sourceURL: "https://git.tobast.fr/tobast/dn42-web"
siteLicenseName: "MIT"
taxonomies:
category: categories
tag: tags
privacy:
disqus:
disable: true
googleAnalytics:
disable: true
instagram:
disable: true
twitter:
disable: true
vimeo:
disable: true
youtube:
disable: true

57
content/_index.md Normal file
View file

@ -0,0 +1,57 @@
---
draft: false
nodes:
- name: fr-gnb1
country: fr
flag: 🇫🇷
city: Grenoble
clearnet: fr-gnb1.dn42.tobast.fr
dn42: fr-gnb1.rtr.tobast.dn42
ipv6: 'fd73:ea37:6131:1100::1'
wg_pub: natl1dIaazvoyJvOUP6AxvnMyxtrwfjF0PBaADnQjgI=
- name: pl-waw1
country: pl
flag: 🇵🇱
city: Warsaw
clearnet: pl-waw1.dn42.tobast.fr
dn42: pl-waw1.rtr.tobast.dn42
ipv6: 'fd73:ea37:6131:1000::1'
wg_pub: EU58pAvjXFttC1ogkP3ai0p/JcnuEwaFuXUXfekzlAg=
---
# AS4242422112
I participate in [dn42](https://dn42.dev/) as AS4242422112.
* IPv6-only network: `fd73:ea37:6131::/48`
* Mostly IPv6 clearnet addresses
* The [Ansible Playbook](https://git.tobast.fr/tobast/dn42-ansible) behind this network
## Contact me
Personal email
: {{< antispam "rf.tsabot@tcatnoc" >}}
IRC
: {{< antispam "tnikcah@tsabot" >}}
## Peering
Peering is always welcome, given that you follow best practices (ROA, etc.) and
that your peering latency is reasonable. I peer through Wireguard tunnels using
link-local IPv6 addresses. The endpoint port is `2` followed by the last 4
digits of your ASN.
Reach for me either through IRC or by email, providing the following:
* your AS number;
* the node(s) you're wishing to peer with;
* your clearnet endpoint (IP/hostname + port);
* your Wireguard public key;
* your peering link-local IPv6 address.
If you're unsure about one of those things, ask anyway and we'll sort it out!
## Nodes
{{< nodelist >}}

View file

@ -0,0 +1,30 @@
<!DOCTYPE html>
<html lang="en">
<head>
<link rel="stylesheet" href="/css/style.css">
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{{ block "title" . }}
{{- .Site.Title -}}
{{ end }}</title>
</head>
<body>
{{ block "header" . }}
<div id="head">
<div class="title"><a href="/">AS4242422112 @ DN42</a></div>
<div class="whoami">tobast</div>
</div>
{{ end }}
<div id="main-container">
<div id="content">
{{ block "pagename" . }}
{{ end }}
<div id="main">
{{ block "main" . }}
{{ end }}
</div>
</div>
</body>
</html>

View file

@ -0,0 +1,17 @@
{{ define "pagename" }}
<h1>{{ .Title }}</h1>
{{ end }}
{{ define "main" }}
<div class="descr">
{{ .Content }}
</div>
<div class="list">
<ul>
{{ range .Pages }}
<li><a href="{{ .Permalink }}">{{ .Title }}</a></li>
{{ end }}
</ul>
</div>
{{ end }}

View file

@ -0,0 +1,6 @@
{{ define "pagename" }}
{{ end }}
{{ define "main" }}
{{ .Content }}
{{ end }}

6
layouts/index.html Normal file
View file

@ -0,0 +1,6 @@
{{ define "pagename" }}
{{ end }}
{{ define "main" }}
{{ .Content }}
{{ end }}

View file

@ -0,0 +1 @@
<span class="antispam">{{ .Get 0 }}</span>

View file

@ -0,0 +1 @@
<i class="fa fa-{{ .Get 0 }}" aria-hidden="true"></i>

View file

@ -0,0 +1,19 @@
<div class="nodes">
{{ range .Page.Params.nodes }}
<div class="node">
<div class="name">{{ .name }}</div>
<div class="geo"> {{ .flag }} {{ upper .country }} {{ .city }}</div>
<dl>
<dt>Clearnet</dt>
<dd><code>{{ .clearnet }}</code></dd>
<dt>DN42</dt>
<dd><code>{{ .dn42 }}</code></dd>
<dt>IPv6</dt>
<dd><code>{{ .ipv6 }}</code></dd>
<dt>Pubkey</dt>
<dd><code>{{ .wg_pub }}</code></dd>
</dl>
</div>
{{ end }}
</div>

View file

@ -0,0 +1 @@
{{ .Inner }}

10
scss/Makefile Normal file
View file

@ -0,0 +1,10 @@
STYLES=style.scss
IMPORTS=$(shell ls -1 _*.scss)
OUTDIR=../static/css
SASS=sassc
all: $(addprefix $(OUTDIR)/,$(STYLES:.scss=.css))
$(OUTDIR)/%.css: %.scss $(IMPORTS)
$(SASS) "$<" "$@"

9
scss/_params.scss Normal file
View file

@ -0,0 +1,9 @@
// vim: tabstop=2 shiftwidth=2 expandtab
$bg_color: #010018;
$link_color: #6ec1e1;
$fg_color: #e4e4e4;
$head_bg_color: #178ca7;
$resp_small: 1350px;
$resp_vsmall: 1000px;

156
scss/style.scss Normal file
View file

@ -0,0 +1,156 @@
// vim: tabstop=2 shiftwidth=2 expandtab
@import url('fonts.css');
@import 'params';
html {
background-color: $bg_color;
}
body {
font-family:Open Sans,Arial;
color: $fg_color;
font-size:16px;
line-height:1.4;
text-align:justify;
margin: 0;
padding: 0;
}
#head {
background-color: $head_bg_color;
display: flex;
justify-content: space-between;
align-items: center;
margin: 0;
padding: 30px 60px;
color: $bg_color;
@media (max-width: $resp_vsmall) {
padding: 20px;
}
div {
font-size: 1.4em;
font-weight: bold;
}
a, a:visited {
color: $bg_color;
}
}
#main-container {
display: flex;
justify-content: space-between;
@media (max-width: $resp_vsmall) {
flex-wrap: wrap;
}
#content {
margin:2em auto;
max-width:800px;
padding:1em;
flex-basis: 800px;
}
}
a, a:visited {
color: $link_color;
text-decoration:none;
}
.fa {
color: $fg_color;
}
:not(pre) > code {
border-radius: 4px;
background-color: black;
color: #f8f8f2;
padding: 3px;
font-family:DejaVu Sans Mono;
}
.highlight>pre {
border-radius: 8px;
padding: 8px;
}
h1 {
margin-left:-10px;
}
h2 {
margin-top: 30px;
margin-left:20px;
.fa {
margin-right: 10px;
}
}
dl {
list-style: none;
display: grid;
grid-template-columns: 1fr 3fr;
dt {
grid-column: 1 / span 1;
justify-self: end;
text-align: right;
margin-right: 20px;
font-weight: bold;
}
dd {
margin-left: 20px;
justify-self: start;
text-align: left;
}
}
.antispam {
unicode-bidi: bidi-override;
direction: rtl;
}
.nodes {
display: flex;
flex-wrap: wrap;
justify-content: space-evenly;
align-items: stretch;
.node {
border: 2px solid $head_bg_color;
background: #02002b;
border-radius: 15px;
padding: 15px;
padding-top: 5px;
margin: 10px;
min-width: 300px;
display: flex;
flex-direction: column;
div {
margin: 5px 0;
}
.name {
font-size: 1.2em;
font-weight: bold;
text-align: center;
margin-bottom: 6px;
}
.geo {
text-align: center;
margin-bottom: 10px;
}
dl {
row-gap: 5px;
grid-template-columns: 1fr 5fr;
dl {
align-self: stretch;
}
}
}
}

4
static/css/font-awesome.min.css vendored Normal file

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,58 @@
/**** OPEN SANS **************************************************************/
/* cyrillic-ext */
@font-face {
font-family: 'Open Sans';
font-style: normal;
font-weight: 400;
src: local('Open Sans Regular'), local('OpenSans-Regular'), url('../fonts/OpenSans-Regular.woff') format('woff');
unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
}
/* cyrillic */
@font-face {
font-family: 'Open Sans';
font-style: normal;
font-weight: 400;
src: local('Open Sans Regular'), local('OpenSans-Regular'), url('../fonts/OpenSans-Regular.woff') format('woff');
unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
/* greek-ext */
@font-face {
font-family: 'Open Sans';
font-style: normal;
font-weight: 400;
src: local('Open Sans Regular'), local('OpenSans-Regular'), url('../fonts/OpenSans-Regular.woff') format('woff');
unicode-range: U+1F00-1FFF;
}
/* greek */
@font-face {
font-family: 'Open Sans';
font-style: normal;
font-weight: 400;
src: local('Open Sans Regular'), local('OpenSans-Regular'), url('../fonts/OpenSans-Regular.woff') format('woff');
unicode-range: U+0370-03FF;
}
/* vietnamese */
@font-face {
font-family: 'Open Sans';
font-style: normal;
font-weight: 400;
src: local('Open Sans Regular'), local('OpenSans-Regular'), url('../fonts/OpenSans-Regular.woff') format('woff');
unicode-range: U+0102-0103, U+0110-0111, U+1EA0-1EF9, U+20AB;
}
/* latin-ext */
@font-face {
font-family: 'Open Sans';
font-style: normal;
font-weight: 400;
src: local('Open Sans Regular'), local('OpenSans-Regular'), url('../fonts/OpenSans-Regular.woff') format('woff');
unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
font-family: 'Open Sans';
font-style: normal;
font-weight: 400;
src: local('Open Sans Regular'), local('OpenSans-Regular'), url('../fonts/OpenSans-Regular.woff') format('woff');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

10
static/css/fonts.css Normal file
View file

@ -0,0 +1,10 @@
@import url('font-opensans.css');
@import url('font-awesome.min.css');
@font-face {
font-family: "DejaVu Sans Mono";
font-style: normal;
font-weight: normal;
src: local('DejaVu Sans Mono'), local('DejaVuSansMono'),
url('../fonts/DejaVuSansMono.woff') format('woff');
}

118
static/css/style.css Normal file
View file

@ -0,0 +1,118 @@
@import url("fonts.css");
html {
background-color: #010018; }
body {
font-family: Open Sans,Arial;
color: #e4e4e4;
font-size: 16px;
line-height: 1.4;
text-align: justify;
margin: 0;
padding: 0; }
#head {
background-color: #178ca7;
display: flex;
justify-content: space-between;
align-items: center;
margin: 0;
padding: 30px 60px;
color: #010018; }
@media (max-width: 1000px) {
#head {
padding: 20px; } }
#head div {
font-size: 1.4em;
font-weight: bold; }
#head a, #head a:visited {
color: #010018; }
#main-container {
display: flex;
justify-content: space-between; }
@media (max-width: 1000px) {
#main-container {
flex-wrap: wrap; } }
#main-container #content {
margin: 2em auto;
max-width: 800px;
padding: 1em;
flex-basis: 800px; }
a, a:visited {
color: #6ec1e1;
text-decoration: none; }
.fa {
color: #e4e4e4; }
:not(pre) > code {
border-radius: 4px;
background-color: black;
color: #f8f8f2;
padding: 3px;
font-family: DejaVu Sans Mono; }
.highlight > pre {
border-radius: 8px;
padding: 8px; }
h1 {
margin-left: -10px; }
h2 {
margin-top: 30px;
margin-left: 20px; }
h2 .fa {
margin-right: 10px; }
dl {
list-style: none;
display: grid;
grid-template-columns: 1fr 3fr; }
dl dt {
grid-column: 1 / span 1;
justify-self: end;
text-align: right;
margin-right: 20px;
font-weight: bold; }
dl dd {
margin-left: 20px;
justify-self: start;
text-align: left; }
.antispam {
unicode-bidi: bidi-override;
direction: rtl; }
.nodes {
display: flex;
flex-wrap: wrap;
justify-content: space-evenly;
align-items: stretch; }
.nodes .node {
border: 2px solid #178ca7;
background: #02002b;
border-radius: 15px;
padding: 15px;
padding-top: 5px;
margin: 10px;
min-width: 300px;
display: flex;
flex-direction: column; }
.nodes .node div {
margin: 5px 0; }
.nodes .node .name {
font-size: 1.2em;
font-weight: bold;
text-align: center;
margin-bottom: 6px; }
.nodes .node .geo {
text-align: center;
margin-bottom: 10px; }
.nodes .node dl {
row-gap: 5px;
grid-template-columns: 1fr 5fr; }
.nodes .node dl dl {
align-self: stretch; }

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load diff

After

(image error) Size: 434 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.