Self-hosted deployment platform
This report summarizes scanner evidence for oblien/openship, a TypeScript project with 14,677 GitHub stars. SynthScan examined 1,519,311 lines of code across 5450 source files, recording 3206 pattern matches distributed across 17 syntactic categories. The legacy adjusted pattern signal is 4.8 (Low pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Can maintainers explain intent, assumptions, and trade-offs? 1429 finding(s).
Are imports declared and package/API names verified? 277 finding(s).
Are wrappers, guards, and repeated structures necessary? 2426 finding(s).
Which changes need focused human review? 3206 finding(s).
This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.
Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.
This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.
The scanner identified 3206 distinct pattern matches across 17 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | docker-compose.yml | 1 | # ────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | docker-compose.yml | 44 | # ────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | docker-compose.yml | 53 | # ─── Database (storage, private) ────────────────────── | COMMENT |
| MEDIUM | docker-compose.yml | 73 | # ─── Cache / Queue / Rate-limit (private) ───────────── | COMMENT |
| MEDIUM | docker-compose.yml | 90 | # ─── API (control plane) ────────────────────────────── | COMMENT |
| MEDIUM | docker-compose.yml | 124 | # ─── Dashboard (app UI) ─────────────────────────────── | COMMENT |
| MEDIUM | docker-compose.yml | 143 | # ─── Web / Landing ──────────────────────────────────── | COMMENT |
| MEDIUM | docker/docker-compose.build.yml | 1 | # ────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | docker/docker-compose.build.yml | 13 | # ────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | docker/docker-compose.yml | 1 | # ────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | docker/docker-compose.yml | 58 | # ────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | docker/docker-compose.yml | 69 | # ─── Database (storage, private) ────────────────────── | COMMENT |
| MEDIUM | docker/docker-compose.yml | 97 | # ─── Cache / Queue / Rate-limit (private) ───────────── | COMMENT |
| MEDIUM | docker/docker-compose.yml | 114 | # ─── API (control plane) ────────────────────────────── | COMMENT |
| MEDIUM | docker/docker-compose.yml | 199 | # ─── Dashboard (app UI) ─────────────────────────────── | COMMENT |
| MEDIUM | docker/docker-compose.yml | 216 | # ─── Edge (OpenResty on :80/:443) ───────────────────── | COMMENT |
| MEDIUM | scripts/install.sh | 49 | # ── 1. Resolve the release tag ────────────────────────────────────────────── | COMMENT |
| MEDIUM | scripts/install.sh | 60 | # ── 2. Download + verify + extract the payload → cli/<tag> ────────────────── | COMMENT |
| MEDIUM | scripts/install.sh | 89 | # ── 3. Resolve Node: system >= NODE_MAJOR, else vendor from nodejs.org ─────── | COMMENT |
| MEDIUM | scripts/install.sh | 154 | # ── 5. Record the distribution marker (read by `openship update`) ─────────── | COMMENT |
| MEDIUM | scripts/install.sh | 170 | # ── 7. Put `openship` on PATH ─────────────────────────────────────────────── | COMMENT |
| MEDIUM | scripts/install.sh | 197 | # ── 9. Next steps ─────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/db-email/src/schema/mail_app.ts | 45 | // ─── user_settings ───────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/db-email/src/schema/mail_app.ts | 64 | // ─── user_hotkeys ────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/db-email/src/schema/mail_app.ts | 83 | // ─── summary ─────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/db-email/src/schema/mail_app.ts | 112 | // ─── note ────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/db-email/src/schema/mail_app.ts | 141 | // ─── writing_style_matrix ────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/db-email/src/schema/mail_app.ts | 161 | // ─── email_template ──────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/db-email/src/schema/mail_app.ts | 185 | // ─── Type exports ────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/db-email/src/schema/vmail.ts | 43 | // ─── Reusable column factories ───────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/db-email/src/schema/vmail.ts | 61 | // ─── admin ───────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/db-email/src/schema/vmail.ts | 85 | // ─── alias ───────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/db-email/src/schema/vmail.ts | 107 | // ─── moderators ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/db-email/src/schema/vmail.ts | 127 | // ─── maillist_owners ─────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/db-email/src/schema/vmail.ts | 146 | // ─── forwardings ─────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/db-email/src/schema/vmail.ts | 176 | // ─── domain ──────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/db-email/src/schema/vmail.ts | 205 | // ─── alias_domain ────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/db-email/src/schema/vmail.ts | 223 | // ─── domain_admins ───────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/db-email/src/schema/vmail.ts | 243 | // ─── mailbox ─────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/db-email/src/schema/vmail.ts | 349 | // ─── maillists ───────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/db-email/src/schema/vmail.ts | 379 | // ─── sender_bcc_domain ───────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/db-email/src/schema/vmail.ts | 399 | // ─── sender_bcc_user ─────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/db-email/src/schema/vmail.ts | 421 | // ─── recipient_bcc_domain ────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/db-email/src/schema/vmail.ts | 441 | // ─── recipient_bcc_user ──────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/db-email/src/schema/vmail.ts | 462 | // ─── sender_relayhost ────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/db-email/src/schema/vmail.ts | 474 | // ─── deleted_mailboxes ───────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/db-email/src/schema/vmail.ts | 500 | // ─── share_folder ────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/db-email/src/schema/vmail.ts | 516 | // ─── anyone_shares ───────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/db-email/src/schema/vmail.ts | 527 | // ─── last_login ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/db-email/src/schema/vmail.ts | 549 | // ─── used_quota ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/db-email/src/schema/vmail.ts | 566 | // ─── Type exports ────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | packages/core/src/stacks.ts | 135 | // ─── Stack categories ──────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | packages/core/src/stacks.ts | 139 | // ─── Project type (determines deploy-page UI path) ────────────────────────── | COMMENT |
| MEDIUM⚡ | packages/core/src/stacks.ts | 143 | // ─── Stack definition ──────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/core/src/stacks.ts | 25 | // ─── Language definitions ──────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/core/src/stacks.ts | 238 | // ─── The registry ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/core/src/stacks.ts | 242 | // ── JavaScript / TypeScript - Frontend & Fullstack ───────────────────────── | COMMENT |
| MEDIUM | packages/core/src/stacks.ts | 437 | // ── JavaScript / TypeScript - Backend ────────────────────────────────────── | COMMENT |
| MEDIUM | packages/core/src/stacks.ts | 519 | // ── Go ───────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/core/src/stacks.ts | 577 | // ── Rust ─────────────────────────────────────────────────────────────────── | COMMENT |
| 1424 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | packages/core/src/stacks.ts | 1038 | export function buildOutputTransferExcludes( | CODE |
| LOW | packages/core/src/stacks.ts | 1133 | export function packageManagerEnsureCommand(packageManager?: string): string { | CODE |
| LOW | packages/core/src/cluster-workload.ts | 6 | export function clusterWorkloadNeedsOperator( | CODE |
| LOW | packages/core/src/access-grants.ts | 100 | export function isOrgSingletonResourceType(type: string): boolean { | CODE |
| LOW | packages/core/src/access-grants.ts | 230 | export function isSelfHostedOnlyGrantType(type: string): boolean { | CODE |
| LOW | packages/core/src/cloud-capacity.ts | 27 | export function cloudAllocationShortfalls( | CODE |
| LOW | packages/core/src/cluster-database.ts | 74 | export function validateClusterDatabaseImportArtifact( | CODE |
| LOW | packages/core/src/cluster-database.ts | 217 | export function validateClusterDatabaseUpdate( | CODE |
| LOW | packages/core/src/package-manager-bootstrap.ts | 6 | export function managedPackageManagerEnsureCommand(manager: ManagedPackageManager): string { | CODE |
| LOW | packages/core/src/source-access.ts | 330 | export function serializeSourceAccessScope( | CODE |
| LOW | packages/core/src/package-manager-version.ts | 17 | export function declaredPackageManagerPin(pkg: unknown, manager: string): string | undefined { | CODE |
| LOW | packages/core/src/managed-network.ts | 96 | export function normalizeManagedNetworkInput( | CODE |
| LOW | packages/core/src/managed-network.ts | 130 | export function withoutManagedNetworkMember( | CODE |
| LOW | packages/core/src/managed-network.ts | 155 | export function initialManagedNetworkInput( | CODE |
| LOW | packages/core/src/cluster-storage.ts | 119 | export function validateClusterVolumeMounts(mounts: ClusterVolumeMount[]) { | CODE |
| LOW | packages/core/src/utils.ts | 35 | export function normalizeProjectRootDirectory(value?: string): string { | CODE |
| LOW | packages/core/src/deployment-ownership.ts | 2 | export function deploymentBelongsToProject( | CODE |
| LOW | …ckages/core/src/package-manager-bootstrap.generated.ts | 3 | export const PACKAGE_MANAGER_BOOTSTRAP_SOURCE = "var __create=Object.create;var __getProtoOf=Object.getPrototypeOf;var _ | CODE |
| LOW | packages/core/src/compose-spec.ts | 42 | function composeOptionRequestsSomething(value: unknown): boolean { | CODE |
| LOW | packages/core/src/project-source.ts | 259 | export function validateReleaseVersionUrl(value: string): string | null { | CODE |
| LOW | packages/core/src/project-source.ts | 289 | export function validateReleaseRepository(value: string): string | null { | CODE |
| LOW | packages/core/src/cluster-runtime.ts | 80 | export function clusterRuntimeConnections( | CODE |
| LOW | packages/core/src/cluster-runtime.ts | 109 | export function assertClusterRuntimeNetwork( | CODE |
| LOW | packages/core/src/cluster-runtime.ts | 138 | export function allocateClusterRuntimeRanges(reserved: readonly string[]): { | CODE |
| LOW | packages/core/src/cluster-runtime.ts | 166 | export function assertClusterRuntimeRanges( | CODE |
| LOW | packages/core/src/types.ts | 67 | export function deriveProjectDeployTarget(project: { | CODE |
| LOW | packages/core/src/service-status.ts | 55 | export function serviceStatusToContainerState( | CODE |
| LOW | packages/core/src/host-channel.ts | 288 | export function summarizeHostChannelCause( | CODE |
| LOW | packages/core/src/backup-catalog.ts | 539 | export function restoreNeedsLiveContainer(kind: PayloadKind): boolean { | CODE |
| LOW | packages/core/src/backup-catalog.ts | 544 | export function restoreAppliesAfterBounce(kind: PayloadKind): boolean { | CODE |
| LOW | packages/core/src/backup-catalog.ts | 555 | export function restoreFailureLeavesTargetIntact(kind: PayloadKind): boolean { | CODE |
| LOW | packages/core/src/infrastructure.ts | 232 | export function isInfrastructurePrivateIp(value: string): boolean { | CODE |
| LOW | packages/core/src/infrastructure.ts | 393 | export function suggestNativeClusterConfig( | CODE |
| LOW | packages/core/src/compose-namespace.ts | 133 | export function composeNamespaceDependencies( | CODE |
| LOW | packages/core/src/mail-certificate.ts | 37 | export function currentMailCertificateHealth( | CODE |
| LOW | packages/core/src/credentials.ts | 231 | export function normalizeCredentialSelector( | CODE |
| LOW | packages/core/src/rollback-window.ts | 64 | export function computeAutoRollbackWindow(input: AutoRollbackWindowInput): number { | CODE |
| LOW | packages/core/src/connectivity.ts | 83 | export function classifyConnectivityError( | CODE |
| LOW | packages/core/src/host-firewall.ts | 494 | export function clusterRuntimeFirewallScript(ctx: { | CODE |
| LOW | packages/core/src/service-routing.ts | 25 | export function findPublicUrlPlaceholders(value: string): PublicUrlPlaceholder[] { | CODE |
| LOW | packages/core/src/service-routing.ts | 76 | export function resolvePublicUrlPlaceholders( | CODE |
| LOW | packages/core/src/service-routing.ts | 231 | export function defaultServiceHostnameLabel( | CODE |
| LOW | packages/core/src/service-routing.ts | 331 | export function aliasConflictsWithSiblings( | CODE |
| LOW | packages/core/src/service-routing.ts | 346 | export function resolveServiceHostnameLabel( | CODE |
| LOW | packages/core/src/scale/clusterTopology.ts | 101 | export function availableClusterAdditions(resource: DatabaseResource) { | CODE |
| LOW | packages/core/src/updates/changelog-parser.ts | 2 | export function normalizeChangelogVersion(version: string): string { | CODE |
| LOW | packages/core/src/workspaces/toml-helpers.ts | 20 | export function extractStringArrayFromSection( | CODE |
| LOW | packages/core/src/workspaces/node.ts | 45 | function parsePackageJsonWorkspaces(content: string): string[] { | CODE |
| LOW | packages/core/src/diagnostics/node.ts | 97 | export function installNodeErrorReporting(source: ErrorContext["source"]): void { | CODE |
| LOW | packages/core/src/metadata/index.ts | 28 | export function missingOutputDirectoryMessage(outputDirectory?: string, subject?: string): string { | CODE |
| LOW | packages/core/src/metadata/vercel.ts | 152 | export function vercelCompatibilityWarnings(raw: string): string[] { | CODE |
| LOW | packages/contracts/test/fixtures.ts | 28 | export function domainDnsChallengeFixture(): DomainDnsChallenge { | CODE |
| LOW | packages/contracts/test/server-cluster-fixtures.ts | 33 | export function clusterCapabilitiesFixture(): ClusterCapabilities { | CODE |
| LOW | packages/contracts/test/managed-network-fixtures.ts | 12 | export function managedPreparationFixture(ids?: string[]): ManagedNetworkPreparation { | CODE |
| LOW | packages/contracts/test/managed-network-fixtures.ts | 46 | export function managedPreparationSummaryFixture(): ManagedNetworkPreparationSummary { | CODE |
| LOW | packages/contracts/test/cluster-runtime-fixtures.ts | 3 | export function clusterRuntimePlanFixture(): ClusterRuntimePlan { | CODE |
| LOW | packages/contracts/src/project-controls.ts | 117 | export function normalizeProjectDeleteOptions(input: RemoveProjectInput) { | CODE |
| LOW | packages/contracts/src/token-inputs.ts | 79 | export function wildcardProjectGrantRejected(g: { | CODE |
| LOW | packages/contracts/src/deployments.ts | 34 | export function parseCreateDeploymentInput(value: unknown): CreateDeploymentInput { | CODE |
| LOW | packages/contracts/src/environment-scope.ts | 9 | export function parseOptionalEnvironmentScope(value: unknown): Environment | undefined { | CODE |
| 866 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | packages/core/src/host-firewall.ts | 295 | print(json.dumps(clean([row for row in rows if ('chain' in row and row['chain'].get('name', '').startswith(prefix)) | CODE |
| HIGH | packages/core/src/host-firewall.ts | 299 | print(json.dumps(clean(foreign), sort_keys=True)) | CODE |
| HIGH | packages/core/src/host-firewall.ts | 363 | print(json.dumps(snapshot, sort_keys=True)) | CODE |
| HIGH | packages/adapters/src/cluster/storage-host.ts | 20 | elif p.exists() and any(p.iterdir()): | CODE |
| HIGH | packages/adapters/src/cluster/storage-host.ts | 32 | print(json.dumps({'path':str(p),'freeGiB':usage.free/1024**3})) | CODE |
| HIGH | packages/adapters/src/cluster/k3s-host.ts | 48 | if not OWNER.exists(): return None | CODE |
| HIGH | packages/adapters/src/cluster/k3s-host.ts | 101 | elif not pathlib.Path('/sys/fs/cgroup/memory').is_dir(): raise RuntimeError('The memory cgroup controller is unavail | CODE |
| HIGH | packages/adapters/src/cluster/k3s-host.ts | 322 | elif BIN.exists() or CONFIG.exists() or DATA.exists(): | CODE |
| HIGH⚡ | packages/adapters/src/cluster/k3s-host.ts | 344 | elif ACTION == 'ready': result = readiness() | CODE |
| HIGH⚡ | packages/adapters/src/cluster/k3s-host.ts | 345 | elif ACTION == 'empty': result = assert_empty() | CODE |
| HIGH⚡ | packages/adapters/src/cluster/k3s-host.ts | 346 | elif ACTION == 'state': | CODE |
| HIGH⚡ | packages/adapters/src/cluster/k3s-host.ts | 349 | elif ACTION == 'nodes': result = json.loads(kubectl(['get', 'nodes', '-o', 'json'])) | CODE |
| HIGH⚡ | packages/adapters/src/cluster/k3s-host.ts | 350 | elif ACTION == 'claim': | CODE |
| HIGH⚡ | packages/adapters/src/cluster/k3s-host.ts | 361 | print(json.dumps(result)) | CODE |
| HIGH⚡ | packages/adapters/src/cluster/k3s-host.ts | 364 | print(json.dumps({'error': message[-3000:], 'code': 'CLUSTER_RUNTIME_NOT_EMPTY' if isinstance(error, NotEmptyError) | CODE |
| HIGH⚡ | packages/adapters/src/cluster/k3s.test.ts | 61 | elif args == ['ip', '-j', '-4', 'route', 'show', 'table', 'all']: | CODE |
| HIGH⚡ | packages/adapters/src/cluster/k3s.test.ts | 63 | elif args == ['systemctl', 'is-active', '--quiet', 'docker']: | CODE |
| HIGH⚡ | packages/adapters/src/cluster/k3s.test.ts | 65 | elif args == ['docker', 'network', 'ls', '-q']: | CODE |
| HIGH⚡ | packages/adapters/src/cluster/k3s.test.ts | 67 | elif args == ['docker', 'network', 'inspect', 'host-id', 'none-id', 'bridge-id', 'application-id']: | CODE |
| HIGH | …kages/adapters/src/network/network-diagnostics.test.ts | 155 | elif args[:3] == ['docker', 'network', 'inspect']: output = '[{"IPAM":{"Config":[]}}]' | CODE |
| HIGH | …kages/adapters/src/network/network-diagnostics.test.ts | 156 | elif args[0] == 'sh': output = '' | CODE |
| HIGH⚡ | …kages/adapters/src/network/network-diagnostics.test.ts | 291 | elif args[-1] == 'peers': output = 'peer-b\npeer-c\n' | CODE |
| HIGH⚡ | …kages/adapters/src/network/network-diagnostics.test.ts | 292 | elif args[-1] == 'public-key': output = 'different-key' if input.get('drift') else 'local-public' | CODE |
| HIGH⚡ | …kages/adapters/src/network/network-diagnostics.test.ts | 293 | elif args[-1] == 'pubkey': output = 'local-public' | CODE |
| HIGH⚡ | …kages/adapters/src/network/network-diagnostics.test.ts | 294 | elif args[-1] == 'listen-port': output = '51820' | CODE |
| HIGH⚡ | …kages/adapters/src/network/network-diagnostics.test.ts | 295 | elif args[-1] == 'allowed-ips': output = 'peer-b\t10.244.0.2/32\npeer-c\t10.244.0.3/32\n' | CODE |
| HIGH⚡ | …kages/adapters/src/network/network-diagnostics.test.ts | 296 | elif args == ['ip', '-d', '-j', 'addr', 'show']: | CODE |
| HIGH⚡ | packages/adapters/src/network/private-network.ts | 35 | print(json.dumps({'error': 'Linux hosts are required.', 'code': 'NETWORK_HOST_UNSUPPORTED'})); sys.exit(0) | CODE |
| HIGH⚡ | packages/adapters/src/network/private-network.ts | 38 | print(json.dumps({'interfaces': [{ | CODE |
| HIGH⚡ | packages/adapters/src/network/private-network.ts | 44 | print(json.dumps({'error': 'Install iproute2 and Python 3, then inspect the network again.', 'code': 'NETWORK_TOOLS_ | CODE |
| HIGH | packages/adapters/src/network/private-network.ts | 61 | print(json.dumps({'error': 'The verification port is unavailable on this private address. Choose another port or fix | CODE |
| HIGH | packages/adapters/src/network/private-network.ts | 105 | elif data == prefix + b'tcp\n' or data == prefix + b'stop\n': | CODE |
| HIGH | packages/adapters/src/network/private-network.ts | 165 | print(json.dumps({'peers': list(pool.map(check, c['peers']))})) | CODE |
| HIGH | packages/adapters/src/network/private-network.ts | 204 | print(json.dumps(r)) | CODE |
| HIGH | packages/adapters/src/network/private-network.ts | 215 | print('{}') | CODE |
| HIGH⚡ | …adapters/src/network/managed-network-transport.test.ts | 27 | elif args[:2] == ['wg', 'setconf']: | CODE |
| HIGH⚡ | …adapters/src/network/managed-network-transport.test.ts | 36 | elif args[:2] == ['wg', 'show']: | CODE |
| HIGH⚡ | …adapters/src/network/managed-network-transport.test.ts | 38 | elif args[-1] == 'peers': output = '\n'.join(state['peers']) | CODE |
| HIGH⚡ | …adapters/src/network/managed-network-transport.test.ts | 39 | elif args[-1] == 'listen-port': output = str(state['listenPort']) | CODE |
| HIGH⚡ | …adapters/src/network/managed-network-transport.test.ts | 40 | elif args[-1] == 'allowed-ips': output = '\n'.join(key + '\t' + state['allowedIps'].get(key, '(none)') for key in stat | CODE |
| HIGH⚡ | …adapters/src/network/managed-network-transport.test.ts | 41 | elif args[-1] == 'latest-handshakes': output = '\n'.join(key + ' 1700000000' for key in state['peers']) | CODE |
| HIGH⚡ | …adapters/src/network/managed-network-transport.test.ts | 42 | elif args[0] == 'ip': | CODE |
| HIGH⚡ | …adapters/src/network/managed-network-transport.test.ts | 45 | elif args == ['ip', '-j', '-4', 'route', 'show', 'table', 'main']: | CODE |
| HIGH⚡ | …adapters/src/network/managed-network-transport.test.ts | 47 | elif args[-2:] == ['link', 'show']: | CODE |
| HIGH⚡ | …adapters/src/network/managed-network-transport.test.ts | 49 | elif args[1:3] == ['link', 'add']: state['exists'] = True | CODE |
| HIGH⚡ | …adapters/src/network/managed-network-transport.test.ts | 50 | elif args[1:3] == ['link', 'delete']: state.update(exists=False, addresses=[], routes=[], peers=[]) | CODE |
| HIGH⚡ | …adapters/src/network/managed-network-transport.test.ts | 51 | elif args[1:3] == ['address', 'add']: state['addresses'].append(args[3]) | CODE |
| HIGH⚡ | …adapters/src/network/managed-network-transport.test.ts | 52 | elif args[1:3] == ['link', 'set']: | CODE |
| HIGH⚡ | …adapters/src/network/managed-network-transport.test.ts | 54 | elif args[1:4] == ['-4', 'route', 'add']: | CODE |
| HIGH⚡ | …adapters/src/network/managed-network-transport.test.ts | 59 | elif args[1:3] != ['link', 'set']: raise AssertionError('Unexpected ip command: ' + str(args)) | CODE |
| HIGH⚡ | …adapters/src/network/managed-network-transport.test.ts | 60 | elif args[0] == 'sh': | CODE |
| HIGH⚡ | …adapters/src/network/managed-network-transport.test.ts | 62 | elif args[-1] == 'disable-owned-service': state['enabled'] = False | CODE |
| HIGH⚡ | …adapters/src/network/managed-network-transport.test.ts | 63 | elif args[-1] == 'apply-owned-firewall': state['firewall'] = True | CODE |
| HIGH⚡ | …adapters/src/network/managed-network-transport.test.ts | 64 | elif args[-1] == 'remove-owned-firewall': state['firewall'] = False | CODE |
| HIGH⚡ | …adapters/src/network/managed-network-transport.test.ts | 65 | elif args[-1] == 'inspect-owned-firewall': output = 'OSWG_' + 'a' * 16 + '_IN' if state['firewall'] else '' | CODE |
| HIGH⚡ | …adapters/src/network/managed-network-transport.test.ts | 66 | elif args[-1] == 'snapshot-owned-firewall': output = state['firewallRevision'] if state['firewall'] else 'missing' | CODE |
| HIGH⚡ | …adapters/src/network/managed-network-transport.test.ts | 126 | elif scenario == 'boot': result = invoke('boot') | CODE |
| HIGH⚡ | …adapters/src/network/managed-network-transport.test.ts | 127 | elif scenario == 'timer': | CODE |
| HIGH⚡ | …adapters/src/network/managed-network-transport.test.ts | 130 | elif scenario in ('rollback', 'failed'): result = invoke('rollback') | CODE |
| HIGH⚡ | …adapters/src/network/managed-network-transport.test.ts | 131 | elif scenario.startswith('missing_receipt'): | CODE |
| 50 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | docker-compose.yml | 1 | # ────────────────────────────────────────────────────────── | COMMENT |
| LOW | docker-compose.yml | 21 | # unprivileged control plane. | COMMENT |
| LOW | docker/docker-compose.build.yml | 1 | # ────────────────────────────────────────────────────────── | COMMENT |
| LOW | docker/docker-compose.yml | 1 | # ────────────────────────────────────────────────────────── | COMMENT |
| LOW | docker/docker-compose.yml | 21 | # equivalent stack at ~/.openship/compose/. This file is the reference for | COMMENT |
| LOW | docker/docker-compose.yml | 41 | # build + run your deployed apps as host containers (Docker-out-of-Docker). The | COMMENT |
| LOW | docker/docker-compose.yml | 121 | # OPENSHIP_BIND_ADDR opts into a public/LAN interface (see header note). | COMMENT |
| LOW | docker/docker-compose.yml | 141 | # translation and a bare→container conversion inherits existing certs. | COMMENT |
| LOW | docker/docker-compose.yml | 161 | # by `openship up`; by hand on this file — see .env.example). Harmless when | COMMENT |
| LOW | scripts/install.sh | 1 | #!/bin/sh | COMMENT |
| LOW | scripts/release.ts | 81 | COMMENT | |
| LOW | scripts/install-source.sh | 1 | #!/bin/sh | COMMENT |
| LOW | packages/core/src/mail-server/routing/build-routes.ts | 201 | }, | COMMENT |
| LOW | packages/contracts/src/github-types.ts | 241 | clone_url: string; | COMMENT |
| LOW | packages/contracts/src/service-inputs.ts | 261 | ...ComposeFieldsBlock, | COMMENT |
| LOW | packages/platform/src/engine/config/env.ts | 621 | // (/setup, /desktop-auth-start). If INTERNAL_TOKEN is unset on a | COMMENT |
| LOW | packages/platform/src/engine/config/env.ts | 641 | throw new Error( | COMMENT |
| LOW | packages/platform/src/engine/lib/deployment-runtime.ts | 361 | return "cloud"; | COMMENT |
| LOW | packages/platform/src/engine/lib/deployment-runtime.ts | 701 | } | COMMENT |
| LOW | packages/platform/src/engine/lib/deployment-runtime.ts | 721 | // | COMMENT |
| LOW | packages/platform/src/engine/lib/upstream-url.ts | 181 | const running = info.status === "running"; | COMMENT |
| LOW | …ages/platform/src/engine/lib/organization-lifecycle.ts | 101 | // is_team flag now only LABELS the workspace (a user's auto-created | COMMENT |
| LOW | packages/platform/src/engine/lib/ssh-key-path.ts | 101 | // like `/etc/openship/ssh-keys` is an explicit carve-out. | COMMENT |
| LOW | packages/platform/src/engine/lib/self-host.ts | 61 | // public IP uniquely identifies one interface, so a genuinely remote box can | COMMENT |
| LOW | packages/platform/src/engine/lib/edge-target.ts | 101 | return `${scheme}//${url.hostname.toLowerCase()}${port ? `:${port}` : ""}`; | COMMENT |
| LOW | packages/platform/src/engine/lib/edge-target.ts | 281 | // failure reason below reads those same arrays, so a source added here is | COMMENT |
| LOW | packages/platform/src/engine/lib/domain-ssl.ts | 501 | COMMENT | |
| LOW | …ckages/platform/src/engine/lib/notification-workers.ts | 341 | // The secret is encrypt()'d at storage time (see | COMMENT |
| LOW | packages/platform/src/engine/lib/ssh-manager.ts | 441 | return cached.executor; | COMMENT |
| LOW | packages/platform/src/engine/lib/ssh-manager.ts | 921 | if (this.isConnected(serverId)) return { reachable: true, code: "ok" }; | COMMENT |
| LOW | packages/platform/src/engine/lib/routing-domains.ts | 181 | // port-based deploy of the same hostname sets `targetPort` alongside it without | COMMENT |
| LOW | packages/platform/src/engine/lib/routing-domains.ts | 681 | }; | COMMENT |
| LOW | packages/platform/src/engine/lib/routing-domains.ts | 841 | // letting project B overwrite project A's vhost (and serve A's domain on A's | COMMENT |
| LOW | packages/platform/src/engine/lib/project-analytics.ts | 121 | COMMENT | |
| LOW | …ges/platform/src/engine/lib/notification-categories.ts | 221 | // | COMMENT |
| LOW | packages/platform/src/engine/lib/auth.ts | 401 | expiresIn: 60 * 10, // 10 minutes | COMMENT |
| LOW | packages/platform/src/engine/lib/auth.ts | 421 | // mail transport at all. Because CLOUD_MODE is true there, | COMMENT |
| LOW | …/platform/src/engine/modules/domains/domain.service.ts | 1221 | domain.hostname, | COMMENT |
| LOW | …/platform/src/engine/modules/domains/domain.service.ts | 1781 | // (issuing the cert IS the proof), not a DNS dig. | COMMENT |
| LOW | …rm/src/engine/modules/domains/project-route.service.ts | 461 | // SSH executor. | COMMENT |
| LOW | …rm/src/engine/modules/domains/routing-apply.service.ts | 341 | // Re-emit any migration path-fan-out domains from live upstreams (a domain | COMMENT |
| LOW | …c/engine/modules/incoming-webhooks/incoming.service.ts | 281 | if (!hook.enabled) { | COMMENT |
| LOW | …latform/src/engine/modules/mail/mail-health.service.ts | 101 | unit: "clamav-freshclam", | COMMENT |
| LOW | …kages/platform/src/engine/modules/mail/mail.service.ts | 661 | // the engine that now exists, instead of trusting a "none" a status poll cached | COMMENT |
| LOW | …kages/platform/src/engine/modules/mail/mail.service.ts | 801 | : null; | COMMENT |
| LOW | …ckages/platform/src/engine/modules/mail/mail-engine.ts | 721 | // turned a healthy sidecar into a required-component failure that halted | COMMENT |
| LOW | …/engine/modules/mail/admin/platform-mailbox.service.ts | 261 | } | COMMENT |
| LOW | …tform/src/engine/modules/mail/admin/domains.service.ts | 141 | // (amavis keypair + 50-user config splice + reload), then record the | COMMENT |
| LOW | …tform/src/engine/modules/mail/admin/domains.service.ts | 161 | // so a static reverse-import would form a load-time cycle. Same | COMMENT |
| LOW | …engine/modules/mail/webmail/webmail-install.service.ts | 321 | if (plan.settings.length > 0) { | COMMENT |
| LOW | …atform/src/engine/modules/projects/project-teardown.ts | 361 | COMMENT | |
| LOW | …atform/src/engine/modules/projects/project-teardown.ts | 441 | COMMENT | |
| LOW | …atform/src/engine/modules/projects/project-teardown.ts | 641 | const cancellationNotes: string[] = []; | COMMENT |
| LOW | …atform/src/engine/modules/projects/project-teardown.ts | 681 | observeCaughtError(err, "platform/engine/modules/projects/project-teardown"); | COMMENT |
| LOW | …/engine/modules/projects/project-connection.service.ts | 381 | const { source, target, output, template, declaredPort } = ends; | COMMENT |
| LOW | …gine/modules/projects/project-inspection.operations.ts | 41 | ); | COMMENT |
| LOW | …rm/src/engine/modules/projects/project-crud.service.ts | 741 | routingConfig: data.routingConfig ?? null, | COMMENT |
| LOW | …rm/src/engine/modules/projects/project-crud.service.ts | 921 | const { authorization } = await import("../../lib/authorization"); | COMMENT |
| LOW | …rm/src/engine/modules/projects/project-crud.service.ts | 1761 | // no sibling fan-out. gitUrl is derived by the linker, so it's not set here | COMMENT |
| LOW | …rm/src/engine/modules/projects/project-crud.service.ts | 1941 | // domain/port re-sync above. Self-hosted → OpenResty, cloud → the Oblien edge; | COMMENT |
| 401 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL | packages/core/src/scale/topology.ts | 564 | definition.deployments.standalone.limits.cpu.some((cpu) => cpu === value.cpu) && | CODE |
| CRITICAL | packages/core/src/scale/topology.ts | 565 | definition.deployments.standalone.limits.memory.some((memory) => memory === value.memory) && | CODE |
| CRITICAL⚡ | …ckages/adapters/src/runtime/cloud-build-limits.test.ts | 70 | expect(h.executor.exec.mock.calls.at(-1)![0]).toContain("buildx rm --force 'openship-"); | CODE |
| CRITICAL⚡ | …ckages/adapters/src/runtime/cloud-build-limits.test.ts | 72 | expect(h.executor.exec.mock.calls.at(-1)![0]).not.toContain("--keep-state"); | CODE |
| CRITICAL⚡ | …ckages/adapters/src/runtime/cloud-build-limits.test.ts | 80 | expect(h.executor.exec.mock.calls.at(-1)![0]).toContain("buildx rm --force 'openship-"); | CODE |
| CRITICAL⚡ | …ckages/adapters/src/runtime/cloud-build-limits.test.ts | 81 | expect(h.executor.exec.mock.calls.at(-1)![0]).not.toContain("--keep-state"); | CODE |
| CRITICAL⚡ | …ckages/adapters/src/runtime/cloud-build-limits.test.ts | 82 | expect(h.executor.exec.mock.calls.at(-1)![0]).not.toContain("prune"); | CODE |
| CRITICAL | …ckages/adapters/src/runtime/cloud-build-limits.test.ts | 93 | expect(h.executor.exec.mock.calls.at(-1)![0]).toContain("buildx rm --force 'openship-"); | CODE |
| CRITICAL | …ckages/adapters/src/runtime/cloud-build-limits.test.ts | 94 | expect(h.executor.exec.mock.calls.at(-1)![0]).not.toContain("--keep-state"); | CODE |
| CRITICAL | …test/modules/projects/cloud-routing-regression.test.ts | 161 | expect(h.fixture.routes.set.mock.calls.map(([host, table]) => [host, table.routes[0]?.action])).toEqual([ | CODE |
| CRITICAL | …modules/cloud-workspaces/lifecycle.integration.test.ts | 568 | new Set(h.client.workspaces.create.mock.calls.map(([input]: any[]) => input.idempotency_key)) | CODE |
| CRITICAL | …modules/cloud-workspaces/lifecycle.integration.test.ts | 929 | expect(h.billing.cancelCapacityCheckout.mock.calls.map(([, request]: any[]) => request)).toEqual([saved, saved]); | CODE |
| CRITICAL | …modules/cloud-workspaces/lifecycle.integration.test.ts | 1062 | expect(h.billing.createCheckout.mock.calls.map(([input]) => input)).toEqual([original, original, replacement]); | CODE |
| CRITICAL | …modules/cloud-workspaces/lifecycle.integration.test.ts | 1467 | expect(h.billing.getEntitlement.mock.calls.every(([namespace]: [string]) => namespace === workspace.namespace)).toBe | CODE |
| CRITICAL | …modules/cloud-workspaces/lifecycle.integration.test.ts | 1490 | expect(h.billing.getEntitlement.mock.calls.every(([namespace]: [string]) => namespace === workspace.namespace)).toBe | CODE |
| CRITICAL | …modules/cloud-workspaces/lifecycle.integration.test.ts | 1585 | expect(h.billing.getEntitlement.mock.calls.every(([namespace]: [string]) => namespace === workspace.namespace)).toBe | CODE |
| CRITICAL | apps/api/test/modules/deployments/build.service.test.ts | 773 | const captured = repos.deployment.create.mock.calls.at(-1)?.[0]?.envVars; | CODE |
| CRITICAL | apps/api/test/modules/deployments/build.service.test.ts | 1085 | const meta = repos.deployment.create.mock.calls.at(-1)?.[0]?.meta; | CODE |
| CRITICAL | apps/api/test/modules/deployments/build.service.test.ts | 1789 | const meta = repos.deployment.create.mock.calls.at(-1)?.[0]?.meta; | CODE |
| CRITICAL | apps/api/test/modules/deployments/build.service.test.ts | 2029 | const captured = repos.deployment.create.mock.calls.at(-1)?.[0]?.envVars; | CODE |
| CRITICAL | apps/api/test/modules/deployments/build.service.test.ts | 2414 | const captured = repos.deployment.create.mock.calls.at(-1)?.[0]?.envVars; | CODE |
| CRITICAL | apps/api/test/modules/deployments/build.service.test.ts | 2452 | const captured = repos.deployment.create.mock.calls.at(-1)?.[0]?.envVars; | CODE |
| CRITICAL | apps/api/test/modules/deployments/build.service.test.ts | 2480 | const captured = repos.deployment.create.mock.calls.at(-1)?.[0]?.envVars; | CODE |
| CRITICAL | apps/api/test/modules/deployments/build.service.test.ts | 2502 | const captured = repos.deployment.create.mock.calls.at(-1)?.[0]?.envVars; | CODE |
| CRITICAL | apps/api/test/modules/deployments/build.service.test.ts | 2546 | const persisted = repos.service.syncFromCompose.mock.calls.at(-1)?.[1]?.[0]; | CODE |
| CRITICAL | apps/api/test/modules/deployments/build.service.test.ts | 2652 | const captured = repos.deployment.create.mock.calls.at(-1)?.[0]?.envVars; | CODE |
| CRITICAL | apps/api/test/modules/deployments/build.service.test.ts | 2685 | const captured = repos.deployment.create.mock.calls.at(-1)?.[0]?.envVars; | CODE |
| CRITICAL | apps/api/test/modules/deployments/build.service.test.ts | 2723 | const captured = repos.deployment.create.mock.calls.at(-1)?.[0]?.envVars; | CODE |
| CRITICAL | apps/api/test/modules/deployments/build.service.test.ts | 2753 | const captured = repos.deployment.create.mock.calls.at(-1)?.[0]?.envVars; | CODE |
| CRITICAL | apps/api/test/modules/deployments/build.service.test.ts | 2806 | const meta = repos.deployment.create.mock.calls.at(-1)?.[0]?.meta; | CODE |
| CRITICAL | apps/api/test/modules/deployments/build.service.test.ts | 2846 | const persisted = repos.service.syncFromCompose.mock.calls.at(-1)?.[1]?.[0]; | CODE |
| CRITICAL | apps/api/test/modules/deployments/build.service.test.ts | 2857 | repos.deployment.create.mock.calls.at(-1)?.[0]?.meta.composeServices[0].environment, | CODE |
| CRITICAL | apps/api/test/modules/deployments/build.service.test.ts | 2954 | const meta = repos.deployment.create.mock.calls.at(-1)?.[0].meta as any; | CODE |
| CRITICAL | apps/api/test/modules/deployments/build.service.test.ts | 3038 | const captured = repos.deployment.create.mock.calls.at(-1)?.[0]?.envVars; | CODE |
| CRITICAL | apps/api/test/modules/deployments/build.service.test.ts | 3073 | const meta = repos.deployment.create.mock.calls.at(-1)?.[0]?.meta; | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | packages/core/src/apps/catalog.json | 966 | "placeholder": "UTC", | CODE |
| LOW | packages/core/src/apps/catalog.json | 975 | "placeholder": "en" | CODE |
| LOW | packages/core/src/apps/catalog.json | 1171 | "ADMIN_EMAIL": "admin@example.com" | CODE |
| LOW | packages/core/src/apps/catalog.json | 1295 | "NC_ADMIN_EMAIL": "admin@example.com" | CODE |
| LOW | packages/core/src/apps/catalog.json | 1495 | "GITEA_ADMIN_EMAIL": "admin@example.com" | CODE |
| LOW | packages/core/src/apps/catalog.json | 3939 | "placeholder": "mail.example.com", | CODE |
| LOW | packages/core/src/apps/catalog.json | 3949 | "placeholder": "mail.example.com", | CODE |
| LOW | packages/core/src/apps/catalog.json | 3962 | "placeholder": "993", | CODE |
| LOW | packages/core/src/apps/catalog.json | 3976 | "placeholder": "587", | CODE |
| LOW | packages/core/src/apps/catalog.json | 3994 | "placeholder": "https://mail.example.com", | CODE |
| LOW | packages/core/src/apps/catalog/directus.json | 32 | "ADMIN_EMAIL": "admin@example.com" | CODE |
| LOW | packages/core/src/apps/catalog/n8n.json | 65 | "placeholder": "UTC", | CODE |
| LOW | packages/core/src/apps/catalog/n8n.json | 74 | "placeholder": "en" | CODE |
| LOW | packages/core/src/apps/catalog/nocodb.json | 26 | "NC_ADMIN_EMAIL": "admin@example.com" | CODE |
| LOW | packages/core/src/apps/catalog/webmail.json | 65 | "placeholder": "mail.example.com", | CODE |
| LOW | packages/core/src/apps/catalog/webmail.json | 75 | "placeholder": "mail.example.com", | CODE |
| LOW | packages/core/src/apps/catalog/webmail.json | 88 | "placeholder": "993", | CODE |
| LOW | packages/core/src/apps/catalog/webmail.json | 102 | "placeholder": "587", | CODE |
| LOW | packages/core/src/apps/catalog/webmail.json | 120 | "placeholder": "https://mail.example.com", | CODE |
| LOW | packages/core/src/apps/catalog/gitea.json | 28 | "GITEA_ADMIN_EMAIL": "admin@example.com" | CODE |
| LOW | packages/adapters/src/system/tls-probe.test.ts | 107 | for (const host of ["*.example.com", "example.com:22", "user@example.com", "example.com/path"]) | CODE |
| LOW | apps/web/public/app.schema.json | 365 | "placeholder": { "description": "Input placeholder.", "type": "string" }, | CODE |
| LOW | apps/cli/test/e2e/reset-admin-password.test.ts | 59 | ? { status: 200, json: { ok: true, email: "admin@example.com" } } | CODE |
| LOW | apps/cli/test/e2e/reset-admin-password.test.ts | 79 | expect(r.out).toContain("admin@example.com"); | CODE |
| LOW⚡ | apps/dashboard/src/lib/dotenv.test.ts | 14 | expect(parseDotenv("just some text\nTOKEN=dummy-value")).toEqual([ | CODE |
| LOW⚡ | apps/dashboard/src/lib/dotenv.test.ts | 15 | { key: "TOKEN", value: "dummy-value" }, | CODE |
| LOW⚡ | apps/dashboard/src/lib/dotenv.test.ts | 21 | expect(parseDotenv("1FOO=x\nFOO-BAR=x\nGOOD_KEY=dummy-value")).toEqual([ | CODE |
| LOW⚡ | apps/dashboard/src/lib/dotenv.test.ts | 22 | { key: "GOOD_KEY", value: "dummy-value" }, | CODE |
| LOW⚡ | apps/dashboard/src/lib/dotenv.test.ts | 31 | expect(parseDotenv('A="fake-token"')).toEqual([{ key: "A", value: "fake-token" }]); | CODE |
| LOW⚡ | apps/dashboard/src/lib/dotenv.test.ts | 32 | expect(parseDotenv("B='dummy-value'")).toEqual([{ key: "B", value: "dummy-value" }]); | CODE |
| LOW | apps/dashboard/src/lib/dotenv.test.ts | 58 | expect(parseDotenv("\uFEFFA=fake-value\r\nB=dummy-value\r\n")).toEqual([ | CODE |
| LOW | apps/dashboard/src/lib/dotenv.test.ts | 60 | { key: "B", value: "dummy-value" }, | CODE |
| LOW | apps/dashboard/src/lib/sseMessageProcessors.test.ts | 880 | const result = processor.parseMessage({ type: "custom-event", foo: "dummy-value" }); | CODE |
| LOW | apps/dashboard/src/lib/sseMessageProcessors.test.ts | 881 | expect(result).toMatchObject({ type: "custom-event", foo: "dummy-value" }); | CODE |
| LOW | apps/dashboard/src/i18n/project-rename-copy.test.ts | 37 | for (const key of ["title", "description", "label", "placeholder", "save", "cancel"]) { | CODE |
| LOW | apps/dashboard/src/i18n/locales/ja/settings.json | 241 | "placeholder": "ghp_… または github_pat_…", | CODE |
| LOW | apps/dashboard/src/i18n/locales/ja/settings.json | 376 | "placeholder": "Acme Inc", | CODE |
| LOW | apps/dashboard/src/i18n/locales/ja/settings.json | 376 | "placeholder": "Acme Inc", | CODE |
| LOW | apps/dashboard/src/i18n/locales/ja/chrome.json | 8 | "namePlaceholder": "Acme Corp", | CODE |
| LOW | apps/dashboard/src/i18n/locales/ja/projectSettings.json | 137 | "placeholder": "マイプロジェクト", | CODE |
| LOW | apps/dashboard/src/i18n/locales/ja/projectSettings.json | 398 | "placeholder": "storage\nuploads:/app/public/uploads", | CODE |
| LOW | apps/dashboard/src/i18n/locales/pt/settings.json | 241 | "placeholder": "ghp_… ou github_pat_…", | CODE |
| LOW | apps/dashboard/src/i18n/locales/pt/settings.json | 376 | "placeholder": "Acme Inc", | CODE |
| LOW | apps/dashboard/src/i18n/locales/pt/settings.json | 376 | "placeholder": "Acme Inc", | CODE |
| LOW | apps/dashboard/src/i18n/locales/pt/chrome.json | 8 | "namePlaceholder": "Acme Corp", | CODE |
| LOW | apps/dashboard/src/i18n/locales/pt/projectSettings.json | 137 | "placeholder": "Meu projeto", | CODE |
| LOW | apps/dashboard/src/i18n/locales/pt/projectSettings.json | 398 | "placeholder": "storage\nuploads:/app/public/uploads", | CODE |
| LOW | apps/dashboard/src/i18n/locales/zh/settings.json | 241 | "placeholder": "ghp_… 或 github_pat_…", | CODE |
| LOW | apps/dashboard/src/i18n/locales/zh/settings.json | 376 | "placeholder": "Acme Inc", | CODE |
| LOW | apps/dashboard/src/i18n/locales/zh/settings.json | 376 | "placeholder": "Acme Inc", | CODE |
| LOW | apps/dashboard/src/i18n/locales/zh/settings.json | 564 | "namePlaceholder": "Jane Doe", | CODE |
| LOW | apps/dashboard/src/i18n/locales/zh/chrome.json | 8 | "namePlaceholder": "Acme Corp", | CODE |
| LOW | apps/dashboard/src/i18n/locales/zh/projectSettings.json | 137 | "placeholder": "我的项目", | CODE |
| LOW | apps/dashboard/src/i18n/locales/zh/projectSettings.json | 398 | "placeholder": "storage\nuploads:/app/public/uploads", | CODE |
| LOW | apps/dashboard/src/i18n/locales/ar/settings.json | 241 | "placeholder": "ghp_… أو github_pat_…", | CODE |
| LOW | apps/dashboard/src/i18n/locales/ar/settings.json | 376 | "placeholder": "Acme Inc", | CODE |
| LOW | apps/dashboard/src/i18n/locales/ar/settings.json | 376 | "placeholder": "Acme Inc", | CODE |
| LOW | apps/dashboard/src/i18n/locales/ar/settings.json | 564 | "namePlaceholder": "Jane Doe", | CODE |
| LOW | apps/dashboard/src/i18n/locales/ar/chrome.json | 8 | "namePlaceholder": "Acme Corp", | CODE |
| LOW | apps/dashboard/src/i18n/locales/ar/projectSettings.json | 137 | "placeholder": "مشروعي", | CODE |
| 72 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | apps/email/engine/iRedMail.sh | 6 | # This file is part of iRedMail, which is an open source mail server | COMMENT |
| MEDIUM | apps/email/engine/tools/migrate_sql_alias_table.py | 2 | # This file is used to migrate SQL table `vmail.alias` for SQL backends. | COMMENT |
| MEDIUM | apps/email/engine/dialog/virtual_domain_config.sh | 6 | # This file is part of iRedMail, which is an open source mail server | COMMENT |
| MEDIUM | apps/email/engine/dialog/pgsql_config.sh | 6 | # This file is part of iRedMail, which is an open source mail server | COMMENT |
| MEDIUM | apps/email/engine/dialog/optional_components.sh | 6 | # This file is part of iRedMail, which is an open source mail server | COMMENT |
| MEDIUM | apps/email/engine/dialog/config_via_dialog.sh | 6 | # This file is part of iRedMail, which is an open source mail server | COMMENT |
| MEDIUM | apps/email/engine/pkgs/get_all.sh | 7 | # This file is part of iRedMail, which is an open source mail server | COMMENT |
| MEDIUM | apps/email/engine/pkgs/get_all.sh | 112 | # Create a temp file to store shasum | COMMENT |
| MEDIUM | apps/email/engine/functions/amavisd.sh | 6 | # This file is part of iRedMail, which is an open source mail server | COMMENT |
| MEDIUM | apps/email/engine/functions/amavisd.sh | 117 | # Create a empty disclaimer. | COMMENT |
| MEDIUM | apps/email/engine/functions/packages_freebsd.sh | 6 | # This file is part of iRedMail, which is an open source mail server | COMMENT |
| MEDIUM | apps/email/engine/functions/postgresql.sh | 6 | # This file is part of iRedMail, which is an open source mail server | COMMENT |
| MEDIUM | apps/email/engine/functions/backend.sh | 6 | # This file is part of iRedMail, which is an open source mail server | COMMENT |
| MEDIUM | apps/email/engine/functions/iredapd.sh | 7 | # This file is part of iRedMail, which is an open source mail server | COMMENT |
| MEDIUM | apps/email/engine/functions/clamav.sh | 6 | # This file is part of iRedMail, which is an open source mail server | COMMENT |
| MEDIUM | apps/email/engine/functions/dovecot.sh | 6 | # This file is part of iRedMail, which is an open source mail server | COMMENT |
| MEDIUM | apps/email/engine/functions/cleanup.sh | 6 | # This file is part of iRedMail, which is an open source mail server | COMMENT |
| MEDIUM | apps/email/engine/functions/postfix.sh | 6 | # This file is part of iRedMail, which is an open source mail server | COMMENT |
| MEDIUM | apps/email/engine/functions/postfix.sh | 416 | # Create the directory if not present. | COMMENT |
| MEDIUM | apps/email/engine/functions/fail2ban.sh | 6 | # This file is part of iRedMail, which is an open source mail server | COMMENT |
| MEDIUM | apps/email/engine/functions/packages.sh | 6 | # This file is part of iRedMail, which is an open source mail server | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | packages/adapters/src/cluster/k3s-host.ts | 246 | except Exception as error: return {'ready': False, 'message': str(error)[-2000:]} | CODE |
| LOW⚡ | packages/adapters/src/cluster/k3s-host.ts | 362 | except Exception as error: | CODE |
| LOW⚡ | packages/adapters/src/network/private-network.ts | 43 | except Exception: | CODE |
| LOW⚡ | packages/adapters/src/network/managed-network-host.ts | 431 | except Exception as error: | CODE |
| MEDIUM | apps/email/engine/tools/create_mail_user_OpenLDAP.py | 293 | print("Error: file not exist:", CSV) | CODE |
| LOW | apps/email/engine/tools/ldap_assign_user_to_groups.py | 150 | except Exception as e: | STRING |
| LOW | …ail/engine/tools/ldap_move_members_to_another_group.py | 120 | except Exception as e: | STRING |
| LOW | apps/email/engine/tools/migrate_sql_alias_table.py | 52 | except Exception as e: | CODE |
| LOW | apps/email/engine/tools/migrate_sql_alias_table.py | 145 | except Exception as e: | CODE |
| MEDIUM | apps/email/engine/tools/migrate_sql_alias_table.py | 150 | print("Error while migrating %s %s: %s" % (_type, m, repr(e))) | CODE |
| LOW | apps/email/engine/tools/migrate_sql_alias_table.py | 168 | except Exception as e: | CODE |
| MEDIUM | apps/email/engine/tools/migrate_sql_alias_table.py | 173 | print("Error while migrating moderators of alias account %s: %s" % (m, repr(e))) | CODE |
| LOW | …ps/email/engine/update/ldap/update-ldap-dovecot-2.3.py | 58 | except Exception as e: | CODE |
| MEDIUM | …ps/email/engine/update/ldap/update-ldap-dovecot-2.3.py | 59 | print("Error while updating user {}: {}".format(mail, repr(e))) | CODE |
| LOW | apps/email/engine/update/1.4.1/update-ldap.py | 55 | except Exception as e: | CODE |
| MEDIUM | apps/email/engine/update/1.4.1/update-ldap.py | 56 | print("Error while updating user {}: {}".format(mail, repr(e))) | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | .github/workflows/scaling-e2e.yml | 78 | # the local test harness or on a user's server. | COMMENT |
| MEDIUM | .github/workflows/scaling-e2e.yml | 85 | # this cleanup into the local test harness or prune arbitrary volumes. | COMMENT |
| MEDIUM | …/dashboard/src/app/(auth)/select-organization/page.tsx | 133 | // payloads — robust against shared members between orgs. | COMMENT |
| MEDIUM | apps/email/client/components/mail/thread-display.tsx | 195 | // wiring robust to row-click misses, keyboard navigation, and direct | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | packages/adapters/src/infra/openresty-lua.ts | 794 | # scaffolding, not a site. | COMMENT |
| MEDIUM | apps/dashboard/src/components/monitoring/VisitorMap.tsx | 463 | // bg-card shell with solid bg-muted blocks — an outline-only scaffold reads as | COMMENT |
| MEDIUM | apps/api/src/modules/system/setup.controller.ts | 460 | // guardrails authMiddleware does. Using the shared guard (canonical authMode | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | packages/db-email/src/schema/mail_app.ts | 84 | // AI-generated summary of a single message. `connection_id` upstream is | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | apps/email/engine/tools/fail2ban_unban_ip.sh | 6 | # Usage: | COMMENT |
| LOW | apps/email/engine/tools/create_mail_user_SQL.sh | 8 | # Usage: | COMMENT |
| LOW⚡ | apps/email/engine/functions/cleanup.sh | 30 | # Usage: | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …rc/engine/modules/github/github-application.service.ts | 336 | // Step 2: OAuth done. Check if installations already exist. | COMMENT |
| LOW | …ashboard/src/context/deployment/useDeploymentBuild.tsx | 789 | // Step 1: Ensure project exists | COMMENT |
| LOW | …ashboard/src/context/deployment/useDeploymentBuild.tsx | 906 | // Step 2: Create deployment with config snapshot + env vars | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …rc/engine/modules/github/github-application.service.ts | 336 | // Step 2: OAuth done. Check if installations already exist. | COMMENT |
| LOW | …ashboard/src/context/deployment/useDeploymentBuild.tsx | 789 | // Step 1: Ensure project exists | COMMENT |
| LOW | …ashboard/src/context/deployment/useDeploymentBuild.tsx | 906 | // Step 2: Create deployment with config snapshot + env vars | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | apps/email/engine/tools/create_mail_user_OpenLDAP.py | 128 | CODE | |
| LOW | apps/email/engine/tools/migrate_sql_alias_table.py | 69 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | apps/email/client/components/create/email-phrases.ts | 70 | 'Let me know if you need any clarification ', | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | apps/email/client/app/entry.server.tsx | 6 | export default async function handleRequest( | CODE |