show(), hide(), visible. font-light, normal, medium, semibold, bold, extrabold, black. protocol connection pooling. fetch() with GURT. DNS from HTTP to GURT.

This commit is contained in:
Face
2025-08-18 17:45:46 +03:00
parent 3ed49fae0d
commit a8313ec3d8
38 changed files with 2123 additions and 2059 deletions

View File

@@ -5,19 +5,11 @@ local authToken = nil
local userInfo = gurt.select('#user-info')
local domainsList = gurt.select('#domains-list')
local logArea = gurt.select('#log-area')
local inviteModal = gurt.select('#invite-modal')
local tldSelector = gurt.select('#tld-selector')
local loadingElement = gurt.select('#tld-loading')
local displayElement = gurt.select('#invite-code-display')
local logMessages = {}
local function addLog(message)
table.insert(logMessages, Time.format(Time.now(), '%H:%M:%S') .. ' - ' .. message)
if #logMessages > 50 then
table.remove(logMessages, 1)
end
logArea.text = table.concat(logMessages, '\n')
end
displayElement:hide()
local function showError(elementId, message)
local element = gurt.select('#' .. elementId)
@@ -32,189 +24,51 @@ local function hideError(elementId)
element.classList:add('hidden')
end
local function showModal(modalId)
local modal = gurt.select('#' .. modalId)
modal.classList:remove('hidden')
end
local function hideModal(modalId)
local modal = gurt.select('#' .. modalId)
modal.classList:add('hidden')
end
local function makeRequest(url, options)
options = options or {}
if authToken then
options.headers = options.headers or {}
options.headers.Authorization = 'Bearer ' .. authToken
end
return fetch(url, options)
end
local function checkAuth()
authToken = gurt.crumbs.get("auth_token")
if authToken then
addLog('Found auth token, checking validity...')
local response = makeRequest('gurt://localhost:4878/auth/me')
print(table.tostring(response))
if response:ok() then
user = response:json()
addLog('Authentication successful for user: ' .. user.username)
updateUserInfo()
loadDomains()
loadTLDs()
else
addLog('Token invalid, redirecting to login...')
--gurt.crumbs.delete('auth_token')
--gurt.location.goto('../')
end
else
addLog('No auth token found, redirecting to login...')
gurt.location.goto('../')
end
end
local function logout()
gurt.crumbs.delete('auth_token')
addLog('Logged out successfully')
gurt.location.goto("../")
end
local function loadDomains()
addLog('Loading domains...')
local response = makeRequest('gurt://localhost:4878/domains?page=1&size=100')
if response:ok() then
local data = response:json()
domains = data.domains or {}
addLog('Loaded ' .. #domains .. ' domains')
renderDomains()
else
addLog('Failed to load domains: ' .. response:text())
end
end
local function loadTLDs()
addLog('Loading available TLDs...')
local response = fetch('gurt://localhost:4878/tlds')
if response:ok() then
tlds = response:json()
addLog('Loaded ' .. #tlds .. ' TLDs')
renderTLDSelector()
else
addLog('Failed to load TLDs: ' .. response:text())
end
end
local function submitDomain(name, tld, ip)
hideError('domain-error')
addLog('Submitting domain: ' .. name .. '.' .. tld)
local response = makeRequest('gurt://localhost:4878/domain', {
method = 'POST',
headers = { ['Content-Type'] = 'application/json' },
body = JSON.stringify({ name = name, tld = tld, ip = ip })
})
if response:ok() then
local data = response:json()
addLog('Domain submitted successfully: ' .. data.domain)
-- Update user registrations remaining
user.registrations_remaining = user.registrations_remaining - 1
updateUserInfo()
-- Clear form
gurt.select('#domain-name').text = ''
gurt.select('#domain-ip').text = ''
-- Refresh domains list
loadDomains()
else
local error = response:text()
showError('domain-error', 'Domain submission failed: ' .. error)
addLog('Domain submission failed: ' .. error)
end
end
local function createInvite()
addLog('Creating invite code...')
local response = makeRequest('gurt://localhost:4878/auth/invite', { method = 'POST' })
if response:ok() then
local data = response:json()
local inviteCode = data.invite_code
gurt.select('#invite-code-display').text = inviteCode
addLog('Invite code created: ' .. inviteCode)
showModal('invite-modal')
else
addLog('Failed to create invite: ' .. response:text())
end
end
local function redeemInvite(code)
hideError('redeem-error')
addLog('Redeeming invite code: ' .. code)
local response = makeRequest('gurt://localhost:4878/auth/redeem-invite', {
method = 'POST',
headers = { ['Content-Type'] = 'application/json' },
body = JSON.stringify({ invite_code = code })
})
if response:ok() then
local data = response:json()
addLog('Invite redeemed: +' .. data.registrations_added .. ' registrations')
-- Update user info
user.registrations_remaining = user.registrations_remaining + data.registrations_added
updateUserInfo()
-- Clear form
gurt.select('#invite-code-input').text = ''
else
local error = response:text()
showError('redeem-error', 'Failed to redeem invite: ' .. error)
addLog('Failed to redeem invite: ' .. error)
end
end
-- UI rendering functions
local function updateUserInfo()
if user then
userInfo.text = 'Welcome, ' .. user.username .. ' | Registrations remaining: ' .. user.registrations_remaining
end
userInfo.text = 'Welcome, ' .. user.username .. '!'
end
local function renderTLDSelector()
loadingElement:remove()
tldSelector.text = ''
for i, tld in ipairs(tlds) do
local option = gurt.create('div', {
local i = 1
local total = #tlds
local intervalId
intervalId = gurt.setInterval(function()
if i > total then
gurt.clearInterval(intervalId)
return
end
local tld = tlds[i]
local option = gurt.create('button', {
text = '.' .. tld,
style = 'tld-option',
['data-tld'] = tld
})
option:on('click', function()
-- Clear previous selection
local options = gurt.selectAll('.tld-option')
for j = 1, #options do
options[j].classList:remove('tld-selected')
end
-- Select this option
option.classList:add('tld-selected')
end)
tldSelector:append(option)
end
i = i + 1
end, 16)
end
local function renderDomains()
local loadingElement = gurt.select('#domains-loading')
loadingElement:remove()
domainsList.text = ''
if #domains == 0 then
@@ -281,35 +135,153 @@ local function renderDomains()
end
end
local function updateDomainIP(name, tld, ip)
addLog('Updating IP for ' .. name .. '.' .. tld .. ' to ' .. ip)
local response = makeRequest('gurt://localhost:4878/domain/' .. name .. '/' .. tld, {
method = 'PUT',
headers = { ['Content-Type'] = 'application/json' },
body = JSON.stringify({ ip = ip })
local function loadDomains()
print('Loading domains...')
local response = fetch('gurt://localhost:8877/domains?page=1&size=100', {
headers = {
Authorization = 'Bearer ' .. authToken
}
})
if response:ok() then
addLog('Domain IP updated successfully')
loadDomains()
local data = response:json()
domains = data.domains or {}
print('Loaded ' .. #domains .. ' domains')
renderDomains()
else
addLog('Failed to update domain IP: ' .. response:text())
print('Failed to load domains: ' .. response:text())
end
end
local function deleteDomain(name, tld)
addLog('Deleting domain: ' .. name .. '.' .. tld)
local function loadTLDs()
print('Loading available TLDs...')
local response = fetch('gurt://localhost:8877/tlds')
local response = makeRequest('gurt://localhost:4878/domain/' .. name .. '/' .. tld, {
method = 'DELETE'
if response:ok() then
tlds = response:json()
print('Loaded ' .. #tlds .. ' TLDs')
renderTLDSelector()
else
print('Failed to load TLDs: ' .. response:text())
end
end
local function checkAuth()
authToken = gurt.crumbs.get("auth_token")
if authToken then
print('Found auth token, checking validity...')
local response = fetch('gurt://localhost:8877/auth/me', {
headers = {
Authorization = 'Bearer ' .. authToken
}
})
print(table.tostring(response))
if response:ok() then
user = response:json()
print('Authentication successful for user: ' .. user.username)
updateUserInfo()
loadDomains()
loadTLDs()
else
print('Token invalid, redirecting to login...')
gurt.crumbs.delete('auth_token')
gurt.location.goto('../')
end
else
print('No auth token found, redirecting to login...')
gurt.location.goto('../')
end
end
local function logout()
gurt.crumbs.delete('auth_token')
print('Logged out successfully')
gurt.location.goto("../")
end
local function submitDomain(name, tld, ip)
hideError('domain-error')
print('Submitting domain: ' .. name .. '.' .. tld)
local response = fetch('gurt://localhost:8877/domain', {
method = 'POST',
headers = {
['Content-Type'] = 'application/json',
Authorization = 'Bearer ' .. authToken
},
body = JSON.stringify({ name = name, tld = tld, ip = ip })
})
if response:ok() then
addLog('Domain deleted successfully')
local data = response:json()
print('Domain submitted successfully: ' .. data.domain)
-- Update user registrations remaining
user.registrations_remaining = user.registrations_remaining - 1
updateUserInfo()
-- Clear form
gurt.select('#domain-name').text = ''
gurt.select('#domain-ip').text = ''
-- Refresh domains list
loadDomains()
else
addLog('Failed to delete domain: ' .. response:text())
local error = response:text()
showError('domain-error', 'Domain submission failed: ' .. error)
print('Domain submission failed: ' .. error)
end
end
local function createInvite()
print('Creating invite code...')
local response = fetch('gurt://localhost:8877/auth/invite', {
method = 'POST',
headers = {
Authorization = 'Bearer ' .. authToken
}
})
if response:ok() then
local data = response:json()
local inviteCode = data.invite_code
displayElement.text = 'Invite code: ' .. inviteCode .. ' (copied to clipboard)'
displayElement:show()
Clipboard.write(inviteCode)
print('Invite code created and copied to clipboard: ' .. inviteCode)
else
print('Failed to create invite: ' .. response:text())
end
end
local function redeemInvite(code)
hideError('redeem-error')
print('Redeeming invite code: ' .. code)
local response = fetch('gurt://localhost:8877/auth/redeem-invite', {
method = 'POST',
headers = {
['Content-Type'] = 'application/json',
Authorization = 'Bearer ' .. authToken
},
body = JSON.stringify({ invite_code = code })
})
if response:ok() then
local data = response:json()
print('Invite redeemed: +' .. data.registrations_added .. ' registrations')
-- Update user info
user.registrations_remaining = user.registrations_remaining + data.registrations_added
updateUserInfo()
-- Clear form
gurt.select('#invite-code-input').text = ''
else
local error = response:text()
showError('redeem-error', 'Failed to redeem invite: ' .. error)
print('Failed to redeem invite: ' .. error)
end
end
@@ -349,16 +321,6 @@ gurt.select('#redeem-invite-btn'):on('click', function()
end
end)
gurt.select('#close-invite-modal'):on('click', function()
hideModal('invite-modal')
end)
gurt.select('#copy-invite-code'):on('click', function()
local inviteCode = gurt.select('#invite-code-display').text
Clipboard.write(inviteCode)
addLog('Invite code copied to clipboard')
end)
-- Initialize
addLog('Dashboard initialized')
print('Dashboard initialized')
checkAuth()