fix: obtain mailservers from fleet config

This commit is contained in:
Richard Ramos 2020-11-10 14:27:39 -04:00 committed by Iuri Matias
parent b2030f7cd6
commit f467461ae5
5 changed files with 21 additions and 53 deletions

View File

@ -1,4 +1,4 @@
import NimQml, json, strutils, sugar, sequtils
import NimQml, json, strutils, sugar, sequtils, tables
import json_serialization
import ../../status/libstatus/mailservers as status_mailservers
import ../../status/signals/types
@ -47,9 +47,8 @@ proc init*(self: ProfileController, account: Account) =
self.view.setNetwork(network)
self.view.ens.init()
var mailservers = status_mailservers.getMailservers()
for mailserver_config in mailservers:
let mailserver = MailServer(name: mailserver_config[0], endpoint: mailserver_config[1])
for name, endpoint in self.status.fleet.config.getMailservers(status_settings.getFleet()).pairs():
let mailserver = MailServer(name: name, endpoint: endpoint)
self.view.addMailServerToList(mailserver)
let contacts = self.status.contacts.getContacts()

View File

@ -1,5 +1,6 @@
import json, times
import core, utils
import settings, types
type
MailserverTopic* = ref object
@ -9,50 +10,10 @@ type
chatIds*: seq[string]
lastRequest*: int64
proc getMailservers*(): array[0..8, (string, string)] =
result = [
(
"mail-01.ac-cn-hongkong-c.eth.prod",
"enode://606ae04a71e5db868a722c77a21c8244ae38f1bd6e81687cc6cfe88a3063fa1c245692232f64f45bd5408fed5133eab8ed78049332b04f9c110eac7f71c1b429@47.75.247.214:443"
),
(
"mail-01.do-ams3.eth.prod",
"enode://c42f368a23fa98ee546fd247220759062323249ef657d26d357a777443aec04db1b29a3a22ef3e7c548e18493ddaf51a31b0aed6079bd6ebe5ae838fcfaf3a49@178.128.142.54:443"
),
(
"mail-01.gc-us-central1-a.eth.prod",
"enode://ee2b53b0ace9692167a410514bca3024695dbf0e1a68e1dff9716da620efb195f04a4b9e873fb9b74ac84de801106c465b8e2b6c4f0d93b8749d1578bfcaf03e@104.197.238.144:443"
),
(
"mail-02.ac-cn-hongkong-c.eth.prod",
"enode://2c8de3cbb27a3d30cbb5b3e003bc722b126f5aef82e2052aaef032ca94e0c7ad219e533ba88c70585ebd802de206693255335b100307645ab5170e88620d2a81@47.244.221.14:443"
),
(
"mail-02.do-ams3.eth.prod",
"enode://7aa648d6e855950b2e3d3bf220c496e0cae4adfddef3e1e6062e6b177aec93bc6cdcf1282cb40d1656932ebfdd565729da440368d7c4da7dbd4d004b1ac02bf8@178.128.142.26:443"
),
(
"mail-02.gc-us-central1-a.eth.prod",
"enode://30211cbd81c25f07b03a0196d56e6ce4604bb13db773ff1c0ea2253547fafd6c06eae6ad3533e2ba39d59564cfbdbb5e2ce7c137a5ebb85e99dcfc7a75f99f55@23.236.58.92:443"
),
(
"mail-03.ac-cn-hongkong-c.eth.prod",
"enode://e85f1d4209f2f99da801af18db8716e584a28ad0bdc47fbdcd8f26af74dbd97fc279144680553ec7cd9092afe683ddea1e0f9fc571ebcb4b1d857c03a088853d@47.244.129.82:443"
),
(
"mail-03.do-ams3.eth.prod",
"enode://8a64b3c349a2e0ef4a32ea49609ed6eb3364be1110253c20adc17a3cebbc39a219e5d3e13b151c0eee5d8e0f9a8ba2cd026014e67b41a4ab7d1d5dd67ca27427@178.128.142.94:443"
),
(
"mail-03.gc-us-central1-a.eth.prod",
"enode://44160e22e8b42bd32a06c1532165fa9e096eebedd7fa6d6e5f8bbef0440bc4a4591fe3651be68193a7ec029021cdb496cfe1d7f9f1dc69eb99226e6f39a7a5d4@35.225.221.245:443"
)
]
proc ping*(timeoutMs: int): string =
proc ping*(mailservers: seq[string], timeoutMs: int): string =
var addresses: seq[string] = @[]
for mailserver in getMailservers():
addresses.add(mailserver[1])
for mailserver in mailservers:
addresses.add(mailserver)
result = callPrivateRPC("mailservers_ping", %* [
{ "addresses": addresses, "timeoutMs": timeoutMs }
])

View File

@ -229,4 +229,7 @@ proc toFleetConfig*(jsonString: string): FleetConfig =
proc getNodes*(self: FleetConfig, fleet: Fleet, nodeType: FleetNodes = FleetNodes.Bootnodes): seq[string] =
result = toSeq(self.fleet[$fleet][$nodeType].values)
result = toSeq(self.fleet[$fleet][$nodeType].values)
proc getMailservers*(self: FleetConfig, fleet: Fleet): Table[string, string] =
result = self.fleet[$fleet][$FleetNodes.Mailservers]

View File

@ -1,8 +1,11 @@
import algorithm, json, random, math, os, tables, sets, chronicles, sequtils, locks, sugar, times
import libstatus/core as status_core
import libstatus/chat as status_chat
import libstatus/settings as status_settings
import libstatus/types
import libstatus/mailservers as status_mailservers
import ../eventemitter
import fleet
# How do mailserver should work ?
@ -36,6 +39,7 @@ type
Trusted = 3,
MailserverModel* = ref object
fleet*: FleetModel
events*: EventEmitter
nodes*: Table[string, MailserverStatus]
activeMailserver*: string
@ -57,9 +61,10 @@ var modelLock: Lock
var connThread: Thread[void]
proc newMailserverModel*(events: EventEmitter): MailserverModel =
proc newMailserverModel*(fleet: FleetModel, events: EventEmitter): MailserverModel =
result = MailserverModel()
result.events = events
result.fleet = fleet
result.nodes = initTable[string, MailserverStatus]()
result.activeMailserver = ""
@ -93,8 +98,8 @@ proc connect(self: MailserverModel, enode: string) =
# TODO: this should come from settings
var knownMailservers = initHashSet[string]()
for m in getMailservers():
knownMailservers.incl m[1]
for m in self.fleet.config.getMailservers(status_settings.getFleet()).values():
knownMailservers.incl m
if not knownMailservers.contains(enode):
warn "Mailserver not known", enode
return
@ -191,7 +196,7 @@ proc addMailserverTopic*(self: MailserverModel, topic: MailserverTopic) =
proc findNewMailserver(self: MailserverModel) =
warn "Finding a new mailserver..."
let mailserversReply = parseJson(status_mailservers.ping(500))["result"]
let mailserversReply = parseJson(status_mailservers.ping(toSeq(self.fleet.config.getMailservers(status_settings.getFleet()).values), 500))["result"]
var availableMailservers:seq[(string, int)] = @[]
for reply in mailserversReply:

View File

@ -31,7 +31,7 @@ proc newStatusInstance*(fleetConfig: string): Status =
result.wallet = wallet.newWalletModel(result.events)
result.wallet.initEvents()
result.node = node.newNodeModel()
result.mailservers = mailservers.newMailserverModel(result.events)
result.mailservers = mailservers.newMailserverModel(result.fleet, result.events)
result.messages = messages.newMessagesModel(result.events)
result.profile = profile.newProfileModel()
result.contacts = contacts.newContactModel(result.events)