Commit Graph
37 Commits
Author SHA1 Message Date
2GT-RichandClaude Sonnet 4.6 0350a76232 chore: bump version to v0.10.4 Beta and update docs for PR #31 features
Documents CORS_ORIGIN env var, credential preset operator access control,
and server-side bulk device add job in README. Bumps version across all
four locations.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-21 19:57:47 -07:00
DenisandCursor Agent a12f52ebc7 feat: non-blocking bulk-add, CORS hardening, credential preset access control (#31)
* devices: hide discovered neighbors that are already managed

Discovered Devices showed every unresolved MikroTik neighbor, even when
the neighbor was obviously the same device a managed node is reporting
through a different link / MAC / alias. Since we already know every
managed device interface MAC, primary IP, and system identity, we can
flag those rows.

- /api/devices/discovered now annotates each row with duplicate_of_device_id
  and duplicate_of_device_name when the neighbor matches a managed device
  by interface MAC, primary IP, or system identity.
- Add a Hide duplicates of managed devices toggle (default on) above the
  table, with a count of how many matches were found. When enabled, the
  list hides matched rows; when disabled, matches stay visible but are
  dimmed and tagged Already managed so the origin is clear.
- Suppress the Add to Manager action for rows that are already a
  managed device, since adding them would create a second record for the
  same hardware.

Co-authored-by: Denis <denis-ev@users.noreply.github.com>

* devices: safer duplicate handling, try-all safeguards, and timezone/firmware fixes

Co-authored-by: Denis <denis-ev@users.noreply.github.com>

* Non-blocking follow-ups: parsePort util, tests, bulk-add queue, preset rate limit

Co-authored-by: Denis <denis-ev@users.noreply.github.com>

* fix(security): tighten CORS, Redis rate limits, and preset access controls

Require explicit CORS origins in production, align Socket.IO CORS with HTTP,
default Docker Compose to local HTTPS origins, and remove the in-memory
mutation limiter in favor of Redis. Also add operator-use flags for credential
presets in the UI and harden bulk-add job access and client error messages.

Co-authored-by: Denis <denis-ev@users.noreply.github.com>

---------

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
2026-04-21 19:54:35 -07:00
2GT-Rich 87a6d9161a Add .claude/ to .gitignore
Prevents Claude Code session files (scheduled_tasks.lock, etc.) from
appearing as untracked changes.
2026-04-21 17:00:04 -07:00
Denis 30bf691596 feature(devices,topology,tz): devices bulk-add, duplicate safety, and firmware/timezone fixes
Squash-merge of PR #28 from @denis-ev. All three review blockers addressed: encryption key management documented, string truncation replaced with skip+warn validation, and undefined return on duplicate merge fixed with proper 500. Local test stack verified against cloned prod DB — migrations, new features, and backend all clean.
2026-04-21 16:52:04 -07:00
2GT-Rich 5562ac31dd Fixing typo in README.md. Thanks to @JustinClift for pointing it out! 2026-04-20 17:16:15 -07:00
2GT-Rich 3efdf4c76e Add AI attribution to README and SECURITY docs
Adds a 'Built with Claude AI' badge to the README header and an
'AI Assistance' section acknowledging that the project was designed
and built with Claude by Anthropic. Updates SECURITY.md with an
'AI-Assisted Security Infrastructure' section detailing the specific
security work that was AI-generated — linting rules, unit tests,
CI pipeline, and credential handling design.
2026-04-20 11:38:24 -07:00
2GT-RichandClaude Sonnet 4.6 9b303c8cbc Fix publish workflow: use 'file' instead of 'dockerfile' parameter
docker/build-push-action@v6 renamed the parameter from 'dockerfile' to
'file'. The backend succeeded by luck (default Dockerfile matched), but
nginx failed because the Dockerfile isn't in the root context directory.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-19 10:27:49 -07:00
2GT-RichandClaude Sonnet 4.6 25ae3854b4 Add GHCR publish workflow and pre-built image deployment
Adds a GitHub Actions workflow that builds and pushes backend and nginx
images to GitHub Container Registry on every merge to main and on
releases. Adds docker-compose.ghcr.yml for end users who want to deploy
without cloning the repo, and updates the README with Quick Deploy
instructions alongside the existing build-from-source guide.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-19 10:21:21 -07:00
2GT-Rich 5d96503832 Add Jest unit test infrastructure and initial test suite
Sets up Jest + ts-jest for the backend and adds 47 tests across 5
suites covering crypto utilities, OUI vendor lookup, auth middleware,
AlertService dispatch/cooldown logic, and DeviceCollector uptime parsing.
2026-04-19 10:21:14 -07:00
2GT-Rich 6cb2e6844c Merge pull request #6 from 2GT-Media-Group-LLC/dependabot/npm_and_yarn/frontend/tailwind-merge-3.5.0
Bump tailwind-merge from 2.6.1 to 3.5.0 in /frontend
2026-04-19 09:46:52 -07:00
2GT-Rich 9511927a05 Merge pull request #14 from 2GT-Media-Group-LLC/dependabot/npm_and_yarn/backend/dotenv-17.4.2
Bump dotenv from 16.6.1 to 17.4.2 in /backend
2026-04-19 09:46:50 -07:00
2GT-Rich f823a333cc Merge pull request #12 from 2GT-Media-Group-LLC/dependabot/npm_and_yarn/frontend/xyflow/react-12.10.2
Bump @xyflow/react from 12.10.1 to 12.10.2 in /frontend
2026-04-19 09:46:47 -07:00
2GT-Rich 2997e4d710 Merge pull request #8 from 2GT-Media-Group-LLC/dependabot/npm_and_yarn/frontend/postcss-8.5.10
Bump postcss from 8.5.8 to 8.5.10 in /frontend
2026-04-19 09:46:44 -07:00
2GT-Rich fe1f7a4001 Merge pull request #4 from 2GT-Media-Group-LLC/dependabot/github_actions/github/codeql-action-4
Bump github/codeql-action from 3 to 4
2026-04-19 09:46:42 -07:00
2GT-Rich 241204a40d Merge pull request #2 from 2GT-Media-Group-LLC/dependabot/github_actions/actions/setup-node-6
Bump actions/setup-node from 4 to 6
2026-04-19 09:46:31 -07:00
2GT-Rich 114c9683c3 Merge pull request #1 from 2GT-Media-Group-LLC/dependabot/github_actions/actions/checkout-6
Bump actions/checkout from 4 to 6
2026-04-19 09:46:28 -07:00
2GT-Rich bd85f988da Fix all backend lint errors and security vulnerabilities
Backend lint (4 errors fixed):
- auth.ts: suppress @typescript-eslint/no-namespace on Express global
  augmentation (legitimate TS pattern for extending Request type)
- clients.ts: remove unnecessary \. escape in regex character class
- devices.ts: remove unnecessary \- escape by moving hyphen to front [-:]
- PollerService.ts: add comment to empty catch block

Security audit (high/critical CVEs fixed):
- frontend: bump axios (critical SSRF), lodash (high injection),
  follow-redirects (moderate) via npm audit fix
- backend: bump nodemailer 6.x → 8.0.5 (fixes 4 SMTP injection CVEs)
2026-04-16 11:08:42 -07:00
2GT-RichandClaude Sonnet 4.6 484e529b88 Remove non-existent labels from dependabot.yml
Dependabot was logging warnings on every PR because the configured
labels (frontend, backend, dependencies, etc.) don't exist as GitHub
labels in this repository. Removing them stops the noise.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-16 10:38:28 -07:00
dependabot[bot] e2100a032e Bump postcss from 8.5.8 to 8.5.10 in /frontend
Bumps [postcss](https://github.com/postcss/postcss) from 8.5.8 to 8.5.10.
- [Release notes](https://github.com/postcss/postcss/releases)
- [Changelog](https://github.com/postcss/postcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/postcss/postcss/compare/8.5.8...8.5.10)

---
updated-dependencies:
- dependency-name: postcss
  dependency-version: 8.5.10
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-16 17:21:17 +00:00
2GT-RichandClaude Sonnet 4.6 c203011494 Fix all ESLint errors so CI passes on every branch
- Move nested components outside parent functions (GraphsTab, ClientDetailPage, NetworkServicesDHCPPage)
- Add eslint-disable comments for intentional setState-in-effect patterns (form sync in DNS, NTP, Wireless pages)
- Fix unescaped quote entities in JSX (SystemConfigTab, GlobalSearch, TopologyPage)
- Fix empty catch block in main.tsx
- Convert ternary-as-statement to if/else in RadiosTab
- Move Date.now() calls into useMemo in DashboardPage (react-hooks/purity)
- Fix DOM mutation in event handler in TerminalModal (react-hooks/immutability)
- Wrap ref assignment in useLayoutEffect in useSocket (react-hooks/refs)
- Update TypeScript devDependency version pin to match installed version

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-16 10:20:03 -07:00
dependabot[bot] c1eb857fd0 Bump dotenv from 16.6.1 to 17.4.2 in /backend
Bumps [dotenv](https://github.com/motdotla/dotenv) from 16.6.1 to 17.4.2.
- [Changelog](https://github.com/motdotla/dotenv/blob/master/CHANGELOG.md)
- [Commits](https://github.com/motdotla/dotenv/compare/v16.6.1...v17.4.2)

---
updated-dependencies:
- dependency-name: dotenv
  dependency-version: 17.4.2
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-16 16:57:24 +00:00
dependabot[bot] eafde78172 Bump @xyflow/react from 12.10.1 to 12.10.2 in /frontend
Bumps [@xyflow/react](https://github.com/xyflow/xyflow/tree/HEAD/packages/react) from 12.10.1 to 12.10.2.
- [Release notes](https://github.com/xyflow/xyflow/releases)
- [Changelog](https://github.com/xyflow/xyflow/blob/main/packages/react/CHANGELOG.md)
- [Commits](https://github.com/xyflow/xyflow/commits/@xyflow/react@12.10.2/packages/react)

---
updated-dependencies:
- dependency-name: "@xyflow/react"
  dependency-version: 12.10.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-16 16:57:15 +00:00
dependabot[bot] e4c4f0a440 Bump tailwind-merge from 2.6.1 to 3.5.0 in /frontend
Bumps [tailwind-merge](https://github.com/dcastil/tailwind-merge) from 2.6.1 to 3.5.0.
- [Release notes](https://github.com/dcastil/tailwind-merge/releases)
- [Commits](https://github.com/dcastil/tailwind-merge/compare/v2.6.1...v3.5.0)

---
updated-dependencies:
- dependency-name: tailwind-merge
  dependency-version: 3.5.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-16 16:56:52 +00:00
dependabot[bot] ed2d757bf4 Bump github/codeql-action from 3 to 4
Bumps [github/codeql-action](https://github.com/github/codeql-action) from 3 to 4.
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/github/codeql-action/compare/v3...v4)

---
updated-dependencies:
- dependency-name: github/codeql-action
  dependency-version: '4'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-16 16:56:46 +00:00
dependabot[bot] 3fc6a6f350 Bump actions/setup-node from 4 to 6
Bumps [actions/setup-node](https://github.com/actions/setup-node) from 4 to 6.
- [Release notes](https://github.com/actions/setup-node/releases)
- [Commits](https://github.com/actions/setup-node/compare/v4...v6)

---
updated-dependencies:
- dependency-name: actions/setup-node
  dependency-version: '6'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-16 16:56:42 +00:00
dependabot[bot] 24167879ab Bump actions/checkout from 4 to 6
Bumps [actions/checkout](https://github.com/actions/checkout) from 4 to 6.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v4...v6)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: '6'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-16 16:56:39 +00:00
2GT-Rich e43b80a9a2 Add security standards and CI infrastructure
- SECURITY.md with vulnerability disclosure policy and self-hosting guidance
- Dependabot config for weekly dependency updates (npm, Docker, Actions)
- ESLint v9 flat config for frontend and backend, with eslint-plugin-security
- GitHub Actions CI: lint, typecheck, build, and npm audit on every push/PR
- CodeQL workflow for automated security scanning (runs on push and weekly)
2026-04-16 09:55:53 -07:00
2GT-Rich ab9572122e missed point release update. 2026-04-15 09:33:03 -07:00
2GT-Rich 0a1ae97523 Fixed NTP & DNS server activation bug. 2026-04-15 08:48:18 -07:00
2GT-RichandClaude Sonnet 4.6 d992a8b5a6 Align Wireless Clients zebra striping with app-wide table-zebra pattern
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-14 08:43:03 -07:00
2GT-Rich 9ce62c954b updated version. 2026-04-14 08:40:24 -07:00
2GT-Rich ca414c528e Zebra table change to Wireless > Clients table 2026-04-14 08:35:32 -07:00
2GT-Rich 20fd3b9329 Clairified API connectivity in README.md 2026-04-14 08:30:01 -07:00
2GT-Rich a0faa35a59 Fixing typo in README.md 2026-04-14 08:26:39 -07:00
Rich Teslow e16e86a0cf Updated README 2026-04-13 18:24:45 -07:00
Rich Teslow 6b0fc9fdf1 Initial commit baby! 2026-04-13 18:15:41 -07:00
2GT_BK 10e6227931 Initial commit 2026-04-13 19:05:01 -06:00