WIP: feat(station): a print station authenticates as its own identity (printing_station, station enrollment code) #37
Draft
james.maes
wants to merge 1 commits from
feat/station-identity-20261110 into feat/multi-node-realtime-20261110
pull from: feat/station-identity-20261110
merge into: QRun-IO:feat/multi-node-realtime-20261110
QRun-IO:main
QRun-IO:fix/delete-refusal-under-lock
QRun-IO:feat/delete-stations-printers-20261111
QRun-IO:fix/print-job-created-date-time
QRun-IO:feat/multi-node-realtime-20261110
QRun-IO:wip/native-auth-pins-20261107
QRun-IO:docs/release-1.1.2-20261106
QRun-IO:ci/gitea-registry-rc22-20261106
QRun-IO:docs/release-1.1.1-20261106
QRun-IO:fix/realtime-header-case-20261106
QRun-IO:docs/release-1.1.0-20261105
QRun-IO:feat/remove-printers-devices-main-20261105
QRun-IO:feat/printer-approval-20261105
QRun-IO:feat/remove-printers-devices-20261105
QRun-IO:docs/printing-release-closeout-20261104
QRun-IO:release/printing-1.0.0-20261103
QRun-IO:release/printing-cohort-20261101
QRun-IO:dependabot/maven/org.codehaus.mojo-exec-maven-plugin-3.6.4
QRun-IO:dependabot/maven/org.apache.maven.plugins-maven-surefire-plugin-3.6.1
QRun-IO:dependabot/maven/org.apache.maven.plugins-maven-checkstyle-plugin-3.6.0
QRun-IO:migration/cutoff-cf06815f30e1-b9a717
QRun-IO:migration/cutoff-7bedb1016fa9-a854c1
QRun-IO:migration/cutoff-5f74c0c69a55-38f8f8
QRun-IO:dependabot/maven/com.puppycrawl.tools-checkstyle-14.3.0
QRun-IO:dependabot/maven/com.kingsrook-qbit-build-parent-2.1.2
QRun-IO:dependabot/github_actions/github/codeql-action/upload-sarif-4.39.1
QRun-IO:dependabot/github_actions/github/codeql-action/init-4.39.1
QRun-IO:dependabot/github_actions/astral-sh/setup-uv-10.3.2
QRun-IO:dependabot/github_actions/KofTwentyTwo/standards/dot-github/workflows/pr.yml-1.2.1
QRun-IO:dependabot/github_actions/actions/setup-java-6.1.0
QRun-IO:chore/printing-quality-integration-20261101
QRun-IO:feat/small-label-tests-20261101
QRun-IO:archive/qrun-github-cutover-20261101/e08b3ef9c817/dependabot/github_actions/github/codeql-action/init-4.39.1
QRun-IO:migration/cutoff-e08b3ef9c817-b21637
QRun-IO:archive/qrun-github-cutover-20261101/de286e7eb67b/dependabot/github_actions/github/codeql-action/upload-sarif-4.39.1
QRun-IO:migration/cutoff-de286e7eb67b-06d241
QRun-IO:archive/qrun-github-cutover-20261101/cc4dc3dc2700/dependabot/github_actions/astral-sh/setup-uv-10.3.2
QRun-IO:migration/cutoff-cc4dc3dc2700-4e3528
QRun-IO:archive/qrun-github-cutover-20261101/2cec82bf4aa9/dependabot/github_actions/actions/setup-java-6.1.0
QRun-IO:migration/cutoff-2cec82bf4aa9-68d7f8
QRun-IO:archive/qrun-github-cutover-20261101/2a2eedc89f64/dependabot/github_actions/KofTwentyTwo/standards/dot-github/workflows/pr.yml-1.2.1
QRun-IO:migration/cutoff-2a2eedc89f64-2894f0
QRun-IO:archive/qrun-github-cutover-20261101/088692e3aefa/main
QRun-IO:archive/qrun-github-cutover-20261101/7bedb1016fa9/dependabot/maven/org.apache.maven.plugins-maven-surefire-plugin-3.6.1
QRun-IO:archive/qrun-github-cutover-20261101/5f74c0c69a55/dependabot/maven/org.apache.maven.plugins-maven-checkstyle-plugin-3.6.0
QRun-IO:archive/qrun-github-cutover-20261101/1db6a1163d5e/dependabot/github_actions/actions/setup-java-6.1.0
QRun-IO:archive/qrun-github-cutover-20261101/c8f8e016cf29/dependabot/maven/com.kingsrook-qbit-build-parent-2.1.2
QRun-IO:migration/cutoff-c8f8e016cf29-8a552b
QRun-IO:archive/qrun-github-cutover-20261101/cf06815f30e1/dependabot/maven/org.codehaus.mojo-exec-maven-plugin-3.6.4
QRun-IO:archive/qrun-github-cutover-20261101/985acc06d7e9/dependabot/maven/com.puppycrawl.tools-checkstyle-14.3.0
QRun-IO:migration/cutoff-985acc06d7e9-7f35cb
QRun-IO:archive/qrun-github-cutover-20261101/1a0964ef233d/main
QRun-IO:chore/server-source-standards-20261101
QRun-IO:archive/qrun-github-cutover-20261101/02b922aa11fa/main
QRun-IO:archive/qrun-github-cutover-20261101/4f962f7fbfd8/dependabot/maven/com.kingsrook-qbit-build-parent-2.1.2
QRun-IO:archive/qrun-github-cutover-20261101/8460edb60d58/dependabot/maven/org.apache.maven.plugins-maven-surefire-plugin-3.6.1
QRun-IO:archive/qrun-github-cutover-20261101/05c83067e182/dependabot/maven/com.puppycrawl.tools-checkstyle-14.3.0
QRun-IO:archive/qrun-github-cutover-20261101/b1b8f3b065b8/dependabot/maven/org.apache.maven.plugins-maven-checkstyle-plugin-3.6.0
QRun-IO:archive/qrun-github-cutover-20261101/e0ff82392398/dependabot/maven/org.codehaus.mojo-exec-maven-plugin-3.6.4
QRun-IO:feat/print-anything
QRun-IO:feat/record-printing
QRun-IO:archive/qrun-github-cutover-20261101/9128133f5cdd/dependabot/github_actions/actions/setup-java-6.1.0
QRun-IO:docs/installed-native-020-20261031
QRun-IO:dependabot/github_actions/KofTwentyTwo/standards/dot-github/workflows/codeql.yml-1.2.1
QRun-IO:dependabot/github_actions/actions/download-artifact-8.0.2
1
Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
254f6fd918
|
feat(station): a print station authenticates as its own identity
A print station is a computer beside a printer with nobody signed in. Until now it ran under the session of the person who paired it and renewed that session every five minutes. A host that ends sessions after user inactivity would sign it out 15 minutes after every sign-in, and a named person's session running unattended is hard to defend. - printing_station: a permission that alone opens nothing. On the device routes, after the request proves the one device bound to the station's identity, the station may heartbeat, report printers, claim, download and acknowledge its own jobs and answer control commands. The proof lives in the request's QContext, tied to that session object, never on the session. Every row read must belong to that device. Processes and the administrative, operator and generic table routes stay closed. - printingEnrollStation creates a one-use, 15-minute station code. POST /qqq/v1/qbit/printing/stations/enroll redeems it with no session and answers once with the device proof and the identity's credential. A station code cannot pair a person and a person's code cannot create a station. - PrintingStationIdentities (issue, revoke) is the host's issuer, set with PrintingService.withStationIdentities. Without it there is no station enrollment (503). An identity issued for an enrollment that then fails is revoked. Revoking or removing a station's device revokes its identity; a provider failure answers 502 and the action can be repeated. - The realtime upgrade accepts exactly one credential: a session cookie, or, for a station only, a bearer token, verified again on every frame. - Two additive nullable columns: printing_enrollment.station_name and printing_device.station_name. Extension 2.5.0; wire v1 and the subprotocol are unchanged, and existing pairings behave as before. The claim and acknowledgement rules of realtime printing on several nodes are untouched. docs/STATION-IDENTITY.md describes the flow, the guarantees, the host contract, what the host, the identity QBit, the provider and the Windows client still need, the release order and the first enrollment on dev. Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com> |