From 874f27df58b77ff03324f69445da8fccfcc9a179 Mon Sep 17 00:00:00 2001 From: Jonathan Zernik Date: Sat, 1 Aug 2020 04:52:35 -0700 Subject: [PATCH] Rename subscription (#192) * Rename addserver request to createsubscription * Rename server to subscription * Show subscriptions in frontend --- .../CreateSubscriptionDialog.js | 16 ++--- .../src/components/Layout/Layout.js | 4 +- .../src/components/Sidebar/Sidebar.js | 4 +- .../src/pages/servers/package.json | 6 -- .../Subscriptions.js} | 25 ++++---- .../src/pages/subscriptions/package.json | 6 ++ init.sql | 6 +- itests/tests/test_squeak_node.py | 36 +++++------ proto/squeak_admin.proto | 54 ++++++++-------- .../admin/squeak_admin_server_handler.py | 30 +++++---- .../admin/squeak_admin_server_servicer.py | 61 +++++++++++-------- squeakserver/node/squeak_node.py | 24 ++++---- squeakserver/server/postgres_db.py | 52 ++++++++-------- squeakserver/server/squeak_server.py | 5 -- squeakserver/server/squeak_subscription.py | 5 ++ 15 files changed, 174 insertions(+), 160 deletions(-) delete mode 100644 frontend/squeak-node-frontend/src/pages/servers/package.json rename frontend/squeak-node-frontend/src/pages/{servers/Servers.js => subscriptions/Subscriptions.js} (85%) create mode 100644 frontend/squeak-node-frontend/src/pages/subscriptions/package.json delete mode 100644 squeakserver/server/squeak_server.py create mode 100644 squeakserver/server/squeak_subscription.py diff --git a/frontend/squeak-node-frontend/src/components/CreateSubscriptionDialog/CreateSubscriptionDialog.js b/frontend/squeak-node-frontend/src/components/CreateSubscriptionDialog/CreateSubscriptionDialog.js index baf9ac9b..d18007f5 100644 --- a/frontend/squeak-node-frontend/src/components/CreateSubscriptionDialog/CreateSubscriptionDialog.js +++ b/frontend/squeak-node-frontend/src/components/CreateSubscriptionDialog/CreateSubscriptionDialog.js @@ -31,7 +31,7 @@ import SqueakThreadItem from "../../components/SqueakThreadItem"; import { CreateContactProfileRequest, - AddServerRequest, + CreateSubscriptionRequest, } from "../../proto/squeak_admin_pb" import {SqueakAdminClient} from "../../proto/squeak_admin_grpc_web_pb" @@ -56,24 +56,24 @@ export default function CreateSubscriptionDialog({ setHost(event.target.value); }; - const createSubscription = (serverName, host, port) => { + const createSubscription = (subscriptionName, host, port) => { console.log("called createContactProfile"); - var addServerRequest = new AddServerRequest() - addServerRequest.setServerName(serverName); - addServerRequest.setHost(host); + var createSubscriptionRequest = new CreateSubscriptionRequest() + createSubscriptionRequest.setSubscriptionName(subscriptionName); + createSubscriptionRequest.setHost(host); // TODO: use real port here // addServerRequest.setHost(0); - console.log(addServerRequest); + console.log(createSubscriptionRequest); - client.addServer(addServerRequest, {}, (err, response) => { + client.createSubscription(createSubscriptionRequest, {}, (err, response) => { if (err) { console.log(err.message); alert('Error creating subscription: ' + err.message); return; } console.log(response); - console.log(response.getServerId()); + console.log(response.getSubscriptionId()); // goToProfilePage(response.getProfileId()); }); }; diff --git a/frontend/squeak-node-frontend/src/components/Layout/Layout.js b/frontend/squeak-node-frontend/src/components/Layout/Layout.js index 16e3e539..0b56163f 100644 --- a/frontend/squeak-node-frontend/src/components/Layout/Layout.js +++ b/frontend/squeak-node-frontend/src/components/Layout/Layout.js @@ -26,7 +26,7 @@ import Maps from "../../pages/maps"; import Profiles from "../../pages/profiles"; import Icons from "../../pages/icons"; import Charts from "../../pages/charts"; -import Servers from "../../pages/servers"; +import Subscriptions from "../../pages/subscriptions"; // context import { useLayoutState } from "../../context/LayoutContext"; @@ -56,7 +56,7 @@ function Layout(props) { - + }, { id: 1, label: "Profiles", link: "/app/profiles", icon: }, { id: 2, label: "Lightning", link: "/app/lightning", icon: }, - { id: 3, label: "Servers", link: "/app/servers", icon: }, + { id: 3, label: "Subscriptions", link: "/app/subscriptions", icon: }, ]; function Sidebar({ location }) { diff --git a/frontend/squeak-node-frontend/src/pages/servers/package.json b/frontend/squeak-node-frontend/src/pages/servers/package.json deleted file mode 100644 index 83decde7..00000000 --- a/frontend/squeak-node-frontend/src/pages/servers/package.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "Servers", - "version": "0.0.0", - "main": "Servers.js", - "private": true -} diff --git a/frontend/squeak-node-frontend/src/pages/servers/Servers.js b/frontend/squeak-node-frontend/src/pages/subscriptions/Subscriptions.js similarity index 85% rename from frontend/squeak-node-frontend/src/pages/servers/Servers.js rename to frontend/squeak-node-frontend/src/pages/subscriptions/Subscriptions.js index d5c65390..c6c25794 100644 --- a/frontend/squeak-node-frontend/src/pages/servers/Servers.js +++ b/frontend/squeak-node-frontend/src/pages/subscriptions/Subscriptions.js @@ -24,9 +24,8 @@ import CreateSubscriptionDialog from "../../components/CreateSubscriptionDialog" // data import mock from "../dashboard/mock"; -import {GetInfoRequest} from "../../proto/lnd_pb" import { - GetSqueakServersRequest, + GetSubscriptionsRequest, } from "../../proto/squeak_admin_pb" import {SqueakAdminClient} from "../../proto/squeak_admin_grpc_web_pb" @@ -40,9 +39,9 @@ const useStyles = makeStyles((theme) => ({ } })); -export default function Servers() { +export default function Subscriptions() { const classes = useStyles(); - const [servers, setServers] = useState([]); + const [subscriptions, setSubscriptions] = useState([]); const [createSubscriptionDialogOpen, setCreateSubscriptionDialogOpen] = useState(false); const history = useHistory(); @@ -56,15 +55,15 @@ export default function Servers() { const getSqueakServers = () => { console.log("called getSigningProfiles"); - var getSqueakServersRequest = new GetSqueakServersRequest() + var getSubscriptionsRequest = new GetSubscriptionsRequest(); - client.getSqueakServers(getSqueakServersRequest, {}, (err, response) => { + client.getSubscriptions(getSubscriptionsRequest, {}, (err, response) => { if (err) { console.log(err.message); return; } console.log(response); - setServers(response.getSqueakServersList()); + setSubscriptions(response.getSqueakSubscriptionsList()); }); }; @@ -97,18 +96,18 @@ export default function Servers() { ) } - function ServersInfo() { + function SubscriptionsInfo() { return ( <> {CreateServerButton()} + title="Subscriptions" + data={subscriptions.map(s => [ - p.getServerName(), - p.getHost(), + s.getSubscriptionName(), + s.getHost(), ] )} columns={["Name", "Host"]} @@ -142,7 +141,7 @@ export default function Servers() { return ( <> < PageTitle title = "Servers" /> - {ServersInfo()} + {SubscriptionsInfo()} {CreateServerDialogContent()} < />); } diff --git a/frontend/squeak-node-frontend/src/pages/subscriptions/package.json b/frontend/squeak-node-frontend/src/pages/subscriptions/package.json new file mode 100644 index 00000000..a4bbc198 --- /dev/null +++ b/frontend/squeak-node-frontend/src/pages/subscriptions/package.json @@ -0,0 +1,6 @@ +{ + "name": "Subscriptions", + "version": "0.0.0", + "main": "Subscriptions.js", + "private": true +} diff --git a/init.sql b/init.sql index 1db1ea9d..919d50c9 100644 --- a/init.sql +++ b/init.sql @@ -33,10 +33,10 @@ CREATE TABLE IF NOT EXISTS profile ( whitelisted BOOLEAN NOT NULL ); -CREATE TABLE IF NOT EXISTS server ( - server_id SERIAL PRIMARY KEY, +CREATE TABLE IF NOT EXISTS subscription ( + subscription_id SERIAL PRIMARY KEY, created TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, - server_name VARCHAR(64), + subscription_name VARCHAR(64), server_host VARCHAR(256) NOT NULL, server_port INTEGER NOT NULL, sharing BOOLEAN NOT NULL, diff --git a/itests/tests/test_squeak_node.py b/itests/tests/test_squeak_node.py index d21a44ea..c767276a 100644 --- a/itests/tests/test_squeak_node.py +++ b/itests/tests/test_squeak_node.py @@ -442,26 +442,28 @@ def test_delete_squeak(server_stub, admin_stub, saved_squeak_hash): ) -def test_add_server(server_stub, admin_stub): - # Add a new server - add_server_response = admin_stub.AddServer( - squeak_admin_pb2.AddServerRequest(host="fake_host", port=1234,) +def test_create_subscription(server_stub, admin_stub): + # Add a new subscription + create_subscription_response = admin_stub.CreateSubscription( + squeak_admin_pb2.CreateSubscriptionRequest(host="fake_host", port=1234,) ) - server_id = add_server_response.server_id + subscription_id = create_subscription_response.subscription_id - # Get the new server - get_squeak_server_response = admin_stub.GetSqueakServer( - squeak_admin_pb2.GetSqueakServerRequest(server_id=server_id) + # Get the new subscription + get_subscription_response = admin_stub.GetSubscription( + squeak_admin_pb2.GetSubscriptionRequest( + subscription_id=subscription_id, + ) ) - assert get_squeak_server_response.squeak_server.host == "fake_host" - assert get_squeak_server_response.squeak_server.port == 1234 + assert get_subscription_response.squeak_subscription.host == "fake_host" + assert get_subscription_response.squeak_subscription.port == 1234 - # Get all servers - get_squeak_servers_response = admin_stub.GetSqueakServers( - squeak_admin_pb2.GetSqueakServersRequest() + # Get all subscriptions + get_subscriptions_response = admin_stub.GetSubscriptions( + squeak_admin_pb2.GetSubscriptionsRequest() ) - squeak_server_hosts = [ - server.host - for server in get_squeak_servers_response.squeak_servers + subscription_hosts = [ + squeak_subscription.host + for squeak_subscription in get_subscriptions_response.squeak_subscriptions ] - assert "fake_host" in squeak_server_hosts + assert "fake_host" in subscription_hosts diff --git a/proto/squeak_admin.proto b/proto/squeak_admin.proto index c8263ce2..c48f07eb 100644 --- a/proto/squeak_admin.proto +++ b/proto/squeak_admin.proto @@ -82,17 +82,17 @@ service SqueakAdmin { */ rpc DeleteSqueak (DeleteSqueakRequest) returns (DeleteSqueakReply) {} - /** sqkadmin: `addserver` + /** sqkadmin: `addsubscription` */ - rpc AddServer (AddServerRequest) returns (AddServerReply) {} + rpc CreateSubscription (CreateSubscriptionRequest) returns (CreateSubscriptionReply) {} - /** sqkadmin: `getsqueakserver` + /** sqkadmin: `getsubscription` */ - rpc GetSqueakServer (GetSqueakServerRequest) returns (GetSqueakServerReply) {} + rpc GetSubscription (GetSubscriptionRequest) returns (GetSubscriptionReply) {} - /** sqkadmin: `getsqueakservers` + /** sqkadmin: `getsubscriptions` */ - rpc GetSqueakServers (GetSqueakServersRequest) returns (GetSqueakServersReply) {} + rpc GetSubscriptions (GetSubscriptionsRequest) returns (GetSubscriptionsReply) {} } @@ -313,9 +313,9 @@ message DeleteSqueakRequest { message DeleteSqueakReply { } -message AddServerRequest { - /// Name of the server - string server_name = 1; +message CreateSubscriptionRequest { + /// Name of the subscription + string subscription_name = 1; /// Host string host = 2; @@ -324,35 +324,35 @@ message AddServerRequest { int32 port = 3; } -message AddServerReply { - /// The server id - int32 server_id = 1; +message CreateSubscriptionReply { + /// The subscription id + int32 subscription_id = 1; } -message GetSqueakServerRequest { - /// The server id - int32 server_id = 1; +message GetSubscriptionRequest { + /// The subscription id + int32 subscription_id = 1; } -message GetSqueakServerReply { - /// The server - SqueakServerSubscription squeak_server = 1; +message GetSubscriptionReply { + /// The subscription + SqueakSubscription squeak_subscription = 1; } -message GetSqueakServersRequest { +message GetSubscriptionsRequest { } -message GetSqueakServersReply { - /// The servers - repeated SqueakServerSubscription squeak_servers = 1; +message GetSubscriptionsReply { + /// The subscriptions + repeated SqueakSubscription squeak_subscriptions = 1; } -message SqueakServerSubscription { - /// The server id - int32 server_id = 1; +message SqueakSubscription { + /// The subscription id + int32 subscription_id = 1; - /// The server name - string server_name = 2; + /// The subscription name + string subscription_name = 2; /// Host string host = 3; diff --git a/squeakserver/admin/squeak_admin_server_handler.py b/squeakserver/admin/squeak_admin_server_handler.py index b3713796..920d470c 100644 --- a/squeakserver/admin/squeak_admin_server_handler.py +++ b/squeakserver/admin/squeak_admin_server_handler.py @@ -153,21 +153,25 @@ class SqueakAdminServerHandler(object): self.squeak_node.delete_squeak(squeak_hash) logger.info("Deleted squeak entry with hash: {}".format(squeak_hash)) - def handle_add_server(self, server_name, server_host, server_port): + def handle_create_subscription(self, subscription_name, host, port): logger.info( - "Handle add server with name: {}, host: {}, port: {}".format( - server_name, server_host, server_port, + "Handle create subscription with name: {}, host: {}, port: {}".format( + subscription_name, host, port, ) ) - server_id = self.squeak_node.add_server(server_name, server_host, server_port,) - return server_id + subscription_id = self.squeak_node.create_subscription( + subscription_name, + host, + port, + ) + return subscription_id - def handle_get_squeak_server(self, server_id): - logger.info("Handle get squeak server with id: {}".format(server_id)) - squeak_server = self.squeak_node.get_squeak_server(server_id) - return squeak_server + def handle_get_squeak_subscription(self, subscription_id): + logger.info("Handle get squeak subscription with id: {}".format(subscription_id)) + squeak_subscription = self.squeak_node.get_subscription(subscription_id) + return squeak_subscription - def handle_get_squeak_servers(self): - logger.info("Handle get squeak servers") - squeak_servers = self.squeak_node.get_squeak_servers() - return squeak_servers + def handle_get_squeak_subscriptions(self): + logger.info("Handle get squeak subscriptions") + squeak_subscriptions = self.squeak_node.get_subscriptions() + return squeak_subscriptions diff --git a/squeakserver/admin/squeak_admin_server_servicer.py b/squeakserver/admin/squeak_admin_server_servicer.py index 97adf3d7..aa218bdf 100644 --- a/squeakserver/admin/squeak_admin_server_servicer.py +++ b/squeakserver/admin/squeak_admin_server_servicer.py @@ -152,27 +152,36 @@ class SqueakAdminServerServicer(squeak_admin_pb2_grpc.SqueakAdminServicer): self.handler.handle_delete_squeak(squeak_hash) return squeak_admin_pb2.DeleteSqueakReply() - def AddServer(self, request, context): - server_name = request.server_name if request.server_name else None - server_host = request.host - server_port = request.port - server_id = self.handler.handle_add_server( - server_name, server_host, server_port, + def CreateSubscription(self, request, context): + subscription_name = request.subscription_name if request.subscription_name else None + host = request.host + port = request.port + subscription_id = self.handler.handle_create_subscription( + subscription_name, + host, + port, + ) + return squeak_admin_pb2.CreateSubscriptionReply( + subscription_id=subscription_id, ) - return squeak_admin_pb2.AddServerReply(server_id=server_id) - def GetSqueakServer(self, request, context): - server_id = request.server_id - squeak_server = self.handler.handle_get_squeak_server(server_id) - squeak_server_msg = self._squeak_server_to_message(squeak_server) - return squeak_admin_pb2.GetSqueakServerReply(squeak_server=squeak_server_msg) + def GetSubscription(self, request, context): + subscription_id = request.subscription_id + squeak_subscription = self.handler.handle_get_squeak_subscription(subscription_id) + squeak_subscription_msg = self._squeak_subscription_to_message(squeak_subscription) + return squeak_admin_pb2.GetSubscriptionReply( + squeak_subscription=squeak_subscription_msg, + ) - def GetSqueakServers(self, request, context): - squeak_servers = self.handler.handle_get_squeak_servers() - squeak_server_msgs = [ - self._squeak_server_to_message(squeak_server) for squeak_server in squeak_servers + def GetSubscriptions(self, request, context): + squeak_subscriptions = self.handler.handle_get_squeak_subscriptions() + squeak_subscription_msgs = [ + self._squeak_subscription_to_message(squeak_subscription) + for squeak_subscription in squeak_subscriptions ] - return squeak_admin_pb2.GetSqueakServersReply(squeak_servers=squeak_server_msgs) + return squeak_admin_pb2.GetSubscriptionsReply( + squeak_subscriptions=squeak_subscription_msgs, + ) def _squeak_entry_to_message(self, squeak_entry_with_profile): if squeak_entry_with_profile is None: @@ -215,16 +224,16 @@ class SqueakAdminServerServicer(squeak_admin_pb2_grpc.SqueakAdminServicer): whitelisted=squeak_profile.whitelisted, ) - def _squeak_server_to_message(self, squeak_server): - if squeak_server is None: + def _squeak_subscription_to_message(self, squeak_subscription): + if squeak_subscription is None: return None - return squeak_admin_pb2.SqueakServerSubscription( - server_id=squeak_server.server_id, - server_name=squeak_server.server_name, - host=squeak_server.host, - port=squeak_server.port, - sharing=squeak_server.sharing, - following=squeak_server.following, + return squeak_admin_pb2.SqueakSubscription( + subscription_id=squeak_subscription.subscription_id, + subscription_name=squeak_subscription.subscription_name, + host=squeak_subscription.host, + port=squeak_subscription.port, + sharing=squeak_subscription.sharing, + following=squeak_subscription.following, ) def serve(self): diff --git a/squeakserver/node/squeak_node.py b/squeakserver/node/squeak_node.py index f3f374d5..69beaab1 100644 --- a/squeakserver/node/squeak_node.py +++ b/squeakserver/node/squeak_node.py @@ -13,7 +13,7 @@ from squeakserver.node.squeak_rate_limiter import SqueakRateLimiter from squeakserver.node.squeak_whitelist import SqueakWhitelist from squeakserver.server.buy_offer import BuyOffer from squeakserver.server.squeak_profile import SqueakProfile -from squeakserver.server.squeak_server import SqueakServer +from squeakserver.server.squeak_subscription import SqueakSubscription from squeakserver.server.util import generate_offer_preimage @@ -202,19 +202,19 @@ class SqueakNode: def delete_squeak(self, squeak_hash): return self.postgres_db.delete_squeak(squeak_hash) - def add_server(self, server_name, server_host, server_port): - squeak_server = SqueakServer( - server_id=None, - server_name=server_name, - host=server_host, - port=server_port, + def create_subscription(self, subscription_name, host, port): + squeak_subscription = SqueakSubscription( + subscription_id=None, + subscription_name=subscription_name, + host=host, + port=port, sharing=False, following=False, ) - return self.postgres_db.insert_server(squeak_server) + return self.postgres_db.insert_subscription(squeak_subscription) - def get_squeak_server(self, server_id): - return self.postgres_db.get_server(server_id) + def get_subscription(self, subscription_id): + return self.postgres_db.get_subscription(subscription_id) - def get_squeak_servers(self): - return self.postgres_db.get_servers() + def get_subscriptions(self): + return self.postgres_db.get_subscriptions() diff --git a/squeakserver/server/postgres_db.py b/squeakserver/server/postgres_db.py index 1549294b..38ddac42 100644 --- a/squeakserver/server/postgres_db.py +++ b/squeakserver/server/postgres_db.py @@ -10,7 +10,7 @@ from squeakserver.blockchain.util import parse_block_header from squeakserver.core.squeak_entry import SqueakEntry from squeakserver.core.squeak_entry_with_profile import SqueakEntryWithProfile from squeakserver.server.squeak_profile import SqueakProfile -from squeakserver.server.squeak_server import SqueakServer +from squeakserver.server.squeak_subscription import SqueakSubscription from squeakserver.server.util import get_hash logger = logging.getLogger(__name__) @@ -370,49 +370,49 @@ class PostgresDb: with self.get_cursor() as curs: curs.execute(sql, (squeak_hash_str,)) - def insert_server(self, squeak_server): - """ Insert a new squeak server. """ + def insert_subscription(self, squeak_subscription): + """ Insert a new squeak subscription. """ sql = """ - INSERT INTO server(server_name, server_host, server_port, sharing, following) + INSERT INTO subscription(subscription_name, server_host, server_port, sharing, following) VALUES(%s, %s, %s, %s, %s) - RETURNING server_id; + RETURNING subscription_id; """ with self.get_cursor() as curs: # execute the INSERT statement curs.execute( sql, ( - squeak_server.server_name, - squeak_server.host, - squeak_server.port, - squeak_server.sharing, - squeak_server.following, + squeak_subscription.subscription_name, + squeak_subscription.host, + squeak_subscription.port, + squeak_subscription.sharing, + squeak_subscription.following, ), ) - # get the new server id back + # get the new subscription id back row = curs.fetchone() - return row["server_id"] + return row["subscription_id"] - def get_server(self, server_id): - """ Get a server. """ + def get_subscription(self, subscription_id): + """ Get a subscription. """ sql = """ - SELECT * FROM server WHERE server_id=%s""" + SELECT * FROM subscription WHERE subscription_id=%s""" with self.get_cursor() as curs: - curs.execute(sql, (server_id,)) + curs.execute(sql, (subscription_id,)) row = curs.fetchone() - return self._parse_squeak_server(row) + return self._parse_squeak_subscription(row) - def get_servers(self): - """ Get all servers. """ + def get_subscriptions(self): + """ Get all subscriptions. """ sql = """ - SELECT * FROM server; + SELECT * FROM subscription; """ with self.get_cursor() as curs: curs.execute(sql) rows = curs.fetchall() - servers = [self._parse_squeak_server(row) for row in rows] - return servers + subscriptions = [self._parse_squeak_subscription(row) for row in rows] + return subscriptions def _parse_squeak_entry(self, row): vch_decryption_key_column = row["vch_decryption_key"] @@ -466,12 +466,12 @@ class PostgresDb: squeak_entry=squeak_entry, squeak_profile=squeak_profile, ) - def _parse_squeak_server(self, row): + def _parse_squeak_subscription(self, row): if row is None: return None - return SqueakServer( - server_id=row["server_id"], - server_name=row["server_name"], + return SqueakSubscription( + subscription_id=row["subscription_id"], + subscription_name=row["subscription_name"], host=row["server_host"], port=row["server_port"], sharing=row["sharing"], diff --git a/squeakserver/server/squeak_server.py b/squeakserver/server/squeak_server.py deleted file mode 100644 index 8cfc4143..00000000 --- a/squeakserver/server/squeak_server.py +++ /dev/null @@ -1,5 +0,0 @@ -from collections import namedtuple - -SqueakServer = namedtuple( - "SqueakServer", "server_id, server_name, host, port, sharing, following", -) diff --git a/squeakserver/server/squeak_subscription.py b/squeakserver/server/squeak_subscription.py new file mode 100644 index 00000000..84492d41 --- /dev/null +++ b/squeakserver/server/squeak_subscription.py @@ -0,0 +1,5 @@ +from collections import namedtuple + +SqueakSubscription = namedtuple( + "SqueakSubscription", "subscription_id, subscription_name, host, port, sharing, following", +)