174 lines
8.5 KiB
HTML
174 lines
8.5 KiB
HTML
{{define "page_share"}}
|
|
{{template "guest_shell_open" dict "Title" (t "page_title") "Lang" (lang)}}
|
|
{{if .NotFound}}
|
|
<div class="cyber-shell text-center">
|
|
<div class="hero-icon"><i class="fa-solid fa-link-slash"></i></div>
|
|
<h1>{{t "err_link_not_found"}}</h1>
|
|
<p class="lead">{{t "err_bad_link"}}</p>
|
|
</div>
|
|
{{else}}
|
|
<div class="d-flex justify-content-end lang-switch">
|
|
<span class="lang-switch__label"><i class="fa-solid fa-globe"></i></span>
|
|
<a class="lang-switch__btn {{if eq2 (lang) "ru"}}active{{end}}" href="?k={{.Token}}&lang=ru">RU</a>
|
|
<a class="lang-switch__btn {{if eq2 (lang) "en"}}active{{end}}" href="?k={{.Token}}&lang=en">EN</a>
|
|
</div>
|
|
|
|
<div class="cyber-shell">
|
|
<span class="cyber-corner cyber-corner--tl"></span><span class="cyber-corner cyber-corner--tr"></span>
|
|
<span class="cyber-corner cyber-corner--bl"></span><span class="cyber-corner cyber-corner--br"></span>
|
|
<div class="cyber-hero">
|
|
<div class="hero-icon"><i class="fa-solid fa-shield-halved"></i></div>
|
|
<div class="hero-brand">{{t "hero_brand"}}</div>
|
|
<h1>{{t "hero_title"}}</h1>
|
|
<p class="lead">{{t "hero_lead"}}</p>
|
|
</div>
|
|
|
|
{{template "guest_flash" .}}
|
|
|
|
{{if .Maintenance}}<div class="alert alert-warning">{{htmlSafe (t "maintenance_banner")}}</div>{{end}}
|
|
|
|
<div class="share-stats">
|
|
<div class="card share-panel"><div class="share-panel__body text-center">
|
|
<div class="stat__value--sm fw-bold">{{.Link.ExpiresLabel}}</div>
|
|
<div class="hint mb-0">{{t "term_label"}}</div>
|
|
</div></div>
|
|
<div class="card share-panel"><div class="share-panel__body text-center">
|
|
<div class="stat__value--sm fw-bold">{{sub .Link.MaxUses .Link.UseCount}} {{t "stat_of"}} {{.Link.MaxUses}}</div>
|
|
<div class="hint mb-0">{{t "stat_remaining"}}</div>
|
|
</div></div>
|
|
</div>
|
|
|
|
{{if .Expired}}
|
|
<div class="card share-panel">
|
|
<div class="share-panel__head share-panel__head--pink"><i class="fa-solid fa-hourglass-end"></i> {{t "expired_card"}}</div>
|
|
<div class="share-panel__body">
|
|
<p class="hint">{{t "renewal_hint"}}</p>
|
|
<form method="post" action="{{appURL "share"}}">
|
|
<input type="hidden" name="_csrf" value="{{csrf}}">
|
|
<input type="hidden" name="action" value="renew">
|
|
<input type="hidden" name="k" value="{{.Token}}">
|
|
<div class="mb-2"><input class="form-control" name="code" placeholder="{{t "renewal_code_ph"}}" required></div>
|
|
<button class="btn btn-primary w-100" type="submit"><i class="fa-solid fa-key"></i> {{t "renewal_btn"}}</button>
|
|
</form>
|
|
</div>
|
|
</div>
|
|
{{else}}
|
|
|
|
{{if .Maintenance}}
|
|
<div class="card share-panel">
|
|
<div class="share-panel__head share-panel__head--pink"><i class="fa-solid fa-screwdriver-wrench"></i> {{t "maintenance_card_title"}}</div>
|
|
<div class="share-panel__body"><p class="hint mb-0">{{t "maintenance_card_body"}}</p></div>
|
|
</div>
|
|
{{else if .LimitReached}}
|
|
<div class="alert alert-warning">{{t "limit_reached" "max" (printf "%d" .Link.MaxUses)}}</div>
|
|
{{else}}
|
|
<div class="card share-panel">
|
|
<div class="share-panel__head"><i class="fa-solid fa-plus"></i> {{t "field_location"}}</div>
|
|
<div class="share-panel__body">
|
|
<form method="post" action="{{appURL "share"}}">
|
|
<input type="hidden" name="_csrf" value="{{csrf}}">
|
|
<input type="hidden" name="action" value="create">
|
|
<input type="hidden" name="k" value="{{.Token}}">
|
|
<div class="mb-3">
|
|
<label class="form-label">{{t "field_location"}}</label>
|
|
<select class="form-select" name="server_id" required {{if not .Servers}}disabled{{end}}>
|
|
{{range .Servers}}<option value="{{.ID}}" {{if .Disabled}}disabled{{end}}>{{if .Flag}}{{.Flag}} {{end}}{{.Label}}{{if .Speed}} ({{t "server_speed_prefix" "speed" .Speed}}){{end}}</option>{{end}}
|
|
</select>
|
|
{{if not .Servers}}<div class="hint">{{t "js_servers_empty"}}</div>{{end}}
|
|
</div>
|
|
<div class="mb-3">
|
|
<label class="form-label d-block">{{t "field_protocol"}}</label>
|
|
<div class="form-check form-check-inline">
|
|
<input class="form-check-input" type="radio" name="protocol" id="proto_wg" value="wireguard" checked>
|
|
<label class="form-check-label" for="proto_wg">WireGuard</label>
|
|
</div>
|
|
<div class="form-check form-check-inline">
|
|
<input class="form-check-input" type="radio" name="protocol" id="proto_awg" value="awg2">
|
|
<label class="form-check-label" for="proto_awg">AmneziaWG 2</label>
|
|
</div>
|
|
<div class="form-check form-check-inline">
|
|
<input class="form-check-input" type="radio" name="protocol" id="proto_vless" value="vless">
|
|
<label class="form-check-label" for="proto_vless">VLESS</label>
|
|
</div>
|
|
</div>
|
|
<p class="hint">{{htmlSafe (t "hint_wait")}}</p>
|
|
<button type="submit" class="btn btn-primary w-100"><i class="fa-solid fa-bolt"></i> {{t "btn_get_config"}}</button>
|
|
</form>
|
|
</div>
|
|
</div>
|
|
{{end}}
|
|
{{end}}
|
|
|
|
{{if .Bundles}}
|
|
<div class="card share-panel card--download">
|
|
<div class="share-panel__head"><i class="fa-solid fa-list"></i> {{t "configs_title"}}</div>
|
|
<div class="share-panel__body">
|
|
<p class="share-panel__intro">{{htmlSafe (t "configs_intro" "count" (printf "%d" (len .Bundles)))}}</p>
|
|
{{range .Bundles}}
|
|
<div class="dl-bundle">
|
|
<div class="d-flex justify-content-between align-items-center mb-2">
|
|
<strong class="mono">{{.ConnectionName}}</strong>
|
|
<span class="badge text-bg-secondary">{{.Protocol}}</span>
|
|
</div>
|
|
<div class="d-flex flex-wrap gap-2 mb-2">
|
|
{{if .Conf}}<a class="btn btn-sm btn-outline-info" href="{{shareDL $.Token .CreationID "conf"}}"><i class="fa-solid fa-download"></i> {{.Conf.Filename}}</a>{{end}}
|
|
{{if .Vpn}}<a class="btn btn-sm btn-outline-info" href="{{shareDL $.Token .CreationID "vpn"}}"><i class="fa-solid fa-download"></i> {{.Vpn.Filename}}</a>{{end}}
|
|
{{if .Zip}}<a class="btn btn-sm btn-outline-secondary" href="{{shareDL $.Token .CreationID "zip"}}"><i class="fa-solid fa-file-zipper"></i> {{t "btn_download_zip"}}</a>{{end}}
|
|
</div>
|
|
|
|
{{if not $.Maintenance}}
|
|
<details class="mb-2">
|
|
<summary class="hint" style="cursor:pointer;">{{t "migrate_title"}}</summary>
|
|
<form method="post" action="{{appURL "share"}}" class="mt-2">
|
|
<input type="hidden" name="_csrf" value="{{csrf}}">
|
|
<input type="hidden" name="action" value="migrate">
|
|
<input type="hidden" name="k" value="{{$.Token}}">
|
|
<input type="hidden" name="creation_id" value="{{.CreationID}}">
|
|
<div class="row g-2">
|
|
<div class="col-7">
|
|
<select class="form-select form-select-sm" name="new_server_id" required>
|
|
{{range $.Servers}}<option value="{{.ID}}" {{if .Disabled}}disabled{{end}}>{{.Label}}</option>{{end}}
|
|
</select>
|
|
</div>
|
|
<div class="col-5">
|
|
<select class="form-select form-select-sm" name="new_protocol">
|
|
<option value="wireguard">WireGuard</option>
|
|
<option value="awg2">AmneziaWG 2</option>
|
|
<option value="vless">VLESS</option>
|
|
</select>
|
|
</div>
|
|
</div>
|
|
<p class="hint">{{t "migrate_warning"}}</p>
|
|
<button type="submit" class="btn btn-sm btn-outline-warning w-100"><i class="fa-solid fa-arrows-turn-right"></i> {{t "migrate_submit"}}</button>
|
|
</form>
|
|
</details>
|
|
{{end}}
|
|
</div>
|
|
{{end}}
|
|
</div>
|
|
</div>
|
|
{{end}}
|
|
|
|
{{if not .Expired}}
|
|
<div class="card share-panel">
|
|
<div class="share-panel__head"><i class="fa-solid fa-key"></i> {{t "renewal_title"}}</div>
|
|
<div class="share-panel__body">
|
|
<p class="hint">{{t "renewal_hint"}}</p>
|
|
<form method="post" action="{{appURL "share"}}">
|
|
<input type="hidden" name="_csrf" value="{{csrf}}">
|
|
<input type="hidden" name="action" value="renew">
|
|
<input type="hidden" name="k" value="{{.Token}}">
|
|
<div class="mb-2"><input class="form-control" name="code" placeholder="{{t "renewal_code_ph"}}" required></div>
|
|
<button class="btn btn-outline-info w-100" type="submit"><i class="fa-solid fa-arrow-rotate-right"></i> {{t "renewal_btn"}}</button>
|
|
</form>
|
|
</div>
|
|
</div>
|
|
{{end}}
|
|
|
|
{{template "guest_subnav" .}}
|
|
</div>
|
|
{{template "guest_footer" .}}
|
|
{{end}}
|
|
{{template "guest_shell_close" .}}
|
|
{{end}}
|