From 07c76637d691a845194404ddd3669fe89456106b Mon Sep 17 00:00:00 2001 From: librelois <elois@ifee.fr> Date: Mon, 6 Nov 2017 00:34:34 +0100 Subject: [PATCH] [enh] add options --ws2p-prefered-only and --ws2p-privileged-only #1181 --- app/lib/dto/ConfDTO.ts | 4 ++++ app/modules/ws2p/index.ts | 8 +++++++- app/modules/ws2p/lib/WS2PCluster.ts | 12 ++++++++---- 3 files changed, 19 insertions(+), 5 deletions(-) diff --git a/app/lib/dto/ConfDTO.ts b/app/lib/dto/ConfDTO.ts index 361eb49c9..0f688d4a5 100644 --- a/app/lib/dto/ConfDTO.ts +++ b/app/lib/dto/ConfDTO.ts @@ -73,7 +73,9 @@ export interface WS2PConfDTO { maxPublic?:number maxPrivate?:number preferedNodes?: string[] + preferedOnly: boolean privilegedNodes?: string[] + privilegedOnly: boolean } } @@ -145,7 +147,9 @@ export class ConfDTO implements CurrencyConfDTO, KeypairConfDTO, NetworkConfDTO, port?: number host?: string preferedNodes?: string[] + preferedOnly: boolean privilegedNodes?: string[] + privilegedOnly: boolean maxPublic?:number maxPrivate?:number } diff --git a/app/modules/ws2p/index.ts b/app/modules/ws2p/index.ts index 53e311b02..b5973eb2d 100644 --- a/app/modules/ws2p/index.ts +++ b/app/modules/ws2p/index.ts @@ -28,8 +28,10 @@ export const WS2PDependency = { { value: '--ws2p-nopublic', desc: 'Disable WS2P Public access.' }, { value: '--ws2p-prefered-add <pubkey>', desc: 'Add a prefered node to connect to through private access.' }, { value: '--ws2p-prefered-rm <pubkey>', desc: 'Remove prefered node.' }, + { value: '--ws2p-prefered-only <pubkey>', desc: 'Only connect to prefered node.' }, { value: '--ws2p-privileged-add <pubkey>', desc: 'Add a privileged node to for our public access.' }, { value: '--ws2p-privileged-rm <pubkey>', desc: 'Remove a privileged.' }, + { value: '--ws2p-privileged-only <pubkey>', desc: 'Accept only connections from a privileged node.' }, ], config: { @@ -39,7 +41,9 @@ export const WS2PDependency = { conf.ws2p = conf.ws2p || { uuid: nuuid.v4().slice(0,8), privateAccess: true, - publicAccess: true + publicAccess: true, + preferedOnly: false, + privilegedOnly: false } // For config with missing value @@ -73,6 +77,7 @@ export const WS2PDependency = { conf.ws2p.preferedNodes.splice(index, 1) } } + if (program.ws2pPreferedOnly !== undefined) conf.ws2p.preferedOnly = true // Privileged nodes if (program.ws2pPrivilegedAdd !== undefined) { @@ -86,6 +91,7 @@ export const WS2PDependency = { conf.ws2p.privilegedNodes.splice(index, 1) } } + if (program.ws2pPrivilegedOnly !== undefined) conf.ws2p.privilegedOnly = true // Default value if (conf.ws2p.upnp === undefined || conf.ws2p.upnp === null) { diff --git a/app/modules/ws2p/lib/WS2PCluster.ts b/app/modules/ws2p/lib/WS2PCluster.ts index 4ea5d7a21..339823701 100644 --- a/app/modules/ws2p/lib/WS2PCluster.ts +++ b/app/modules/ws2p/lib/WS2PCluster.ts @@ -265,7 +265,8 @@ export class WS2PCluster { await this.ws2pServer.close() } this.ws2pServer = await WS2PServer.bindOn(this.server, host, port, this.fifo, (pubkey:string, connectedPubkeys:string[]) => { - return this.acceptPubkey(pubkey, connectedPubkeys, () => this.servedCount(), this.maxLevel2Peers, (this.server.conf.ws2p && this.server.conf.ws2p.privilegedNodes || [])) + const privilegedNodes = (this.server.conf.ws2p && this.server.conf.ws2p.privilegedNodes) ? this.server.conf.ws2p.privilegedNodes:[] + return this.acceptPubkey(pubkey, connectedPubkeys, () => this.servedCount(), this.maxLevel2Peers, privilegedNodes, (this.server.conf.ws2p && this.server.conf.ws2p.privilegedOnly || false)) }, this.messageHandler) this.host = host this.port = port @@ -295,7 +296,8 @@ export class WS2PCluster { const fullEndpointAddress = WS2PCluster.getFullAddress(host, port, path) const ws2pc = await WS2PClient.connectTo(this.server, fullEndpointAddress, messageHandler, expectedPub, (pub:string) => { const connectedPubkeys = this.getConnectedPubkeys() - return this.acceptPubkey(expectedPub, connectedPubkeys, () => this.clientsCount(), this.maxLevel1Size, (this.server.conf.ws2p && this.server.conf.ws2p.preferedNodes || []), ws2pEndpointUUID) + const preferedNodes = (this.server.conf.ws2p && this.server.conf.ws2p.preferedNodes) ? this.server.conf.ws2p.preferedNodes:[] + return this.acceptPubkey(expectedPub, connectedPubkeys, () => this.clientsCount(), this.maxLevel1Size, preferedNodes, (this.server.conf.ws2p && this.server.conf.ws2p.preferedOnly) || false, ws2pEndpointUUID) }) this.ws2pClients[uuid] = ws2pc pub = ws2pc.connection.pubkey @@ -375,7 +377,8 @@ export class WS2PCluster { if (ws2pEnpoint) { // Check if already connected to the pubkey (in any way: server or client) const connectedPubkeys = this.getConnectedPubkeys() - const shouldAccept = await this.acceptPubkey(peer.pubkey, connectedPubkeys, () => this.clientsCount(), this.maxLevel1Size, (this.server.conf.ws2p && this.server.conf.ws2p.preferedNodes || []), ws2pEnpoint.uuid) + const preferedNodes = (this.server.conf.ws2p && this.server.conf.ws2p.preferedNodes) ? this.server.conf.ws2p.preferedNodes:[] + const shouldAccept = await this.acceptPubkey(peer.pubkey, connectedPubkeys, () => this.clientsCount(), this.maxLevel1Size, preferedNodes, (this.server.conf.ws2p && this.server.conf.ws2p.preferedOnly) || false, ws2pEnpoint.uuid) if (shouldAccept && (!this.server.conf.ws2p || ws2pEnpoint.uuid !== this.server.conf.ws2p.uuid || peer.pubkey !== this.server.conf.pair.pub || ws2pEnpoint.uuid === '11111111')) { await this.connectToRemoteWS(ws2pEnpoint.host, ws2pEnpoint.port, ws2pEnpoint.path, this.messageHandler, peer.pubkey) await this.trimClientConnections() @@ -546,6 +549,7 @@ export class WS2PCluster { getConcurrentConnexionsCount:()=>number, maxConcurrentConnexionsSize:number, priorityKeys:string[], + priorityKeysOnly:boolean, targetWS2PUID = "" ) { // We do not accept banned keys @@ -554,7 +558,7 @@ export class WS2PCluster { return false } let accept = priorityKeys.indexOf(pub) !== -1 - if (!accept && connectedPubkeys.indexOf(pub) === -1) { + if (!accept && !priorityKeysOnly && connectedPubkeys.indexOf(pub) === -1) { // Do we have room? if (this.server.conf.pair.pub === pub && this.server.conf.ws2p && this.server.conf.ws2p.uuid === targetWS2PUID) { accept = false -- GitLab