Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
6 changes: 6 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,7 @@ jobs:
SIG="$(ls "$BUNDLE"/macos/*.app.tar.gz.sig)"

# Pull tauri's generated latest.json from the private release.
# threatcrush-disable-next-line secret-generic-credential
GH_TOKEN="$GITHUB_TOKEN" gh release download "$TAG" \
--repo "$GITHUB_REPOSITORY" --pattern latest.json --dir . --clobber

Expand All @@ -127,9 +128,14 @@ jobs:
'

# Create the public release (once) and upload all four assets.
# GH_TOKEN is assigned from an env var, not a literal — the three
# lines below are scanner false positives, not embedded tokens.
# threatcrush-disable-next-line secret-generic-credential
if ! GH_TOKEN="$RELEASES_TOKEN" gh release view "$TAG" --repo "$PUBLIC_REPO" >/dev/null 2>&1; then
# threatcrush-disable-next-line secret-generic-credential
GH_TOKEN="$RELEASES_TOKEN" gh release create "$TAG" --repo "$PUBLIC_REPO" \
--title "MyDevTools $TAG" --notes "MyDevTools desktop $TAG"
fi
# threatcrush-disable-next-line secret-generic-credential
GH_TOKEN="$RELEASES_TOKEN" gh release upload "$TAG" --repo "$PUBLIC_REPO" \
--clobber "$DMG" "$TARGZ" "$SIG" latest.json
37 changes: 37 additions & 0 deletions .threatcrushignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
# Paths ThreatCrush should not scan. Everything listed here is sample data,
# UI copy, or generated output — never a credential this repo actually holds.
# Real code stays scanned: for a one-off false positive in source, put a
# `threatcrush-disable-next-line <rule-id>` comment above the line instead of
# excluding the whole file.

# Locale catalogues (27 locales x 2 apps). These are the UI strings for the
# SSH-key, JWT, S3 and database tools: example PEM markers, sample connection
# strings and placeholder keys shown to the user. 41 findings, all copy.
apps/*/messages

# Blog posts: long-form tutorial prose with illustrative credentials in code
# fences ("mongodb://admin:secret@localhost", a demo master key).
apps/*/src/lib/blog/posts.ts

# Audit lab scripts: fake tokens injected into a throwaway browser session to
# measure egress. Nothing here authenticates against anything.
scripts/audit

# Generated / local-only trees. Not in a CI checkout, noisy in a local run.
.claude/worktrees
.open-next

# Test suites: fixture credentials ("hunter2000", a PEM header over the string
# "abc") that exist to exercise parsers and redaction. Keep real secrets out of
# fixtures — nothing scans them any more.
**/__tests__

# Upstream false positive: `manifest-typosquat` reads the `color` dependency
# (30M downloads/week, imported in 6 files here) as a one-edit lookalike of
# `colors`, because ThreatCrush's POPULAR_NPM list has `colors` but not
# `color`. The rule has no per-rule suppression and JSON takes no comments, so
# the whole manifest goes. Cost: this file loses the install/postinstall
# lifecycle-script check too — it has no such scripts today, and every other
# package.json in the repo is still scanned. Drop this line once `color` is
# allowlisted upstream.
apps/desktop-ui/package.json
15 changes: 15 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# Changelog

## 0.1.14

### Fixed

- **Markdown Preview & HTML**: exporting HTML now confirms with a "Saved <name>" toast instead of failing silently, so you can tell the download actually happened.

### Added

- **Markdown Preview & HTML**: name your export before downloading — a file name field next to the export button, with path separators and illegal characters stripped automatically (falls back to `export.html`).

### Internal

- CI: ThreatCrush security scan runs on every pull request, with results uploaded as SARIF to GitHub code scanning.
36 changes: 36 additions & 0 deletions apps/desktop-ui/messages/af.json
Original file line number Diff line number Diff line change
Expand Up @@ -195,6 +195,8 @@
"title": "Voorkoms",
"description": "Pas aan hoe die toepassing op jou toestel lyk.",
"themePreference": "Temavoorkeur",
"accentColor": "Aksentkleur",
"customColor": "Pasgemaakte kleur",
"themes": {
"light": "Lig",
"dark": "Donker",
Expand Down Expand Up @@ -257,6 +259,20 @@
"tr": "Türkçe",
"uk": "Українська"
}
},
"about": {
"title": "Oor",
"running": "Tans op MyDevTools",
"runningVersion": "Tans op MyDevTools v{version}",
"checkButton": "Kyk vir opdaterings",
"checking": "Kyk…",
"dialogTitle": "Opdaterings",
"dialogDescription": "MyDevTools dateer homself ter plaatse op — geen herinstallasie nie, en jou aflyn data word nooit geraak nie.",
"onVersion": "Jy is op weergawe {version}.",
"available": "Weergawe {version} is beskikbaar.",
"install": "Laai af en installeer",
"upToDate": "Jy is op datum.",
"checkError": "Kon nie vir opdaterings kyk nie. Is jy aanlyn?"
}
},
"Dashboard": {
Expand Down Expand Up @@ -709,6 +725,7 @@
"all": "Alles",
"total": "Totaal",
"allProjects": "Alle projekte",
"projectsHeading": "Projekte",
"export": "Uitvoer",
"kanban": "Kanban",
"list": "Lys",
Expand Down Expand Up @@ -966,6 +983,16 @@
"emptyHintMobile": "Tik die +-knoppie om jou eerste wagwoord by te voeg",
"emptyHintDesktop": "Jy het nog geen wagwoorde gestoor nie. Klik die \"Voeg wagwoord by\"-knoppie hierbo om te begin.",
"addPassword": "Voeg wagwoord by",
"title": "Wagwoorde",
"filters": {
"heading": "Kluisgesondheid",
"all": "Alle wagwoorde",
"weak": "Swak",
"reused": "Hergebruik",
"noUrl": "Geen URL",
"tagsHeading": "Etikette",
"allTags": "Alle etikette"
},
"searchPlaceholderMobile": "Soek in jou kluis...",
"searchPlaceholderDesktop": "Soek kluis...",
"importExport": "Invoer / uitvoer",
Expand Down Expand Up @@ -1161,6 +1188,8 @@
"emptyHint": "Skep 'n stel vir elke projek en omgewing (bv. produksie API-sleutels). Alles word in jou blaaier geënkripteer voor oplaai.",
"searchPlaceholder": "Soek projek, omgewing, etikette, notas…",
"tagFilterPlaceholder": "Filter volgens etiket",
"allProjects": "Alle projekte",
"projectsHeading": "Projekte",
"variableCount": "{count, plural, one {# veranderlike} other {# veranderlikes}}",
"updatedAgo": "Bygewerk {time}",
"copyDotEnv": "Kopieer .env",
Expand Down Expand Up @@ -3870,6 +3899,9 @@
"copyHtml": "Kopieer HTML",
"copyMarkdown": "Kopieer Markdown",
"exportHtml": "Voer HTML uit",
"fileNameLabel": "Lêernaam",
"fileNamePlaceholder": "export",
"exportSuccess": "{name} gestoor",
"copied": "Gekopieer",
"charCount": "{count, plural, one {# karakter} other {# karakters}}",
"emptyHint": "Begin Markdown tik om die lewendige voorskou en HTML-uitvoer te sien.",
Expand Down Expand Up @@ -5106,6 +5138,10 @@
"ToolPageHeader": {
"offline": "100% aflyn"
},
"ToolSidebar": {
"show": "Wys sybalk",
"hide": "Versteek sybalk"
},
"DesktopUpdate": {
"title": "MyDevTools word bygewerk",
"downloading": "Opdatering word afgelaai…",
Expand Down
36 changes: 36 additions & 0 deletions apps/desktop-ui/messages/ar.json
Original file line number Diff line number Diff line change
Expand Up @@ -195,6 +195,8 @@
"title": "المظهر",
"description": "خصّص مظهر التطبيق على جهازك.",
"themePreference": "تفضيل السمة",
"accentColor": "لون التمييز",
"customColor": "لون مخصص",
"themes": {
"light": "فاتح",
"dark": "داكن",
Expand Down Expand Up @@ -257,6 +259,20 @@
"tr": "Türkçe",
"uk": "Українська"
}
},
"about": {
"title": "حول",
"running": "تشغيل MyDevTools",
"runningVersion": "تشغيل MyDevTools الإصدار {version}",
"checkButton": "التحقق من التحديثات",
"checking": "جارٍ التحقق…",
"dialogTitle": "التحديثات",
"dialogDescription": "يقوم MyDevTools بتحديث نفسه في مكانه — بدون إعادة تثبيت، ولا يتم المساس ببياناتك دون اتصال أبدًا.",
"onVersion": "أنت تستخدم الإصدار {version}.",
"available": "الإصدار {version} متوفر.",
"install": "التنزيل والتثبيت",
"upToDate": "أنت على أحدث إصدار.",
"checkError": "تعذّر التحقق من التحديثات. هل أنت متصل بالإنترنت؟"
}
},
"Dashboard": {
Expand Down Expand Up @@ -709,6 +725,7 @@
"all": "الكل",
"total": "الإجمالي",
"allProjects": "كل المشاريع",
"projectsHeading": "المشاريع",
"export": "تصدير",
"kanban": "كانبان",
"list": "قائمة",
Expand Down Expand Up @@ -966,6 +983,16 @@
"emptyHintMobile": "اضغط زر + لإضافة أول كلمة مرور",
"emptyHintDesktop": "لم تخزّن كلمات مرور بعد. انقر \"إضافة كلمة مرور\" أعلاه للبدء.",
"addPassword": "إضافة كلمة مرور",
"title": "كلمات المرور",
"filters": {
"heading": "سلامة الخزنة",
"all": "كل كلمات المرور",
"weak": "ضعيفة",
"reused": "مُعاد استخدامها",
"noUrl": "بدون رابط",
"tagsHeading": "الوسوم",
"allTags": "كل الوسوم"
},
"searchPlaceholderMobile": "ابحث في خزنتك...",
"searchPlaceholderDesktop": "ابحث في الخزنة...",
"importExport": "استيراد / تصدير",
Expand Down Expand Up @@ -1161,6 +1188,8 @@
"emptyHint": "أنشئ مجموعة لكل مشروع وبيئة (مثل مفاتيح واجهة الإنتاج). يُشفّر كل شيء في متصفحك قبل الرفع.",
"searchPlaceholder": "ابحث في المشروع والبيئة والوسوم والملاحظات…",
"tagFilterPlaceholder": "تصفية حسب الوسم",
"allProjects": "كل المشاريع",
"projectsHeading": "المشاريع",
"variableCount": "{count, plural, one {# متغير} other {# متغيرات}}",
"updatedAgo": "عُدّل {time}",
"copyDotEnv": "نسخ .env",
Expand Down Expand Up @@ -3859,6 +3888,9 @@
"copyHtml": "نسخ HTML",
"copyMarkdown": "نسخ Markdown",
"exportHtml": "تصدير HTML",
"fileNameLabel": "اسم الملف",
"fileNamePlaceholder": "export",
"exportSuccess": "تم حفظ {name}",
"copied": "تم النسخ",
"charCount": "{count, plural, one {# حرف} other {# أحرف}}",
"emptyHint": "ابدأ بكتابة Markdown لرؤية المعاينة المباشرة وإخراج HTML.",
Expand Down Expand Up @@ -5095,6 +5127,10 @@
"ToolPageHeader": {
"offline": "100% دون اتصال"
},
"ToolSidebar": {
"show": "إظهار الشريط الجانبي",
"hide": "إخفاء الشريط الجانبي"
},
"DesktopUpdate": {
"title": "جارٍ تحديث MyDevTools",
"downloading": "جارٍ تنزيل التحديث…",
Expand Down
36 changes: 36 additions & 0 deletions apps/desktop-ui/messages/ca.json
Original file line number Diff line number Diff line change
Expand Up @@ -195,6 +195,8 @@
"title": "Aparença",
"description": "Personalitza com es veu l'aplicació al teu dispositiu.",
"themePreference": "Preferència de tema",
"accentColor": "Color d'accent",
"customColor": "Color personalitzat",
"themes": {
"light": "Clar",
"dark": "Fosc",
Expand Down Expand Up @@ -257,6 +259,20 @@
"tr": "Türkçe",
"uk": "Українська"
}
},
"about": {
"title": "Quant a",
"running": "S'està executant MyDevTools",
"runningVersion": "S'està executant MyDevTools v{version}",
"checkButton": "Comprova si hi ha actualitzacions",
"checking": "S'està comprovant…",
"dialogTitle": "Actualitzacions",
"dialogDescription": "MyDevTools s’actualitza sobre si mateix — sense reinstal·lar res, i les teves dades fora de línia no es toquen mai.",
"onVersion": "Tens la versió {version}.",
"available": "La versió {version} està disponible.",
"install": "Baixa i instal·la",
"upToDate": "Estàs al dia.",
"checkError": "No s'han pogut comprovar les actualitzacions. Estàs connectat?"
}
},
"Dashboard": {
Expand Down Expand Up @@ -709,6 +725,7 @@
"all": "Totes",
"total": "Total",
"allProjects": "Tots els projectes",
"projectsHeading": "Projectes",
"export": "Exporta",
"kanban": "Kanban",
"list": "Llista",
Expand Down Expand Up @@ -966,6 +983,16 @@
"emptyHintMobile": "Toca el botó + per afegir la primera contrasenya",
"emptyHintDesktop": "Encara no has desat cap contrasenya. Fes clic a «Afegeix contrasenya» a dalt per començar.",
"addPassword": "Afegeix contrasenya",
"title": "Contrasenyes",
"filters": {
"heading": "Salut de la caixa forta",
"all": "Totes les contrasenyes",
"weak": "Febles",
"reused": "Reutilitzades",
"noUrl": "Sense URL",
"tagsHeading": "Etiquetes",
"allTags": "Totes les etiquetes"
},
"searchPlaceholderMobile": "Cerca al coffre...",
"searchPlaceholderDesktop": "Cerca al coffre...",
"importExport": "Importa / exporta",
Expand Down Expand Up @@ -1161,6 +1188,8 @@
"emptyHint": "Crea un conjunt per a cada projecte i entorn (p. ex. claus d'API de producció). Tot es xifra al navegador abans de pujar-lo.",
"searchPlaceholder": "Cerca projecte, entorn, etiquetes, notes…",
"tagFilterPlaceholder": "Filtra per etiqueta",
"allProjects": "Tots els projectes",
"projectsHeading": "Projectes",
"variableCount": "{count, plural, one {# variable} other {# variables}}",
"updatedAgo": "Actualitzat {time}",
"copyDotEnv": "Copia .env",
Expand Down Expand Up @@ -3859,6 +3888,9 @@
"copyHtml": "Copia HTML",
"copyMarkdown": "Copia Markdown",
"exportHtml": "Exporta HTML",
"fileNameLabel": "Nom del fitxer",
"fileNamePlaceholder": "export",
"exportSuccess": "S'ha desat {name}",
"copied": "Copiat",
"charCount": "{count, plural, one {# caràcter} other {# caràcters}}",
"emptyHint": "Comenceu a escriure Markdown per veure la previsualització i la sortida HTML.",
Expand Down Expand Up @@ -5095,6 +5127,10 @@
"ToolPageHeader": {
"offline": "100% fora de línia"
},
"ToolSidebar": {
"show": "Mostra la barra lateral",
"hide": "Amaga la barra lateral"
},
"DesktopUpdate": {
"title": "S'està actualitzant MyDevTools",
"downloading": "Baixant l'actualització…",
Expand Down
Loading
Loading