From 3ab1afaae8c01c3228a8349fb606b767e7d697dc Mon Sep 17 00:00:00 2001 From: Andrea Maria Piana Date: Mon, 27 Nov 2023 12:38:45 +0000 Subject: [PATCH] feat_: Allow to set custom nodes & log level --- nodecfg/node_config.go | 29 ++++++++++++++++++++++++++- protocol/messenger_chats.go | 4 ++-- protocol/messenger_mailserver.go | 4 ++-- protocol/messenger_settings.go | 12 +++++++++++ protocol/requests/fetch_messages.go | 19 ++++++++++++++++++ protocol/requests/set_custom_nodes.go | 5 +++++ protocol/requests/set_log_level.go | 28 ++++++++++++++++++++++++++ protocol/requests/sync_chat.go | 19 ------------------ services/ext/api.go | 12 +++++++++-- 9 files changed, 106 insertions(+), 26 deletions(-) create mode 100644 protocol/requests/fetch_messages.go create mode 100644 protocol/requests/set_custom_nodes.go create mode 100644 protocol/requests/set_log_level.go delete mode 100644 protocol/requests/sync_chat.go diff --git a/nodecfg/node_config.go b/nodecfg/node_config.go index f678ebd07..edb7aa19e 100644 --- a/nodecfg/node_config.go +++ b/nodecfg/node_config.go @@ -214,11 +214,16 @@ func insertWakuV2Config(tx *sql.Tx, c *params.NodeConfig) error { return err } + return setWakuV2CustomNodes(tx, c.WakuV2Config.CustomNodes) +} + +func setWakuV2CustomNodes(tx *sql.Tx, customNodes map[string]string) error { if _, err := tx.Exec(`DELETE FROM wakuv2_custom_nodes WHERE synthetic_id = 'id'`); err != nil { return err } - for name, multiaddress := range c.WakuV2Config.CustomNodes { + for name, multiaddress := range customNodes { + // NOTE: synthetic id is redundant, name is effectively the primary key _, err := tx.Exec(`INSERT OR REPLACE INTO wakuv2_custom_nodes (name, multiaddress, synthetic_id) VALUES (?, ?, 'id')`, name, multiaddress) if err != nil { return err @@ -791,3 +796,25 @@ func SetLightClient(db *sql.DB, enabled bool) error { _, err := db.Exec(`UPDATE wakuv2_config SET light_client = ?`, enabled) return err } + +func SetLogLevel(db *sql.DB, logLevel string) error { + _, err := db.Exec(`UPDATE log_config SET log_level = ?`, logLevel) + return err +} + +func SetWakuV2CustomNodes(db *sql.DB, customNodes map[string]string) error { + tx, err := db.BeginTx(context.Background(), &sql.TxOptions{}) + if err != nil { + return err + } + + defer func() { + if err == nil { + err = tx.Commit() + return + } + // don't shadow original error + _ = tx.Rollback() + }() + return setWakuV2CustomNodes(tx, customNodes) +} diff --git a/protocol/messenger_chats.go b/protocol/messenger_chats.go index 2146d5bbe..beb0a554f 100644 --- a/protocol/messenger_chats.go +++ b/protocol/messenger_chats.go @@ -634,7 +634,7 @@ func (m *Messenger) clearHistory(id string) (*MessengerResponse, error) { return response, nil } -func (m *Messenger) SyncChat(request *requests.SyncChat) error { +func (m *Messenger) FetchMessages(request *requests.FetchMessages) error { if err := request.Validate(); err != nil { return err @@ -647,7 +647,7 @@ func (m *Messenger) SyncChat(request *requests.SyncChat) error { return ErrChatNotFound } - _, err := m.SyncChatOneMonth(chat.ID) + _, err := m.fetchMessages(chat.ID, oneMonthInSeconds) if err != nil { return err } diff --git a/protocol/messenger_mailserver.go b/protocol/messenger_mailserver.go index 7818fa8d1..1542f2721 100644 --- a/protocol/messenger_mailserver.go +++ b/protocol/messenger_mailserver.go @@ -946,9 +946,9 @@ func (m *Messenger) ConnectionChanged(state connection.State) { m.connectionState = state } -func (m *Messenger) SyncChatOneMonth(chatID string) (uint32, error) { +func (m *Messenger) fetchMessages(chatID string, duration uint32) (uint32, error) { to := uint32(m.getTimesource().GetCurrentTime() / 1000) - from := to - oneMonthInSeconds + from := to - duration _, err := m.performMailserverRequest(func() (*MessengerResponse, error) { pubsubTopic, topics, err := m.topicsForChat(chatID) if err != nil { diff --git a/protocol/messenger_settings.go b/protocol/messenger_settings.go index 44ec475ed..5247a3d33 100644 --- a/protocol/messenger_settings.go +++ b/protocol/messenger_settings.go @@ -8,3 +8,15 @@ import ( func (m *Messenger) SetLightClient(request *requests.SetLightClient) error { return nodecfg.SetLightClient(m.database, request.Enabled) } + +func (m *Messenger) SetLogLevel(request *requests.SetLogLevel) error { + if err := request.Validate(); err != nil { + return err + } + + return nodecfg.SetLogLevel(m.database, request.LogLevel) +} + +func (m *Messenger) SetCustomNodes(request *requests.SetCustomNodes) error { + return nodecfg.SetWakuV2CustomNodes(m.database, request.CustomNodes) +} diff --git a/protocol/requests/fetch_messages.go b/protocol/requests/fetch_messages.go new file mode 100644 index 000000000..6256903e8 --- /dev/null +++ b/protocol/requests/fetch_messages.go @@ -0,0 +1,19 @@ +package requests + +import ( + "errors" +) + +var ErrFetchMessagesInvalidID = errors.New("fetch-messages: invalid id") + +type FetchMessages struct { + ID string `json:"id"` +} + +func (c *FetchMessages) Validate() error { + if len(c.ID) == 0 { + return ErrFetchMessagesInvalidID + } + + return nil +} diff --git a/protocol/requests/set_custom_nodes.go b/protocol/requests/set_custom_nodes.go new file mode 100644 index 000000000..ebb48584e --- /dev/null +++ b/protocol/requests/set_custom_nodes.go @@ -0,0 +1,5 @@ +package requests + +type SetCustomNodes struct { + CustomNodes map[string]string `json:"customNodes"` +} diff --git a/protocol/requests/set_log_level.go b/protocol/requests/set_log_level.go new file mode 100644 index 000000000..b9d3c019c --- /dev/null +++ b/protocol/requests/set_log_level.go @@ -0,0 +1,28 @@ +package requests + +import ( + "errors" +) + +const ( + ErrorLogLevel = "ERROR" + WarnLogLevel = "WARN" + InfoLogLevel = "INFO" + DebugLogLevel = "DEBUG" + TraceLogLevel = "TRACE" +) + +var ErrSetLogLevelInvalidLogLevel = errors.New("set-log-level: invalid log level") + +type SetLogLevel struct { + LogLevel string `json:"logLevel"` +} + +func (c *SetLogLevel) Validate() error { + switch c.LogLevel { + case ErrorLogLevel, WarnLogLevel, InfoLogLevel, DebugLogLevel, TraceLogLevel: + return nil + } + + return ErrSetLogLevelInvalidLogLevel +} diff --git a/protocol/requests/sync_chat.go b/protocol/requests/sync_chat.go deleted file mode 100644 index 614a7cdcb..000000000 --- a/protocol/requests/sync_chat.go +++ /dev/null @@ -1,19 +0,0 @@ -package requests - -import ( - "errors" -) - -var ErrSyncChatInvalidID = errors.New("sync-chat: invalid id") - -type SyncChat struct { - ID string `json:"id"` -} - -func (c *SyncChat) Validate() error { - if len(c.ID) == 0 { - return ErrSyncChatInvalidID - } - - return nil -} diff --git a/services/ext/api.go b/services/ext/api.go index 449ebee82..b5226c47f 100644 --- a/services/ext/api.go +++ b/services/ext/api.go @@ -1681,14 +1681,22 @@ func (api *PublicAPI) PromoteSelfToControlMode(communityID string) error { return err } -func (api *PublicAPI) SyncChat(request *requests.SyncChat) error { - return api.service.messenger.SyncChat(request) +func (api *PublicAPI) FetchMessages(request *requests.FetchMessages) error { + return api.service.messenger.FetchMessages(request) } func (api *PublicAPI) SetLightClient(request *requests.SetLightClient) error { return api.service.messenger.SetLightClient(request) } +func (api *PublicAPI) SetLogLevel(request *requests.SetLogLevel) error { + return api.service.messenger.SetLogLevel(request) +} + +func (api *PublicAPI) SetCustomNodes(request *requests.SetCustomNodes) error { + return api.service.messenger.SetCustomNodes(request) +} + // ----- // HELPER // -----