Pour tout problème contactez-nous par mail : support@froggit.fr | La FAQ :grey_question: | Rejoignez-nous sur le Chat :speech_balloon:

Skip to content
Snippets Groups Projects
Commit 15df3ac5 authored by Pierre Jarriges's avatar Pierre Jarriges
Browse files

switch server to Actix

parent 098efd19
No related branches found
No related tags found
No related merge requests found
......@@ -3,4 +3,4 @@ bundle.js
*.css.map
src/**/*.css
node_modules
/data/certbot
\ No newline at end of file
target
Cargo.lock 0 → 100644
This diff is collapsed.
[package]
name = "kuadrado_server"
version = "2.0.0"
authors = ["Pierre Jarriges <pierre.jarriges@tutanota.com>"]
edition = "2018"
license-file = "LICENSE"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
actix-web = { version = "3", features=["rustls"] }
actix-web-middleware-redirect-https = "3.0.1"
rustls="0.18.1"
actix-files="0.5"
env_logger="0.9"
dotenv="0.15"
FROM nginx
## Remove default nginx index page
RUN rm -rf /usr/share/nginx/html/*
RUN apt-get update \
&& apt-get install nodejs npm -y
WORKDIR /usr/share/nginx/html
COPY . .
\ No newline at end of file
FROM kuadsoft/rust-openssl:latest as builder
WORKDIR /usr/src/kuadrado_server
COPY . .
RUN cargo install --path .
FROM kuadsoft/debian-openssl:buster-slim
COPY --from=builder /usr/local/cargo/bin/kuadrado_server /usr/local/bin/kuadrado_server
CMD ["kuadrado_server"]
\ No newline at end of file
......@@ -18,4 +18,4 @@ 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.
\ No newline at end of file
SOFTWARE.
run:
docker-compose up -d
run-log:
docker-compose up
run-dev:
docker-compose -f ./dev.docker-compose.yml up
build:
docker-compose up --build -d
docker-compose up --build
build-dev:
docker-compose -f ./dev.docker-compose.yml up --build
reload-api:
docker-compose restart kuadrado_server
stop:
docker-compose down
test:
RESOURCES_DIR="./" cargo test -- --test-threads=1
bash:
docker exec -it kuadrado bash
doc:
cargo doc --no-deps
open:
firefox http://localhost/
bash-api:
docker exec -it kuadrado_server bash
push:
git add . && git commit -m "$(msg)" && git push origin HEAD
build-front:
npm run --prefix ./website build
update-prod:
git checkout . && git pull origin master && npm install && npm run build-prod
build-front-debug:
npm run --prefix ./website build debug
reload:
docker exec -it kuadrado nginx -s reload
\ No newline at end of file
logs:
docker-compose logs -f
\ No newline at end of file
# Kuadrado Software Website
## install
### Prerequisite
- docker
- docker-compose
- certbot for prod or mkcert for dev
---
### TLS CERTS
- ### Localhost
With mkcert
```sh
$ sudo mkdir -p /etc/letsencrypt/live/localhost
$ sudo chmod 777 -R /etc/letsencryt/live/localhost
$ mkcert -key-file privkey.pem -cert-file fullchain.pem localhost
```
- ### Real server
Install snapd and certbot at system level. https://certbot.eff.org/lets-encrypt/debianbuster-other
Then run
```sh
$ sudo certbot certonly --standalone
```
---
## Build
```sh
$ git clone https://gitlab.com/kuadrado-software/kuadrado-website.git
$ cd kuadrado-website
$ touch ./.env
# Fill .env file with the required variables described below
# Build the website
$ cd website
$ npm install
$ npm run build
# or
$ npm run build-debug
$ cd ..
# build the image and run the container
$ docker-compose up --build
# Or
$ docker-compose -f ./dev.docker-compose.yml up --build
```
---
## Expected environment variables
_Env vars may be defined in a .env file at the root of the project_
- `RELEASE_MODE`: Can be either "debug", "test" or "prod". It's used to define the log level. Not required. Default is "prod"
- `SERVER_PORT`: The port bound the Actix server
- `SERVER_PORT_TLS`: The tls port bound the Actix server
- `SERVER_HOST`: IP address or domain name hosting the API.
- `SERVER_PROTOCOL`: http or https regarding the protocol used to connect the server
- `RESOURCES_DIR`: A linux directory that will be used to mount static resources like certs and html files
server {
listen 80;
server_name kuadrado-software.fr www.kuadrado-software.fr;
root /usr/share/nginx/html;
index index.html index.htm;
server_tokens off;
location /.well-known/acme-challenge/ {
root /var/www/certbot;
}
location / {
return 301 https://$host$request_uri;
}
}
server {
server_name kuadrado-software.fr www.kuadrado-software.fr;
listen 443 ssl;
root /usr/share/nginx/html;
index index.html index.htm;
server_tokens off;
ssl_certificate /etc/letsencrypt/live/kuadrado-software.fr/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/kuadrado-software.fr/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
}
\ No newline at end of file
FROM kuadsoft/rust-openssl:latest
WORKDIR /usr/src/kuadrado_server
COPY ./Cargo.toml ./Cargo.toml
COPY ./src ./src
\ No newline at end of file
version: "3.9"
services:
kuadrado_server:
build:
context: .
dockerfile: ./dev.Dockerfile
container_name: "kuadrado_server"
restart: unless-stopped
ports:
- 80:${SERVER_PORT}
- 443:${SERVER_PORT_TLS}
volumes:
- ./src:/usr/src/kuadrado_server/src:ro
- ./Cargo.toml:/usr/src/kuadrado_server/Cargo.toml:ro
- ./public:${RESOURCES_DIR}/public:ro
- /etc/letsencrypt/:${RESOURCES_DIR}/certs:ro
command: cargo run
env_file:
- ./.env
version: "3.9"
services:
web:
container_name: "kuadrado"
build: .
ruskuadrado_servert_api:
build:
context: .
dockerfile: ./Dockerfile
container_name: "kuadrado_server"
restart: unless-stopped
ports:
- "80:80"
- "443:443"
- 80:${SERVER_PORT}
- 443:${SERVER_PORT_TLS}
volumes:
- ./public:/usr/share/nginx/html
- ./data/nginx:/etc/nginx/conf.d
- ./data/certbot/conf:/etc/letsencrypt
- ./data/certbot/www:/var/www/certbot
command: /bin/sh -c 'while :; do sleep 6h & wait $${!}; nginx -s reload; done & nginx -g "daemon off;"'
certbot:
image: certbot/certbot
restart: unless-stopped
volumes:
- ./data/certbot/conf:/etc/letsencrypt
- ./data/certbot/www:/var/www/certbot
entrypoint: /bin/sh -c 'trap exit TERM; while :; do certbot renew; sleep 12h & wait $${!}; done;'
- ./public:${RESOURCES_DIR}/public:ro
- /etc/letsencrypt/:${RESOURCES_DIR}/certs:ro
env_file:
- ./.env
#!/bin/bash
if ! [ -x "$(command -v docker-compose)" ]; then
echo 'Error: docker-compose is not installed.' >&2
exit 1
fi
domains=(kuadrado-software.fr www.kuadrado-software.fr)
rsa_key_size=4096
data_path="./data/certbot"
email="contact@kuadrado-software.fr"
staging=0 # Set to 1 if you're testing your setup to avoid hitting request limits
if [ -d "$data_path" ]; then
read -p "Existing data found for $domains. Continue and replace existing certificate? (y/N) " decision
if [ "$decision" != "Y" ] && [ "$decision" != "y" ]; then
exit
fi
fi
if [ ! -e "$data_path/conf/options-ssl-nginx.conf" ] || [ ! -e "$data_path/conf/ssl-dhparams.pem" ]; then
echo "### Downloading recommended TLS parameters ..."
mkdir -p "$data_path/conf"
curl -s https://raw.githubusercontent.com/certbot/certbot/master/certbot-nginx/certbot_nginx/_internal/tls_configs/options-ssl-nginx.conf > "$data_path/conf/options-ssl-nginx.conf"
curl -s https://raw.githubusercontent.com/certbot/certbot/master/certbot/certbot/ssl-dhparams.pem > "$data_path/conf/ssl-dhparams.pem"
echo
fi
echo "### Creating dummy certificate for $domains ..."
path="/etc/letsencrypt/live/$domains"
mkdir -p "$data_path/conf/live/$domains"
docker-compose run --rm --entrypoint "\
openssl req -x509 -nodes -newkey rsa:$rsa_key_size -days 1\
-keyout '$path/privkey.pem' \
-out '$path/fullchain.pem' \
-subj '/CN=localhost'" certbot
echo
echo "### Starting nginx ..."
docker-compose up --force-recreate -d web
echo
echo "### Deleting dummy certificate for $domains ..."
docker-compose run --rm --entrypoint "\
rm -Rf /etc/letsencrypt/live/$domains && \
rm -Rf /etc/letsencrypt/archive/$domains && \
rm -Rf /etc/letsencrypt/renewal/$domains.conf" certbot
echo
echo "### Requesting Let's Encrypt certificate for $domains ..."
#Join $domains to -d args
domain_args=""
for domain in "${domains[@]}"; do
domain_args="$domain_args -d $domain"
done
# Select appropriate email arg
case "$email" in
"") email_arg="--register-unsafely-without-email" ;;
*) email_arg="--email $email" ;;
esac
# Enable staging mode if needed
if [ $staging != "0" ]; then staging_arg="--staging"; fi
docker-compose run --rm --entrypoint "\
certbot certonly --webroot -w /var/www/certbot \
$staging_arg \
$email_arg \
$domain_args \
--rsa-key-size $rsa_key_size \
--agree-tos \
--force-renewal" certbot
echo
echo "### Reloading nginx ..."
docker-compose exec web nginx -s reload
......@@ -636,6 +636,13 @@ class Template {
contents: "in",
title: "Linkedin",
},
{
tag: "a",
href: "https://mastodon.gamedev.place/@kuadrado_software",
target: "_blank",
contents: "m",
title: "Mastodon",
}
],
},
{
......
<!DOCTYPE html>
<html lang="fr" prefix="og: https://ogp.me/ns#">
<head>
<meta charset="utf-8" />
<title>Kuadrado Software | Pédagogie</title>
<meta name="description" content="Animations autour de la création de jeux vidéos, vulgarisation numérique. Découvrez nos initiatives pédagogiques."/>
<meta name="author" content="Kuadrado Software" />
<meta name="image" content="https://kuadrado-software.fr/assets/images/brain.png"/>
<!-- Open Graph Protocol meta data -->
<meta property="og:title" content="Kuadrado Software | Pédagogie"/>
<meta property="og:description" content="Animations autour de la création de jeux vidéos, vulgarisation numérique. Découvrez nos initiatives pédagogiques."/>
<meta property="og:type" content="website" />
<meta property="og:url" content="https://kuadrado-software.fr/education"/>
<meta property="og:image" content="https://kuadrado-software.fr/assets/images/brain.png"/>
<meta property="twitter:image" content="https://kuadrado-software.fr/assets/images/brain.png"/>
<meta property="og:locale" content="fr_FR"/>
<meta property="og:site_name" content="Kuadrado Software" />
<head>
<meta charset="utf-8" />
<title>Kuadrado Software | Pédagogie</title>
<meta name="description" content="Animations autour de la création de jeux vidéos, vulgarisation numérique. Découvrez nos initiatives pédagogiques."/>
<meta name="author" content="Kuadrado Software" />
<meta name="image" content="https://kuadrado-software.fr/assets/images/brain.png"/>
<!-- English translation not ready yet -->
<!-- <meta property="og:locale:alternate" content="en_GB" /> -->
<!-- Open Graph Protocol meta data -->
<meta property="og:title" content="Kuadrado Software | Pédagogie"/>
<meta property="og:description" content="Animations autour de la création de jeux vidéos, vulgarisation numérique. Découvrez nos initiatives pédagogiques."/>
<meta property="og:type" content="website" />
<meta property="og:url" content="https://kuadrado-software.fr/education"/>
<meta property="og:image" content="https://kuadrado-software.fr/assets/images/brain.png"/>
<meta property="twitter:image" content="https://kuadrado-software.fr/assets/images/brain.png"/>
<meta property="og:locale" content="fr_FR"/>
<meta property="og:site_name" content="Kuadrado Software" />
<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1" />
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
<link href="/style/style.css" rel="stylesheet" />
<script type="application/ld+json">{"@context":"https://schema.org","type":"WebPage","description":"Animations autour de la création de jeux vidéos, vulgarisation numérique. Découvrez nos initiatives pédagogiques.","image":["https://kuadrado-software.fr/assets/images/brain.svg","https://kuadrado-software.fr/assets/images/brain.png","https://kuadrado-software.fr/assets/images/game_studio_banner.png","https://kuadrado-software.fr/assets/images/popularization_banner.png"],"keywords":"Animations, pédagogie, éducation, vulgarisation, numérique, Ardèche, Rhone-Alpes, apprendre, learn, gamedev, coding, informatique, programmation, code, apprentissage, formation, activité, ado, adultes, adolescents, jeunesse","name":"Kuadrado Software - Pédagogie","url":"https://kuadrado-software.fr/education"}</script>
</head>
<!-- The vocab attribute defines the standard vocabulary used for RDFa standard.
<!-- English translation not ready yet -->
<!-- <meta property="og:locale:alternate" content="en_GB" /> -->
<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1" />
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
<link href="/style/style.css" rel="stylesheet" />
<script type="application/ld+json">{"@context":"https://schema.org","type":"WebPage","description":"Animations autour de la création de jeux vidéos, vulgarisation numérique. Découvrez nos initiatives pédagogiques.","image":["https://kuadrado-software.fr/assets/images/brain.svg","https://kuadrado-software.fr/assets/images/brain.png","https://kuadrado-software.fr/assets/images/game_studio_banner.png","https://kuadrado-software.fr/assets/images/popularization_banner.png"],"keywords":"Animations, pédagogie, éducation, vulgarisation, numérique, Ardèche, Rhone-Alpes, apprendre, learn, gamedev, coding, informatique, programmation, code, apprentissage, formation, activité, ado, adultes, adolescents, jeunesse","name":"Kuadrado Software - Pédagogie","url":"https://kuadrado-software.fr/education"}</script>
</head>
<!-- The vocab attribute defines the standard vocabulary used for RDFa standard.
The DOM may contain properties such as "typeof" and "property" accordinly to the schema.org vocabulary -->
<body vocab="https://schema.org/">
<!-- The H1 tag will be never seen but it's necessary for SEO -->
<main><h1 style="visibility: hidden">Kuadrado Software | Pédagogie</h1></main>
</body>
<script type="text/javascript" src="./education.js"></script>
</html>
<body vocab="https://schema.org/">
<!-- The H1 tag will be never seen but it's necessary for SEO -->
<main>
<h1 style="visibility: hidden">Kuadrado Software | Pédagogie</h1>
</main>
</body>
<script type="text/javascript" src="/education/education.js"></script>
</html>
\ No newline at end of file
public/favicon.ico

7.58 KiB

......@@ -741,6 +741,13 @@ class Template {
contents: "in",
title: "Linkedin",
},
{
tag: "a",
href: "https://mastodon.gamedev.place/@kuadrado_software",
target: "_blank",
contents: "m",
title: "Mastodon",
}
],
},
{
......
<!DOCTYPE html>
<html lang="fr" prefix="og: https://ogp.me/ns#">
<head>
<meta charset="utf-8" />
<title>Kuadrado Software | Jeux</title>
<meta name="description" content="Création de jeux vidéos indépendants. Jeux web, PC et projets en cours de développement"/>
<meta name="author" content="Kuadrado Software" />
<meta name="image" content="https://kuadrado-software.fr/assets/images/game_controller.png"/>
<!-- Open Graph Protocol meta data -->
<meta property="og:title" content="Kuadrado Software | Jeux"/>
<meta property="og:description" content="Création de jeux vidéos indépendants. Jeux web, PC et projets en cours de développement"/>
<meta property="og:type" content="website" />
<meta property="og:url" content="https://kuadrado-software.fr/games"/>
<meta property="og:image" content="https://kuadrado-software.fr/assets/images/game_controller.png"/>
<head>
<meta charset="utf-8" />
<title>Kuadrado Software | Jeux</title>
<meta name="description" content="Création de jeux vidéos indépendants. Jeux web, PC et projets en cours de développement"/>
<meta name="author" content="Kuadrado Software" />
<meta name="image" content="https://kuadrado-software.fr/assets/images/game_controller.png"/>
<!-- Open Graph Protocol meta data -->
<meta property="og:title" content="Kuadrado Software | Jeux"/>
<meta property="og:description" content="Création de jeux vidéos indépendants. Jeux web, PC et projets en cours de développement"/>
<meta property="og:type" content="website" />
<meta property="og:url" content="https://kuadrado-software.fr/games"/>
<meta property="og:image" content="https://kuadrado-software.fr/assets/images/game_controller.png"/>
<meta property="og:image" content="https://kuadrado-software.fr/assets/images/game_studio_banner.png"/>
<meta property="og:image" content="https://kuadrado-software.fr/assets/images/popularization_banner.png"/>
<meta property="twitter:image" content="https://kuadrado-software.fr/assets/images/game_controller.png"/>
<meta property="og:locale" content="fr_FR"/>
<meta property="og:site_name" content="Kuadrado Software" />
<meta property="twitter:image" content="https://kuadrado-software.fr/assets/images/game_controller.png"/>
<meta property="og:locale" content="fr_FR"/>
<meta property="og:site_name" content="Kuadrado Software" />
<!-- English translation not ready yet -->
<!-- <meta property="og:locale:alternate" content="en_GB" /> -->
<!-- English translation not ready yet -->
<!-- <meta property="og:locale:alternate" content="en_GB" /> -->
<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1" />
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
<link href="/style/style.css" rel="stylesheet" />
<script type="application/ld+json">{"@context":"https://schema.org","type":"WebPage","description":"Création de jeux vidéos indépendants. Jeux web, PC et projets en cours de développement","image":["https://kuadrado-software.fr/assets/images/game_controller.svg","https://kuadrado-software.fr/assets/images/game_controller.png"],"keywords":"gamedev, pixelart, jeux vidéo, création, video games, indépendants, indie gamedev","name":"Kuadrado Software - Jeux","url":"https://kuadrado-software.fr/games"}</script>
</head>
<!-- The vocab attribute defines the standard vocabulary used for RDFa standard.
<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1" />
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
<link href="/style/style.css" rel="stylesheet" />
<script type="application/ld+json">{"@context":"https://schema.org","type":"WebPage","description":"Création de jeux vidéos indépendants. Jeux web, PC et projets en cours de développement","image":["https://kuadrado-software.fr/assets/images/game_controller.svg","https://kuadrado-software.fr/assets/images/game_controller.png"],"keywords":"gamedev, pixelart, jeux vidéo, création, video games, indépendants, indie gamedev","name":"Kuadrado Software - Jeux","url":"https://kuadrado-software.fr/games"}</script>
</head>
<!-- The vocab attribute defines the standard vocabulary used for RDFa standard.
The DOM may contain properties such as "typeof" and "property" accordinly to the schema.org vocabulary -->
<body vocab="https://schema.org/">
<!-- The H1 tag will be never seen but it's necessary for SEO -->
<main><h1 style="visibility: hidden">Kuadrado Software | Jeux</h1></main>
</body>
<script type="text/javascript" src="./games.js"></script>
</html>
<body vocab="https://schema.org/">
<!-- The H1 tag will be never seen but it's necessary for SEO -->
<main>
<h1 style="visibility: hidden">Kuadrado Software | Jeux</h1>
</main>
</body>
<script type="text/javascript" src="/games/games.js"></script>
</html>
\ No newline at end of file
<!DOCTYPE html>
<html lang="fr" prefix="og: https://ogp.me/ns#">
<head>
<meta charset="utf-8" />
<title>Kuadrado Software</title>
<meta
name="description"
content="Studio de création de jeux vidéo basé en Ardèche, Vernoux en Vivarais. Création artisitique numérique | Développement d'outillage logiciel libre et open source | Pédagogie."
/>
<meta name="author" content="Kuadrado Software" />
<meta name="image" content="https://kuadrado-software.fr/assets/images/logo_kuadrado.png" />
<!-- Open Graph Protocol meta data -->
<meta property="og:title" content="Kuadrado Software" />
<meta
property="og:description"
content="Créations numériques, jeu vidéo et pédagogie. Made in Ardèche, Vernoux en Vivarais."
/>
<meta property="og:type" content="website" />
<meta property="og:url" content="https://kuadrado-software.fr" />
<meta
property="og:image"
content="https://kuadrado-software.fr/assets/images/logo_kuadrado.png"
/>
<meta
property="twitter:image"
content="https://kuadrado-software.fr/assets/images/logo_kuadrado.png"
/>
<meta property="og:locale" content="fr_FR" />
<meta property="og:site_name" content="Kuadrado Software" />
<head>
<meta charset="utf-8" />
<title>Kuadrado Software</title>
<meta name="description"
content="Studio de création de jeux vidéo basé en Ardèche, Vernoux en Vivarais. Création artisitique numérique | Développement d'outillage logiciel libre et open source | Pédagogie." />
<meta name="author" content="Kuadrado Software" />
<meta name="image" content="https://kuadrado-software.fr/assets/images/logo_kuadrado.png" />
<!-- English translation not ready yet -->
<!-- <meta property="og:locale:alternate" content="en_GB" /> -->
<!-- Open Graph Protocol meta data -->
<meta property="og:title" content="Kuadrado Software" />
<meta property="og:description"
content="Créations numériques, jeu vidéo et pédagogie. Made in Ardèche, Vernoux en Vivarais." />
<meta property="og:type" content="website" />
<meta property="og:url" content="https://kuadrado-software.fr" />
<meta property="og:image" content="https://kuadrado-software.fr/assets/images/logo_kuadrado.png" />
<meta property="twitter:image" content="https://kuadrado-software.fr/assets/images/logo_kuadrado.png" />
<meta property="og:locale" content="fr_FR" />
<meta property="og:site_name" content="Kuadrado Software" />
<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1" />
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
<link href="/style/style.css" rel="stylesheet" />
<script type="application/ld+json">
<!-- English translation not ready yet -->
<!-- <meta property="og:locale:alternate" content="en_GB" /> -->
<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1" />
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
<link href="/style/style.css" rel="stylesheet" />
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@graph": [
......@@ -117,12 +108,17 @@
]
}
</script>
</head>
<!-- The vocab attribute defines the standard vocabulary used for RDFa standard.
</head>
<!-- The vocab attribute defines the standard vocabulary used for RDFa standard.
The DOM may contain properties such as "typeof" and "property" accordinly to the schema.org vocabulary -->
<body vocab="https://schema.org/">
<!-- The H1 tag will be never seen but it's necessary for SEO -->
<main><h1 style="visibility: hidden">Kuadrado Software</h1></main>
</body>
<script type="text/javascript" src="main.js"></script>
</html>
<body vocab="https://schema.org/">
<!-- The H1 tag will be never seen but it's necessary for SEO -->
<main>
<h1 style="visibility: hidden">Kuadrado Software</h1>
</main>
</body>
<script type="text/javascript" src="/main.js"></script>
</html>
\ No newline at end of file
......@@ -953,6 +953,13 @@ class Template {
contents: "in",
title: "Linkedin",
},
{
tag: "a",
href: "https://mastodon.gamedev.place/@kuadrado_software",
target: "_blank",
contents: "m",
title: "Mastodon",
}
],
},
{
......
User-agent: *
Disallow: /articles/
Disallow: /style/
Sitemap: https://kuadrado-software.fr/sitemap.xml
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment