97 lines
2.6 KiB
Nix
97 lines
2.6 KiB
Nix
|
{
|
||
|
lib,
|
||
|
config,
|
||
|
pkgs,
|
||
|
...
|
||
|
}:
|
||
|
with lib;
|
||
|
with types;
|
||
|
{
|
||
|
options.verify.http = mkOption {
|
||
|
default = { };
|
||
|
description = ''
|
||
|
Verify that ports the defined ports are closed for a specific interface.
|
||
|
Verification is done by rustscan.
|
||
|
'';
|
||
|
type = attrsOf (submodule {
|
||
|
options = {
|
||
|
url = mkOption {
|
||
|
type = str;
|
||
|
description = ''
|
||
|
URL to analyze.
|
||
|
'';
|
||
|
};
|
||
|
responseCode = mkOption {
|
||
|
type = int;
|
||
|
default = 200;
|
||
|
description = ''
|
||
|
expected response code
|
||
|
'';
|
||
|
};
|
||
|
expectedContent = mkOption {
|
||
|
type = nullOr str;
|
||
|
description = ''
|
||
|
expected string in the response
|
||
|
'';
|
||
|
};
|
||
|
};
|
||
|
});
|
||
|
};
|
||
|
|
||
|
config = {
|
||
|
|
||
|
verify.localCommands =
|
||
|
let
|
||
|
curl = lib.getExe pkgs.curl;
|
||
|
grep = lib.getExe pkgs.gnugrep;
|
||
|
scriptWithExpectedContent = url: responseCode: expectedContent: ''
|
||
|
if ${curl} -s -o /dev/null -w "%{http_code}" ${url} | ${grep} -q "${toString responseCode}"; then
|
||
|
if ${curl} -s ${url} | ${grep} -q "${expectedContent}"; then
|
||
|
echo -n ""
|
||
|
#echo " [ OK ] Die Seite hat Statuscode ${toString responseCode} und enthält den String '${expectedContent}'."
|
||
|
else
|
||
|
echo " [Fail] Der Statuscode ist 200, aber die Seite enthält den String '${expectedContent}' nicht."
|
||
|
fi
|
||
|
else
|
||
|
echo " [Fail] Die Seite hat keinen Statuscode ${toString responseCode}."
|
||
|
fi
|
||
|
'';
|
||
|
|
||
|
scriptWithoutExpectedContent = url: responseCode: ''
|
||
|
if ${curl} -s -o /dev/null -w "%{http_code}" ${url} | ${grep} -q "${toString responseCode}"; then
|
||
|
echo -n ""
|
||
|
#echo " [ OK ] Die Seite hat Statuscode ${toString responseCode}."
|
||
|
else
|
||
|
echo " [Fail] Die Seite hat keinen Statuscode ${toString responseCode}."
|
||
|
fi
|
||
|
'';
|
||
|
script =
|
||
|
url: responeCode: expectedContent:
|
||
|
if (expectedContent == null) then
|
||
|
scriptWithExpectedContent url responeCode expectedContent
|
||
|
else
|
||
|
scriptWithoutExpectedContent url responeCode;
|
||
|
|
||
|
in
|
||
|
mapAttrs' (
|
||
|
service:
|
||
|
{
|
||
|
url,
|
||
|
responseCode,
|
||
|
expectedContent,
|
||
|
}:
|
||
|
nameValuePair ("http_" + service) (script url responseCode expectedContent)
|
||
|
|
||
|
) config.verify.http;
|
||
|
|
||
|
# verify.localCommands.taskchampion =
|
||
|
# let
|
||
|
# domain = "http://orbi.private:10222";
|
||
|
# grepString = "TaskChampion sync server";
|
||
|
# in
|
||
|
#
|
||
|
|
||
|
};
|
||
|
|
||
|
}
|