Commit Graph

3488 Commits

Author SHA1 Message Date
GitHub Actions
00a18704e8 fix(uptime): allow RFC 1918 IPs for admin-configured monitors
HTTP/HTTPS uptime monitors targeting LAN addresses (192.168.x.x,
10.x.x.x, 172.16.x.x) permanently reported 'down' on fresh installs
because SSRF protection rejects RFC 1918 ranges at two independent
checkpoints: the URL validator (DNS-resolution layer) and the safe
dialer (TCP-connect layer). Fixing only one layer leaves the monitor
broken in practice.

- Add IsRFC1918() predicate to the network package covering only the
  three RFC 1918 CIDRs; 169.254.x.x (link-local / cloud metadata)
  and loopback are intentionally excluded
- Add WithAllowRFC1918() functional option to both SafeHTTPClient and
  ValidationConfig; option defaults to false so existing behaviour is
  unchanged for every call site except uptime monitors
- In uptime_service.go, pass WithAllowRFC1918() to both
  ValidateExternalURL and NewSafeHTTPClient together; a coordinating
  comment documents that both layers must be relaxed as a unit
- 169.254.169.254 and the full 169.254.0.0/16 link-local range remain
  unconditionally blocked; the cloud-metadata error path is preserved
- 21 new tests across three packages, including an explicit regression
  guard that confirms RFC 1918 blocks are still applied without the
  option set (TestValidateExternalURL_RFC1918BlockedByDefault)

Fixes issues 6 and 7 from the fresh-install bug report.
2026-03-17 21:22:56 +00:00
Jeremy
dc9bbacc27 Merge pull request #854 from Wikid82/renovate/feature/beta-release-non-major-updates
chore(deps): update release-drafter/release-drafter digest to 44a942e (feature/beta-release)
2026-03-17 16:41:13 -04:00
Jeremy
4da4e1a0d4 Merge branch 'feature/beta-release' into renovate/feature/beta-release-non-major-updates 2026-03-17 14:37:17 -04:00
GitHub Actions
c1aaa48ecb chore: cover error path in SeedDefaultSecurityConfig and letsencrypt cert cleanup loop
- The DB error return branch in SeedDefaultSecurityConfig was never
  exercised because all seed tests only ran against a healthy in-memory
  database; added a test that closes the underlying connection before
  calling the function so the FirstOrCreate error path is reached
- The letsencrypt certificate cleanup loop in Register was unreachable
  in all existing tests because no test pre-seeded a ProxyHost with
  an letsencrypt cert association; added a test that creates that
  precondition so the log and Update lines inside the loop execute
- These were the last two files blocking patch coverage on PR #852
2026-03-17 17:45:39 +00:00
renovate[bot]
f82a892405 chore(deps): update release-drafter/release-drafter digest to 44a942e 2026-03-17 17:17:04 +00:00
GitHub Actions
287e85d232 fix(ci): quote shell variables to prevent word splitting in integration test
- All unquoted $i loop counter comparisons and ${TMP_COOKIE} curl
  option arguments in the rate limit integration script were flagged
  by shellcheck SC2086
- Unquoted variables in [ ] test expressions and curl -b/-c options
  can cause subtle failures if the value ever contains whitespace or
  glob characters, and are a shellcheck hard warning that blocks CI
  linting gates
- Quoted all affected variables in place with no logic changes
2026-03-17 17:15:19 +00:00
Jeremy
fa6fbc8ce9 Merge pull request #853 from Wikid82/renovate/feature/beta-release-non-major-updates
chore(deps): update paulhatch/semantic-version action to v6.0.2 (feature/beta-release)
2026-03-17 13:14:55 -04:00
GitHub Actions
61418fa9dd fix(security): persist RateLimitMode in Upsert and harden integration test payload
- The security config Upsert update path copied all rate limit fields
  from the incoming request onto the existing database record except
  RateLimitMode, so the seeded default value of "disabled" always
  survived a POST regardless of what the caller sent
- This silently prevented the Caddy rate_limit handler from being
  injected on any container with a pre-existing config record (i.e.,
  every real deployment and every CI run after migration)
- Added the missing field assignment so RateLimitMode is correctly
  persisted on update alongside all other rate limit settings
- Integration test payload now also sends rate_limit_enable alongside
  rate_limit_mode so the handler sync logic fires via its explicit
  first branch, providing belt-and-suspenders correctness independent
  of which path the caller uses to express intent
2026-03-17 17:06:02 +00:00
GitHub Actions
0df1126aa9 fix(deps): update modernc.org/sqlite to version 1.47.0 for improved functionality 2026-03-17 14:31:42 +00:00
renovate[bot]
1c72469ad6 chore(deps): update paulhatch/semantic-version action to v6.0.2 2026-03-17 14:30:44 +00:00
GitHub Actions
338f864f60 fix(ci): set correct rate_limit_mode field in integration test security config
- The rate-limit integration test was sending rate_limit_enable:true in the
  security config POST, but the backend injects the Caddy rate_limit handler
  only when rate_limit_mode is the string "enabled"
- Because rate_limit_mode was absent from the payload, the database default
  of "disabled" persisted and the guard condition always evaluated false,
  leaving the handler uninjected across all 10 verify attempts
- Replaced the boolean rate_limit_enable with the string field
  rate_limit_mode:"enabled" to match the exact contract the backend enforces
2026-03-17 14:29:35 +00:00
GitHub Actions
8b0011f6c6 fix(ci): enhance rate limit integration test reliability
- Added HTTP status checks for login and security config POST requests to ensure proper error handling.
- Implemented a readiness gate for the Caddy admin API before applying security configurations.
- Increased sleep duration before verifying rate limit handler to accommodate Caddy's configuration propagation.
- Changed verification failure from a warning to a hard exit to prevent misleading test results.
- Updated Caddy admin API URL to use the canonical trailing slash in multiple locations.
- Adjusted retry parameters for rate limit verification to reduce polling noise.
- Removed stale GeoIP checksum validation from the Dockerfile's non-CI path to simplify the build process.
2026-03-17 14:05:25 +00:00
GitHub Actions
e6a044c532 fix(deps): update caniuse-lite to version 1.0.30001780 for improved compatibility 2026-03-17 12:40:55 +00:00
GitHub Actions
bb1e59ea93 fix(deps): update bytedance/gopkg to version 0.1.4 for improved functionality 2026-03-17 12:38:43 +00:00
GitHub Actions
b761d7d4f7 feat(security): seed default SecurityConfig row on application startup
On a fresh install the security_configs table is auto-migrated but
contains no rows. Any code path reading SecurityConfig by name received
an empty Go struct with zero values, producing an all-disabled UI state
that offered no guidance to the user and made the security status
endpoint appear broken.

Adds a SeedDefaultSecurityConfig function that uses FirstOrCreate to
guarantee a default row exists with safe, disabled-by-default values on
every startup. The call is idempotent — existing rows are never modified,
so upgrades are unaffected. If the seed fails the application logs a
warning and continues rather than crashing.

Zero-valued rate-limit fields are intentional and safe: the Cerberus
rate-limit middleware applies hardcoded fallback thresholds when the
stored values are zero, so enabling rate limiting without configuring
thresholds results in sensible defaults rather than a divide-by-zero or
traffic block.

Adds three unit tests covering the empty-database, idempotent, and
do-not-overwrite-existing paths.
2026-03-17 12:33:40 +00:00
Jeremy
5084483984 Merge branch 'development' into feature/beta-release 2026-03-16 22:05:55 -04:00
GitHub Actions
3c96810aa1 fix(deps): update @babel/helpers, @babel/parser, @babel/runtime, and enhanced-resolve to latest versions for improved stability 2026-03-17 02:05:00 +00:00
GitHub Actions
dcd1ec7e95 fix: improve error handling in TestSettingsHandler_UpdateSetting_EmptyValueAccepted 2026-03-17 02:01:48 +00:00
GitHub Actions
4f222b6308 fix: make 'value' field optional in UpdateSettingRequest struct 2026-03-17 01:40:35 +00:00
Jeremy
071ae38d35 Merge pull request #850 from Wikid82/feature/beta-release
Feature: Pushover Notification Provider
2026-03-16 20:09:08 -04:00
GitHub Actions
3385800f41 fix(deps): update core-js-compat to version 3.49.0 for improved compatibility 2026-03-16 21:48:19 +00:00
GitHub Actions
4fe538b37e chore: add unit tests for Slack and Pushover service flags, and validate Pushover dispatch behavior 2026-03-16 21:38:40 +00:00
Jeremy
2bdf4f8286 Merge branch 'development' into feature/beta-release 2026-03-16 14:26:07 -04:00
Jeremy
a96366957e Merge pull request #849 from Wikid82/renovate/feature/beta-release-non-major-updates
chore(deps): update non-major-updates (feature/beta-release)
2026-03-16 14:24:11 -04:00
renovate[bot]
c44642241c chore(deps): update non-major-updates 2026-03-16 18:22:12 +00:00
GitHub Actions
b5bf505ab9 fix: update go-sqlite3 to version 1.14.37 and modernc.org/sqlite to version 1.46.2 for improved stability 2026-03-16 18:20:35 +00:00
GitHub Actions
51f59e5972 fix: update @typescript-eslint packages to version 8.57.1 for improved compatibility and stability 2026-03-16 18:19:36 +00:00
GitHub Actions
65d02e754e feat: add support for Pushover notification provider
- Updated the list of supported notification provider types to include 'pushover'.
- Enhanced the notifications API tests to validate Pushover integration.
- Modified the notifications form to include fields specific to Pushover, such as API Token and User Key.
- Implemented CRUD operations for Pushover providers in the settings.
- Added end-to-end tests for Pushover provider functionality, including form rendering, payload validation, and security checks.
- Updated translations to include Pushover-specific labels and placeholders.
2026-03-16 18:16:14 +00:00
Jeremy
816c0595e1 Merge pull request #834 from Wikid82/feature/beta-release
Feature: Slack Notification Provider
2026-03-16 11:15:29 -04:00
GitHub Actions
9496001811 fix: update undici to version 7.24.4 for improved stability and security 2026-03-16 12:33:58 +00:00
Jeremy
ec1b79c2b7 Merge branch 'development' into feature/beta-release 2026-03-16 08:30:45 -04:00
Jeremy
bab79f2349 Merge pull request #846 from Wikid82/renovate/feature/beta-release-non-major-updates
chore(deps): update non-major-updates (feature/beta-release)
2026-03-16 08:28:36 -04:00
renovate[bot]
edd7405313 chore(deps): update non-major-updates 2026-03-16 12:28:25 +00:00
GitHub Actions
79800871fa fix: harden frontend-builder with npm upgrade to mitigate bundled CVEs 2026-03-16 12:26:55 +00:00
Jeremy
67dd87d3a9 Merge pull request #845 from Wikid82/main
Propagate changes from main into development
2026-03-16 08:24:38 -04:00
Jeremy
dfc2beb8f3 Merge pull request #844 from Wikid82/nightly
Weekly: Promote nightly to main (2026-03-16)
v0.23.0
2026-03-16 08:16:42 -04:00
GitHub Actions
5e5eae7422 fix: ensure Semgrep hook triggers on Dockerfile-only commits 2026-03-16 11:44:27 +00:00
GitHub Actions
78f216eaef fix: enhance payload handling in Slack provider creation to track token presence 2026-03-16 11:41:06 +00:00
Jeremy
34d5cca972 Merge branch 'main' into nightly 2026-03-16 07:35:56 -04:00
Jeremy
5d771381a1 Merge pull request #842 from Wikid82/bot/update-geolite2-checksum
chore(docker): update GeoLite2-Country.mmdb checksum
v0.22.1
2026-03-16 07:35:38 -04:00
GitHub Actions
95a65069c0 fix: handle existing PR outputs in promotion job 2026-03-16 11:17:37 +00:00
Jeremy
1e4b2d1d03 Merge pull request #843 from Wikid82/renovate/feature/beta-release-non-major-updates
fix(deps): update non-major-updates (feature/beta-release)
2026-03-16 07:15:40 -04:00
renovate[bot]
81f1dce887 fix(deps): update non-major-updates 2026-03-16 11:06:23 +00:00
Wikid82
3570c05805 chore(docker): update GeoLite2-Country.mmdb checksum
Automated checksum update for GeoLite2-Country.mmdb database.

Old: b79afc28a0a52f89c15e8d92b05c173f314dd4f687719f96cf921012d900fcce
New: aa154fc6bcd712644de232a4abcdd07dac1f801308c0b6f93dbc2b375443da7b

Auto-generated by: .github/workflows/update-geolite2.yml
2026-03-16 02:58:27 +00:00
GitHub Actions
b66cc34e1c fix: update Caddy security version to 1.1.48 in Dockerfile 2026-03-15 20:49:53 +00:00
GitHub Actions
5bafd92edf fix: supply slack webhook token in handler create sub-tests
The slack sub-tests in TestDiscordOnly_CreateRejectsNonDiscord and
TestBlocker3_CreateProviderRejectsNonDiscordWithSecurityEvents were
omitting the required token field from their request payloads.
CreateProvider enforces that Slack providers must have a non-empty
token (the webhook URL) at creation time. Without it the service
returns "slack webhook URL is required", which the handler does not
classify as a 400 validation error, so it falls through to 500.

Add a token field to each test struct, populate it for the slack
case with a valid-format Slack webhook URL, and use
WithSlackURLValidator to bypass the real format check in unit tests —
matching the pattern used in all existing service-level Slack tests.
2026-03-15 15:17:23 +00:00
GitHub Actions
6e4294dce1 fix: validate Slack webhook URL at provider create/update time 2026-03-15 12:23:27 +00:00
GitHub Actions
82b1c85b7c fix: clarify feature flag behavior for Slack notifications in documentation 2026-03-15 12:14:48 +00:00
GitHub Actions
41ecb7122f fix: update baseline-browser-mapping and caniuse-lite to latest versions 2026-03-15 11:58:48 +00:00
GitHub Actions
2fa7608b9b fix: guard routeBodyPromise against indefinite hang in security test 2026-03-15 11:51:16 +00:00