From af7de6483a8ca2d9c0788d4fcefd7c5531b2a303 Mon Sep 17 00:00:00 2001 From: Jonathan Zernik Date: Sun, 24 Jan 2021 17:41:53 -0800 Subject: [PATCH] Add rename peer rpc method (#683) * Add rename peer rpc method * Add web endpoint for rename peer --- itests/tests/test_squeak_node.py | 18 ++++++++++++++++++ proto/squeak_admin.proto | 15 +++++++++++++++ .../admin/squeak_admin_server_handler.py | 12 ++++++++++++ .../admin/squeak_admin_server_servicer.py | 3 +++ squeaknode/admin/webapp/app.py | 8 ++++++++ squeaknode/core/squeak_controller.py | 3 +++ squeaknode/db/squeak_db.py | 10 ++++++++++ 7 files changed, 69 insertions(+) diff --git a/itests/tests/test_squeak_node.py b/itests/tests/test_squeak_node.py index 6a0c0f0a..d1438dd6 100644 --- a/itests/tests/test_squeak_node.py +++ b/itests/tests/test_squeak_node.py @@ -689,6 +689,24 @@ def test_set_peer_uploading(server_stub, admin_stub, peer_id): assert get_peer_response.squeak_peer.uploading +def test_rename_peer(server_stub, admin_stub, peer_id, random_name): + # Rename the peer + admin_stub.RenamePeer( + squeak_admin_pb2.RenamePeerRequest( + peer_id=peer_id, + peer_name=random_name, + ) + ) + + # Get the peer again + get_peer_response = admin_stub.GetPeer( + squeak_admin_pb2.GetPeerRequest( + peer_id=peer_id, + ) + ) + assert get_peer_response.squeak_peer.peer_name == random_name + + def test_delete_peer(server_stub, admin_stub, peer_id): # Delete the peer admin_stub.DeletePeer( diff --git a/proto/squeak_admin.proto b/proto/squeak_admin.proto index bcc12815..89bd5c7f 100644 --- a/proto/squeak_admin.proto +++ b/proto/squeak_admin.proto @@ -164,6 +164,10 @@ service SqueakAdmin { */ rpc SetPeerUploading (SetPeerUploadingRequest) returns (SetPeerUploadingReply) {} + /** sqkadmin: `renamepeer` + */ + rpc RenamePeer (RenamePeerRequest) returns (RenamePeerReply) {} + /** sqkadmin: `deletepeer` */ rpc DeletePeer (DeletePeerRequest) returns (DeletePeerReply) {} @@ -554,6 +558,17 @@ message SetPeerUploadingRequest { message SetPeerUploadingReply { } +message RenamePeerRequest { + /// The peer id + int32 peer_id = 1; + + /// Name of the peer + string peer_name = 2; +} + +message RenamePeerReply { +} + message DeletePeerRequest { /// The peer id int32 peer_id = 1; diff --git a/squeaknode/admin/squeak_admin_server_handler.py b/squeaknode/admin/squeak_admin_server_handler.py index f15c7e2f..4b356624 100644 --- a/squeaknode/admin/squeak_admin_server_handler.py +++ b/squeaknode/admin/squeak_admin_server_handler.py @@ -411,6 +411,18 @@ class SqueakAdminServerHandler(object): self.squeak_controller.set_peer_downloading(peer_id, downloading) return squeak_admin_pb2.SetPeerDownloadingReply() + def handle_rename_squeak_peer(self, request): + peer_id = request.peer_id + peer_name = request.peer_name + logger.info( + "Handle rename peer with peer id: {}, new name: {}".format( + peer_id, + peer_name, + ) + ) + self.squeak_controller.rename_peer(peer_id, peer_name) + return squeak_admin_pb2.RenamePeerReply() + def handle_set_squeak_peer_uploading(self, request): peer_id = request.peer_id uploading = request.uploading diff --git a/squeaknode/admin/squeak_admin_server_servicer.py b/squeaknode/admin/squeak_admin_server_servicer.py index c36fcbf1..d2b6516b 100644 --- a/squeaknode/admin/squeak_admin_server_servicer.py +++ b/squeaknode/admin/squeak_admin_server_servicer.py @@ -141,6 +141,9 @@ class SqueakAdminServerServicer(squeak_admin_pb2_grpc.SqueakAdminServicer): def SetPeerUploading(self, request, context): return self.handler.handle_set_squeak_peer_uploading(request) + def RenamePeer(self, request, context): + return self.handler.handle_rename_squeak_peer(request) + def DeletePeer(self, request, context): return self.handler.handle_delete_squeak_peer(request) diff --git a/squeaknode/admin/webapp/app.py b/squeaknode/admin/webapp/app.py index de8ecea3..419b0190 100644 --- a/squeaknode/admin/webapp/app.py +++ b/squeaknode/admin/webapp/app.py @@ -289,6 +289,14 @@ def create_app(handler, username, password): handler.handle_set_squeak_peer_uploading, ) + @app.route("/renamepeer", methods=["POST"]) + @login_required + def renamepeer(): + return handle_request( + squeak_admin_pb2.RenamePeerRequest(), + handler.handle_rename_squeak_peer, + ) + @app.route("/getsigningprofiles", methods=["POST"]) @login_required def getsigningprofiles(): diff --git a/squeaknode/core/squeak_controller.py b/squeaknode/core/squeak_controller.py index 05b9b653..3e591137 100644 --- a/squeaknode/core/squeak_controller.py +++ b/squeaknode/core/squeak_controller.py @@ -240,6 +240,9 @@ class SqueakController: def set_peer_uploading(self, peer_id: int, uploading: bool): self.squeak_db.set_peer_uploading(peer_id, uploading) + def rename_peer(self, peer_id: int, peer_name: str): + self.squeak_db.set_peer_name(peer_id, peer_name) + def delete_peer(self, peer_id: int): self.squeak_db.delete_peer(peer_id) diff --git a/squeaknode/db/squeak_db.py b/squeaknode/db/squeak_db.py index 3f04f9fe..d22da415 100644 --- a/squeaknode/db/squeak_db.py +++ b/squeaknode/db/squeak_db.py @@ -793,6 +793,16 @@ class SqueakDb: with self.get_connection() as connection: connection.execute(stmt) + def set_peer_name(self, peer_id: int, peer_name: str): + """ Set a peer name. """ + stmt = ( + self.peers.update() + .where(self.peers.c.peer_id == peer_id) + .values(peer_name=peer_name) + ) + with self.get_connection() as connection: + connection.execute(stmt) + def delete_peer(self, peer_id: int): """ Delete a peer. """ delete_peer_stmt = self.peers.delete().where(self.peers.c.peer_id == peer_id)