== System Design === Clients The rvault server is compliant with any client acting in compliance with the hashicorp vault api specification. To achieve this, tests are written using the official Hashicorp vault go client. === Webserver The Webserver forwards client requests to different routers according to the request paths: i.e. "/v1/auth" for the authorization router. Those routers map requests to their corresponding handlers. Problem: - TODO describe middleware === Engines Engines are used to manage data. Depending on the engine this can include storage, generation and encryption. Each engine is independent from other engines. Different engines are addressed via a path, which is passed as a prefix to the secret path. The path for the key-value storage would be .../kv-v2/foo. In the code, engines are represented by folders which are divided into a logic section, struct sections and a test section. === Storage Data is currently stored in an SQLite databse which is accessed with SQLX without ORM. Later stages of the project will allow for different storage systems to be used. === Overview #figure( image("../../assets/Design.svg", width: 80%), caption: [ The acting components of rvault. ], )