278 lines
13 KiB
PHP
278 lines
13 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
style('qortal_integration', 'account');
|
|
script('qortal_integration', 'account');
|
|
?>
|
|
|
|
<div
|
|
id="qortal-account-root"
|
|
class="section"
|
|
data-qapps-request-url="<?php p((string)($_['qappsRequestUrl'] ?? '')); ?>"
|
|
data-gateway-proxy-url="<?php p((string)($_['gatewayProxyUrl'] ?? '')); ?>"
|
|
data-node-balance-url="<?php p((string)($_['nodeBalanceUrl'] ?? '')); ?>"
|
|
data-user-mappings-url="<?php p((string)($_['userMappingsUrl'] ?? '')); ?>"
|
|
data-qapps-approve-url="<?php p((string)($_['qappsApproveUrl'] ?? '')); ?>"
|
|
data-qapps-unlock-url="<?php p((string)($_['qappsUnlockUrl'] ?? '')); ?>"
|
|
data-qapps-unlock-status-url="<?php p((string)($_['qappsUnlockStatusUrl'] ?? '')); ?>"
|
|
data-user-create-wallet-url="<?php p((string)($_['userCreateWalletUrl'] ?? '')); ?>"
|
|
data-user-backup-wallet-url="<?php p((string)($_['userBackupWalletUrl'] ?? '')); ?>"
|
|
data-user-request-initial-qort-url="<?php p((string)($_['userRequestInitialQortUrl'] ?? '')); ?>"
|
|
data-initial-qort-requests-url="<?php p((string)($_['initialQortRequestsUrl'] ?? '')); ?>"
|
|
data-initial-qort-action-url="<?php p((string)($_['initialQortActionUrl'] ?? '')); ?>"
|
|
data-nextcloud-public-url="<?php p((string)($_['nextcloudPublicUrl'] ?? '')); ?>"
|
|
data-settings-path="<?php p((string)($_['settingsPath'] ?? '')); ?>"
|
|
data-debug-enabled="<?php p(!empty($_['qappsDebugEnabled']) ? '1' : '0'); ?>"
|
|
data-is-admin="<?php p(!empty($_['isAdmin']) ? '1' : '0'); ?>"
|
|
data-current-user-id="<?php p((string)($_['currentUserId'] ?? '')); ?>"
|
|
data-qapps-names="<?php p(json_encode($_['qappsNames'] ?? [], JSON_UNESCAPED_SLASHES)); ?>"
|
|
data-qapps-cards="<?php p(json_encode($_['qappsCards'] ?? [], JSON_UNESCAPED_SLASHES)); ?>"
|
|
data-qapps-enabled="<?php p(!empty($_['qappsEnabled']) ? '1' : '0'); ?>"
|
|
data-qapps-url="<?php p((string)($_['qappsUrl'] ?? '')); ?>"
|
|
>
|
|
<div class="qortal-page-header">
|
|
<div>
|
|
<h2><?php p((string)($_['title'] ?? 'Qortal Dashboard')); ?></h2>
|
|
<p class="qortal-help">Your decentralized account hub, powered by Qortal.</p>
|
|
</div>
|
|
<div class="qortal-page-actions">
|
|
<button id="qortal-account-download-backup" class="button">Download Backup File</button>
|
|
<a id="qortal-account-settings-link" class="button" href="#">Advanced Settings</a>
|
|
<button id="qortal-account-refresh" class="button">Refresh</button>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="qortal-account-onboarding" class="qortal-card qortal-card-hero qortal-hidden">
|
|
<h3>Create Your Qortal Account</h3>
|
|
<p class="qortal-note">
|
|
This creates your account on the next generation distributed internet, powered by Qortal.
|
|
</p>
|
|
<div class="qortal-grid">
|
|
<div>
|
|
<label for="qortal-account-create-password" class="qortal-label">Wallet Password</label>
|
|
<input id="qortal-account-create-password" type="password" autocomplete="new-password" placeholder="Required">
|
|
</div>
|
|
<div class="qortal-debug-only qortal-hidden">
|
|
<label for="qortal-account-create-kdf" class="qortal-label">KDF Threads (optional)</label>
|
|
<input id="qortal-account-create-kdf" type="number" min="1" placeholder="Optional">
|
|
</div>
|
|
</div>
|
|
<div class="qortal-hero-actions">
|
|
<button id="qortal-account-create-button" class="button button-primary">Create Qortal Account</button>
|
|
</div>
|
|
<pre id="qortal-account-create-result" class="qortal-status qortal-compact-status">No wallet linked yet.</pre>
|
|
</div>
|
|
|
|
<div id="qortal-account-wallet-pane" class="qortal-hidden">
|
|
<div class="qortal-wallet-summary">
|
|
<div id="qortal-account-address-card" class="qortal-wallet-summary__item qortal-wallet-summary__item--address">
|
|
<span class="qortal-label">Qortal Address</span>
|
|
<span id="qortal-account-address" class="qortal-value">—</span>
|
|
<div class="qortal-item-actions">
|
|
<button id="qortal-account-copy-address" class="button">Copy Address</button>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="qortal-account-balance-card" class="qortal-wallet-summary__item qortal-wallet-summary__item--balance">
|
|
<span class="qortal-label">QORT Balance</span>
|
|
<span id="qortal-account-balance" class="qortal-value">—</span>
|
|
<div id="qortal-account-request-wrap" class="qortal-item-actions qortal-hidden">
|
|
<button id="qortal-account-request-qort" class="button">Request Initial QORT</button>
|
|
<p id="qortal-account-request-help" class="qortal-note">
|
|
QORT is required to publish data and use advanced decentralized features.
|
|
</p>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="qortal-account-primary-card" class="qortal-wallet-summary__item qortal-wallet-summary__item--primary">
|
|
<span class="qortal-label">Primary Name</span>
|
|
<span id="qortal-account-primary-name" class="qortal-value">—</span>
|
|
<div class="qortal-item-actions">
|
|
<button id="qortal-account-register-name-button" class="button button-primary">Register Qortal Name</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="qortal-account-app-gallery-card" class="qortal-card qortal-hidden">
|
|
<div class="qortal-card-title qortal-card-title--compact">
|
|
<h3>Q-Apps</h3>
|
|
<button id="qortal-account-app-gallery-toggle" class="button">Hide</button>
|
|
</div>
|
|
<div id="qortal-account-app-gallery-body">
|
|
<p class="qortal-note">Q-Apps are completely decentralized, cannot be hacked, shut down, censored, or taken down. They do not rely upon the internet at all. Access is possible both inside and outside this cloud server. Powered By Qortal.</p>
|
|
<div id="qortal-account-app-gallery" class="qortal-app-grid"></div>
|
|
</div>
|
|
</div>
|
|
|
|
<pre id="qortal-account-request-result" class="qortal-status qortal-compact-status qortal-debug-only qortal-hidden">No request sent yet.</pre>
|
|
<p id="qortal-account-request-feedback" class="qortal-note qortal-hidden"></p>
|
|
|
|
<div id="qortal-account-user-requests-card" class="qortal-card">
|
|
<div class="qortal-card-title qortal-card-title--compact">
|
|
<h3>Initial QORT Requests</h3>
|
|
<button id="qortal-account-user-requests-toggle" class="button">Show</button>
|
|
</div>
|
|
<div id="qortal-account-user-requests-body" class="qortal-hidden">
|
|
<p class="qortal-note" id="qortal-account-request-details"></p>
|
|
<p id="qortal-account-user-requests-empty" class="qortal-note">No requests yet.</p>
|
|
<div id="qortal-account-user-requests-list" class="qortal-request-list"></div>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="qortal-account-admin-requests-card" class="qortal-card qortal-hidden">
|
|
<div class="qortal-card-title qortal-card-title--compact">
|
|
<h3>Admin Request Queue</h3>
|
|
<button id="qortal-account-admin-requests-toggle" class="button">Show</button>
|
|
</div>
|
|
<div id="qortal-account-admin-requests-body" class="qortal-hidden">
|
|
<p class="qortal-note">
|
|
Yellow = pending. Green = QORT sent. Red = denied. Use Send, Message, or Deny on each request.
|
|
</p>
|
|
<p id="qortal-account-admin-requests-empty" class="qortal-note">No incoming requests.</p>
|
|
<div id="qortal-account-admin-requests-list" class="qortal-admin-request-list"></div>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="qortal-account-names-card" class="qortal-card">
|
|
<div class="qortal-card-title qortal-card-title--compact">
|
|
<h3>Registered Names</h3>
|
|
<button id="qortal-account-names-toggle" class="button">Show</button>
|
|
</div>
|
|
<div id="qortal-account-names-body" class="qortal-hidden">
|
|
<div id="qortal-account-names" class="qortal-chip-list"></div>
|
|
<p id="qortal-account-names-empty" class="qortal-note">No names found yet.</p>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="qortal-card">
|
|
<div class="qortal-card-title">
|
|
<h3>Wallet</h3>
|
|
<button id="qortal-account-advanced-toggle" class="button">Hide</button>
|
|
</div>
|
|
<div id="qortal-account-advanced-body">
|
|
<div class="qortal-send-grid">
|
|
<div>
|
|
<label for="qortal-account-send-recipient" class="qortal-label">Recipient (address or name)</label>
|
|
<input id="qortal-account-send-recipient" type="text" placeholder="Q... or name">
|
|
</div>
|
|
<div>
|
|
<label for="qortal-account-send-amount" class="qortal-label">Amount (QORT)</label>
|
|
<input id="qortal-account-send-amount" type="number" min="0.00000001" step="0.00000001" placeholder="0.10000000">
|
|
</div>
|
|
<div class="qortal-send-fee-group qortal-debug-only qortal-hidden">
|
|
<label for="qortal-account-send-fee" class="qortal-label">Fee (QORT)</label>
|
|
<input id="qortal-account-send-fee" type="number" min="0" step="0.00000001" value="0.01" readonly>
|
|
</div>
|
|
<div class="qortal-send-grid__actions">
|
|
<button id="qortal-account-send-fee-edit-button" class="button qortal-debug-only qortal-hidden">Edit Fee</button>
|
|
<button id="qortal-account-send-button" class="button button-primary qortal-send-button">
|
|
<span class="qortal-send-icon" aria-hidden="true"></span>
|
|
<span>Send QORT</span>
|
|
</button>
|
|
</div>
|
|
</div>
|
|
<pre id="qortal-account-send-result" class="qortal-status qortal-compact-status">Ready to send QORT.</pre>
|
|
|
|
<div class="qortal-transactions">
|
|
<div class="qortal-card-title qortal-card-title--compact">
|
|
<h4>Transactions</h4>
|
|
<button id="qortal-account-transactions-refresh" class="button">Refresh Transactions</button>
|
|
</div>
|
|
<p id="qortal-account-transactions-status" class="qortal-note">Loading transactions…</p>
|
|
<p id="qortal-account-transactions-empty" class="qortal-note qortal-hidden">No transactions found.</p>
|
|
<div id="qortal-account-transactions-list" class="qortal-transactions-list"></div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="qortal-card qortal-debug-only qortal-hidden">
|
|
<div class="qortal-account-actions">
|
|
<div class="qortal-account-actions__left">
|
|
<button id="qortal-account-test" class="button">Test Auth</button>
|
|
<button id="qortal-account-toggle-live" class="button">Pause Live Refresh</button>
|
|
</div>
|
|
<div class="qortal-account-actions__right">
|
|
<span class="qortal-note">Last refreshed: <strong id="qortal-account-last-refresh">never</strong></span>
|
|
<span class="qortal-note">Status: <strong id="qortal-account-status">idle</strong></span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="qortal-card qortal-debug-only qortal-hidden">
|
|
<h3>Account Details</h3>
|
|
<pre id="qortal-account-details" class="qortal-status qortal-compact-status">Waiting for data…</pre>
|
|
</div>
|
|
|
|
<div class="qortal-card qortal-debug-only qortal-hidden">
|
|
<h3>Raw Wallet Fields</h3>
|
|
<div class="qortal-kv">
|
|
<div>
|
|
<span class="qortal-label">Wallet ID</span>
|
|
<span id="qortal-account-wallet-id" class="qortal-value">—</span>
|
|
</div>
|
|
<div>
|
|
<span class="qortal-label">Public Key</span>
|
|
<span id="qortal-account-public-key" class="qortal-value">—</span>
|
|
</div>
|
|
<div>
|
|
<span class="qortal-label">Balance Response</span>
|
|
<span id="qortal-account-balance-raw" class="qortal-value">—</span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="qortal-account-register-modal" class="qortal-modal qortal-hidden">
|
|
<div class="qortal-modal__dialog">
|
|
<h3>Register Qortal Name</h3>
|
|
<p class="qortal-note">
|
|
A Qortal name is your distributed identity and namespace. It acts like a username and domain on the
|
|
Qortal network, and is unique and owned only by you.
|
|
</p>
|
|
<p class="qortal-note">
|
|
You need at least 1.5 QORT to register a name.
|
|
</p>
|
|
<label class="qortal-label" for="qortal-account-register-name-input">Desired Name</label>
|
|
<input id="qortal-account-register-name-input" type="text" maxlength="40" placeholder="Enter name">
|
|
<p id="qortal-account-register-error" class="qortal-note qortal-error qortal-hidden"></p>
|
|
<div class="qortal-modal__actions">
|
|
<button id="qortal-account-register-confirm" class="button button-primary">Register Name</button>
|
|
<button id="qortal-account-register-cancel" class="button">Cancel</button>
|
|
</div>
|
|
<pre id="qortal-account-register-result" class="qortal-status qortal-compact-status">No registration submitted yet.</pre>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="qortal-account-approval" class="qortal-modal qortal-hidden">
|
|
<div class="qortal-modal__dialog">
|
|
<h3>Approve Qortal Action</h3>
|
|
<p class="qortal-note">A Qortal approval is required before sending this transaction.</p>
|
|
<div class="qortal-kv">
|
|
<div>
|
|
<span class="qortal-label">Request</span>
|
|
<span id="qortal-account-approval-request" class="qortal-value">SEND_COIN</span>
|
|
</div>
|
|
<div>
|
|
<span class="qortal-label">Scope</span>
|
|
<span id="qortal-account-approval-scope" class="qortal-value">SEND_COIN</span>
|
|
</div>
|
|
</div>
|
|
<p id="qortal-account-approval-wallet-status" class="qortal-note qortal-wallet-status qortal-wallet-status-unknown">Wallet lock: checking…</p>
|
|
<div id="qortal-account-approval-unlock-fields" class="qortal-hidden">
|
|
<label class="qortal-label" for="qortal-account-approval-password">Wallet password</label>
|
|
<input id="qortal-account-approval-password" type="password" autocomplete="current-password" placeholder="Required when wallet is locked">
|
|
<label class="qortal-note">
|
|
<input id="qortal-account-approval-ttl" type="checkbox" checked>
|
|
Keep wallet unlocked for 10 minutes
|
|
</label>
|
|
</div>
|
|
<p id="qortal-account-approval-error" class="qortal-note qortal-error qortal-hidden"></p>
|
|
<div class="qortal-modal__actions">
|
|
<button id="qortal-account-approval-confirm" class="button button-primary">Approve and Send</button>
|
|
<button id="qortal-account-approval-cancel" class="button">Cancel</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|