Skip to content
Open

Dev #111

Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
a7654ca
Status Panel website
robotizeit May 19, 2026
93de2b2
npm vault read path
robotizeit May 20, 2026
1aa6357
cargo fmt
robotizeit May 20, 2026
768355d
schema_version now accepts both numeric 1 and string 1 for Vault NPM
robotizeit May 21, 2026
0f96a8d
replace curl command probing with reqwest
robotizeit May 21, 2026
b8795c5
better container resolving
robotizeit May 21, 2026
220e35c
smtp pipe works
robotizeit May 22, 2026
8675bae
real website deployment example
robotizeit May 25, 2026
dfc4d73
vendor(stacker): include stacker crates in repo to make CI PR-safe
robotizeit May 29, 2026
9c9fca8
clippy fixes
robotizeit May 30, 2026
fb2b250
copy stacker source code
robotizeit May 30, 2026
97f7f28
include only stacker/crates
robotizeit Jun 1, 2026
6c68af7
show ports in status
robotizeit Jun 1, 2026
d3769ad
fmt all
robotizeit Jun 1, 2026
9b44aed
release: bump version to v0.2.0
robotizeit Jun 1, 2026
ea3c4ad
feat(security): autonomous agent token recovery via Vault self-issue
robotizeit Jun 3, 2026
e04494f
fmt all
robotizeit Jun 4, 2026
db57849
vault mTLS: add mTLS client cert support to Status Panel agent
robotizeit Jun 26, 2026
699bd4d
Merge pull request #106 from trydirect/mTLS
vsilent Jun 26, 2026
f9fa335
mTLS support, Vault connection
robotizeit Jun 27, 2026
07bd121
Merge pull request #107 from trydirect/mTLS
vsilent Jun 27, 2026
70d71fc
Update DEFAULT_VAULT_URL to :8443 for mTLS
robotizeit Jun 28, 2026
0e8748a
Merge pull request #108 from trydirect/mTLS
vsilent Jun 28, 2026
027881a
Merge branch 'master' into dev
vsilent Jul 1, 2026
748804a
Potential fix for pull request finding
vsilent Jul 1, 2026
33fd0ff
Potential fix for pull request finding
vsilent Jul 1, 2026
9bf2df2
Remove deployment lock files and add .gitignore patterns
Copilot Jul 1, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,10 @@ COMMAND_TIMEOUT_SECS=300
STATUS_PANEL_USERNAME=admin
STATUS_PANEL_PASSWORD=admin

# HTTP bind address. Defaults to 127.0.0.1 (loopback) for bare-metal safety.
# In containers with port mapping, must be 0.0.0.0 to be reachable from the host.
STATUS_PANEL_BIND=0.0.0.0

# Backup signer / verification
DEPLOYMENT_HASH=replace-with-secret
TRYDIRECT_IP=127.0.0.1
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
{
"version": 1,
"selector": {
"mode": "remote",
"selector_kind": "app",
"selector": "status-panel-web",
"deployment_hash": "deployment_a631cf66-a224-440b-9871-12b63548671c",
"container": null
},
"protocols_requested": [
"html_forms"
],
"capture_samples": true,
"cached_at": "2026-05-22T07:55:49.388248+00:00",
"report": {
"type": "probe_endpoints",
"deployment_hash": "deployment_a631cf66-a224-440b-9871-12b63548671c",
"app_code": "status-panel-web",
"protocols_detected": [
"html_forms"
],
"protocols_requested": [
"html_forms"
],
"containers": [],
"endpoints": [],
"resources": [],
"forms": [
{
"container": "project-status-panel-web-1",
"id": "form_contact",
"action": "",
"method": "POST",
"fields": [
"name",
"email",
"subject",
"message"
]
}
],
"probe_attempts": [
{
"scope": "remote_app",
"selector": "status-panel-web",
"container": null,
"protocols": [
"html_forms"
],
"outcome": "detected"
}
],
"target_kind": "html_form",
"probed_at": "2026-05-22T07:55:48Z"
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
{
"version": 1,
"selector": {
"mode": "remote",
"selector_kind": "app",
"selector": "status-panel-web",
"deployment_hash": "deployment_a631cf66-a224-440b-9871-12b63548671c",
"container": null
},
"protocols_requested": [
"html_forms",
"openapi",
"rest"
],
"capture_samples": true,
"cached_at": "2026-05-22T07:55:51.452961+00:00",
"report": {
"type": "probe_endpoints",
"deployment_hash": "deployment_a631cf66-a224-440b-9871-12b63548671c",
"app_code": "status-panel-web",
"protocols_detected": [
"html_forms"
],
"protocols_requested": [
"html_forms",
"openapi",
"rest"
],
"containers": [],
"endpoints": [],
"resources": [],
"forms": [
{
"container": "project-status-panel-web-1",
"id": "form_contact",
"action": "",
"method": "POST",
"fields": [
"name",
"email",
"subject",
"message"
]
}
],
"probe_attempts": [
{
"scope": "remote_app",
"selector": "status-panel-web",
"container": null,
"protocols": [
"html_forms",
"openapi",
"rest"
],
"outcome": "detected"
}
],
"target_kind": "html_form",
"probed_at": "2026-05-22T07:55:50Z"
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
{
"version": 1,
"selector": {
"mode": "remote",
"selector_kind": "app",
"selector": "status-panel-web",
"deployment_hash": "deployment_a631cf66-a224-440b-9871-12b63548671c",
"container": null
},
"protocols_requested": [
"html_forms",
"openapi",
"rest"
],
"capture_samples": true,
"cached_at": "2026-05-22T07:55:51.452961+00:00",
"report": {
"type": "probe_endpoints",
"deployment_hash": "deployment_a631cf66-a224-440b-9871-12b63548671c",
"app_code": "status-panel-web",
"protocols_detected": [
"html_forms"
],
"protocols_requested": [
"html_forms",
"openapi",
"rest"
],
"containers": [],
"endpoints": [],
"resources": [],
"forms": [
{
"container": "project-status-panel-web-1",
"id": "form_contact",
"action": "",
"method": "POST",
"fields": [
"name",
"email",
"subject",
"message"
]
}
],
"probe_attempts": [
{
"scope": "remote_app",
"selector": "status-panel-web",
"container": null,
"protocols": [
"html_forms",
"openapi",
"rest"
],
"outcome": "detected"
}
],
"target_kind": "html_form",
"probed_at": "2026-05-22T07:55:50Z"
}
}
2 changes: 1 addition & 1 deletion Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "status-panel"
version = "0.1.9"
version = "0.2.0"
edition = "2021"

[features]
Expand Down
21 changes: 21 additions & 0 deletions development.md.bak
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
## Docker buildx quick reference

Use this to publish the same multi-platform image variants that CI builds for the
`dev` branch:

```bash
docker buildx build \
--platform linux/amd64,linux/arm64 \
--build-context stacker=../stacker \
-f Dockerfile.prod \
-t trydirect/status:unstable \
-t trydirect/status:latest \
--push \
.
```

This requires a sibling checkout at `../stacker` because `Cargo.toml` includes
local path dependencies from that repository.

If you only want to validate the multi-platform build locally without pushing,
replace `--push` with `--output=type=oci,dest=./status-multiarch.tar`.
6 changes: 3 additions & 3 deletions docker-compose-dev.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,14 @@ version: '2.2'

services:
statuspanel:
image: status
image: trydirect/status:dev
container_name: statuspanel
ports:
- "5000:5000"
volumes:
- .:/app
#- .:/app
- /var/run/docker.sock:/var/run/docker.sock
- /data/encrypted:/data/encrypted
#- /data/encrypted:/data/encrypted
# Mount docker CLI from host for deploy_app/remove_app commands
- /usr/bin/docker:/usr/bin/docker:ro
- /usr/libexec/docker/cli-plugins:/usr/libexec/docker/cli-plugins:ro
Expand Down
2 changes: 2 additions & 0 deletions docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@ services:
environment:
- NGINX_CONTAINER=nginx
- COMPOSE_AGENT_ENABLED=true
# Container port mapping requires binding all interfaces.
- STATUS_PANEL_BIND=0.0.0.0
# Default: serve with UI
command: ["serve", "--port", "5000", "--with-ui"]

Expand Down
4 changes: 4 additions & 0 deletions src/security/audit_log.rs
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,10 @@ impl AuditLogger {
info!(target: "audit", event = "token_rotated", agent_id, request_id = request_id.unwrap_or(""));
}

pub fn token_self_issued(&self, deployment_hash: &str, reason: &str) {
warn!(target: "audit", event = "token_self_issued", deployment_hash, reason);
}

pub fn internal_error(
&self,
agent_id: Option<&str>,
Expand Down
Loading