refactor: dapps and permissions
This commit is contained in:
parent
a156a8be1e
commit
50a3e5f346
|
@ -0,0 +1,44 @@
|
||||||
|
import Tables
|
||||||
|
import result
|
||||||
|
import controller_interface
|
||||||
|
import io_interface
|
||||||
|
import options
|
||||||
|
import ../../../../../app_service/service/dapp_permissions/service as dapp_permissions_service
|
||||||
|
|
||||||
|
export controller_interface
|
||||||
|
|
||||||
|
type
|
||||||
|
Controller* = ref object of controller_interface.AccessInterface
|
||||||
|
delegate: io_interface.AccessInterface
|
||||||
|
dappPermissionsService: dapp_permissions_service.ServiceInterface
|
||||||
|
|
||||||
|
proc newController*(delegate: io_interface.AccessInterface,
|
||||||
|
dappPermissionsService: dapp_permissions_service.ServiceInterface):
|
||||||
|
Controller =
|
||||||
|
result = Controller()
|
||||||
|
result.delegate = delegate
|
||||||
|
result.dappPermissionsService = dappPermissionsService
|
||||||
|
|
||||||
|
method delete*(self: Controller) =
|
||||||
|
discard
|
||||||
|
|
||||||
|
method init*(self: Controller) =
|
||||||
|
discard
|
||||||
|
|
||||||
|
method getDapps*(self: Controller): seq[dapp_permissions_service.Dapp] =
|
||||||
|
return self.dappPermissionsService.getDapps()
|
||||||
|
|
||||||
|
method getDapp*(self: Controller, dapp:string): Option[dapp_permissions_service.Dapp] =
|
||||||
|
return self.dappPermissionsService.getDapp(dapp)
|
||||||
|
|
||||||
|
method hasPermission*(self: Controller, dapp: string, permission: dapp_permissions_service.Permission):bool =
|
||||||
|
return self.dappPermissionsService.hasPermission(dapp, permission)
|
||||||
|
|
||||||
|
method clearPermissions*(self: Controller, dapp: string) =
|
||||||
|
discard self.dappPermissionsService.clearPermissions(dapp)
|
||||||
|
|
||||||
|
method revokeAllPermisions*(self: Controller) =
|
||||||
|
discard self.dappPermissionsService.revokeAllPermisions()
|
||||||
|
|
||||||
|
method revokePermission*(self: Controller, dapp: string, permission: string) =
|
||||||
|
discard self.dappPermissionsService.revoke(dapp, permission.toPermission())
|
|
@ -0,0 +1,30 @@
|
||||||
|
import ../../../../../app_service/service/dapp_permissions/service_interface as dapp_permissions_service
|
||||||
|
import options
|
||||||
|
|
||||||
|
type
|
||||||
|
AccessInterface* {.pure inheritable.} = ref object of RootObj
|
||||||
|
## Abstract class for any input/interaction with this module.
|
||||||
|
|
||||||
|
method delete*(self: AccessInterface) {.base.} =
|
||||||
|
raise newException(ValueError, "No implementation available")
|
||||||
|
|
||||||
|
method init*(self: AccessInterface) {.base.} =
|
||||||
|
raise newException(ValueError, "No implementation available")
|
||||||
|
|
||||||
|
method getDapps*(self: AccessInterface): seq[dapp_permissions_service.Dapp] {.base.} =
|
||||||
|
raise newException(ValueError, "No implementation available")
|
||||||
|
|
||||||
|
method getDapp*(self: AccessInterface, dapp: string): Option[dapp_permissions_service.Dapp] {.base.} =
|
||||||
|
raise newException(ValueError, "No implementation available")
|
||||||
|
|
||||||
|
method hasPermission*(self: AccessInterface, dapp: string, permission: dapp_permissions_service.Permission):bool {.base.} =
|
||||||
|
raise newException(ValueError, "No implementation available")
|
||||||
|
|
||||||
|
method clearPermissions*(self: AccessInterface, dapp: string) {.base.} =
|
||||||
|
raise newException(ValueError, "No implementation available")
|
||||||
|
|
||||||
|
method revokePermission*(self: AccessInterface, dapp: string, name: string) {.base.} =
|
||||||
|
raise newException(ValueError, "No implementation available")
|
||||||
|
|
||||||
|
method revokeAllPermisions*(self: AccessInterface) {.base.} =
|
||||||
|
raise newException(ValueError, "No implementation available")
|
|
@ -0,0 +1,71 @@
|
||||||
|
import NimQml, Tables, strutils, strformat
|
||||||
|
|
||||||
|
type
|
||||||
|
ModelRole {.pure.} = enum
|
||||||
|
Name = UserRole + 1
|
||||||
|
|
||||||
|
QtObject:
|
||||||
|
type
|
||||||
|
DappsModel* = ref object of QAbstractListModel
|
||||||
|
items: seq[string]
|
||||||
|
|
||||||
|
proc delete(self: DappsModel) =
|
||||||
|
self.items = @[]
|
||||||
|
self.QAbstractListModel.delete
|
||||||
|
|
||||||
|
proc setup(self: DappsModel) =
|
||||||
|
self.QAbstractListModel.setup
|
||||||
|
|
||||||
|
proc newDappsModel*(): DappsModel =
|
||||||
|
new(result, delete)
|
||||||
|
result.setup
|
||||||
|
|
||||||
|
proc `$`*(self: DappsModel): string =
|
||||||
|
for i in 0 ..< self.items.len:
|
||||||
|
result &= fmt"""
|
||||||
|
[{i}]:({$self.items[i]})
|
||||||
|
"""
|
||||||
|
|
||||||
|
proc modelChanged(self: DappsModel) {.signal.}
|
||||||
|
|
||||||
|
proc getCount(self: DappsModel): int {.slot.} =
|
||||||
|
self.items.len
|
||||||
|
|
||||||
|
QtProperty[int] count:
|
||||||
|
read = getCount
|
||||||
|
notify = countChanged
|
||||||
|
|
||||||
|
method rowCount(self: DappsModel, index: QModelIndex = nil): int =
|
||||||
|
return self.items.len
|
||||||
|
|
||||||
|
method roleNames(self: DappsModel): Table[int, string] =
|
||||||
|
{
|
||||||
|
ModelRole.Name.int:"name"
|
||||||
|
}.toTable
|
||||||
|
|
||||||
|
method data(self: DappsModel, index: QModelIndex, role: int): QVariant =
|
||||||
|
if (not index.isValid):
|
||||||
|
return
|
||||||
|
|
||||||
|
if (index.row < 0 or index.row >= self.items.len):
|
||||||
|
return
|
||||||
|
|
||||||
|
result = newQVariant(self.items[index.row])
|
||||||
|
|
||||||
|
proc addItem*(self: DappsModel, item: string) =
|
||||||
|
let parentModelIndex = newQModelIndex()
|
||||||
|
defer: parentModelIndex.delete
|
||||||
|
|
||||||
|
for i in self.items:
|
||||||
|
if i == item:
|
||||||
|
return
|
||||||
|
|
||||||
|
self.beginInsertRows(parentModelIndex, self.items.len, self.items.len)
|
||||||
|
self.items.add(item)
|
||||||
|
self.endInsertRows()
|
||||||
|
self.modelChanged()
|
||||||
|
|
||||||
|
proc clear*(self: DappsModel) =
|
||||||
|
self.beginResetModel()
|
||||||
|
self.items = @[]
|
||||||
|
self.endResetModel()
|
|
@ -0,0 +1,11 @@
|
||||||
|
import ../../../../../app_service/service/dapp_permissions/service_interface as dapp_permissions_service
|
||||||
|
|
||||||
|
# Defines how parent module accesses this module
|
||||||
|
include ./private_interfaces/module_base_interface
|
||||||
|
include ./private_interfaces/module_access_interface
|
||||||
|
|
||||||
|
# Defines how this module view communicates with this module
|
||||||
|
include ./private_interfaces/module_view_delegate_interface
|
||||||
|
|
||||||
|
# Defines how this controller communicates with this module
|
||||||
|
include ./private_interfaces/module_controller_delegate_interface
|
|
@ -0,0 +1,74 @@
|
||||||
|
import NimQml
|
||||||
|
import io_interface
|
||||||
|
import ../io_interface as delegate_interface
|
||||||
|
import view
|
||||||
|
import sets
|
||||||
|
import controller
|
||||||
|
import ../../../../core/global_singleton
|
||||||
|
import ../../../../../app_service/service/dapp_permissions/service as dapp_permissions_service
|
||||||
|
import options
|
||||||
|
export io_interface
|
||||||
|
|
||||||
|
type
|
||||||
|
Module* = ref object of io_interface.AccessInterface
|
||||||
|
delegate: delegate_interface.AccessInterface
|
||||||
|
view: View
|
||||||
|
viewVariant: QVariant
|
||||||
|
moduleLoaded: bool
|
||||||
|
controller: controller.AccessInterface
|
||||||
|
|
||||||
|
proc newModule*(delegate: delegate_interface.AccessInterface, dappPermissionsService: dapp_permissions_service.ServiceInterface): Module =
|
||||||
|
result = Module()
|
||||||
|
result.delegate = delegate
|
||||||
|
result.view = view.newView(result)
|
||||||
|
result.viewVariant = newQVariant(result.view)
|
||||||
|
result.moduleLoaded = false
|
||||||
|
result.controller = controller.newController(result, dappPermissionsService)
|
||||||
|
|
||||||
|
method delete*(self: Module) =
|
||||||
|
self.view.delete
|
||||||
|
self.viewVariant.delete
|
||||||
|
self.controller.delete
|
||||||
|
|
||||||
|
method fetchDapps*(self: Module) =
|
||||||
|
self.view.clearDapps()
|
||||||
|
let dapps = self.controller.getDapps()
|
||||||
|
for d in dapps:
|
||||||
|
self.view.addDapp(d.name)
|
||||||
|
|
||||||
|
method fetchPermissions(self: Module, dapp: string) =
|
||||||
|
self.view.clearPermissions()
|
||||||
|
let dapp = self.controller.getDapp(dapp)
|
||||||
|
if dapp.isSome:
|
||||||
|
for p in dapp.get().permissions.items:
|
||||||
|
self.view.addPermission($p)
|
||||||
|
|
||||||
|
method load*(self: Module) =
|
||||||
|
singletonInstance.engine.setRootContextProperty("dappPermissionsModule", self.viewVariant)
|
||||||
|
self.view.load()
|
||||||
|
self.fetchDapps()
|
||||||
|
|
||||||
|
method isLoaded*(self: Module): bool =
|
||||||
|
return self.moduleLoaded
|
||||||
|
|
||||||
|
proc checkIfModuleDidLoad(self: Module) =
|
||||||
|
self.moduleLoaded = true
|
||||||
|
self.delegate.dappsDidLoad()
|
||||||
|
|
||||||
|
method dappsDidLoad*(self: Module) =
|
||||||
|
self.checkIfModuleDidLoad()
|
||||||
|
|
||||||
|
method viewDidLoad*(self: Module) =
|
||||||
|
self.checkIfModuleDidLoad()
|
||||||
|
|
||||||
|
method hasPermission*(self: Module, hostname: string, permission: string): bool =
|
||||||
|
self.controller.hasPermission(hostname, permission.toPermission())
|
||||||
|
|
||||||
|
method clearPermissions*(self: Module, dapp: string) =
|
||||||
|
self.controller.clearPermissions(dapp)
|
||||||
|
|
||||||
|
method revokeAllPermissions*(self: Module) =
|
||||||
|
self.controller.revokeAllPermisions()
|
||||||
|
|
||||||
|
method revokePermission*(self: Module, dapp: string, name: string) =
|
||||||
|
self.controller.revokePermission(dapp, name)
|
|
@ -0,0 +1,69 @@
|
||||||
|
import NimQml, Tables, strutils, strformat
|
||||||
|
|
||||||
|
type
|
||||||
|
ModelRole {.pure.} = enum
|
||||||
|
Name = UserRole + 1
|
||||||
|
|
||||||
|
QtObject:
|
||||||
|
type
|
||||||
|
PermissionsModel* = ref object of QAbstractListModel
|
||||||
|
items: seq[string]
|
||||||
|
|
||||||
|
proc delete(self: PermissionsModel) =
|
||||||
|
self.items = @[]
|
||||||
|
self.QAbstractListModel.delete
|
||||||
|
|
||||||
|
proc setup(self: PermissionsModel) =
|
||||||
|
self.QAbstractListModel.setup
|
||||||
|
|
||||||
|
proc newPermissionsModel*(): PermissionsModel =
|
||||||
|
new(result, delete)
|
||||||
|
result.setup
|
||||||
|
|
||||||
|
proc `$`*(self: PermissionsModel): string =
|
||||||
|
for i in 0 ..< self.items.len:
|
||||||
|
result &= fmt"""
|
||||||
|
[{i}]:({$self.items[i]})
|
||||||
|
"""
|
||||||
|
|
||||||
|
proc modelChanged(self: PermissionsModel) {.signal.}
|
||||||
|
|
||||||
|
proc getCount(self: PermissionsModel): int {.slot.} =
|
||||||
|
self.items.len
|
||||||
|
|
||||||
|
QtProperty[int] count:
|
||||||
|
read = getCount
|
||||||
|
notify = countChanged
|
||||||
|
|
||||||
|
method rowCount(self: PermissionsModel, index: QModelIndex = nil): int =
|
||||||
|
return self.items.len
|
||||||
|
|
||||||
|
method roleNames(self: PermissionsModel): Table[int, string] =
|
||||||
|
{
|
||||||
|
ModelRole.Name.int:"name"
|
||||||
|
}.toTable
|
||||||
|
|
||||||
|
method data(self: PermissionsModel, index: QModelIndex, role: int): QVariant =
|
||||||
|
if (not index.isValid):
|
||||||
|
return
|
||||||
|
|
||||||
|
if (index.row < 0 or index.row >= self.items.len):
|
||||||
|
return
|
||||||
|
result = newQVariant(self.items[index.row])
|
||||||
|
|
||||||
|
proc addItem*(self: PermissionsModel, item: string) =
|
||||||
|
let parentModelIndex = newQModelIndex()
|
||||||
|
defer: parentModelIndex.delete
|
||||||
|
for i in self.items:
|
||||||
|
if i == item:
|
||||||
|
return
|
||||||
|
|
||||||
|
self.beginInsertRows(parentModelIndex, self.items.len, self.items.len)
|
||||||
|
self.items.add(item)
|
||||||
|
self.endInsertRows()
|
||||||
|
self.modelChanged()
|
||||||
|
|
||||||
|
proc clear*(self: PermissionsModel) {.slot.} =
|
||||||
|
self.beginResetModel()
|
||||||
|
self.items = @[]
|
||||||
|
self.endResetModel()
|
|
@ -0,0 +1,8 @@
|
||||||
|
method delete*(self: AccessInterface) {.base.} =
|
||||||
|
raise newException(ValueError, "No implementation available")
|
||||||
|
|
||||||
|
method load*(self: AccessInterface) {.base.} =
|
||||||
|
raise newException(ValueError, "No implementation available")
|
||||||
|
|
||||||
|
method isLoaded*(self: AccessInterface): bool {.base.} =
|
||||||
|
raise newException(ValueError, "No implementation available")
|
|
@ -0,0 +1,5 @@
|
||||||
|
type
|
||||||
|
AccessInterface* {.pure inheritable.} = ref object of RootObj
|
||||||
|
|
||||||
|
# Since nim doesn't support using concepts in second level nested types we
|
||||||
|
# define delegate interfaces within access interface.
|
|
@ -0,0 +1,17 @@
|
||||||
|
method hasPermission*(self: AccessInterface, hostname: string, permission: string): bool =
|
||||||
|
raise newException(ValueError, "No implementation available")
|
||||||
|
|
||||||
|
method clearPermissions*(self: AccessInterface, dapp: string) =
|
||||||
|
raise newException(ValueError, "No implementation available")
|
||||||
|
|
||||||
|
method revokePermission*(self: AccessInterface, dapp: string, name: string) =
|
||||||
|
raise newException(ValueError, "No implementation available")
|
||||||
|
|
||||||
|
method revokeAllPermissions*(self: AccessInterface) =
|
||||||
|
raise newException(ValueError, "No implementation available")
|
||||||
|
|
||||||
|
method fetchDapps*(self: AccessInterface) =
|
||||||
|
raise newException(ValueError, "No implementation available")
|
||||||
|
|
||||||
|
method fetchPermissions*(self: AccessInterface, dapp: string) =
|
||||||
|
raise newException(ValueError, "No implementation available")
|
|
@ -0,0 +1,2 @@
|
||||||
|
method viewDidLoad*(self: AccessInterface) {.base.} =
|
||||||
|
raise newException(ValueError, "No implementation available")
|
|
@ -0,0 +1,86 @@
|
||||||
|
import NimQml
|
||||||
|
import io_interface
|
||||||
|
import dapps
|
||||||
|
import permissions
|
||||||
|
|
||||||
|
QtObject:
|
||||||
|
type
|
||||||
|
View* = ref object of QObject
|
||||||
|
delegate: io_interface.AccessInterface
|
||||||
|
dappsModel: DappsModel
|
||||||
|
permissionsModel: PermissionsModel
|
||||||
|
dappsModelVariant: QVariant
|
||||||
|
permissionsModelVariant: QVariant
|
||||||
|
|
||||||
|
proc setup(self: View) =
|
||||||
|
self.QObject.setup
|
||||||
|
|
||||||
|
proc delete*(self: View) =
|
||||||
|
self.dappsModel.delete
|
||||||
|
self.permissionsModel.delete
|
||||||
|
self.dappsModelVariant.delete
|
||||||
|
self.permissionsModelVariant.delete
|
||||||
|
self.QObject.delete
|
||||||
|
|
||||||
|
proc newView*(delegate: io_interface.AccessInterface): View =
|
||||||
|
new(result, delete)
|
||||||
|
result.delegate = delegate
|
||||||
|
result.dappsModel = newDappsModel()
|
||||||
|
result.permissionsModel = newPermissionsModel()
|
||||||
|
result.dappsModelVariant = newQVariant(result.dappsModel)
|
||||||
|
result.permissionsModelVariant = newQVariant(result.permissionsModel)
|
||||||
|
result.setup()
|
||||||
|
|
||||||
|
proc load*(self: View) =
|
||||||
|
self.delegate.viewDidLoad()
|
||||||
|
|
||||||
|
proc addDapp*(self: View, item: string) =
|
||||||
|
self.dappsModel.addItem(item)
|
||||||
|
|
||||||
|
proc addPermission*(self: View, item: string) =
|
||||||
|
self.permissionsModel.addItem(item)
|
||||||
|
|
||||||
|
proc modelChanged*(self: View) {.signal.}
|
||||||
|
|
||||||
|
proc getPermissionsModel(self: View): QVariant {.slot.} =
|
||||||
|
return self.permissionsModelVariant
|
||||||
|
|
||||||
|
proc getDappsModel(self: View): QVariant {.slot.} =
|
||||||
|
return self.dappsModelVariant
|
||||||
|
|
||||||
|
QtProperty[QVariant] permissions:
|
||||||
|
read = getPermissionsModel
|
||||||
|
notify = modelChanged
|
||||||
|
|
||||||
|
QtProperty[QVariant] dapps:
|
||||||
|
read = getDappsModel
|
||||||
|
notify = modelChanged
|
||||||
|
|
||||||
|
proc hasPermission(self: View, hostname: string, permission: string): bool {.slot.} =
|
||||||
|
return self.delegate.hasPermission(hostname, permission)
|
||||||
|
|
||||||
|
proc clearPermissions(self: View, dapp: string): string {.slot.} =
|
||||||
|
self.delegate.clearPermissions(dapp)
|
||||||
|
|
||||||
|
proc revokePermission(self: View, dapp: string, name: string) {.slot.} =
|
||||||
|
self.delegate.revokePermission(dapp, name)
|
||||||
|
|
||||||
|
proc revokeAllPermissions(self: View) {.slot.} =
|
||||||
|
self.delegate.revokeAllPermissions()
|
||||||
|
|
||||||
|
proc ensResourceURL*(self: View, ens: string, url: string): string {.slot.} =
|
||||||
|
discard # TODO:
|
||||||
|
#let (url, base, http_scheme, path_prefix, hasContentHash) = self.status.provider.ensResourceURL(ens, url)
|
||||||
|
#result = url_replaceHostAndAddPath(url, (if hasContentHash: base else: url_host(base)), http_scheme, path_prefix)
|
||||||
|
|
||||||
|
proc clearDapps*(self: View) =
|
||||||
|
self.dappsModel.clear()
|
||||||
|
|
||||||
|
proc clearPermissions*(self: View) =
|
||||||
|
self.permissionsModel.clear()
|
||||||
|
|
||||||
|
proc fetchDapps(self: View) {.slot.} =
|
||||||
|
self.delegate.fetchDapps()
|
||||||
|
|
||||||
|
proc fetchPermissions(self: View, dapp: string) {.slot.} =
|
||||||
|
self.delegate.fetchPermissions(dapp)
|
|
@ -12,3 +12,4 @@ include ./private_interfaces/module_controller_delegate_interface
|
||||||
# will be added if needed
|
# will be added if needed
|
||||||
include ./private_interfaces/module_provider_delegate_interface
|
include ./private_interfaces/module_provider_delegate_interface
|
||||||
include ./private_interfaces/module_bookmark_delegate_interface
|
include ./private_interfaces/module_bookmark_delegate_interface
|
||||||
|
include ./private_interfaces/module_dapps_delegate_interface
|
||||||
|
|
|
@ -5,8 +5,10 @@ import view
|
||||||
import ../../../core/global_singleton
|
import ../../../core/global_singleton
|
||||||
import provider/module as provider_module
|
import provider/module as provider_module
|
||||||
import bookmark/module as bookmark_module
|
import bookmark/module as bookmark_module
|
||||||
|
import dapps/module as dapps_module
|
||||||
import ../../../../app_service/service/bookmarks/service as bookmark_service
|
import ../../../../app_service/service/bookmarks/service as bookmark_service
|
||||||
import ../../../../app_service/service/settings/service as settings_service
|
import ../../../../app_service/service/settings/service as settings_service
|
||||||
|
import ../../../../app_service/service/dapp_permissions/service as dapp_permissions_service
|
||||||
export io_interface
|
export io_interface
|
||||||
|
|
||||||
type
|
type
|
||||||
|
@ -17,8 +19,9 @@ type
|
||||||
moduleLoaded: bool
|
moduleLoaded: bool
|
||||||
providerModule: provider_module.AccessInterface
|
providerModule: provider_module.AccessInterface
|
||||||
bookmarkModule: bookmark_module.AccessInterface
|
bookmarkModule: bookmark_module.AccessInterface
|
||||||
|
dappsModule: dapps_module.AccessInterface
|
||||||
|
|
||||||
proc newModule*(delegate: delegate_interface.AccessInterface, bookmarkService: bookmark_service.ServiceInterface, settingsService: settings_service.ServiceInterface): Module =
|
proc newModule*(delegate: delegate_interface.AccessInterface, bookmarkService: bookmark_service.ServiceInterface, settingsService: settings_service.ServiceInterface, dappPermissionsService: dapp_permissions_service.ServiceInterface): Module =
|
||||||
result = Module()
|
result = Module()
|
||||||
result.delegate = delegate
|
result.delegate = delegate
|
||||||
result.view = view.newView(result)
|
result.view = view.newView(result)
|
||||||
|
@ -26,17 +29,20 @@ proc newModule*(delegate: delegate_interface.AccessInterface, bookmarkService: b
|
||||||
result.moduleLoaded = false
|
result.moduleLoaded = false
|
||||||
result.providerModule = provider_module.newModule(result, settingsService)
|
result.providerModule = provider_module.newModule(result, settingsService)
|
||||||
result.bookmarkModule = bookmark_module.newModule(result, bookmarkService)
|
result.bookmarkModule = bookmark_module.newModule(result, bookmarkService)
|
||||||
|
result.dappsModule = dapps_module.newModule(result, dappPermissionsService)
|
||||||
|
|
||||||
method delete*(self: Module) =
|
method delete*(self: Module) =
|
||||||
self.view.delete
|
self.view.delete
|
||||||
self.viewVariant.delete
|
self.viewVariant.delete
|
||||||
self.providerModule.delete
|
self.providerModule.delete
|
||||||
self.bookmarkModule.delete
|
self.bookmarkModule.delete
|
||||||
|
self.dappsModule.delete
|
||||||
|
|
||||||
method load*(self: Module) =
|
method load*(self: Module) =
|
||||||
singletonInstance.engine.setRootContextProperty("browserSection", self.viewVariant)
|
singletonInstance.engine.setRootContextProperty("browserSection", self.viewVariant)
|
||||||
self.providerModule.load()
|
self.providerModule.load()
|
||||||
self.bookmarkModule.load()
|
self.bookmarkModule.load()
|
||||||
|
self.dappsModule.load()
|
||||||
self.view.load()
|
self.view.load()
|
||||||
|
|
||||||
method isLoaded*(self: Module): bool =
|
method isLoaded*(self: Module): bool =
|
||||||
|
@ -49,6 +55,9 @@ proc checkIfModuleDidLoad(self: Module) =
|
||||||
if(not self.bookmarkModule.isLoaded()):
|
if(not self.bookmarkModule.isLoaded()):
|
||||||
return
|
return
|
||||||
|
|
||||||
|
if(not self.dappsModule.isLoaded()):
|
||||||
|
return
|
||||||
|
|
||||||
self.moduleLoaded = true
|
self.moduleLoaded = true
|
||||||
self.delegate.browserSectionDidLoad()
|
self.delegate.browserSectionDidLoad()
|
||||||
|
|
||||||
|
@ -58,6 +67,9 @@ method providerDidLoad*(self: Module) =
|
||||||
method bookmarkDidLoad*(self: Module) =
|
method bookmarkDidLoad*(self: Module) =
|
||||||
self.checkIfModuleDidLoad()
|
self.checkIfModuleDidLoad()
|
||||||
|
|
||||||
|
method dappsDidLoad*(self: Module) =
|
||||||
|
self.checkIfModuleDidLoad()
|
||||||
|
|
||||||
method viewDidLoad*(self: Module) =
|
method viewDidLoad*(self: Module) =
|
||||||
self.checkIfModuleDidLoad()
|
self.checkIfModuleDidLoad()
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
method dappsDidLoad*(self: AccessInterface) {.base.} =
|
||||||
|
raise newException(ValueError, "No implementation available")
|
|
@ -99,7 +99,7 @@ proc newModule*[T](
|
||||||
settingService
|
settingService
|
||||||
)
|
)
|
||||||
|
|
||||||
result.browserSectionModule = browser_section_module.newModule(result, bookmarkService, settingsService)
|
result.browserSectionModule = browser_section_module.newModule(result, bookmarkService, settingsService, dappPermissionsService)
|
||||||
result.profileSectionModule = profile_section_module.newModule(result, events, accountsService, settingsService, profileService, contactsService, aboutService)
|
result.profileSectionModule = profile_section_module.newModule(result, events, accountsService, settingsService, profileService, contactsService, aboutService)
|
||||||
|
|
||||||
method delete*[T](self: Module[T]) =
|
method delete*[T](self: Module[T]) =
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
import NimQml, sequtils, strutils, sugar, os, json, chronicles
|
import NimQml, sequtils, strutils, sugar, os, json, chronicles
|
||||||
import views/[mailservers_list, ens_manager, contacts, devices, mailservers, mnemonic, network, fleets, profile_info, device_list, dapp_list, profile_picture, muted_chats]
|
import views/[mailservers_list, ens_manager, contacts, devices, mailservers, mnemonic, network, fleets, profile_info, device_list, profile_picture, muted_chats]
|
||||||
import chronicles
|
import chronicles
|
||||||
import qrcode/qrcode
|
import qrcode/qrcode
|
||||||
|
|
||||||
|
@ -32,7 +32,6 @@ QtObject:
|
||||||
devices*: DevicesView
|
devices*: DevicesView
|
||||||
mailservers*: MailserversView
|
mailservers*: MailserversView
|
||||||
mnemonic*: MnemonicView
|
mnemonic*: MnemonicView
|
||||||
dappList*: DappList
|
|
||||||
fleets*: Fleets
|
fleets*: Fleets
|
||||||
network*: NetworkView
|
network*: NetworkView
|
||||||
status*: Status
|
status*: Status
|
||||||
|
@ -50,7 +49,6 @@ QtObject:
|
||||||
if not self.profilePicture.isNil: self.profilePicture.delete
|
if not self.profilePicture.isNil: self.profilePicture.delete
|
||||||
if not self.mutedChats.isNil: self.mutedChats.delete
|
if not self.mutedChats.isNil: self.mutedChats.delete
|
||||||
if not self.profile.isNil: self.profile.delete
|
if not self.profile.isNil: self.profile.delete
|
||||||
if not self.dappList.isNil: self.dappList.delete
|
|
||||||
if not self.fleets.isNil: self.fleets.delete
|
if not self.fleets.isNil: self.fleets.delete
|
||||||
if not self.network.isNil: self.network.delete
|
if not self.network.isNil: self.network.delete
|
||||||
if not self.mnemonic.isNil: self.mnemonic.delete
|
if not self.mnemonic.isNil: self.mnemonic.delete
|
||||||
|
@ -69,7 +67,6 @@ QtObject:
|
||||||
result.network = newNetworkView(status)
|
result.network = newNetworkView(status)
|
||||||
result.mnemonic = newMnemonicView(status)
|
result.mnemonic = newMnemonicView(status)
|
||||||
result.mailservers = newMailserversView(status, appService)
|
result.mailservers = newMailserversView(status, appService)
|
||||||
result.dappList = newDappList(status)
|
|
||||||
result.ens = newEnsManager(status, appService)
|
result.ens = newEnsManager(status, appService)
|
||||||
result.fleets = newFleets(status)
|
result.fleets = newFleets(status)
|
||||||
result.changeLanguage = changeLanguage
|
result.changeLanguage = changeLanguage
|
||||||
|
@ -109,12 +106,6 @@ QtObject:
|
||||||
self.profile.setAppearance(theme)
|
self.profile.setAppearance(theme)
|
||||||
self.status.saveSetting(Setting.Appearance, $theme)
|
self.status.saveSetting(Setting.Appearance, $theme)
|
||||||
|
|
||||||
proc getDappList(self: ProfileView): QVariant {.slot.} =
|
|
||||||
return newQVariant(self.dappList)
|
|
||||||
|
|
||||||
QtProperty[QVariant] dappList:
|
|
||||||
read = getDappList
|
|
||||||
|
|
||||||
proc getFleets(self: ProfileView): QVariant {.slot.} =
|
proc getFleets(self: ProfileView): QVariant {.slot.} =
|
||||||
return newQVariant(self.fleets)
|
return newQVariant(self.fleets)
|
||||||
|
|
||||||
|
|
|
@ -1,64 +0,0 @@
|
||||||
import NimQml
|
|
||||||
import Tables
|
|
||||||
import status/status
|
|
||||||
import status/types/permission
|
|
||||||
import permission_list
|
|
||||||
|
|
||||||
type
|
|
||||||
DappsRoles {.pure.} = enum
|
|
||||||
Name = UserRole + 1,
|
|
||||||
|
|
||||||
QtObject:
|
|
||||||
type DappList* = ref object of QAbstractListModel
|
|
||||||
status: Status
|
|
||||||
dapps: seq[Dapp]
|
|
||||||
permissionList: PermissionList
|
|
||||||
|
|
||||||
proc setup(self: DappList) = self.QAbstractListModel.setup
|
|
||||||
|
|
||||||
proc delete(self: DappList) =
|
|
||||||
self.dapps = @[]
|
|
||||||
self.permissionList.delete
|
|
||||||
self.QAbstractListModel.delete
|
|
||||||
|
|
||||||
proc newDappList*(status: Status): DappList =
|
|
||||||
new(result, delete)
|
|
||||||
result.status = status
|
|
||||||
result.permissionList = newPermissionList(status)
|
|
||||||
result.dapps = @[]
|
|
||||||
result.setup
|
|
||||||
|
|
||||||
proc init*(self: DappList) {.slot.} =
|
|
||||||
self.beginResetModel()
|
|
||||||
self.dapps = self.status.permissions.getDapps()
|
|
||||||
self.endResetModel()
|
|
||||||
|
|
||||||
method rowCount(self: DappList, index: QModelIndex = nil): int =
|
|
||||||
return self.dapps.len
|
|
||||||
|
|
||||||
method data(self: DappList, index: QModelIndex, role: int): QVariant =
|
|
||||||
if not index.isValid:
|
|
||||||
return
|
|
||||||
if index.row < 0 or index.row >= self.dapps.len:
|
|
||||||
return
|
|
||||||
result = newQVariant(self.dapps[index.row].name)
|
|
||||||
|
|
||||||
method roleNames(self: DappList): Table[int, string] =
|
|
||||||
{
|
|
||||||
DappsRoles.Name.int:"name",
|
|
||||||
}.toTable
|
|
||||||
|
|
||||||
proc clearData(self: DappList) {.slot.} =
|
|
||||||
self.beginResetModel()
|
|
||||||
self.dapps = @[]
|
|
||||||
self.endResetModel()
|
|
||||||
|
|
||||||
proc revokeAllPermissions(self: DappList) {.slot.} =
|
|
||||||
self.status.permissions.clearPermissions()
|
|
||||||
self.clearData()
|
|
||||||
|
|
||||||
proc getPermissionList(self: DappList): QVariant {.slot.} =
|
|
||||||
return newQVariant(self.permissionList)
|
|
||||||
|
|
||||||
QtProperty[QVariant] permissionList:
|
|
||||||
read = getPermissionList
|
|
|
@ -10,6 +10,6 @@ type Dapp* = object
|
||||||
proc toDapp*(jsonObj: JsonNode): Dapp =
|
proc toDapp*(jsonObj: JsonNode): Dapp =
|
||||||
result = Dapp()
|
result = Dapp()
|
||||||
result.permissions = initHashSet[Permission]()
|
result.permissions = initHashSet[Permission]()
|
||||||
discard jsonObj.getProp("name", result.name)
|
discard jsonObj.getProp("dapp", result.name)
|
||||||
for permission in jsonObj["permissions"].getElems():
|
for permission in jsonObj["permissions"].getElems():
|
||||||
result.permissions.incl(permission.getStr().toPermission())
|
result.permissions.incl(permission.getStr().toPermission())
|
||||||
|
|
|
@ -42,15 +42,13 @@ method getDapp*(self: Service, dapp: string): Option[Dapp] =
|
||||||
return some(self.dapps[dapp])
|
return some(self.dapps[dapp])
|
||||||
return none(Dapp)
|
return none(Dapp)
|
||||||
|
|
||||||
method clearPermissions*(self: Service, dapp: string): R =
|
method clearPermissions*(self: Service, dapp: string): bool =
|
||||||
try:
|
try:
|
||||||
if not self.dapps.hasKey(dapp):
|
if not self.dapps.hasKey(dapp):
|
||||||
result.err "not found"
|
|
||||||
return
|
return
|
||||||
|
|
||||||
discard status_go.deleteDappPermissions(dapp)
|
discard status_go.deleteDappPermissions(dapp)
|
||||||
self.dapps[dapp].permissions.clear()
|
self.dapps.del(dapp)
|
||||||
result.ok self.dapps[dapp]
|
return true
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
let errDescription = e.msg
|
let errDescription = e.msg
|
||||||
error "error: ", errDescription
|
error "error: ", errDescription
|
||||||
|
@ -64,15 +62,15 @@ method revoke*(self: Service, permission: Permission): bool =
|
||||||
discard status_go.addDappPermissions(dapp.name, dapp.permissions.toSeq().mapIt($it))
|
discard status_go.addDappPermissions(dapp.name, dapp.permissions.toSeq().mapIt($it))
|
||||||
else:
|
else:
|
||||||
discard status_go.deleteDappPermissions(dapp.name)
|
discard status_go.deleteDappPermissions(dapp.name)
|
||||||
|
self.dapps.del(dapp.name)
|
||||||
return true
|
return true
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
let errDescription = e.msg
|
let errDescription = e.msg
|
||||||
error "error: ", errDescription
|
error "error: ", errDescription
|
||||||
|
|
||||||
method revoke*(self: Service, dapp: string, permission: Permission): R =
|
method revoke*(self: Service, dapp: string, permission: Permission): bool =
|
||||||
try:
|
try:
|
||||||
if not self.dapps.hasKey(dapp):
|
if not self.dapps.hasKey(dapp):
|
||||||
result.err "not found"
|
|
||||||
return
|
return
|
||||||
|
|
||||||
if self.dapps[dapp].permissions.contains(permission):
|
if self.dapps[dapp].permissions.contains(permission):
|
||||||
|
@ -81,11 +79,11 @@ method revoke*(self: Service, dapp: string, permission: Permission): R =
|
||||||
discard status_go.addDappPermissions(dapp, self.dapps[dapp].permissions.toSeq().mapIt($it))
|
discard status_go.addDappPermissions(dapp, self.dapps[dapp].permissions.toSeq().mapIt($it))
|
||||||
else:
|
else:
|
||||||
discard status_go.deleteDappPermissions(dapp)
|
discard status_go.deleteDappPermissions(dapp)
|
||||||
result.ok self.dapps[dapp]
|
self.dapps.del(dapp)
|
||||||
|
return true
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
let errDescription = e.msg
|
let errDescription = e.msg
|
||||||
error "error: ", errDescription
|
error "error: ", errDescription
|
||||||
result.err errDescription
|
|
||||||
|
|
||||||
method addPermission*(self: Service, dapp: string, permission: Permission): R =
|
method addPermission*(self: Service, dapp: string, permission: Permission): R =
|
||||||
try:
|
try:
|
||||||
|
@ -100,3 +98,18 @@ method addPermission*(self: Service, dapp: string, permission: Permission): R =
|
||||||
let errDescription = e.msg
|
let errDescription = e.msg
|
||||||
error "error: ", errDescription
|
error "error: ", errDescription
|
||||||
result.err errDescription
|
result.err errDescription
|
||||||
|
|
||||||
|
method revokeAllPermisions*(self: Service): bool =
|
||||||
|
try:
|
||||||
|
for d in self.dapps.values:
|
||||||
|
discard status_go.deleteDappPermissions(d.name)
|
||||||
|
self.dapps.clear()
|
||||||
|
return true
|
||||||
|
except Exception as e:
|
||||||
|
let errDescription = e.msg
|
||||||
|
error "error: ", errDescription
|
||||||
|
|
||||||
|
method hasPermission*(self: Service, dapp: string, permission: Permission): bool =
|
||||||
|
if not self.dapps.hasKey(dapp):
|
||||||
|
return false
|
||||||
|
return self.dapps[dapp].permissions.contains(permission)
|
||||||
|
|
|
@ -23,13 +23,19 @@ method getDapps*(self: ServiceInterface): seq[Dapp] {.base.} =
|
||||||
method getDapp*(self: ServiceInterface, dapp: string): Option[Dapp] {.base.} =
|
method getDapp*(self: ServiceInterface, dapp: string): Option[Dapp] {.base.} =
|
||||||
raise newException(ValueError, "No implementation available")
|
raise newException(ValueError, "No implementation available")
|
||||||
|
|
||||||
method clearPermissions*(self: ServiceInterface, dapp: string): R {.base.} =
|
method hasPermission*(self: ServiceInterface, dapp: string, permission: Permission): bool {.base.} =
|
||||||
|
raise newException(ValueError, "No implementation available")
|
||||||
|
|
||||||
|
method clearPermissions*(self: ServiceInterface, dapp: string): bool {.base.} =
|
||||||
raise newException(ValueError, "No implementation available")
|
raise newException(ValueError, "No implementation available")
|
||||||
|
|
||||||
method revoke*(self: ServiceInterface, permission: Permission): bool {.base.} =
|
method revoke*(self: ServiceInterface, permission: Permission): bool {.base.} =
|
||||||
raise newException(ValueError, "No implementation available")
|
raise newException(ValueError, "No implementation available")
|
||||||
|
|
||||||
method revoke*(self: ServiceInterface, dapp: string, permission: Permission): R {.base.} =
|
method revoke*(self: ServiceInterface, dapp: string, permission: Permission): bool {.base.} =
|
||||||
|
raise newException(ValueError, "No implementation available")
|
||||||
|
|
||||||
|
method revokeAllPermisions*(self: ServiceInterface): bool {.base.} =
|
||||||
raise newException(ValueError, "No implementation available")
|
raise newException(ValueError, "No implementation available")
|
||||||
|
|
||||||
method addPermission*(self: ServiceInterface, dapp: string, permission: Permission): R {.base.} =
|
method addPermission*(self: ServiceInterface, dapp: string, permission: Permission): R {.base.} =
|
||||||
|
|
|
@ -18,7 +18,6 @@ ModalPopup {
|
||||||
property var store
|
property var store
|
||||||
|
|
||||||
Component.onCompleted: store.initDappList()
|
Component.onCompleted: store.initDappList()
|
||||||
Component.onDestruction: store.clearDappList()
|
|
||||||
|
|
||||||
property Component permissionListPopup: PermissionList {
|
property Component permissionListPopup: PermissionList {
|
||||||
onClosed: destroy()
|
onClosed: destroy()
|
||||||
|
@ -45,7 +44,7 @@ ModalPopup {
|
||||||
model: root.store.dappList
|
model: root.store.dappList
|
||||||
delegate: Dapp {
|
delegate: Dapp {
|
||||||
name: model.name
|
name: model.name
|
||||||
onDappClicked: permissionListPopup.createObject(privacyContainer, {dapp: dapp}).open()
|
onDappClicked: permissionListPopup.createObject(appMain, {dapp: dapp}).open()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,7 +26,6 @@ ModalPopup {
|
||||||
property var store
|
property var store
|
||||||
|
|
||||||
Component.onCompleted: store.initPermissionList(dapp)
|
Component.onCompleted: store.initPermissionList(dapp)
|
||||||
Component.onDestruction: store.clearPermissionList()
|
|
||||||
|
|
||||||
signal accessRevoked(string dapp)
|
signal accessRevoked(string dapp)
|
||||||
|
|
||||||
|
@ -50,7 +49,7 @@ ModalPopup {
|
||||||
delegate: Permission {
|
delegate: Permission {
|
||||||
name: model.name
|
name: model.name
|
||||||
onRemoveBtnClicked: {
|
onRemoveBtnClicked: {
|
||||||
root.store.revokePermission(model.name);
|
root.store.revokePermission(dapp, model.name);
|
||||||
if(permissionListView.count === 1){
|
if(permissionListView.count === 1){
|
||||||
accessRevoked(dapp);
|
accessRevoked(dapp);
|
||||||
close();
|
close();
|
||||||
|
@ -68,7 +67,7 @@ ModalPopup {
|
||||||
//% "Revoke all access"
|
//% "Revoke all access"
|
||||||
text: qsTrId("revoke-all-access")
|
text: qsTrId("revoke-all-access")
|
||||||
onClicked: {
|
onClicked: {
|
||||||
root.store.revokeAllPermissionAccess()
|
root.store.clearPermissions(dapp)
|
||||||
accessRevoked(dapp);
|
accessRevoked(dapp);
|
||||||
close();
|
close();
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,8 +16,8 @@ QtObject {
|
||||||
property var nodeModelInst: nodeModel
|
property var nodeModelInst: nodeModel
|
||||||
|
|
||||||
property var ens: profileModelInst.ens
|
property var ens: profileModelInst.ens
|
||||||
property var dappList: profileModelInst.dappList
|
property var dappList: dappPermissionsModule.dapps
|
||||||
property var permissionList: profileModelInst.dappList.permissionList
|
property var permissionList: dappPermissionsModule.permissions
|
||||||
property var mailservers: profileModelInst.mailservers
|
property var mailservers: profileModelInst.mailservers
|
||||||
property var mailserversList: profileModelInst.mailservers.list
|
property var mailserversList: profileModelInst.mailservers.list
|
||||||
property var contacts: contactsModuleInst.model.list
|
property var contacts: contactsModuleInst.model.list
|
||||||
|
@ -153,27 +153,19 @@ QtObject {
|
||||||
}
|
}
|
||||||
|
|
||||||
function initPermissionList(name) {
|
function initPermissionList(name) {
|
||||||
profileModelInst.dappList.permissionList.init(name)
|
dappPermissionsModule.fetchPermissions(name)
|
||||||
}
|
}
|
||||||
|
|
||||||
function clearPermissionList() {
|
function revokePermission(dapp, name) {
|
||||||
profileModelInst.dappList.permissionList.clearData()
|
dappPermissionsModule.revokePermission(dapp, name)
|
||||||
}
|
}
|
||||||
|
|
||||||
function revokePermission(name) {
|
function clearPermissions(dapp) {
|
||||||
profileModelInst.dappList.permissionList.revokePermission(name)
|
dappPermissionsModule.clearPermissions(dapp)
|
||||||
}
|
|
||||||
|
|
||||||
function revokeAllPermissionAccess() {
|
|
||||||
profileModelInst.dappList.permissionList.revokeAccess()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function initDappList() {
|
function initDappList() {
|
||||||
profileModelInst.dappList.init()
|
dappPermissionsModule.fetchDapps()
|
||||||
}
|
|
||||||
|
|
||||||
function clearDappList() {
|
|
||||||
profileModelInst.dappList.clearData()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function getQrCodeSource(publicKey) {
|
function getQrCodeSource(publicKey) {
|
||||||
|
|
Loading…
Reference in New Issue