thesis/content/using_the_framework.tex

46 lines
2.1 KiB
TeX

\chapter{Using the Framework}
In this section I am going to dive into further detail on how client code is supposed
to use the framework, some of the design decisions behind this and how everything is
is integrated into the \texttt{solvable} Docker image.
To use the framework one has to do several things to get started.
The main poins include:
\begin{itemize}
\item define an FSM describing the flow of the tutorial
\item implement required event handlers (that might trigger state transitions in the FSM,
interact with non-TFW code and do various things that might be needed during a challenge)
\item define what processes should be running inside the container besides the TFW
server (which is started automatically)
\item set up reverse proxying for any user-facing network applications such as webservers,
SSH and friends
\end{itemize}
At first all these tasks can seem quite overwhelming.
Remember that witchcraft is what we practice here after all.
To overcome the high initial learning curve of getting familiar with the framework
I have created a repository called \emph{test-tutorial-framework} with the purpose of
providing a project template for developers looking to create challenges using the
framework.
This repository is a really simple client codebase that is suitable for
developing TFW itself as well (a good place for the tests of the framework).
I also provides an ``industry standard'' \texttt{hack} directory
containing bash scripts that make the development of challenges and TFW itself very convenient.
These scripts span from bootstrapping a complete development environment in one command,
to building and running challenges based on the framework.
Let us take a quick look at the \emph{test-tutorial-framework} project to acquire a greater
understanding of how the framework operates.
\section{Project Structure}
\section{Implementing a Finite State Machine}
\section{Defining Processes to Run}
\section{Exposing Front-facing Networking Applications}
\section{How This Works}
\section{Developer Tooling}
\section{Framework Release Management}