mirror of
https://github.com/Quad4-Software/MeshChatX.git
synced 2026-08-18 09:49:09 -04:00
chore(config): remove git.quad4.io references from codebase
This commit is contained in:
parent
8a29c7fc14
commit
6327e16c1b
10 changed files with 85 additions and 27 deletions
|
|
@ -513,7 +513,7 @@ app.whenReady().then(async () => {
|
|||
"style-src 'self' 'unsafe-inline'",
|
||||
"img-src 'self' data: blob: https://*.tile.openstreetmap.org https://tile.openstreetmap.org https://*.cartocdn.com https://tiles.openfreemap.org https://*.openfreemap.org",
|
||||
"font-src 'self' data: https://tiles.openfreemap.org https://*.openfreemap.org",
|
||||
"connect-src 'self' http://127.0.0.1:9337 https://127.0.0.1:9337 http://localhost:9337 https://localhost:9337 ws://127.0.0.1:* wss://127.0.0.1:* ws://localhost:* wss://localhost:* blob: https://*.tile.openstreetmap.org https://tile.openstreetmap.org https://nominatim.openstreetmap.org https://git.quad4.io https://*.cartocdn.com https://tiles.openfreemap.org https://*.openfreemap.org",
|
||||
"connect-src 'self' http://127.0.0.1:9337 https://127.0.0.1:9337 http://localhost:9337 https://localhost:9337 ws://127.0.0.1:* wss://127.0.0.1:* ws://localhost:* wss://localhost:* blob: https://*.tile.openstreetmap.org https://tile.openstreetmap.org https://nominatim.openstreetmap.org https://github.com https://*.cartocdn.com https://tiles.openfreemap.org https://*.openfreemap.org",
|
||||
"media-src 'self' blob:",
|
||||
"worker-src 'self' blob:",
|
||||
"frame-src 'self'",
|
||||
|
|
|
|||
|
|
@ -3507,7 +3507,7 @@ class ReticulumMeshChat:
|
|||
<p>The MeshChatX web interface files were not found.</p>
|
||||
<p>If you are running from source, you must build the frontend first:</p>
|
||||
<pre style="background: #1e293b; padding: 1rem; border-radius: 4px; color: #e2e8f0; border: 1px solid #334155;">pnpm install && pnpm run build-frontend</pre>
|
||||
<p>For more information, see the <a href="https://git.quad4.io/RNS-Things/MeshChatX" style="color: #38bdf8;">README</a>.</p>
|
||||
<p>For more information, see the <a href="https://github.com/Quad4-Software/MeshChatX" style="color: #38bdf8;">README</a>.</p>
|
||||
</body>
|
||||
</html>
|
||||
""",
|
||||
|
|
@ -4243,17 +4243,16 @@ class ReticulumMeshChat:
|
|||
return web.json_response({"error": "URL is required"}, status=400)
|
||||
|
||||
# Restrict to allowed sources for safety
|
||||
gitea_url = "https://git.quad4.io"
|
||||
gitea_url = ""
|
||||
if self.current_context and self.current_context.config:
|
||||
gitea_url = self.current_context.config.gitea_base_url.get()
|
||||
|
||||
if (
|
||||
not url.startswith(gitea_url + "/")
|
||||
and not url.startswith("https://git.quad4.io/")
|
||||
and not url.startswith("https://github.com/")
|
||||
and not url.startswith("https://objects.githubusercontent.com/")
|
||||
and not url.startswith("https://release-assets.githubusercontent.com/")
|
||||
):
|
||||
allowed = ["https://github.com/", "https://objects.githubusercontent.com/",
|
||||
"https://release-assets.githubusercontent.com/"]
|
||||
if gitea_url:
|
||||
allowed.insert(0, gitea_url + "/")
|
||||
|
||||
if not any(url.startswith(a) for a in allowed):
|
||||
return web.json_response({"error": "Invalid download URL"}, status=403)
|
||||
|
||||
try:
|
||||
|
|
|
|||
|
|
@ -161,7 +161,7 @@ class ConfigManager:
|
|||
self.gitea_base_url = self.StringConfig(
|
||||
self,
|
||||
"gitea_base_url",
|
||||
"https://git.quad4.io",
|
||||
None,
|
||||
)
|
||||
|
||||
# desktop config
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@
|
|||
{{ $t("tools.micron_editor.title") }}
|
||||
</h1>
|
||||
<a
|
||||
href="https://git.quad4.io/RFnexus"
|
||||
href="https://github.com/RFnexus"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
class="text-[10px] text-gray-500 hover:text-teal-500 transition-colors hidden sm:block leading-tight"
|
||||
|
|
@ -89,6 +89,26 @@
|
|||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<button
|
||||
v-if="wasmBundled"
|
||||
type="button"
|
||||
class="secondary-chip py-1! px-2! gap-1 text-[11px]!"
|
||||
:class="{ 'text-teal-600! dark:text-teal-300! border-teal-300! dark:border-teal-700!': useWasm }"
|
||||
:disabled="wasmLoading"
|
||||
:title="$t(useWasm ? 'tools.micron_editor.wasm_active' : 'tools.micron_editor.wasm_inactive')"
|
||||
@click="toggleWasmEngine"
|
||||
>
|
||||
<span
|
||||
v-if="wasmLoading"
|
||||
class="w-3 h-3 rounded-full border-2 border-current border-t-transparent animate-spin"
|
||||
></span>
|
||||
<MaterialDesignIcon
|
||||
v-else
|
||||
:icon-name="useWasm ? 'lightning-bolt' : 'lightning-bolt-outline'"
|
||||
class="w-3.5 h-3.5"
|
||||
/>
|
||||
<span class="hidden sm:inline">{{ useWasm ? "WASM" : "JS" }}</span>
|
||||
</button>
|
||||
<button v-if="isMobileView" type="button" class="primary-chip py-1! px-3!" @click="toggleView">
|
||||
<MaterialDesignIcon :icon-name="showEditor ? 'eye' : 'pencil'" class="w-3.5 h-3.5" />
|
||||
{{ showEditor ? $t("tools.micron_editor.view_preview") : $t("tools.micron_editor.edit") }}
|
||||
|
|
@ -179,6 +199,7 @@
|
|||
import MaterialDesignIcon from "../MaterialDesignIcon.vue";
|
||||
import MicronParser from "../../js/MicronParser.js";
|
||||
import { micronStorage } from "../../js/MicronStorage";
|
||||
import { preloadNomadMicronWasm, isMicronWasmBundled } from "../../js/MicronWasmLoader";
|
||||
import DialogUtils from "../../js/DialogUtils";
|
||||
|
||||
export default {
|
||||
|
|
@ -198,6 +219,10 @@ export default {
|
|||
editingTabName: "",
|
||||
showPublishMenu: false,
|
||||
pageNodes: [],
|
||||
useWasm: false,
|
||||
wasmReady: false,
|
||||
wasmBundled: isMicronWasmBundled(),
|
||||
wasmLoading: false,
|
||||
};
|
||||
},
|
||||
watch: {
|
||||
|
|
@ -232,7 +257,11 @@ export default {
|
|||
}
|
||||
try {
|
||||
const parser = new MicronParser(true);
|
||||
this.renderedContent = parser.convertMicronToHtml(this.tabs[this.activeTabIndex].content);
|
||||
this.renderedContent = parser.convertMicronToHtml(
|
||||
this.tabs[this.activeTabIndex].content,
|
||||
{},
|
||||
{ useWasm: this.useWasm && this.wasmReady }
|
||||
);
|
||||
} catch (error) {
|
||||
console.error("Error rendering micron:", error);
|
||||
this.renderedContent = `<p style="color: red;">Error rendering: ${error.message}</p>`;
|
||||
|
|
@ -241,6 +270,25 @@ export default {
|
|||
toggleView() {
|
||||
this.showEditor = !this.showEditor;
|
||||
},
|
||||
async toggleWasmEngine() {
|
||||
if (!this.wasmBundled) return;
|
||||
if (this.useWasm) {
|
||||
this.useWasm = false;
|
||||
this.renderActiveTab();
|
||||
return;
|
||||
}
|
||||
this.wasmLoading = true;
|
||||
try {
|
||||
const ready = await preloadNomadMicronWasm();
|
||||
this.wasmReady = ready === true && typeof globalThis.micronConvert === "function";
|
||||
if (this.wasmReady) {
|
||||
this.useWasm = true;
|
||||
this.renderActiveTab();
|
||||
}
|
||||
} finally {
|
||||
this.wasmLoading = false;
|
||||
}
|
||||
},
|
||||
async saveContent() {
|
||||
try {
|
||||
await micronStorage.saveTabs(this.tabs);
|
||||
|
|
|
|||
|
|
@ -689,7 +689,7 @@ export default {
|
|||
return isMicronWasmBundled() && (GlobalState.config || {}).nomad_micron_wasm_enabled === true;
|
||||
},
|
||||
micronParserGoRepoUrl() {
|
||||
return "https://git.quad4.io/Go-Libs/micron-parser-go";
|
||||
return "https://github.com/Quad4-Software/micron-parser-go";
|
||||
},
|
||||
nomadMicronWasmActive() {
|
||||
const engineWasm = (GlobalState.config?.nomad_micron_default_engine || "js") === "wasm";
|
||||
|
|
|
|||
|
|
@ -923,7 +923,7 @@
|
|||
{{ $t("settings.nomad_micron_wasm_desc_before_link") }}
|
||||
<a
|
||||
class="text-blue-600 hover:text-blue-700 dark:text-blue-400 dark:hover:text-blue-300 underline underline-offset-2"
|
||||
href="https://git.quad4.io/Go-Libs/micron-parser-go"
|
||||
href="https://github.com/Quad4-Software/micron-parser-go"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>{{ $t("settings.nomad_micron_wasm_link_label") }}</a
|
||||
|
|
@ -2070,7 +2070,7 @@
|
|||
<input
|
||||
v-model="config.gitea_base_url"
|
||||
type="text"
|
||||
placeholder="https://git.quad4.io"
|
||||
placeholder="https://github.com/example-org"
|
||||
class="input-field"
|
||||
@input="onGiteaConfigChange"
|
||||
/>
|
||||
|
|
@ -2728,7 +2728,7 @@ export default {
|
|||
location_manual_lon: "0.0",
|
||||
location_manual_alt: "0.0",
|
||||
telemetry_enabled: false,
|
||||
gitea_base_url: "https://git.quad4.io",
|
||||
gitea_base_url: "",
|
||||
csp_extra_connect_src: "",
|
||||
csp_extra_img_src: "",
|
||||
csp_extra_frame_src: "",
|
||||
|
|
|
|||
|
|
@ -38,7 +38,6 @@ from pathlib import Path
|
|||
|
||||
DEFAULT_SOURCES = (
|
||||
"https://github.com/markqvist/reticulum_website/archive/refs/heads/main.zip",
|
||||
"https://git.quad4.io/Reticulum/reticulum_website/archive/main.zip",
|
||||
)
|
||||
|
||||
DEFAULT_DEST = (
|
||||
|
|
@ -257,6 +256,18 @@ def main(argv: list[str] | None = None) -> int:
|
|||
env_dest = os.environ.get("MESHCHATX_RETICULUM_DOCS_DEST")
|
||||
dest = args.dest or (Path(env_dest) if env_dest else DEFAULT_DEST)
|
||||
|
||||
if _is_truthy(os.environ.get("MESHCHATX_OFFLINE_BUILD")):
|
||||
if dest.exists() and any(dest.iterdir()):
|
||||
logging.info(
|
||||
"MESHCHATX_OFFLINE_BUILD=1 and Reticulum manual already present at %s; skipping fetch.",
|
||||
dest,
|
||||
)
|
||||
return 0
|
||||
logging.error(
|
||||
"MESHCHATX_OFFLINE_BUILD=1 but Reticulum manual is missing at %s", dest
|
||||
)
|
||||
return 1
|
||||
|
||||
fetch_manual(
|
||||
sources=sources,
|
||||
dest=dest.resolve(),
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
# Official defaults target Gitea at git.quad4.io. Override for forks or mirrors:
|
||||
# Official defaults. Override for forks or mirrors:
|
||||
# MESHCHATX_RELEASES_RSS Release feed (default: .../MeshChatX/releases.rss)
|
||||
# MESHCHATX_REPO_BASE Repo root for synthesized wheel URLs if RSS has no
|
||||
# .whl link in descriptions (default: derived from RSS URL)
|
||||
|
|
@ -151,12 +151,12 @@ discover_release_wheels() {
|
|||
err "curl is required (RSS and downloads)."
|
||||
return 1
|
||||
fi
|
||||
MESHCHATX_RELEASES_RSS="${MESHCHATX_RELEASES_RSS:-https://git.quad4.io/RNS-Things/MeshChatX/releases.rss}"
|
||||
MESHCHATX_RELEASES_RSS="${MESHCHATX_RELEASES_RSS:-https://github.com/Quad4-Software/MeshChatX/releases.rss}"
|
||||
repo_base="${MESHCHATX_REPO_BASE:-}"
|
||||
rss="$MESHCHATX_RELEASES_RSS"
|
||||
[[ -n "$repo_base" ]] || repo_base="$(repo_base_from_rss "$rss")"
|
||||
if ! raw="$(
|
||||
curl -fsSL -m 90 -H "User-Agent: MeshChatX-rpi-installer/1 (+https://git.quad4.io/RNS-Things/MeshChatX)" \
|
||||
curl -fsSL -m 90 -H "User-Agent: MeshChatX-rpi-installer/1 (+https://github.com/Quad4-Software/MeshChatX)" \
|
||||
"$rss" 2>/dev/null
|
||||
)"; then
|
||||
return 1
|
||||
|
|
@ -491,7 +491,7 @@ try_verify_and_localize_wheel() {
|
|||
local src_url="${1:-}"
|
||||
local bundle_url="${src_url}.cosign.bundle"
|
||||
local code cbin kf wf bf
|
||||
MESHCHATX_COSIGN_PUB_URL="${MESHCHATX_COSIGN_PUB_URL:-https://git.quad4.io/RNS-Things/MeshChatX/raw/branch/master/cosign.pub}"
|
||||
MESHCHATX_COSIGN_PUB_URL="${MESHCHATX_COSIGN_PUB_URL:-https://github.com/Quad4-Software/MeshChatX/raw/branch/master/cosign.pub}"
|
||||
if ! code="$(curl -fsS -o /dev/null -w '%{http_code}' -I -L -m 30 "$bundle_url" 2>/dev/null)"; then
|
||||
code="000"
|
||||
fi
|
||||
|
|
|
|||
|
|
@ -49,7 +49,7 @@ describe("MarkdownRenderer.js", () => {
|
|||
});
|
||||
|
||||
it("keeps underscores intact in long https links", () => {
|
||||
const url = "https://git.quad4.io/RNS-Things/MeshChatX/src/branch/dev/docs/meshchatx_on_raspberry_pi.md";
|
||||
const url = "https://github.com/Quad4-Software/MeshChatX/src/branch/dev/docs/meshchatx_on_raspberry_pi.md";
|
||||
const result = MarkdownRenderer.render(`visit ${url}`);
|
||||
expect(result).toContain(`href="${url}"`);
|
||||
expect(result).toContain(url);
|
||||
|
|
@ -396,7 +396,7 @@ describe("MarkdownRenderer.js", () => {
|
|||
});
|
||||
|
||||
it("strip keeps intraword underscores intact", () => {
|
||||
const url = "https://git.quad4.io/RNS-Things/MeshChatX/src/branch/dev/docs/meshchatx_on_raspberry_pi.md";
|
||||
const url = "https://github.com/Quad4-Software/MeshChatX/src/branch/dev/docs/meshchatx_on_raspberry_pi.md";
|
||||
expect(MarkdownRenderer.strip(url)).toBe(url);
|
||||
});
|
||||
|
||||
|
|
@ -488,7 +488,7 @@ describe("MarkdownRenderer.js", () => {
|
|||
const msg = [
|
||||
"# Deploy notes",
|
||||
"",
|
||||
"Read https://git.quad4.io/RNS-Things/MeshChatX/src/branch/dev/docs/meshchatx_on_raspberry_pi.md, then ping",
|
||||
"Read https://github.com/Quad4-Software/MeshChatX/src/branch/dev/docs/meshchatx_on_raspberry_pi.md, then ping",
|
||||
"nomadnet://1dfeb0d794963579bd21ac8f153c77a4:/page/meshchatx_on_pi.mu",
|
||||
"",
|
||||
"`inline_code` and _italic_ and snake_case stay sane.",
|
||||
|
|
@ -500,7 +500,7 @@ describe("MarkdownRenderer.js", () => {
|
|||
const result = MarkdownRenderer.render(msg);
|
||||
expect(result).toContain("<h1");
|
||||
expect(result).toContain(
|
||||
'href="https://git.quad4.io/RNS-Things/MeshChatX/src/branch/dev/docs/meshchatx_on_raspberry_pi.md"'
|
||||
'href="https://github.com/Quad4-Software/MeshChatX/src/branch/dev/docs/meshchatx_on_raspberry_pi.md"'
|
||||
);
|
||||
expect(result).toContain('data-nomadnet-url="1dfeb0d794963579bd21ac8f153c77a4:/page/meshchatx_on_pi.mu"');
|
||||
expect(result).toContain("<code");
|
||||
|
|
|
|||
|
|
@ -126,7 +126,7 @@ export function buildFullServerConfig(overrides = {}) {
|
|||
nomad_micron_wasm_enabled: true,
|
||||
nomad_micron_default_engine: "js",
|
||||
nomad_default_page_path: "/page/index.mu",
|
||||
gitea_base_url: "https://git.quad4.io",
|
||||
gitea_base_url: "",
|
||||
...overrides,
|
||||
};
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue