81 lines
2.3 KiB
Nix
81 lines
2.3 KiB
Nix
{
|
|
pkgs,
|
|
...
|
|
}:
|
|
|
|
{
|
|
# Swagger UI service
|
|
systemd.services.swagger-ui = {
|
|
description = "Swagger UI for PostgREST API";
|
|
after = [ "postgrest.service" "network.target" ];
|
|
wantedBy = [ "multi-user.target" ];
|
|
|
|
serviceConfig = {
|
|
Type = "simple";
|
|
ExecStart = "${pkgs.nodePackages.http-server}/bin/http-server /var/lib/swagger-ui -p 8080 -c-1 --cors";
|
|
Restart = "on-failure";
|
|
RestartSec = 5;
|
|
User = "swagger";
|
|
};
|
|
};
|
|
|
|
# Create swagger user
|
|
users.users.swagger = {
|
|
isSystemUser = true;
|
|
group = "swagger";
|
|
};
|
|
|
|
users.groups.swagger = {};
|
|
|
|
# Setup Swagger UI directory
|
|
systemd.tmpfiles.rules = [
|
|
"d /var/lib/swagger-ui 0755 swagger swagger"
|
|
];
|
|
|
|
# Create Swagger UI index.html that points to PostgREST OpenAPI
|
|
environment.etc."swagger-ui-init/index.html".text = ''
|
|
<!DOCTYPE html>
|
|
<html>
|
|
<head>
|
|
<title>Swagger UI - PostgREST API</title>
|
|
<meta charset="utf-8"/>
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/swagger-ui-dist@3/swagger-ui.css">
|
|
</head>
|
|
<body>
|
|
<div id="swagger-ui"></div>
|
|
<script src="https://cdn.jsdelivr.net/npm/swagger-ui-dist@3/swagger-ui-bundle.js"></script>
|
|
<script src="https://cdn.jsdelivr.net/npm/swagger-ui-dist@3/swagger-ui-standalone-preset.js"></script>
|
|
<script>
|
|
SwaggerUIBundle({
|
|
url: "http://localhost:3000/openapi.json",
|
|
dom_id: '#swagger-ui',
|
|
presets: [
|
|
SwaggerUIBundle.presets.apis,
|
|
SwaggerUIStandalonePreset
|
|
],
|
|
layout: "StandaloneLayout"
|
|
})
|
|
</script>
|
|
</body>
|
|
</html>
|
|
'';
|
|
|
|
# Copy Swagger UI files on startup
|
|
system.activationScripts.swagger-ui-setup = ''
|
|
mkdir -p /var/lib/swagger-ui
|
|
cp ${pkgs.swagger-ui}/share/swagger-ui/* /var/lib/swagger-ui/ 2>/dev/null || true
|
|
cp /etc/swagger-ui-init/index.html /var/lib/swagger-ui/index.html
|
|
chown -R swagger:swagger /var/lib/swagger-ui
|
|
'';
|
|
|
|
# Open firewall port for Swagger UI
|
|
networking.firewall.allowedTCPPorts = [ 8080 ];
|
|
|
|
# Include packages
|
|
environment.systemPackages = with pkgs; [
|
|
swagger-ui
|
|
nodePackages.http-server
|
|
];
|
|
}
|