Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions src/app/boot/app_controller.nim
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ import app_service/service/node/service as node_service
import app_service/service/profile/service as profile_service
import app_service/service/settings/service as settings_service
import app_service/service/stickers/service as stickers_service
import app_service/service/kvstore/service as kvstore_service
import app_service/service/about/service as about_service
import app_service/service/node_configuration/service as node_configuration_service
import app_service/service/network/service as network_service
Expand Down Expand Up @@ -83,6 +84,7 @@ type
profileService: profile_service.Service
settingsService: settings_service.Service
stickersService: stickers_service.Service
kvstoreService: kvstore_service.Service
aboutService: about_service.Service
networkService: network_service.Service
activityCenterService: activity_center_service.Service
Expand Down Expand Up @@ -207,6 +209,7 @@ proc newAppController*(statusFoundation: StatusFoundation): AppController =
result.chatService,
result.tokenService
)
result.kvstoreService = kvstore_service.newService(statusFoundation.events)
result.aboutService = about_service.newService(statusFoundation.events, statusFoundation.threadpool)
result.languageService = language_service.newService(statusFoundation.events)
result.privacyService = privacy_service.newService(statusFoundation.events, result.settingsService,
Expand Down Expand Up @@ -265,6 +268,7 @@ proc newAppController*(statusFoundation: StatusFoundation): AppController =
result.activityCenterService,
result.savedAddressService,
result.nodeConfigurationService,
result.kvstoreService,
result.devicesService,
result.mailserversService,
result.nodeService,
Expand Down Expand Up @@ -322,6 +326,7 @@ proc delete*(self: AppController) =
self.nodeService.delete
self.settingsService.delete
self.stickersService.delete
self.kvstoreService.delete
self.savedAddressService.delete
self.devicesService.delete
self.mailserversService.delete
Expand Down Expand Up @@ -385,6 +390,7 @@ proc load(self: AppController) =
self.rampService.init()
self.transactionService.init()
self.stickersService.init()
self.kvstoreService.init()
self.activityCenterService.init()
self.savedAddressService.init()
self.aboutService.init()
Expand Down
7 changes: 6 additions & 1 deletion src/app/modules/main/module.nim
Original file line number Diff line number Diff line change
Expand Up @@ -50,10 +50,12 @@ import app_service/service/about/service as about_service
import app_service/service/language/service as language_service
import app_service/service/privacy/service as privacy_service
import app_service/service/stickers/service as stickers_service
import app_service/service/kvstore/service as kvstore_service
import app_service/service/activity_center/service as activity_center_service
import app_service/service/saved_address/service as saved_address_service
import app_service/service/node/service as node_service
import app_service/service/node_configuration/service as node_configuration_service
import app_service/service/kvstore/service as kvstore_service
import app_service/service/devices/service as devices_service
import app_service/service/mailservers/service as mailservers_service
import app_service/service/gif/service as gif_service
Expand Down Expand Up @@ -103,6 +105,7 @@ type
keychainService: keychain_service.Service
networkConnectionService: network_connection_service.Service
stickersService: stickers_service.Service
kvstoreService: kvstore_service.Service
communityTokensService: community_tokens_service.Service
walletSectionModule: wallet_section_module.AccessInterface
profileSectionModule: profile_section_module.AccessInterface
Expand Down Expand Up @@ -159,6 +162,7 @@ proc newModule*[T](
activityCenterService: activity_center_service.Service,
savedAddressService: saved_address_service.Service,
nodeConfigurationService: node_configuration_service.Service,
kvstoreService: kvstore_service.Service,
devicesService: devices_service.Service,
mailserversService: mailservers_service.Service,
nodeService: node_service.Service,
Expand Down Expand Up @@ -212,6 +216,7 @@ proc newModule*[T](
result.savedAddressService = savedAddressService
result.keychainService = keychainService
result.stickersService = stickersService
result.kvstoreService = kvstoreService
result.communityTokensService = communityTokensService

# Submodules
Expand All @@ -225,7 +230,7 @@ proc newModule*[T](
)
result.profileSectionModule = profile_section_module.newModule(
result, events, accountsService, settingsService, stickersService,
profileService, contactsService, aboutService, languageService, privacyService, nodeConfigurationService,
profileService, contactsService, aboutService, languageService, privacyService, nodeConfigurationService, kvstoreService,
devicesService, mailserversService, chatService, ensService, walletAccountService, generalService, communityService,
networkService, keycardService, keychainService, tokenService, nodeService
)
Expand Down
17 changes: 16 additions & 1 deletion src/app/modules/main/profile_section/advanced/controller.nim
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import ../../../../global/app_signals
import ../../../../core/eventemitter
import ../../../../../app_service/service/settings/service as settings_service
import ../../../../../app_service/service/stickers/service as stickers_service
import ../../../../../app_service/service/kvstore/service as kvstore_service
import ../../../../../app_service/service/node_configuration/service as node_configuration_service

logScope:
Expand All @@ -17,16 +18,19 @@ type
settingsService: settings_service.Service
stickersService: stickers_service.Service
nodeConfigurationService: node_configuration_service.Service
kvstoreService: kvstore_service.Service

proc newController*(delegate: io_interface.AccessInterface, events: EventEmitter,
settingsService: settings_service.Service,
stickersService: stickers_service.Service,
nodeConfigurationService: node_configuration_service.Service): Controller =
nodeConfigurationService: node_configuration_service.Service,
kvstoreService: kvstore_service.Service): Controller =
result = Controller()
result.delegate = delegate
result.events = events
result.settingsService = settingsService
result.nodeConfigurationService = nodeConfigurationService
result.kvstoreService = kvstoreService

proc delete*(self: Controller) =
discard
Expand Down Expand Up @@ -116,6 +120,17 @@ proc toggleDebug*(self: Controller) =

self.delegate.onDebugToggled()

proc isRlnRateLimitEnabled*(self: Controller): bool =
return self.kvstoreService.isRlnRateLimitEnabled()

proc toggleRlnRateLimit*(self: Controller) =
let enabled = self.kvstoreService.isRlnRateLimitEnabled()

if not self.kvstoreService.setRlnRateLimitEnabled(not enabled):
error "an error occurred, we couldn't toggle rate limit"
return
self.delegate.onRlnRateLimitToggled()

proc isNimbusProxyEnabled*(self: Controller): bool =
return self.nodeConfigurationService.isNimbusProxyEnabled()

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,9 @@ method onDebugToggled*(self: AccessInterface) {.base.} =
method onNimbusProxyToggled*(self: AccessInterface) {.base.} =
raise newException(ValueError, "No implementation available")

method onRlnRateLimitToggled*(self: AccessInterface) {.base.} =
raise newException(ValueError, "No implementation available")

method viewDidLoad*(self: AccessInterface) {.base.} =
raise newException(ValueError, "No implementation available")

Expand Down Expand Up @@ -81,6 +84,12 @@ method disableCommunityHistoryArchiveSupport*(self: AccessInterface) {.base.} =
method toggleDebug*(self: AccessInterface) {.base.} =
raise newException(ValueError, "No implementation available")

method isRlnRateLimitEnabled*(self: AccessInterface): bool {.base.} =
raise newException(ValueError, "No implementation available")

method toggleRlnRateLimit*(self: AccessInterface) {.base.} =
raise newException(ValueError, "No implementation available")

method isNimbusProxyEnabled*(self: AccessInterface): bool {.base.} =
raise newException(ValueError, "No implementation available")

Expand Down
15 changes: 13 additions & 2 deletions src/app/modules/main/profile_section/advanced/module.nim
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import ../../../../../constants
import ../../../../core/eventemitter
import ../../../../../app_service/service/settings/service as settings_service
import ../../../../../app_service/service/stickers/service as stickers_service
import ../../../../../app_service/service/kvstore/service as kvstore_service
import ../../../../../app_service/service/node_configuration/service as node_configuration_service

export io_interface
Expand All @@ -25,12 +26,13 @@ type
proc newModule*(delegate: delegate_interface.AccessInterface, events: EventEmitter,
settingsService: settings_service.Service,
stickersService: stickers_service.Service,
nodeConfigurationService: node_configuration_service.Service): Module =
nodeConfigurationService: node_configuration_service.Service,
kvstoreService: kvstore_service.Service): Module =
result = Module()
result.delegate = delegate
result.view = view.newView(result)
result.viewVariant = newQVariant(result.view)
result.controller = controller.newController(result, events, settingsService, stickersService, nodeConfigurationService)
result.controller = controller.newController(result, events, settingsService, stickersService, nodeConfigurationService, kvstoreService)
result.moduleLoaded = false

method delete*(self: Module) =
Expand Down Expand Up @@ -102,6 +104,12 @@ method isDebugEnabled*(self: Module): bool =
method toggleDebug*(self: Module) =
self.controller.toggleDebug()

method isRlnRateLimitEnabled*(self: Module): bool =
self.controller.isRlnRateLimitEnabled()

method toggleRlnRateLimit*(self: Module) =
self.controller.toggleRlnRateLimit()

method onDebugToggled*(self: Module) =
self.view.isDebugEnabledChanged()

Expand All @@ -114,6 +122,9 @@ method toggleNimbusProxy*(self: Module) =
method onNimbusProxyToggled*(self: Module) =
self.view.isNimbusProxyEnabledChanged()

method onRlnRateLimitToggled*(self: Module) =
self.view.isRlnRateLimitEnabledChanged()

method isRuntimeLogLevelSet*(self: Module): bool =
return constants.runtimeLogLevelSet()

Expand Down
12 changes: 11 additions & 1 deletion src/app/modules/main/profile_section/advanced/view.nim
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,17 @@ QtObject:

proc toggleDebug*(self: View) {.slot.} =
self.delegate.toggleDebug()


proc isRlnRateLimitEnabledChanged*(self: View) {.signal.}
proc getIsRateLimitEnabled*(self: View): bool {.slot.} =
return self.delegate.isRlnRateLimitEnabled()
QtProperty[bool] isRlnRateLimitEnabled:
read = getIsRateLimitEnabled
notify = isRlnRateLimitEnabledChanged

proc toggleRlnRateLimit*(self: View) {.slot.} =
self.delegate.toggleRlnRateLimit()

proc isNimbusProxyEnabledChanged*(self: View) {.signal.}
proc getIsNimbusProxyEnabled*(self: View): bool {.slot.} =
return self.delegate.isNimbusProxyEnabled()
Expand Down
4 changes: 3 additions & 1 deletion src/app/modules/main/profile_section/module.nim
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import ../../../../app_service/service/about/service as about_service
import ../../../../app_service/service/language/service as language_service
import ../../../../app_service/service/privacy/service as privacy_service
import ../../../../app_service/service/node_configuration/service as node_configuration_service
import ../../../../app_service/service/kvstore/service as kvstore_service
import ../../../../app_service/service/devices/service as devices_service
import ../../../../app_service/service/mailservers/service as mailservers_service
import ../../../../app_service/service/chat/service as chat_service
Expand Down Expand Up @@ -76,6 +77,7 @@ proc newModule*(delegate: delegate_interface.AccessInterface,
languageService: language_service.Service,
privacyService: privacy_service.Service,
nodeConfigurationService: node_configuration_service.Service,
kvstoreService: kvstore_service.Service,
devicesService: devices_service.Service,
mailserversService: mailservers_service.Service,
chatService: chat_service.Service,
Expand All @@ -101,7 +103,7 @@ proc newModule*(delegate: delegate_interface.AccessInterface,
result.languageModule = language_module.newModule(result, events, languageService)
result.privacyModule = privacy_module.newModule(result, events, settingsService, keychainService, privacyService, generalService)
result.aboutModule = about_module.newModule(result, events, aboutService)
result.advancedModule = advanced_module.newModule(result, events, settingsService, stickersService, nodeConfigurationService)
result.advancedModule = advanced_module.newModule(result, events, settingsService, stickersService, nodeConfigurationService, kvstoreService)
result.devicesModule = devices_module.newModule(result, events, settingsService, devicesService)
result.syncModule = sync_module.newModule(result, events, settingsService, nodeConfigurationService, mailserversService)
result.wakuModule = waku_module.newModule(result, events, settingsService, nodeConfigurationService)
Expand Down
13 changes: 13 additions & 0 deletions src/app_service/service/kvstore/dto.nim
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
import json

include app_service/common/json_utils

# kv_store keys:
const RLN_RATE_LIMIT_ENABLED* = "rlnRateLimitEnabled"

type
KvstoreDto* = object
rlnRateLimitEnabled*: bool

proc toKvstoreDto*(jsonObj: JsonNode): KvstoreDto =
discard jsonObj.getProp(RLN_RATE_LIMIT_ENABLED, result.rlnRateLimitEnabled)
38 changes: 38 additions & 0 deletions src/app_service/service/kvstore/service.nim
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
import NimQml, chronicles, json, strutils, sequtils, tables

import app/core/eventemitter
import backend/kvstore as status_kvstore

import ./dto
export dto

logScope:
topics = "kvstore-service"

QtObject:
type Service* = ref object of QObject
events: EventEmitter
kvstore: KvstoreDto

proc delete*(self: Service) =
self.QObject.delete

proc newService*(events: EventEmitter): Service =
new(result, delete)
result.events = events
result.QObject.setup

proc init*(self: Service) =
let response = status_kvstore.getStoreEntry()
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

all proc implementations of status_kvstore can throw. I think we could use some exceptions handling.

self.kvstore = response.result.toKvstoreDto()

proc isRlnRateLimitEnabled*(self: Service): bool =
return self.kvstore.rlnRateLimitEnabled

proc setRlnRateLimitEnabled*(self: Service, value: bool): bool =
let response = status_kvstore.setRlnRateLimitEnabled(value)
if (not response.error.isNil):
error "error set rate limit: ", errDescription = response.error.message
return false
self.kvstore.rlnRateLimitEnabled = value
return true
11 changes: 11 additions & 0 deletions src/backend/kvstore.nim
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import json
import ./core, ./response_type

export response_type

proc getStoreEntry*(): RpcResponse[JsonNode] =
return core.callPrivateRPC("kvstore_getStoreEntry")

proc setRlnRateLimitEnabled*(value: bool): RpcResponse[JsonNode] =
let payload = %* [value]
result = core.callPrivateRPC("kvstore_setRlnRateLimitEnabled", payload)
8 changes: 8 additions & 0 deletions ui/app/AppLayouts/Profile/stores/AdvancedStore.qml
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ QtObject {
property bool isAutoMessageEnabled: advancedModule? advancedModule.isAutoMessageEnabled : false
property bool isNimbusProxyEnabled: advancedModule? advancedModule.isNimbusProxyEnabled : false
property bool isDebugEnabled: advancedModule? advancedModule.isDebugEnabled : false
property bool isRlnRateLimitEnabled: advancedModule? advancedModule.isRlnRateLimitEnabled : false
readonly property bool isWakuV2ShardedCommunitiesEnabled: localAppSettings.wakuV2ShardedCommunitiesEnabled ?? false
property int logMaxBackups: advancedModule ? advancedModule.logMaxBackups : 1
property bool isRuntimeLogLevelSet: advancedModule ? advancedModule.isRuntimeLogLevelSet: false
Expand Down Expand Up @@ -92,6 +93,13 @@ QtObject {
root.advancedModule.toggleDebug()
}

function toggleRlnRateLimit() {
if(!root.advancedModule)
return

root.advancedModule.toggleRlnRateLimit()
}

function toggleNimbusProxy() {
if(!root.advancedModule)
return
Expand Down
11 changes: 11 additions & 0 deletions ui/app/AppLayouts/Profile/views/AdvancedView.qml
Original file line number Diff line number Diff line change
Expand Up @@ -481,6 +481,17 @@ SettingsContentBase {
text: qsTr("RPC statistics")
onClicked: rpcStatsModal.open()
}

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What will this setting do for the user?

Adding @jorge-campo in case we need to update the documentation.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It will be used to enable the RLN rate limit. Here are more detail: status-im/status-go#6475

StatusSettingsLineButton {
anchors.leftMargin: 0
anchors.rightMargin: 0
text: qsTr("Enable RLN Rate Limit")
isSwitch: true
switchChecked: root.advancedStore.isRlnRateLimitEnabled
onClicked: {
root.advancedStore.toggleRlnRateLimit()
}
}
}

FleetsModal {
Expand Down