At this point, our team is indeed knee-deep in development. We are familiar with our tools, or our “tech stack” and the benefits and limitations of them. Vue.js provides an excellent framework for creating a single-page web application, Flask is a reliable and easy-to-use server framework, as is MySQL for our database.
The steepest learning curve has probably been learning how to use Vue.js. As a component based front-end rendering framework, it is similar to React, with some minor differences. Setting up the router was straightforward, and the division of HTML-like elements into file-based components is familiar.
The current version of Vue.js allows developers to use one of two APIs for creating components, “Composition API” and “Options API”. When I was first reading through the docs and learning with various tutorials, this wasn’t immediately clear to me, and I was mixing methods from each of the APIs. When I re-visited the Vue.js documentation I realized I had to choose one, and I made this choice solely based on what the majority of the code currently supported.
The main difference is that “Options” follows a declarative approach to creating components and their associated data and methods. The “Options API” is the more “traditional” method, used in older versions of Vue.js, and the “Composition API” is newer. “Composition” allows for a little more flexibility, which has proved to be beneficial as someone using it for the first time.
“Composition API”‘s more flexible structure has also allowed us to make changes to the application a little more easily, and it proves to us that we can continue to make these changes. For example, we originally intended to use different git branches to have different versions of the application available to show the various vulnerabilities we are researching. Recently we decided to change this, and to use multiple endpoints in the server to explore different vulnerabilities. Changing the server to fit this was trivial; we just created more endpoints and adjusted our naming scheme as needed.
From the front end, we needed a way to call these different endpoints based on a user’s input. We wanted a global state variable that could be toggled, for example, a “sqli_vulnerable” boolean variable that could be checked to determine which server resource to fetch. Luckily, Vue.js has an unofficial/official state management library called “pinia”. It was actually very easy to implement this library, and I think it will provide an excellent way to manage state variables for this purpose, and it could be utilized later to provide other features to the application.