Add rpc to get default peer port (#1556)

* Added get default peer port rpc command

* Use default port in connect peer dialog

* Got default port working on create peer dialog

* Got default port working in both connect peer and create peer.

* Remove default peer usage in create peer backend

* Remove default peer handling for connect peer in backend

* Reset port back to empty when use custom is checked or unchecked.
This commit is contained in:
Jonathan Zernik 2021-10-10 00:30:27 -07:00 committed by GitHub
parent 25c8669991
commit 9f6307cbb3
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
14 changed files with 114 additions and 89 deletions

View file

@ -1,4 +1,4 @@
import React, { useState } from 'react';
import React, { useState, useMemo } from 'react';
import {
Button,
Dialog,
@ -12,13 +12,13 @@ import {
} from '@material-ui/core';
import {
getDefaultPeerPortRequest,
connectSqueakPeerRequest,
} from '../../squeakclient/requests';
// styles
import useStyles from './styles';
const portDefaultValue = '0';
export default function ConnectPeerDialog({
open,
@ -28,28 +28,40 @@ export default function ConnectPeerDialog({
}) {
const classes = useStyles();
const [defaultPeerPort, setDefaultPeerPort] = useState(null);
const [peerName, setPeerName] = useState('');
const [host, setHost] = useState('');
const [port, setPort] = useState('');
const [customPortChecked, setCustomPortChecked] = useState(false);
const [useTorChecked, setUseTorChecked] = useState(false);
const [loading, setLoading] = useState(false);
const portToUse = useMemo(() => customPortChecked ? port : defaultPeerPort, [customPortChecked, port, defaultPeerPort]);
const getDefaultPeerPort = () => {
getDefaultPeerPortRequest(setDefaultPeerPort);
};
const resetFields = () => {
setPeerName('');
setHost('');
setPort(portDefaultValue);
setPort('');
setCustomPortChecked(false);
};
function load(event) {
getDefaultPeerPort();
resetFields();
}
const handleChangeHost = (event) => {
setHost(event.target.value);
};
const handleChangeCustomPortChecked = (event) => {
setPort(
event.target.checked ? '' : portDefaultValue,
);
// setPort(
// event.target.checked ? '' : defaultPeerPort,
// );
setPort('');
setCustomPortChecked(event.target.checked);
};
@ -62,6 +74,9 @@ export default function ConnectPeerDialog({
};
const connectPeer = (peerName, host, port) => {
// const portToUse = customPortChecked ? port : defaultPeerPort;
// console.log('Calling connectSqueakPeerRequest with: ', host, portToUse, useTorChecked);
// console.log('portToUse: ', portToUse);
setLoading(true);
connectSqueakPeerRequest(host, port, useTorChecked, (response) => {
// goToPeerPage(history, response.getPeerId());
@ -86,16 +101,16 @@ export default function ConnectPeerDialog({
function handleSubmit(event) {
event.preventDefault();
console.log('host:', host);
console.log('port:', port);
console.log('portToUse:', portToUse);
if (!host) {
alert('Host cannot be empty.');
return;
}
if (!port) {
alert('Port cannot be empty.');
if (!portToUse) {
alert('portToUse cannot be empty.');
return;
}
connectPeer(peerName, host, port);
connectPeer(peerName, host, portToUse);
// handleClose();
}
@ -120,7 +135,7 @@ export default function ConnectPeerDialog({
required={customPortChecked}
variant="outlined"
label="Port"
value={customPortChecked ? port : ''}
value={portToUse}
onChange={handleChangePort}
inputProps={{ maxLength: 8 }}
disabled={!customPortChecked}
@ -194,7 +209,7 @@ export default function ConnectPeerDialog({
return (
<Dialog
open={open}
onEnter={resetFields}
onEnter={load}
onClose={handleClose}
aria-labelledby="form-dialog-title"
maxWidth="sm"

View file

@ -1,4 +1,4 @@
import React, { useState } from 'react';
import React, { useState, useMemo } from 'react';
import {
Button,
Dialog,
@ -15,6 +15,7 @@ import { useHistory } from 'react-router-dom';
import { makeStyles } from '@material-ui/core/styles';
import {
getDefaultPeerPortRequest,
createPeerRequest,
} from '../../squeakclient/requests';
import {
@ -41,7 +42,6 @@ const useStyles = makeStyles((theme) => ({
},
}));
const portDefaultValue = '0';
export default function CreatePeerDialog({
open,
@ -53,11 +53,17 @@ export default function CreatePeerDialog({
const classes = useStyles();
const history = useHistory();
const [defaultPeerPort, setDefaultPeerPort] = useState(null);
const [peerName, setPeerName] = useState('');
const [host, setHost] = useState('');
const [port, setPort] = useState('');
const [customPortChecked, setCustomPortChecked] = useState(false);
const [useTorChecked, setUseTorChecked] = useState(false);
const portToUse = useMemo(() => customPortChecked ? port : defaultPeerPort, [customPortChecked, port, defaultPeerPort]);
const getDefaultPeerPort = () => {
getDefaultPeerPortRequest(setDefaultPeerPort);
};
const resetFields = () => {
setPeerName('');
@ -65,7 +71,7 @@ export default function CreatePeerDialog({
if (initialHost) {
setHost(initialHost);
}
setPort(portDefaultValue);
setPort('');
setCustomPortChecked(false);
if (initialPort) {
setPort(initialPort);
@ -73,6 +79,11 @@ export default function CreatePeerDialog({
}
};
function load(event) {
getDefaultPeerPort();
resetFields();
}
const handleChangePeerName = (event) => {
setPeerName(event.target.value);
};
@ -82,9 +93,10 @@ export default function CreatePeerDialog({
};
const handleChangeCustomPortChecked = (event) => {
setPort(
event.target.checked ? '' : portDefaultValue,
);
// setPort(
// event.target.checked ? '' : portDefaultValue,
// );
setPort('');
setCustomPortChecked(event.target.checked);
};
@ -111,11 +123,11 @@ export default function CreatePeerDialog({
alert('Host cannot be empty.');
return;
}
if (!port) {
alert('Port cannot be empty.');
if (!portToUse) {
alert('portToUse cannot be empty.');
return;
}
createPeer(peerName, host, port);
createPeer(peerName, host, portToUse);
handleClose();
}
@ -155,7 +167,7 @@ export default function CreatePeerDialog({
required={customPortChecked}
variant="outlined"
label="Port"
value={customPortChecked ? port : ''}
value={portToUse}
onChange={handleChangePort}
inputProps={{ maxLength: 8 }}
disabled={!customPortChecked}
@ -226,7 +238,7 @@ export default function CreatePeerDialog({
return (
<Dialog
open={open}
onEnter={resetFields}
onEnter={load}
onClose={handleClose}
aria-labelledby="form-dialog-title"
maxWidth="sm"

View file

@ -129,6 +129,8 @@ import {
GetSearchSqueakDisplaysReply,
GetPeerByAddressRequest,
GetPeerByAddressReply,
GetDefaultPeerPortRequest,
GetDefaultPeerPortReply,
} from '../proto/squeak_admin_pb';
console.log('The value of REACT_APP_DEV_MODE_ENABLED is:', Boolean(process.env.REACT_APP_DEV_MODE_ENABLED));
@ -1165,6 +1167,18 @@ export function getExternalAddressRequest(handleResponse) {
// });
}
export function getDefaultPeerPortRequest(handleResponse) {
const request = new GetDefaultPeerPortRequest();
makeRequest(
'getdefaultpeerport',
request,
GetDefaultPeerPortReply.deserializeBinary,
(response) => {
handleResponse(response.getPort());
},
);
}
// export function subscribeConnectedPeersRequest(handleResponse) {
// const request = new SubscribeConnectedPeersRequest();
// const stream = client.subscribeConnectedPeers(request);

View file

@ -42,6 +42,7 @@ from tests.util import download_squeaks
from tests.util import download_squeaks_for_address
from tests.util import get_connected_peer
from tests.util import get_connected_peers
from tests.util import get_default_peer_port
from tests.util import get_external_address
from tests.util import get_hash
from tests.util import get_network
@ -75,6 +76,14 @@ def test_get_external_address(admin_stub):
assert external_address.port > 0
def test_get_default_peer_port(admin_stub):
# Get the default peer port
default_peer_port = get_default_peer_port(admin_stub)
print(default_peer_port)
assert default_peer_port == 18777
def test_reprocess_received_payments(admin_stub):
# Reprocess received payments
reprocess_received_payments_response = admin_stub.ReprocessReceivedPayments(

View file

@ -306,6 +306,13 @@ def get_external_address(node_stub):
return get_external_address_response.peer_address
def get_default_peer_port(node_stub):
get_default_peer_port_response = node_stub.GetDefaultPeerPort(
squeak_admin_pb2.GetDefaultPeerPortRequest()
)
return get_default_peer_port_response.port
def make_squeak(node_stub, profile_id, squeak_content, reply_to_hash=None):
make_squeak_response = node_stub.MakeSqueak(
squeak_admin_pb2.MakeSqueakRequest(

View file

@ -328,6 +328,10 @@ service SqueakAdmin {
*/
rpc GetExternalAddress (GetExternalAddressRequest) returns (GetExternalAddressReply) {}
/** sqkadmin: `getdefaultpeerport`
*/
rpc GetDefaultPeerPort (GetDefaultPeerPortRequest) returns (GetDefaultPeerPortReply) {}
}
message CreateSigningProfileRequest {
@ -1188,3 +1192,11 @@ message GetExternalAddressReply {
PeerAddress peer_address = 1;
}
message GetDefaultPeerPortRequest {
}
message GetDefaultPeerPortReply {
/// The port.
int32 port = 1;
}

View file

@ -1086,3 +1086,10 @@ class SqueakAdminServerHandler(object):
return squeak_admin_pb2.GetExternalAddressReply(
peer_address=external_address_msg,
)
def handle_get_default_peer_port(self, request):
logger.info("Handle get default peer port")
default_peer_port = self.squeak_controller.get_default_peer_port()
return squeak_admin_pb2.GetDefaultPeerPortReply(
port=default_peer_port,
)

View file

@ -379,3 +379,6 @@ class SqueakAdminServerServicer(squeak_admin_pb2_grpc.SqueakAdminServicer):
def GetExternalAddress(self, request, context):
return self.handler.handle_get_external_address(request)
def GetDefaultPeerPort(self, request, context):
return self.handler.handle_get_default_peer_port(request)

View file

@ -518,6 +518,12 @@ def create_app(handler, username, password):
def getexternaladdress(msg):
return handler.handle_get_external_address(msg)
@app.route("/getdefaultpeerport", methods=["POST"])
@login_required
@protobuf_serialized(squeak_admin_pb2.GetDefaultPeerPortRequest())
def getdefaultpeerport(msg):
return handler.handle_get_default_peer_port(msg)
return app

View file

@ -26,12 +26,8 @@ from squeaknode.core.squeak_peer import SqueakPeer
def create_saved_peer(
peer_name: str,
peer_address: PeerAddress,
default_port: int,
) -> SqueakPeer:
validate_saved_peer_name(peer_name)
port = peer_address.port or default_port
peer_address = peer_address._replace(
port=port)
return SqueakPeer(
peer_id=None,
peer_name=peer_name,

View file

@ -81,17 +81,11 @@ class NetworkManager(object):
self.connection_manager.stop_all_connections()
def connect_peer_sync(self, peer_address: PeerAddress) -> None:
port = peer_address.port or squeak.params.params.DEFAULT_PORT
peer_address = peer_address._replace(
port=port)
if self.connection_manager.has_connection(peer_address):
raise Exception("Already connected to: {}".format(peer_address))
self.peer_client.connect_address(peer_address)
def connect_peer_async(self, peer_address: PeerAddress) -> None:
port = peer_address.port or squeak.params.params.DEFAULT_PORT
peer_address = peer_address._replace(
port=port)
if self.connection_manager.has_connection(peer_address):
return
self.peer_client.connect_address_async(peer_address)

View file

@ -332,7 +332,6 @@ class SqueakController:
squeak_peer = create_saved_peer(
peer_name,
peer_address,
squeak.params.params.DEFAULT_PORT,
)
return self.squeak_db.insert_peer(squeak_peer)
@ -840,3 +839,6 @@ class SqueakController:
def get_external_address(self) -> PeerAddress:
return self.network_manager.external_address
def get_default_peer_port(self) -> int:
return squeak.params.params.DEFAULT_PORT

View file

@ -57,58 +57,27 @@ def peer_address_with_no_port():
)
@pytest.fixture
def default_peer_port():
yield 55555
def test_create_saved_peer(peer_name, peer_address, default_peer_port):
def test_create_saved_peer(peer_name, peer_address):
peer = create_saved_peer(
peer_name,
peer_address,
default_peer_port,
)
assert peer.peer_name == peer_name
# assert peer.address == PeerAddress(
# host=peer_address.host,
# port=peer_address.port,
# )
assert peer.address == peer_address
def test_create_saved_peer_empty_name(peer_address, default_peer_port):
def test_create_saved_peer_empty_name(peer_address):
with pytest.raises(Exception) as excinfo:
create_saved_peer("", peer_address, default_peer_port)
create_saved_peer("", peer_address)
assert "Peer name cannot be empty." in str(excinfo.value)
def test_create_saved_peer_default_port(peer_name, peer_address_with_no_port, default_peer_port):
peer = create_saved_peer(
peer_name,
peer_address_with_no_port,
default_peer_port,
)
assert peer.peer_name == peer_name
assert peer.address == PeerAddress(
host=peer_address_with_no_port.host,
port=default_peer_port,
use_tor=False,
)
def test_create_saved_peer_use_tor(peer_name, peer_address_with_tor):
peer = create_saved_peer(
peer_name,
peer_address_with_tor,
default_peer_port,
)
assert peer.peer_name == peer_name
# assert peer.address == PeerAddress(
# host=peer_address_with_tor.host,
# port=peer_address_with_tor.port,
# use_tor=peer_address_with_tor.use_tor,
# )
assert peer.address == peer_address_with_tor

View file

@ -21,7 +21,6 @@
# SOFTWARE.
import mock
import pytest
import squeak.params
from squeaknode.config.config import SqueaknodeConfig
from squeaknode.core.lightning_address import LightningAddressHostPort
@ -164,23 +163,3 @@ def test_create_peer(squeak_db, squeak_controller, peer_address):
autoconnect=False,
)
)
def test_create_peer_default_port(config, squeak_db, squeak_controller, peer_address_with_zero):
squeak_controller.create_peer(
"fake_peer_name",
peer_address_with_zero,
)
squeak_db.insert_peer.assert_called_with(
SqueakPeer(
peer_id=None,
peer_name="fake_peer_name",
address=PeerAddress(
host=peer_address_with_zero.host,
port=squeak.params.params.DEFAULT_PORT,
use_tor=peer_address_with_zero.use_tor,
),
autoconnect=False,
)
)