Skip to content

Commit c0c053f

Browse files
author
mawe
committed
changed according to suggestions
1 parent 0814cd9 commit c0c053f

File tree

9 files changed

+116
-205
lines changed

9 files changed

+116
-205
lines changed

handlers/index.go

+7-19
Original file line numberDiff line numberDiff line change
@@ -120,31 +120,19 @@ func VerifyTurnstile(w http.ResponseWriter, r *http.Request) {
120120

121121
err := utils.VerifyTurnstileToken(r)
122122

123-
cookie := http.Cookie{
124-
Name: "turnstile",
125-
Value: "verified",
126-
Path: "/",
127-
MaxAge: int(utils.Config.Frontend.Turnstile.CookieMaxAge),
128-
HttpOnly: false,
129-
Secure: true,
130-
SameSite: http.SameSiteLaxMode,
131-
}
132-
133123
if err != nil {
134-
fmt.Println(err)
135-
// clear cookie
136-
cookie.MaxAge = -1
137-
http.SetCookie(w, &cookie)
138-
http.Error(w, "Turnstile challenge failed", http.StatusServiceUnavailable)
124+
utils.LogError(err, "Turnstile challenge failed", 0)
125+
utils.ClearTurnstileVerifiedCookie(w)
126+
http.Error(w, "Turnstile challenge failed", http.StatusBadRequest)
139127
return
140128
}
141129

142-
validuntil := time.Now().Add(time.Duration(utils.Config.Frontend.Turnstile.SessionMaxAge) * time.Second).Format(time.RFC3339)
143-
144-
utils.SessionStore.SCS.Put(r.Context(), "TURNSTILE::VALIDUNTIL", validuntil)
145-
http.SetCookie(w, &cookie)
130+
validsince := time.Now().Unix()
131+
utils.SessionStore.SCS.Put(r.Context(), "TURNSTILE::VALIDSINCE", validsince)
132+
utils.SetTurnstileVerifiedCookie(w, int(utils.Config.Frontend.Turnstile.CookieMaxAge))
146133
w.Write([]byte("Success"))
147134
} else {
148135
w.Write([]byte("Turnstile not enabled"))
149136
}
137+
150138
}

static/js/banner.js

+37-87
Original file line numberDiff line numberDiff line change
@@ -30,12 +30,12 @@ function getCookie(cname) {
3030
function updateBanner() {
3131
waitForTurnstileToken(() => {
3232
fetch("/latestState", { headers: { "X-TURNSTILE-TOKEN": window.turnstileToken } })
33-
.then(function (res) {
34-
return res.json()
35-
})
36-
.then(function (data) {
37-
// always visible
38-
var epochHandle = document.getElementById("banner-epoch-data")
33+
.then(function (res) {
34+
return res.json()
35+
})
36+
.then(function (data) {
37+
// always visible
38+
var epochHandle = document.getElementById("banner-epoch-data")
3939

4040
if (data.currentEpoch) {
4141
epochHandle.innerHTML = addCommas(data.currentEpoch)
@@ -92,89 +92,39 @@ function updateBanner() {
9292
const icon = icons[i]
9393
icon.setAttribute("data-original-title", `The last finalized epoch was ${data.finalityDelay} epochs ago.`)
9494
}
95-
96-
var slotHandle = document.getElementById("banner-slot-data")
97-
if (data.currentSlot) {
98-
slotHandle.innerHTML = addCommas(data.currentSlot)
99-
slotHandle.setAttribute("href", "/slot/" + data.currentSlot)
100-
}
101-
102-
var ethPriceHandle = document.getElementById("banner-eth-price-data")
103-
104-
try {
105-
let userCurrency = getCookie("currency")
106-
if (userCurrency == data.rates.mainCurrency) userCurrency = data.rates.tickerCurrency
107-
var price = data.rates.mainCurrencyPrices[userCurrency]
108-
ethPriceHandle.innerHTML = `<span class='currency-symbol'>${price.symbol} </span><span class='k-formatted-price'>${price.truncPrice}</span><span class='price'>${addCommas(price.roundPrice)}</span>`
109-
} catch (err) {
110-
console.error("failed updating banner-price:", err)
111-
}
112-
113-
var finDelayDataHandle = document.getElementById("banner-fin-data")
114-
finDelayHtml = `
115-
<div id="banner-fin" class="info-item d-flex mr-3">
116-
<div class="info-item-header mr-1 text-warning">
117-
<span class="item-icon">
118-
<i class="fas fa-exclamation-triangle" data-toggle="tooltip" title="" data-original-title="The last finalized epoch was ${data.finalityDelay} epochs ago."></i>
119-
</span>
120-
<span class="item-text">
121-
Finality
122-
</span>
123-
</div>
124-
<div class="info-item-body text-warning">
125-
<span id="banner-fin-data">${data.finalityDelay}</span>
126-
<i class="fas fa-exclamation-triangle item-text" data-toggle="tooltip" title="" data-original-title="The last finalized epoch was ${data.finalityDelay} epochs ago."></i>
127-
</div>
128-
</div>
129-
`
130-
131-
if (!finDelayDataHandle && data.finalityDelay > 3 && !data.syncing) {
132-
// create fin delay node
133-
document.getElementById("banner-slot").insertAdjacentHTML("afterend", finDelayHtml)
134-
$("#banner-fin i").each(function () {
135-
$(this).tooltip("update")
136-
})
137-
} else if (finDelayDataHandle && data.finalityDelay > 3 && !data.syncing) {
138-
// update fin delay node
139-
finDelayDataHandle.textContent = data.finalityDelay
140-
var icons = document.querySelectorAll("#banner-fin i")
141-
for (let i = 0; i < icons.length; i++) {
142-
const icon = icons[i]
143-
icon.setAttribute("data-original-title", `The last finalized epoch was ${data.finalityDelay} epochs ago.`)
144-
}
145-
$("#banner-fin i").each(function () {
146-
$(this).tooltip("update")
147-
})
148-
} else {
149-
// delete fin delay node if it exists
150-
let findDelayHandle = document.getElementById("banner-fin")
151-
if (findDelayHandle) findDelayHandle.remove()
152-
}
153-
if (data.syncing) {
154-
// remove fin delay if we are still syncing
155-
let findDelayHandle = document.getElementById("banner-fin")
156-
if (findDelayHandle) findDelayHandle.remove()
157-
158-
var bannerHandle = document.getElementById("banner-status")
159-
if (!bannerHandle) {
160-
var statusHtml = `
161-
<a data-toggle="tooltip" title="The explorer is currently syncing with the network" id="banner-status" style="white-space: nowrap;" class="mr-2" href="/"><i class="fas fa-sync"></i> <span>|</span></a>
162-
`
163-
document.getElementById("banner-home").remove()
164-
document.getElementById("banner-stats").insertAdjacentHTML("afterbegin", statusHtml)
165-
}
166-
} else {
167-
// delete sync if it exists otherwise do nothing
168-
var statusHandle = document.getElementById("banner-status")
169-
if (statusHandle) {
170-
var homeHtml = `
171-
<a id="banner-home" style="white-space: nowrap;" class="mr-2" href="/"><i class="fas fa-home"></i> <span>|</span></a>
95+
$("#banner-fin i").each(function () {
96+
$(this).tooltip("update")
97+
})
98+
} else {
99+
// delete fin delay node if it exists
100+
let findDelayHandle = document.getElementById("banner-fin")
101+
if (findDelayHandle) findDelayHandle.remove()
102+
}
103+
if (data.syncing) {
104+
// remove fin delay if we are still syncing
105+
let findDelayHandle = document.getElementById("banner-fin")
106+
if (findDelayHandle) findDelayHandle.remove()
107+
108+
var bannerHandle = document.getElementById("banner-status")
109+
if (!bannerHandle) {
110+
var statusHtml = `
111+
<a data-toggle="tooltip" title="The explorer is currently syncing with the network" id="banner-status" style="white-space: nowrap;" class="mr-2" href="/"><i class="fas fa-sync"></i> <span>|</span></a>
172112
`
173-
statusHandle.remove()
174-
document.getElementById("banner-stats").insertAdjacentHTML("afterbegin", homeHtml)
175-
}
113+
document.getElementById("banner-home").remove()
114+
document.getElementById("banner-stats").insertAdjacentHTML("afterbegin", statusHtml)
176115
}
177-
})
116+
} else {
117+
// delete sync if it exists otherwise do nothing
118+
var statusHandle = document.getElementById("banner-status")
119+
if (statusHandle) {
120+
var homeHtml = `
121+
<a id="banner-home" style="white-space: nowrap;" class="mr-2" href="/"><i class="fas fa-home"></i> <span>|</span></a>
122+
`
123+
statusHandle.remove()
124+
document.getElementById("banner-stats").insertAdjacentHTML("afterbegin", homeHtml)
125+
}
126+
}
127+
})
178128
})
179129
}
180130

static/js/dashboard.js

+12-29
Original file line numberDiff line numberDiff line change
@@ -323,26 +323,20 @@ function showProposedHistoryTable() {
323323
waitForTurnstileToken(() => {
324324
fetch("/dashboard/data/proposalshistory" + getValidatorQueryString(), {
325325
method: "GET",
326+
headers: { "X-TURNSTILE-TOKEN": window.turnstileToken }
326327
}).then((res) => {
327-
res.json().then(function (data) {
328-
let proposedHistTableData = []
329-
for (let item of data.data) {
330-
proposedHistTableData.push([item[0], item[1], [item[2], item[3], item[4]]])
331-
}
332-
renderProposedHistoryTable(proposedHistTableData)
333-
})
334-
.then((res) => {
335-
res.json().then(function (data) {
328+
res
329+
.json()
330+
.then(function (data) {
336331
let proposedHistTableData = []
337-
for (let item of data) {
332+
for (let item of data.data) {
338333
proposedHistTableData.push([item[0], item[1], [item[2], item[3], item[4]]])
339334
}
340335
renderProposedHistoryTable(proposedHistTableData)
341336
})
342-
})
343-
.finally(() => {
344-
resetTurnstileToken()
345-
})
337+
.finally(() => {
338+
resetTurnstileToken()
339+
})
346340
})
347341
})
348342
}
@@ -734,17 +728,6 @@ $(document).ready(function () {
734728
}
735729
create_validators_typeahead("input[aria-controls='validators']", "#validators")
736730

737-
function prepare(query, settings) {
738-
settings.url = settings.url.replace("%QUERY", encodeURIComponent(query))
739-
settings.beforeSend = function (jqXHR) {
740-
jqXHR.setRequestHeader("X-TURNSTILE-TOKEN", window.turnstileToken)
741-
}
742-
settings.complete = function (jqXHR) {
743-
resetTurnstileToken()
744-
}
745-
return settings
746-
}
747-
748731
var timeWait = 0
749732
var debounce = function (context, func) {
750733
var timeout, result
@@ -797,7 +780,7 @@ $(document).ready(function () {
797780
},
798781
remote: {
799782
url: "/search/validators_by_pubkey/%QUERY",
800-
prepare: prepare,
783+
prepare: prepareBloodhound,
801784
},
802785
})
803786
bhPubkey.remote.transport._get = debounce(bhPubkey.remote.transport, bhPubkey.remote.transport._get)
@@ -809,7 +792,7 @@ $(document).ready(function () {
809792
},
810793
remote: {
811794
url: "/search/indexed_validators_by_eth1_addresses/%QUERY",
812-
prepare: prepare,
795+
prepare: prepareBloodhound,
813796
},
814797
})
815798
bhEth1Addresses.remote.transport._get = debounce(bhEth1Addresses.remote.transport, bhEth1Addresses.remote.transport._get)
@@ -821,7 +804,7 @@ $(document).ready(function () {
821804
},
822805
remote: {
823806
url: "/search/indexed_validators_by_name/%QUERY",
824-
prepare: prepare,
807+
prepare: prepareBloodhound,
825808
},
826809
})
827810
bhName.remote.transport._get = debounce(bhName.remote.transport, bhName.remote.transport._get)
@@ -833,7 +816,7 @@ $(document).ready(function () {
833816
},
834817
remote: {
835818
url: "/search/indexed_validators_by_graffiti/%QUERY",
836-
prepare: prepare,
819+
prepare: prepareBloodhound,
837820
},
838821
})
839822
bhGraffiti.remote.transport._get = debounce(bhGraffiti.remote.transport, bhGraffiti.remote.transport._get)

static/js/layout.js

+9-20
Original file line numberDiff line numberDiff line change
@@ -221,17 +221,6 @@ $(document).ready(function () {
221221
$('[data-toggle="tooltip"]').tooltip()
222222
}
223223

224-
function prepare(query, settings) {
225-
settings.url = settings.url.replace("%QUERY", encodeURIComponent(query))
226-
settings.beforeSend = function (jqXHR) {
227-
jqXHR.setRequestHeader("X-TURNSTILE-TOKEN", window.turnstileToken)
228-
}
229-
settings.complete = function () {
230-
resetTurnstileToken()
231-
}
232-
return settings
233-
}
234-
235224
// set maxParallelRequests to number of datasets queried in each search
236225
// make sure this is set in every one bloodhound object
237226
let requestNum = 10
@@ -301,7 +290,7 @@ $(document).ready(function () {
301290
transform: function (data) {
302291
return data?.address && data?.domain ? { data: { ...data } } : null
303292
},
304-
prepare: prepare,
293+
prepare: prepareBloodhound,
305294
},
306295
})
307296
bhEns.remote.transport._get = debounce(bhEns.remote.transport, bhEns.remote.transport._get)
@@ -315,7 +304,7 @@ $(document).ready(function () {
315304
remote: {
316305
url: "/search/slots/%QUERY",
317306
maxPendingRequests: requestNum,
318-
prepare: prepare,
307+
prepare: prepareBloodhound,
319308
},
320309
})
321310
bhSlots.remote.transport._get = debounce(bhSlots.remote.transport, bhSlots.remote.transport._get)
@@ -329,7 +318,7 @@ $(document).ready(function () {
329318
remote: {
330319
url: "/search/blocks/%QUERY",
331320
maxPendingRequests: requestNum,
332-
prepare: prepare,
321+
prepare: prepareBloodhound,
333322
},
334323
})
335324
bhBlocks.remote.transport._get = debounce(bhBlocks.remote.transport, bhBlocks.remote.transport._get)
@@ -343,7 +332,7 @@ $(document).ready(function () {
343332
remote: {
344333
url: "/search/transactions/%QUERY",
345334
maxPendingRequests: requestNum,
346-
prepare: prepare,
335+
prepare: prepareBloodhound,
347336
},
348337
})
349338
bhTransactions.remote.transport._get = debounce(bhTransactions.remote.transport, bhTransactions.remote.transport._get)
@@ -357,7 +346,7 @@ $(document).ready(function () {
357346
remote: {
358347
url: "/search/graffiti/%QUERY",
359348
maxPendingRequests: requestNum,
360-
prepare: prepare,
349+
prepare: prepareBloodhound,
361350
},
362351
})
363352
bhGraffiti.remote.transport._get = debounce(bhGraffiti.remote.transport, bhGraffiti.remote.transport._get)
@@ -371,7 +360,7 @@ $(document).ready(function () {
371360
remote: {
372361
url: "/search/epochs/%QUERY",
373362
maxPendingRequests: requestNum,
374-
prepare: prepare,
363+
prepare: prepareBloodhound,
375364
},
376365
})
377366
bhEpochs.remote.transport._get = debounce(bhEpochs.remote.transport, bhEpochs.remote.transport._get)
@@ -385,7 +374,7 @@ $(document).ready(function () {
385374
remote: {
386375
url: "/search/eth1_addresses/%QUERY",
387376
maxPendingRequests: requestNum,
388-
prepare: prepare,
377+
prepare: prepareBloodhound,
389378
},
390379
})
391380
bhEth1Accounts.remote.transport._get = debounce(bhEth1Accounts.remote.transport, bhEth1Accounts.remote.transport._get)
@@ -399,7 +388,7 @@ $(document).ready(function () {
399388
remote: {
400389
url: "/search/count_indexed_validators_by_eth1_address/%QUERY",
401390
maxPendingRequests: requestNum,
402-
prepare: prepare,
391+
prepare: prepareBloodhound,
403392
},
404393
})
405394
bhValidatorsByAddress.remote.transport._get = debounce(bhValidatorsByAddress.remote.transport, bhValidatorsByAddress.remote.transport._get)
@@ -413,7 +402,7 @@ $(document).ready(function () {
413402
remote: {
414403
url: "/search/validators_by_pubkey/%QUERY",
415404
maxPendingRequests: requestNum,
416-
prepare: prepare,
405+
prepare: prepareBloodhound,
417406
},
418407
})
419408
bhPubkey.remote.transport._get = debounce(bhPubkey.remote.transport, bhPubkey.remote.transport._get)

0 commit comments

Comments
 (0)