HP
Helix Proxy
{#if token}
{#if showUserMenu}
{user?.email || 'admin'}
Administrator
{/if}
{/if}
{#if !token}

Sign in

{:else}
{#if !mustChangePassword}
{#if showHostsMenu}
{/if}
{/if} {#if loading}
Loading...
{/if} {#if mustChangePassword || showChangePw}
{mustChangePassword ? 'First login: set a new admin password' : 'Change Admin Password'}

{mustChangePassword ? 'The default "password" must be changed before using the manager.' : 'Enter your current password and choose a new one.'}

{#if !mustChangePassword} {/if}
{#if !mustChangePassword} {/if}
{/if} {#if currentTab === 'dashboard'}
Dashboard
{/if} {#if currentTab === 'proxy'}
Proxy Hosts
{#each filteredProxy as h} {:else} {/each}
Owner Source ↓ Destination SSL Access Status
{owner.initial}
{owner.label}
Created: {h.createdOn || '—'}
{h.forwardScheme}://{h.forwardHost}:{h.forwardPort} {sslCertLabel(h.certificateId, certificates, h.sslForced)} {h.accessListId ? accessLabelById(h.accessListId, accessLists) : 'Public'} {h.enabled ? 'Online' : 'Offline'}
There are no Proxy Hosts
Why don't you create one?
{/if} {#if currentTab === 'certs'}
Certificates
{#each filteredCerts as c} {:else} {/each}
OwnerName ↓ProviderExpiresStatus
{owner.initial}
{owner.label}
{certLabel(c)}
Created: {c.createdOn || '—'}
{providerLabel(c.provider)} {c.expiresOn || '-'} {isCertInUse(c.id) ? 'In Use' : 'Available'}
There are no Certificates
Why don't you create one?
{/if} {#if currentTab === 'access'}
Access Lists
{#each filteredAccess as al} {:else} {/each}
OwnerName ↓AuthorizationAccessSatisfyProxy Hosts
{owner.initial}
{owner.label}
{al.name || '-'}
Created: {al.createdOn || '—'}
{(al.items || []).length} User {(al.clients || []).length} Rule {al.satisfyAny ? 'Any' : 'All'} {proxyHosts.filter((p:any)=>p.accessListId === al.id).length}
There are no Access Lists
Why don't you create one?
{/if} {#if currentTab === 'streams'}
Streams
{#each filteredStreams as s} {@const status = streamStatusDisplay(s)} {:else} {/each}
Owner Incoming ↓ Forward SSL Status
{owner.initial}
{owner.label}
{s.incomingPort}
Created: {s.createdOn || '—'}
{s.forwardingHost}:{s.forwardingPort} {sslCertLabel(s.certificateId, certificates)} {s.tcpForwarding ? 'TCP' : ''}{s.udpForwarding ? ' UDP' : ''} {status.label}
There are no Streams
Why don't you create one?
{/if} {#if currentTab === 'redir'}
Redirection Hosts
{#each filteredRedirs as r} {:else} {/each}
Owner Source ↓ Destination Status
{owner.initial}
{owner.label}
Created: {r.createdOn || '—'}
{r.forwardDomainName} ({r.forwardHttpCode} {r.forwardScheme}) {r.enabled ? 'Online' : 'Offline'}
There are no Redirection Hosts
Why don't you create one?
{/if} {#if currentTab === 'dead'}
404 Hosts
{#each filteredDeads as d} {:else} {/each}
Owner Source ↓ Custom HTML Status
{owner.initial}
{owner.label}
Created: {d.createdOn || '—'}
{d.meta && d.meta.html ? 'yes (per-host)' : 'default 404'} {d.enabled ? 'Online' : 'Offline'}
There are no 404 Hosts
Why don't you create one?
{/if} {#if currentTab === 'audit'}
Audit Logs (recent first)
{#each filteredAudit.slice().reverse() as log}
{log.createdOn} {auditLogSummary(log, user)}
{:else}
No logs yet
{/each}
{/if} {#if currentTab === 'settings'}
Settings
Default site
{#if settingsData.default_site === 'redirect'} {/if}
{/if} closeForm()}> {#if formModalType === 'stream'}
{ await createStream(e); if (!formError) closeForm(); }} class="space-y-3 text-sm">
{:else if formModalType === 'redir'}
{ await createRedir(e); if (!formError) closeForm(); }} class="space-y-3 text-sm">
{:else if formModalType === 'dead'}
{ await createDead(e); if (!formError) closeForm(); }} class="space-y-3 text-sm">
{:else if formModalType === 'proxy'}
{ await createProxy(e); if (!formError) closeForm(); }} class="space-y-3 text-sm">
{#if proxyFormTab === 'details'}
Options
{:else if proxyFormTab === 'locations'}
Custom locations
{#each (newProxy.locations as any[]) as loc, i}
{/each}
{:else if proxyFormTab === 'ssl'}
{:else if proxyFormTab === 'headers'}
Request headers
{#each (newProxy.requestHeaders || []) as hdr, i}
{/each}
Response headers
{#each (newProxy.responseHeaders || []) as hdr, i}
{/each}
Hide headers
{#each (newProxy.hideHeaders || []) as name, i}
{/each}
{/if}
{:else if formModalType === 'cert'}
{ await createCert(e); if (!formError) closeForm(); }} class="space-y-3 text-sm">
{:else if formModalType === 'customCert'}
{ await createCustomCert(e); if (!formError) closeForm(); }} class="space-y-3 text-sm">
{:else if formModalType === 'access'}
{ await createAccess(e); if (!formError) closeForm(); }} class="space-y-3 text-sm">
{:else}
No form selected.
{/if}
{ confirmState.message = ''; confirmState.onConfirm = null; }}>

{confirmState.message}

{/if}