server.hpp 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. #pragma once
  2. #include "apikey.hpp"
  3. #include "auth.hpp"
  4. #include "collection_registry.hpp"
  5. #include "db_gateway.hpp"
  6. #include "key_store.hpp"
  7. #include "settings_store.hpp"
  8. #include <httplib.h>
  9. #include <optional>
  10. #include <string>
  11. namespace svapi {
  12. struct ServerDeps {
  13. DbGateway& db;
  14. SettingsStore& settings;
  15. KeyStore& keys;
  16. CollectionRegistry& registry;
  17. SessionStore& sessions;
  18. std::string webuiDir; // static SPA root ("" disables)
  19. std::string shareDir; // openapi.json + llms.txt dir
  20. };
  21. class ApiServer {
  22. public:
  23. explicit ApiServer(ServerDeps deps);
  24. void registerRoutes();
  25. int bindToAnyPort(const std::string& host);
  26. void listenAfterBind();
  27. bool listen(const std::string& host, uint16_t port);
  28. void stop();
  29. httplib::Server& raw() { return svr_; }
  30. ServerDeps& deps() { return d_; }
  31. private:
  32. ServerDeps d_;
  33. httplib::Server svr_;
  34. };
  35. // Auth helpers (defined in server.cpp).
  36. std::optional<ApiKey> resolveKey(ServerDeps& d, const httplib::Request& req);
  37. ApiKey requireKey(ServerDeps& d, const httplib::Request& req); // throws Unauthorized
  38. void requireAdmin(const ApiKey& k); // throws Forbidden
  39. void requireProjectAccess(const ApiKey& k, const std::string& project); // throws Forbidden
  40. // Route registration (handlers/*.cpp).
  41. void registerMetaRoutes(ApiServer&);
  42. void registerWebuiAuthRoutes(ApiServer&);
  43. void registerProjectRoutes(ApiServer&);
  44. void registerKeyRoutes(ApiServer&);
  45. void registerCollectionRoutes(ApiServer&);
  46. void registerDocumentRoutes(ApiServer&);
  47. void registerVectorRoutes(ApiServer&);
  48. void registerStatsRoutes(ApiServer&);
  49. void registerSettingsRoutes(ApiServer&);
  50. } // namespace svapi