Commit Graph

46 Commits

Author SHA1 Message Date
Zakaria 2b4d4b146d feat(api): add Route 53 hosted zones and DNS records to the cloud explorer
CI / checks (pull_request) Successful in 25m40s
2026-10-24 13:07:57 -04:00
Zakaria ac58bfc98b Merge pull request 'test(api): stop tests leaking module mocks and env into later files' (#14) from fix/ci-test-isolation into main
CI / checks (push) Successful in 25m29s
Reviewed-on: #14
2026-10-24 15:36:52 +00:00
Zakaria 51a0a60a73 test(api): stop tests leaking module mocks and env into later files
CI / checks (pull_request) Successful in 25m28s
CI failed on a different set of tests each run because bun runs every test
file in one process and the file order differs between machines:

- the secretsmanager route test replaced the whole ../aws module, so files
  loaded after it lost awsClients, lambda and defaultAccountId (API Gateway,
  SES)
- the Lightsail tests restored FLOCI_ENDPOINT by assigning undefined, which
  stores the string "undefined" (runtime diagnostics)
- the auth tests used full-strength argon2 for ~30 sign-ins and timed out on
  slower runners; the OIDC cleanup test cached a discovery document without
  userinfo_endpoint for the shared issuer

Checked with 20 runs under bun test --randomize.
2026-10-24 11:30:46 -04:00
Zakaria 238bb1a3d5 feat(frontend): hosted sign-in and OAuth settings for Cognito app clients
CI / checks (pull_request) Successful in 26m7s
2026-10-24 11:17:42 -04:00
Zakaria d411f632c9 feat(api): show a user pool's Lambda triggers 2026-10-24 02:07:18 -04:00
Zakaria ce444f0851 feat(frontend): newest emails first, mailbox above the SES tools
CI / checks (pull_request) Failing after 12m24s
2026-10-24 02:01:14 -04:00
Zakaria d457c08b12 feat(api): show the verification code in the SES mailbox
CI / checks (pull_request) Failing after 12m24s
2026-10-24 01:23:56 -04:00
Zakaria bafe799d00 feat(frontend): manage Cognito users and groups, and test sign-in
CI / checks (pull_request) Failing after 12m24s
The Cognito panel gains a test sign-in that shows the decoded ID and
access token claims, a groups section, and a per-user panel to enable or
disable, confirm, sign out everywhere, reset or set a password and change
group membership.

Delete confirmations (row and bulk) now say what else goes, driven by
the schema's deleteImpact, and the inspector follows list refreshes
instead of the click-time snapshot.
2026-10-23 17:54:15 -04:00
Zakaria 43f4cae9b5 fix(api): count Cognito pool users directly
The runtime leaves EstimatedNumberOfUsers at 0, so the pool metadata now
carries a userCount from ListUsers (capped at 1000), which the delete
confirmation reads.
2026-10-23 17:54:15 -04:00
Zakaria b4c2cadf5c feat(api): Cognito user actions, groups and test sign-in
Adds enable, disable, confirm, sign-out, password reset and set-password
for one user; user group membership; group list, create and delete; and a
test sign-in that returns decoded token claims. A refused test sign-in is
an outcome rather than a 401, which would end the console session.

Also adds a generic GET for one flat item and a schema deleteImpact so
delete confirmations can say what else goes with a resource.
2026-10-23 17:38:26 -04:00
Zakaria 8803498498 Merge pull request 'feat(api): add Cognito user pools to the cloud explorer' (#8) from feat/cognito-user-pools into main
CI / checks (push) Failing after 12m33s
Reviewed-on: #8
2026-10-23 18:41:30 +00:00
Zakaria fe70e88bcc feat(frontend): manage Cognito app clients and users
Adds a users panel under the selected user pool: copyable app client ids, a create-user form that follows the pool's sign-in method, and the user list with delete. Maps the userpools icon key to the Cognito artwork.
2026-10-23 12:12:40 -04:00
Zakaria 4156afccfe feat(api): add Cognito user pools to the cloud explorer
Adds a userpools catalog entry, schema and AwsUserPoolsAdapter, verified
against Floci core:

- list/get/create/delete user pools; create can set email or username
  sign-in, a relaxed password policy for local test users, and a public
  app client (on by default) whose id is surfaced in the pool metadata
- users as the pool's child items: list (paged), get, create and delete;
  passwords are set permanent by default so users can sign in at once
- map Cognito's HTTP-400 error names (UserNotFoundException,
  UsernameExistsException, AliasExistsException, InvalidPasswordException)
- link Floci's cognito-idp service to the new page on the diagnostics page
2026-10-23 12:12:40 -04:00
Zakaria 8b166d86d4 feat(frontend): collapse responding services on the diagnostics page
CI / checks (pull_request) Failing after 12m12s
Failing console services stay visible; responding ones are behind a toggle.
2026-10-23 12:00:10 -04:00
Zakaria f956d977ca fix(frontend): fit the top bar on phone-width screens
Below 640px the search shrinks, the account switcher shows only its icon, and the connection indicator collapses to its status dot with the label kept for screen readers.
2026-10-23 12:00:10 -04:00
Zakaria 9f38313e59 fix(frontend): share one theme setting between the login page and console
The login page stored its theme under thecloud-theme while the console read floci-theme, so a choice made at sign-in was lost. Both now use floci-theme (falling back to the old key once), and useTheme tolerates unavailable storage.
2026-10-23 12:00:10 -04:00
Zakaria 953ba951db feat: add a runtime diagnostics page
CI / checks (pull_request) Failing after 13m18s
Adds GET /api/clouds/:cloud/diagnostics and a Diagnostics page in the
General nav. The report combines, in one call:

- runtime reachability, latency, version and edition from /_floci/health
- every service the runtime emulates, with the console pages backed by it
- per-console-service probes (the existing status check)
- EC2 instance containers from /_floci/diagnose
- console uptime, sign-in mode and active session count

Each source is optional, so a down runtime still yields a partial report.
2026-10-23 11:29:48 -04:00
Zakaria b171f745db test: bring stale tests and lint in line with the current UI
- CodeDeploy: query the redesigned form's labels.
- CloudFormation: expect the parameters and capabilities fields the form
  now submits.
- ALB listeners: advance the five-second minimum create state before
  deleting, since row actions are disabled while it is pending.
- Lightsail: cast the fetch mock as a whole so it type-checks.
- TargetGroupPanel: depend on the stable refetch function to satisfy
  react-hooks/exhaustive-deps.
2026-10-23 11:12:51 -04:00
Zakaria c5a2fc9105 fix(api): block open redirects, add health check and body limits, run as non-root
- safeReturnTo resolves the target against a placeholder origin and rejects
  backslashes and control characters, so `/\evil.example` and similar
  payloads can no longer redirect off-site after sign-in.
- Add a real unauthenticated /api/health and answer unknown /api/* paths
  with a JSON 404 instead of the SPA shell.
- Limit request bodies: 16 KB for /api/auth/* (read before a session
  exists), 128 MB for resource create/update and uploads, 10 MB elsewhere.
- Run the production image as an unprivileged user and add a Docker
  HEALTHCHECK against /api/health.
2026-10-23 10:43:41 -04:00
Zakaria 75432a4bc7 feat(s3): add a copy button for the bucket name 2026-10-23 10:12:41 -04:00
Zakaria c519d41799 feat(frontend): focus the console on AWS
Redirects the Azure and GCP console and explorer routes to AWS and removes the cloud selector from Console Home.
2026-10-23 10:12:41 -04:00
Zakaria ba90eff5db feat(frontend): add a terminal theme and three-way theme switcher
Adds the cyber theme to the console and login page, replaces the dark/light toggle with a theme switcher, and moves the login page script to /login.js so it is served under the existing CSP.
2026-10-23 10:12:41 -04:00
Zakaria 2db02ed369 fix(api): harden sign-in throttling, OIDC authorization and auth state
- Key login throttling on the real peer address; read X-Forwarded-For only
  from FLOCI_UI_TRUSTED_PROXIES (right-most untrusted hop). Add a per-IP
  limit across usernames so one attacker can no longer lock out the admin.
- Require an OIDC allow-list (FLOCI_UI_OIDC_ALLOWED_GROUPS / _EMAILS, or
  FLOCI_UI_OIDC_ALLOW_ALL_USERS=true); fall back to UserInfo for groups
  when the ID token omits them. Redirect IdP and token errors to /login
  instead of returning 500s; cache discovery and JWKS.
- Sweep expired sessions, attempts and pending OIDC requests every 60s,
  cap each map, and throttle OIDC sign-in starts per IP.
- Fix the .ts import extension that broke the API type-check.
- Add auth.test.ts and document the new settings.
2026-10-23 09:44:14 -04:00
Zakaria a231ee8f17 polishing UI 2026-10-17 00:55:21 -04:00
Zakaria 924e354788 feat: added a login page with Authentik authentication 2026-10-16 19:35:27 -04:00
Zakaria 668911ed6e small feat: svg animation for servers, codebuild, codePipleline etc... 2026-10-15 10:25:16 -04:00
Zakaria ca1e845cb6 feat: Lightsail + svg animation 2026-10-11 14:19:00 -04:00
Zakaria 0036ef7e51 bug fixes: subnets listing, icons resizing and some shenanigans 2026-10-07 10:54:58 -04:00
Zakaria 71c2d276b6 adding Alpine to the quick start instances list 2026-10-06 12:06:56 -04:00
Zakaria c86b4554c0 feat: ElastiCache 2026-10-05 16:03:05 -04:00
Zakaria c0d3e5f402 feat: MSK, MSK CONNECT and SES 2026-10-05 11:06:57 -04:00
Zakaria 2d8ff50a99 feat: Fargate 2026-10-02 09:53:45 -04:00
Zakaria 7f08f5b668 Layout polish - rename: The Cloud 2026-10-01 15:06:55 -04:00
Zakaria 7f0d707578 CI/CD - CodeBuild + CodeDeploy + CodePipeline 2026-10-01 09:18:04 -04:00
Zakaria aa02cdb7f6 RDS port issue fixed 2026-09-30 18:40:00 -04:00
Zakaria 7764ea0dc1 feat: Cloudformation + RDS 2026-09-30 17:43:42 -04:00
Zakaria 548a15d7ec feat: Step Function + small fixes + more services + color matching the services 2026-09-28 18:38:22 -04:00
Zakaria 0d613ae256 feat: Step Function + hardning 2026-09-27 23:26:00 -04:00
Zakaria ce8400757c adding a real test Method for API gateway 2026-09-27 20:14:59 -04:00
Zakaria e8843a462b feat: CORS enable button... small fixes 2026-09-27 15:40:15 -04:00
Zakaria b474e823ce feat: CORS enable button...ish still now understanding this 2026-09-27 14:46:04 -04:00
Zakaria 8470b8d17a feat: fully functioning ALB 2026-09-26 16:14:24 -04:00
Zakaria 093afb9b2b feat: EC2 UI polished + storage persisting 2026-09-25 18:18:33 -04:00
Zakaria 1b129e9dcf feat: add SQS + EventBridge 2026-09-24 22:34:04 -04:00
Zakaria 9bbe80b5f2 feat: add API Gateway route testing and discovery 2026-09-24 08:56:22 -04:00
Zakaria 7e49be27f1 first commit 2026-09-22 16:13:21 -04:00