summaryrefslogtreecommitdiff
path: root/internal/client/ui
diff options
context:
space:
mode:
authorKyren223 <Kyren223@proton.me>2025-07-15 13:39:53 +0300
committerKyren223 <Kyren223@proton.me>2025-07-19 18:32:12 +0300
commit95abbe573e6347797d2eadf3902a7af747d75a82 (patch)
tree5c6b75f441cf27d49a7c3bcac8933798aee99d99 /internal/client/ui
parent1bc8fc222296418224784a8fc19c06fb11cd0b21 (diff)
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
Diffstat (limited to 'internal/client/ui')
-rw-r--r--internal/client/ui/core/core.go26
1 files changed, 23 insertions, 3 deletions
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,
})