Construyendo la web

Para construir la web hemos optado por usar Hugo como generador de sitios estáticos, de forma que podamos automatizar el mantenimiento y despliegue, que realizaremos mediante Travis y GitHub pages.

Hugo

Hugo es un generador de sitios estáticos escrito en Go.

Para instalarlo y crear la página web inicial, hemos utilizado las instrucciones disponibles en la documentación oficial.

El tema elegido como base es “Terminal”, sobre el cual realizaremos todas las modificaciones necesarias.

Para proteger los write ups de retos activos se utilizará Hugo Encrypt, con el cual protegeremos los post con la flag del reto, de forma que solo las personas que ya lo hayan resuelto puedan acceder a su writeup.

Despliegue continuo

Crearemos dos repositorios en GitHub siguiendo estas instrucciones, de forma que tendremos dos repositorios, uno con el código fuente de la web, que deberemos mantener privado, y el segundo con el resultado de procesar la web con Hugo, cuyos archivos utilizará GitHub Pages.

Conectamos la primera cuenta de Travis con GitHub, y añadimos la contraseña de nuestra segunda cuenta como variable de entorno protegida en Travis, de forma que podamos utilizarla en los scripts para hacer push al segundo repositorio, desde el cual se servirán los archivos de GitHub Pages.

Una vez configurados los dos repositorios, añadiremos los siguientes tres ficheros al primer repositorio:

.travis.yml


---
git:
  submodules: false
before_install:
  - chmod +x init-submodule.sh
  - ./init-submodule.sh
install:
  - curl -LO https://github.com/gohugoio/hugo/releases/download/v0.62.2/hugo_0.62.2_Linux-64bit.deb
  - sudo dpkg -i hugo_0.62.2_Linux-64bit.deb

script:
  - hugo
  - docker run -it --rm -v `pwd`/public:/data/site chaosbunker/hugo-encrypt hugo-encrypt -sitePath /data/site
deploy:
  - provider: script
    script: chmod +x ./deploy.sh && ./deploy.sh
    skip_cleanup: true
    on:
      branch: master

init-submodule.sh


cd public

if [ -n "$GITHUB_AUTH_SECRET" ]
then
    touch ~/.git-credentials
    chmod 0600 ~/.git-credentials
    echo $GITHUB_AUTH_SECRET > ~/.git-credentials
    cat ~/.git-credentials

    git config credential.helper store
    git config user.email "rmartinsanta-bot@users.noreply.github.com"
    git config user.name "rmartinsanta-bot"
fi

cd ..
git submodule update --init --recursive

deploy.sh


#!/bin/bash

cd public
if [ -n "$GITHUB_AUTH_SECRET" ]
then
    touch ~/.git-credentials
    chmod 0600 ~/.git-credentials
    echo $GITHUB_AUTH_SECRET > ~/.git-credentials
    echo "Credentials"
    cat ~/.git-credentials

    git config credential.helper store
    git config user.email "rmartinsanta-bot@users.noreply.github.com"
    git config user.name "rmartinsanta-bot"
fi
git add .
git commit -m "Update site"
git push --force https://rmartinsanta-bot:$BOT_PASSWORD@github.com/rmartinsanta/raulmart.in.git HEAD:master

Además, añadiremos al fichero config.toml la siguiente línea dentro del apartado [params]


[params]
  DefaultContentLanguage = "en"

Y creamos la carpeta i18n en la raíz de la web, y dentro creamos los archivos de internacionalización que necesita hugo_encryptor (dependerán de los idiomas de blog, yo añadiré dos, uno para español y otro para inglés).

index.en.md


[protectedByPassword]
other = "The following content is protected. Use the root flag for machine writeups, or the challenge flag for challenge writeups."

[enterPassword]
other = "Please enter the password."

[decrypt]
other = "Show content"

[wrongPassword]
other = "Incorrect Password"

index.es.md


[protectedByPassword]
other = "El contenido de este post está protegido. Utiliza la flag de root para posts sobre máquinas, o la flag del reto para posts sobre retos."

[enterPassword]
other = "Porfavor, introduzca la contraseña"

[decrypt]
other = "Acceder"

[wrongPassword]
other = "Contraseña errónea"

Con esto y si no me he olvidado nada deberíamos tener la web funcionando.