diff --git a/client/app/screens/settings/SettingsScreen.tsx b/client/app/screens/settings/SettingsScreen.tsx
index 5fd8664af..4db3a2632 100644
--- a/client/app/screens/settings/SettingsScreen.tsx
+++ b/client/app/screens/settings/SettingsScreen.tsx
@@ -46,7 +46,7 @@ const SettingsScreen: React.FC = () => {
Settings
{Sections.map(({ header, items }) => (
-
+
{header}
diff --git a/server/.gitignore b/server/.gitignore
index 34bf73406..caf44477b 100644
--- a/server/.gitignore
+++ b/server/.gitignore
@@ -133,11 +133,9 @@ dist
build
# Private Key JSON
-./firebase-secrets.json
+firebase-secrets.json
# Other
.env
build/
-# Firebase Secrets
-.firebase-secrets.json
\ No newline at end of file
diff --git a/server/src/index.ts b/server/src/index.ts
index d52c35ff3..330eb337f 100644
--- a/server/src/index.ts
+++ b/server/src/index.ts
@@ -1,19 +1,23 @@
-import express from 'express';
-import 'dotenv/config';
-import 'geofire-common';
-import { Message } from './types/Message';
-import { createMessage } from './actions/createMessage';
-import { createUser } from './actions/createConnectedUser';
-import { toggleUserConnectionStatus, updateUserLocation, updateUserDisplayName } from './actions/updateConnectedUser';
-import { deleteConnectedUserByUID } from './actions/deleteConnectedUser';
-import { findNearbyUsers, getConnectedUser } from './actions/getConnectedUsers';
-import {geohashForLocation} from 'geofire-common';
-import { ConnectedUser } from './types/User';
-import { getAuth } from 'firebase-admin/auth';
+import express from "express";
+import "dotenv/config";
+import "geofire-common";
+import { Message } from "./types/Message";
+import { createMessage } from "./actions/createMessage";
+import { createUser } from "./actions/createConnectedUser";
+import {
+ toggleUserConnectionStatus,
+ updateUserLocation,
+ updateUserDisplayName,
+} from "./actions/updateConnectedUser";
+import { deleteConnectedUserByUID } from "./actions/deleteConnectedUser";
+import { findNearbyUsers, getConnectedUser } from "./actions/getConnectedUsers";
+import { geohashForLocation } from "geofire-common";
+import { ConnectedUser } from "./types/User";
+import { getAuth } from "firebase-admin/auth";
import Mailgun from "mailgun.js";
-import { messagesCollection } from './utilities/firebaseInit';
-import { calculateDistanceInMeters } from './actions/calculateDistance';
-import { scheduleCron } from './actions/deleter';
+import { messagesCollection } from "./utilities/firebaseInit";
+import { calculateDistanceInMeters } from "./actions/calculateDistance";
+import { scheduleCron } from "./actions/deleter";
const { createServer } = require("http");
const { Server } = require("socket.io");
@@ -71,30 +75,36 @@ io.on("connection", async (socket: any) => {
await createUser(defaultConnectedUser);
await toggleUserConnectionStatus(socket.id);
- const observer = messagesCollection.where("lastUpdated", ">", Date.now()).onSnapshot((querySnapshot) => {
- querySnapshot.docChanges().forEach((change) => {
-
- if (change.type === "added"){
- console.log("New message: ", change.doc.data());
-
- const messageLat = change.doc.data().location.lat;
- const messageLon = change.doc.data().location.lon;
-
- const userLat = defaultConnectedUser.location.lat;
- const userLon = defaultConnectedUser.location.lon;
-
- const distance = calculateDistanceInMeters(messageLat, messageLon, userLat, userLon);
-
- if (distance < 300) {
- console.log("Message is within 300m of user");
- socket.emit("message", change.doc.data());
- } else {
- console.log("Message is not within 300m of user");
+ const observer = messagesCollection
+ .order('lastUpdated', "desc")
+ .limit(0)
+ .onSnapshot((querySnapshot) => {
+ querySnapshot.docChanges().forEach((change) => {
+ if (change.type === "added") {
+ console.log("New message: ", change.doc.data());
+
+ const messageLat = change.doc.data().location.lat;
+ const messageLon = change.doc.data().location.lon;
+
+ const userLat = defaultConnectedUser.location.lat;
+ const userLon = defaultConnectedUser.location.lon;
+
+ const distance = calculateDistanceInMeters(
+ messageLat,
+ messageLon,
+ userLat,
+ userLon
+ );
+
+ if (distance < 300) {
+ console.log("Message is within 300m of user");
+ socket.emit("message", change.doc.data());
+ } else {
+ console.log("Message is not within 300m of user");
+ }
}
- }
-
+ });
});
- });
socket.on("disconnect", () => {
console.log(`[WS] User <${socket.id}> exited.`);
@@ -134,8 +144,8 @@ io.on("connection", async (socket: any) => {
} catch (error) {
console.error("[WS] Error calling updateLocation:", error.message);
}
- })
-})
+ });
+});
socketServer.listen(socket_port, () => {
console.log(`[WS] Listening for new connections on port ${socket_port}.`);
});
@@ -159,7 +169,6 @@ app.get("/users", async (req, res) => {
const userIds = await findNearbyUsers(lat, lon, radius);
res.json(userIds);
-
} else if (req.query.userId) {
query = "?userId";
const userId = req.query.userId;
@@ -169,7 +178,7 @@ app.get("/users", async (req, res) => {
if (user) {
res.json(user);
} else {
- // getConnectedUserDisplayName() will return false is an error is thrown, and print it to console.
+ // getConnectedUserDisplayName() will return false is an error is thrown, and print it to console.
throw Error("getConnectedUser() failed.");
}
}
@@ -221,7 +230,6 @@ app.put("/users", async (req, res) => {
const success = await toggleUserConnectionStatus(userId);
if (!success) throw Error(" toggleUserConnectionStatus() failed.");
-
} else if (req.query.userId && req.query.lat && req.query.lon) {
query = "?userId&lat&lon";
const userId = req.query.userId;
@@ -233,20 +241,19 @@ app.put("/users", async (req, res) => {
const success = await updateUserLocation(userId, lat, lon);
if (!success) throw Error(" toggleUserConnectionStatus() failed.");
-
} else if (req.query.userId && req.query.displayName) {
query = "?userId&displayName";
const userId = req.query.userId;
if (typeof userId != "string") throw Error(" [userId] is not a string.");
const displayName = req.query.displayName;
- if (typeof displayName != "string") throw Error(" [displayName] is not a string.");
-
+ if (typeof displayName != "string")
+ throw Error(" [displayName] is not a string.");
+
const success = await updateUserDisplayName(userId, displayName);
if (!success) throw Error("updateDisplayName() failed.");
}
console.log(`[EXP] Request returned successfully.`);
res.json(`Operation was handled successfully.`);
-
} catch (error) {
console.error(
`[EXP] Error returning request :\n`,
@@ -292,9 +299,12 @@ app.post("/verify", async (req, res) => {
from: "Mailgun Sandbox ",
to: email,
subject: "Verify your email for echologator",
- template: "app email verification"
+ template: "app email verification",
};
- const verifyEmailResponse = await mg.messages.create("sandboxf8629624c26849cf8546cd0bc01ee862.mailgun.org", data)
+ const verifyEmailResponse = await mg.messages.create(
+ "sandboxf8629624c26849cf8546cd0bc01ee862.mailgun.org",
+ data
+ );
console.log(`[EXP] Request returned successfully.`);
res.json(verifyEmailResponse);
}
@@ -334,11 +344,9 @@ app.listen(express_port, () => {
);
});
-
//Remove the comments if you want to use the deleter !!!!!!
//scheduleCron(); // Begin searching and collecting Garbage (old messages)
-
// Some old API routes are commented out for now due to breaking type changes.
// REST functions
diff --git a/server/src/utilities/firebaseInit.ts b/server/src/utilities/firebaseInit.ts
index beeb3f717..79bf6bee0 100644
--- a/server/src/utilities/firebaseInit.ts
+++ b/server/src/utilities/firebaseInit.ts
@@ -1,5 +1,5 @@
const admin = require('firebase-admin');
-const serviceAccount = require("../../.firebase-secrets.json");
+const serviceAccount = require("../../firebase-secrets.json");
export const adminApp = admin.initializeApp({
credential: admin.credential.cert(serviceAccount),