{
+ history.push("/app/squeak/" + squeakHash);
+ };
+
+ function handleSubmit(event) {
+ event.preventDefault();
+ console.log( 'profileId:', profileId);
+ console.log( 'content:', content);
+ console.log( 'replyto:', replyto);
+ makeSqueak(profileId, content, replyto);
+ }
+
+ const makeSqueak = (profileId, content, replyto) => {
+ console.log("called makeSqueak");
+
+ var makeSqueakRequest = new MakeSqueakRequest()
+ makeSqueakRequest.setProfileId(profileId);
+ makeSqueakRequest.setContent(content);
+ makeSqueakRequest.setReplyto(replyto);
+ console.log(makeSqueakRequest);
+
+ client.makeSqueak(makeSqueakRequest, {}, (err, response) => {
+ console.log(response);
+ console.log(response.getHash());
+ goToSqueakPage(response.getHash());
+ });
+ };
+ const getSigningProfiles = () => {
+ console.log("called getSigningProfiles");
+ var getSigningProfilesRequest = new GetSigningProfilesRequest()
+ client.getSigningProfiles(getSigningProfilesRequest, {}, (err, response) => {
+ console.log(response);
+ console.log(response.getSqueakProfilesList());
+ setSigningProfiles(response.getSqueakProfilesList());
+ });
+ };
+
+ useEffect(() => {
+ getSigningProfiles()
+ }, []);
+
+ return (
+ <>
+ < PageTitle title = "Make Squeak" />
+
+
+ Number of signing profiles: {signingProfiles.length}
+
+
+
+
+
+>);
+}
diff --git a/frontend/react-material-admin/src/pages/makesqueak/package.json b/frontend/react-material-admin/src/pages/makesqueak/package.json
new file mode 100644
index 00000000..1569bff4
--- /dev/null
+++ b/frontend/react-material-admin/src/pages/makesqueak/package.json
@@ -0,0 +1,6 @@
+{
+ "name": "MakeSqueak",
+ "version": "0.0.0",
+ "main": "MakeSqueak.js",
+ "private": true
+}
diff --git a/frontend/react-material-admin/src/pages/makesqueak/styles.js b/frontend/react-material-admin/src/pages/makesqueak/styles.js
new file mode 100644
index 00000000..39d05eff
--- /dev/null
+++ b/frontend/react-material-admin/src/pages/makesqueak/styles.js
@@ -0,0 +1,21 @@
+import { makeStyles } from "@material-ui/styles";
+
+export default makeStyles(theme => ({
+ dashedBorder: {
+ border: "1px dashed",
+ borderColor: theme.palette.primary.main,
+ padding: theme.spacing(2),
+ paddingTop: theme.spacing(4),
+ paddingBottom: theme.spacing(4),
+ marginTop: theme.spacing(1),
+ },
+ text: {
+ marginBottom: theme.spacing(2),
+ },
+ root: {
+ '& .MuiTextField-root': {
+ margin: theme.spacing(1),
+ width: '25ch',
+ },
+},
+}));
diff --git a/squeakserver/server/postgres_db.py b/squeakserver/server/postgres_db.py
index 5b1fbb5a..2a62db8f 100644
--- a/squeakserver/server/postgres_db.py
+++ b/squeakserver/server/postgres_db.py
@@ -280,6 +280,8 @@ class PostgresDb:
return SqueakEntry(squeak=squeak, block_header=block_header)
def _parse_squeak_profile(self, row):
+ if row is None:
+ return None
private_key_column = row["private_key"]
private_key = bytes(private_key_column) if private_key_column else None
return SqueakProfile(
@@ -292,6 +294,8 @@ class PostgresDb:
)
def _parse_squeak_entry_with_profile(self, row):
+ if row is None:
+ return None
squeak_entry = self._parse_squeak_entry(row)
squeak_profile = self._parse_squeak_profile(row)
return SqueakEntryWithProfile(