Implements Phases 1-8 of the TFTSR implementation plan. Rust backend (Tauri 2.x, src-tauri/): - Multi-provider AI: OpenAI-compatible, Anthropic, Gemini, Mistral, Ollama - PII detection engine: 11 regex patterns with overlap resolution - SQLCipher AES-256 encrypted database with 10 versioned migrations - 28 Tauri IPC commands for triage, analysis, document, and system ops - Ollama: hardware probe, model recommendations, pull/delete with events - RCA and blameless post-mortem Markdown document generators - PDF export via printpdf - Audit log: SHA-256 hash of every external data send - Integration stubs for Confluence, ServiceNow, Azure DevOps (v0.2) Frontend (React 18 + TypeScript + Vite, src/): - 9 pages: full triage workflow NewIssue→LogUpload→Triage→Resolution→RCA→Postmortem→History+Settings - 7 components: ChatWindow, TriageProgress, PiiDiffViewer, DocEditor, HardwareReport, ModelSelector, UI primitives - 3 Zustand stores: session, settings (persisted), history - Type-safe tauriCommands.ts matching Rust backend types exactly - 8 IT domain system prompts (Linux, Windows, Network, K8s, DB, Virt, HW, Obs) DevOps: - .woodpecker/test.yml: rustfmt, clippy, cargo test, tsc, vitest on every push - .woodpecker/release.yml: linux/amd64 + linux/arm64 builds, Gogs release upload Verified: - cargo check: zero errors - tsc --noEmit: zero errors - vitest run: 13/13 unit tests passing Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
41 lines
1.7 KiB
JavaScript
41 lines
1.7 KiB
JavaScript
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.pathMatch = pathMatch;
|
|
/**
|
|
* Answers "does the request-path path-match a given cookie-path?" as per {@link https://www.rfc-editor.org/rfc/rfc6265.html#section-5.1.4 | RFC6265 Section 5.1.4}.
|
|
* This is essentially a prefix-match where cookiePath is a prefix of reqPath.
|
|
*
|
|
* @remarks
|
|
* A request-path path-matches a given cookie-path if at least one of
|
|
* the following conditions holds:
|
|
*
|
|
* - The cookie-path and the request-path are identical.
|
|
* - The cookie-path is a prefix of the request-path, and the last character of the cookie-path is %x2F ("/").
|
|
* - The cookie-path is a prefix of the request-path, and the first character of the request-path that is not included in the cookie-path is a %x2F ("/") character.
|
|
*
|
|
* @param reqPath - the path of the request
|
|
* @param cookiePath - the path of the cookie
|
|
* @public
|
|
*/
|
|
function pathMatch(reqPath, cookiePath) {
|
|
// "o The cookie-path and the request-path are identical."
|
|
if (cookiePath === reqPath) {
|
|
return true;
|
|
}
|
|
const idx = reqPath.indexOf(cookiePath);
|
|
if (idx === 0) {
|
|
// "o The cookie-path is a prefix of the request-path, and the last
|
|
// character of the cookie-path is %x2F ("/")."
|
|
if (cookiePath[cookiePath.length - 1] === '/') {
|
|
return true;
|
|
}
|
|
// " o The cookie-path is a prefix of the request-path, and the first
|
|
// character of the request-path that is not included in the cookie- path
|
|
// is a %x2F ("/") character."
|
|
if (reqPath.startsWith(cookiePath) && reqPath[cookiePath.length] === '/') {
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|