From 95abbe573e6347797d2eadf3902a7af747d75a82 Mon Sep 17 00:00:00 2001 From: Kyren223 Date: Tue, 15 Jul 2025 13:39:53 +0300 Subject: Implemented caching for TOS hash, if hash matches the user doesn't need to re-accept the TOS, users can delete the cache if they wish to review it --- internal/client/ui/core/core.go | 26 +++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) (limited to 'internal/client/ui/core/core.go') diff --git a/internal/client/ui/core/core.go b/internal/client/ui/core/core.go index 11772fa..8b45cde 100644 --- a/internal/client/ui/core/core.go +++ b/internal/client/ui/core/core.go @@ -82,6 +82,7 @@ type Model struct { loading loadscreen.Model tos *tosscreen.Model + tosHash string timer timer.Model timeout time.Duration state State @@ -111,6 +112,7 @@ func New(privKey ed25519.PrivateKey, name string) Model { privKey: privKey, loading: loadscreen.New(ConnectingToServer), tos: nil, + tosHash: "", timer: newTimer(InitialTimeout), timeout: InitialTimeout, state: Disconnected, @@ -294,9 +296,22 @@ func (m *Model) updateConnected(message tea.Msg) tea.Cmd { case *packet.TosInfo: m.state = ConnectedReceivedTos - combined := msg.Tos + "\n" + msg.PrivacyPolicy - tos := tosscreen.New(combined) - m.tos = &tos + + server := config.ReadConfig().ServerName + hash, ok := config.ReadCache().TosHashes[server] + if ok && hash == msg.Hash { + // AUTO ACCEPT IF IN CACHE + m.state = ConnectedAcceptedTos + return gateway.Send(&packet.AcceptTos{ + IAgreeToTheTermsOfServiceAndPrivacyPolicy: true, + }) + } else { + m.tosHash = msg.Hash + + combined := msg.Tos + "\n" + msg.PrivacyPolicy + tos := tosscreen.New(combined) + m.tos = &tos + } case *packet.Error: if m.state == ConnectedAcceptedTos { @@ -350,6 +365,11 @@ func (m *Model) updateConnected(message tea.Msg) tea.Cmd { case "enter": if m.state == ConnectedReceivedTos { m.state = ConnectedAcceptedTos + assert.Assert(m.tosHash != "", "hash must have been set by the TosInfo") + config.UseCache(func(cache *config.Cache) { + server := config.ReadConfig().ServerName + cache.TosHashes[server] = m.tosHash + }) return gateway.Send(&packet.AcceptTos{ IAgreeToTheTermsOfServiceAndPrivacyPolicy: true, }) -- cgit v1.3.1