2025-08-16 19:26:52 +03:00
|
|
|
local user = nil
|
|
|
|
|
local domains = {}
|
|
|
|
|
local authToken = nil
|
|
|
|
|
|
|
|
|
|
local userInfo = gurt.select('#user-info')
|
|
|
|
|
local domainsList = gurt.select('#domains-list')
|
2025-08-18 17:45:46 +03:00
|
|
|
local loadingElement = gurt.select('#tld-loading')
|
2025-08-16 19:26:52 +03:00
|
|
|
|
2025-08-19 18:27:25 +03:00
|
|
|
local options
|
2025-08-16 19:26:52 +03:00
|
|
|
|
|
|
|
|
local function showError(elementId, message)
|
|
|
|
|
local element = gurt.select('#' .. elementId)
|
|
|
|
|
|
|
|
|
|
element.text = message
|
|
|
|
|
element.classList:remove('hidden')
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local function hideError(elementId)
|
|
|
|
|
local element = gurt.select('#' .. elementId)
|
|
|
|
|
|
|
|
|
|
element.classList:add('hidden')
|
|
|
|
|
end
|
|
|
|
|
|
2025-08-18 17:45:46 +03:00
|
|
|
local function updateUserInfo()
|
|
|
|
|
userInfo.text = 'Welcome, ' .. user.username .. '!'
|
2025-08-16 19:26:52 +03:00
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local function renderDomains()
|
2025-08-18 17:45:46 +03:00
|
|
|
local loadingElement = gurt.select('#domains-loading')
|
2025-08-19 18:27:25 +03:00
|
|
|
if loadingElement then
|
|
|
|
|
loadingElement:remove()
|
|
|
|
|
end
|
2025-08-18 17:45:46 +03:00
|
|
|
|
2025-08-16 19:26:52 +03:00
|
|
|
domainsList.text = ''
|
|
|
|
|
|
|
|
|
|
if #domains == 0 then
|
|
|
|
|
local emptyMessage = gurt.create('div', {
|
2025-08-19 18:27:25 +03:00
|
|
|
text = 'No domains registered yet. Click "New" to register your first domain!',
|
2025-08-16 19:26:52 +03:00
|
|
|
style = 'text-center text-[#6b7280] py-8'
|
|
|
|
|
})
|
|
|
|
|
domainsList:append(emptyMessage)
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
for i, domain in ipairs(domains) do
|
|
|
|
|
local domainItem = gurt.create('div', {
|
2025-08-20 14:37:57 +03:00
|
|
|
style = 'domain-item cursor-pointer hover:bg-[#4b5563]'
|
2025-08-16 19:26:52 +03:00
|
|
|
})
|
|
|
|
|
|
2025-08-19 18:27:25 +03:00
|
|
|
local domainInfo = gurt.create('div', { style = 'w-full' })
|
2025-08-16 19:26:52 +03:00
|
|
|
|
|
|
|
|
local domainName = gurt.create('div', {
|
|
|
|
|
text = domain.name .. '.' .. domain.tld,
|
|
|
|
|
style = 'font-bold text-lg'
|
|
|
|
|
})
|
|
|
|
|
|
2025-08-19 18:27:25 +03:00
|
|
|
local domainStatus = gurt.create('div', {
|
|
|
|
|
text = 'Status: ' .. (domain.status or 'Unknown'),
|
|
|
|
|
style = 'text-[#6b7280]'
|
|
|
|
|
})
|
|
|
|
|
|
2025-08-16 19:26:52 +03:00
|
|
|
domainInfo:append(domainName)
|
2025-08-19 18:27:25 +03:00
|
|
|
domainInfo:append(domainStatus)
|
2025-08-16 19:26:52 +03:00
|
|
|
|
2025-08-20 14:37:57 +03:00
|
|
|
domainItem:append(domainInfo)
|
2025-08-16 19:26:52 +03:00
|
|
|
|
2025-08-20 14:37:57 +03:00
|
|
|
domainItem:on('click', function()
|
|
|
|
|
gurt.location.goto('/domain.html?name=' .. domain.name .. '.' .. domain.tld)
|
2025-08-16 19:26:52 +03:00
|
|
|
end)
|
|
|
|
|
|
|
|
|
|
domainsList:append(domainItem)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
2025-08-18 17:45:46 +03:00
|
|
|
local function loadDomains()
|
|
|
|
|
print('Loading domains...')
|
2025-11-06 20:02:53 +08:00
|
|
|
local response = fetch('lw://dns.web/auth/domains?page=1&limit=100', {
|
2025-08-18 17:45:46 +03:00
|
|
|
headers = {
|
|
|
|
|
Authorization = 'Bearer ' .. authToken
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
if response:ok() then
|
|
|
|
|
local data = response:json()
|
|
|
|
|
domains = data.domains or {}
|
|
|
|
|
print('Loaded ' .. #domains .. ' domains')
|
|
|
|
|
renderDomains()
|
|
|
|
|
else
|
|
|
|
|
print('Failed to load domains: ' .. response:text())
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local function checkAuth()
|
|
|
|
|
authToken = gurt.crumbs.get("auth_token")
|
|
|
|
|
|
|
|
|
|
if authToken then
|
|
|
|
|
print('Found auth token, checking validity...')
|
2025-11-06 20:02:53 +08:00
|
|
|
local response = fetch('lw://dns.web/auth/me', {
|
2025-08-18 17:45:46 +03:00
|
|
|
headers = {
|
|
|
|
|
Authorization = 'Bearer ' .. authToken
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
print(table.tostring(response))
|
|
|
|
|
if response:ok() then
|
|
|
|
|
user = response:json()
|
|
|
|
|
print('Authentication successful for user: ' .. user.username)
|
|
|
|
|
updateUserInfo()
|
|
|
|
|
loadDomains()
|
|
|
|
|
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
|
|
|
|
|
|
2025-08-19 18:27:25 +03:00
|
|
|
local function goToRegister()
|
|
|
|
|
gurt.location.goto("/register.html")
|
2025-08-16 19:26:52 +03:00
|
|
|
end
|
|
|
|
|
|
|
|
|
|
-- Event handlers
|
|
|
|
|
gurt.select('#logout-btn'):on('click', logout)
|
2025-08-19 18:27:25 +03:00
|
|
|
gurt.select('#new-btn'):on('click', goToRegister)
|
2025-08-16 19:26:52 +03:00
|
|
|
|
|
|
|
|
-- Initialize
|
2025-08-18 17:45:46 +03:00
|
|
|
print('Dashboard initialized')
|
2025-08-16 19:26:52 +03:00
|
|
|
checkAuth()
|