Browse Source

Merge pull request 'develop' (#31) from develop into master

Reviewed-on: https://git.poyner.page/david/sms-portal/pulls/31
master
david 3 years ago
parent
commit
0967d44e88
  1. 7
      .envexample
  2. 22
      README.md
  3. 34
      backend/index.js
  4. 21
      backend/models/index.js
  5. 37
      backend/routes/bnums.js
  6. 8
      backend/routes/sms.js
  7. 20
      backend/routes/subscription.js
  8. 106
      docker-compose.yml
  9. 101
      frontend/package-lock.json
  10. 24
      frontend/src/Home.js
  11. 28
      frontend/src/components/APIHelper.js
  12. 2
      frontend/src/components/Appbar.js
  13. 45
      frontend/yarn.lock

7
.envexample

@ -1,7 +0,0 @@
MONGO_INITDB_DATABASE=admin
dbadminuser=admin
dbadminpass=dfsdfdsfdsfdsfdsfdsfd
dbuser=smsdb-user
dbpass=sdfsdfsdfdsfdsfdsfds
dbname=sms-portal
dbhost=sms-portal-db

22
README.md

@ -10,6 +10,28 @@ The application will integrate with the following system:
- https://dev.telstra.com/content/messaging-api
## quickstart dev env
reminders:
- if ive deleted the .env files then, check lastpass wew
- moved the db to the nas
- not currently thinken docker being used / working state rn
### frontend
```
$ node -v
v16.1.0
yarn start
```
### backend
```
nodemon
```
## Todos
### backend:

34
backend/index.js

@ -1,23 +1,23 @@
const express = require("express");
const express = require('express');
const app = express();
const PORT = process.env.PORT || 3000;
const cors = require("cors");
const authRoute = require("./routes/auth");
const msgAuthRoute = require("./routes/msgAuth");
const bnumRoute = require("./routes/bnums");
const subRoute = require("./routes/subscription");
const smsRoute = require("./routes/sms");
const verify = require("./routes/privateRoute");
require("./models/index");
const PORT = process.env.PORT || 3001;
const cors = require('cors');
const authRoute = require('./routes/auth');
const msgAuthRoute = require('./routes/msgAuth');
const bnumRoute = require('./routes/bnums');
const subRoute = require('./routes/subscription');
const smsRoute = require('./routes/sms');
const verify = require('./routes/privateRoute');
require('./models/index');
app.use(cors({ exposedHeaders: ["authtoken"] }));
app.use(cors({ exposedHeaders: ['authtoken'] }));
app.use(express.json());
app.use("/api/user", authRoute);
app.use("/api/msgauth", verify, msgAuthRoute);
app.use("/api/bnum", verify, bnumRoute);
app.use("/api/sub", verify, subRoute);
app.use("/api/sms", verify, smsRoute);
app.use('/api/user', authRoute);
app.use('/api/msgauth', verify, msgAuthRoute);
app.use('/api/bnum', verify, bnumRoute);
app.use('/api/sub', verify, subRoute);
app.use('/api/sms', verify, smsRoute);
app.listen(PORT, () => {
console.log("backend started");
console.log('backend started');
});

21
backend/models/index.js

@ -1,22 +1,23 @@
const mongoose = require("mongoose");
const mongoose = require('mongoose');
require('dotenv').config();
mongoose.Promise = Promise;
mongoose.set("debug", true);
mongoose.set('debug', true);
mongoose.connection.on("connected", () => {
console.log("Connection Established");
mongoose.connection.on('connected', () => {
console.log('Connection Established');
});
mongoose.connection.on("reconnected", () => {
console.log("Connection Reestablished");
mongoose.connection.on('reconnected', () => {
console.log('Connection Reestablished');
});
mongoose.connection.on("disconnected", () => {
console.log("Connection Disconnected");
mongoose.connection.on('disconnected', () => {
console.log('Connection Disconnected');
});
mongoose.connection.on("close", () => {
console.log("Connection Closed");
mongoose.connection.on('close', () => {
console.log('Connection Closed');
});
// to atlas or not to atlas idk

37
backend/routes/bnums.js

@ -24,12 +24,16 @@ router.post("/addlocal", async (req, res) => {
if (creds.length === 0) {
return res.status(400).json({
success: false,
message: "there's no client id or secret configured for this user",
message: "no secrets have been configured yet!",
});
}
const validatedNum = {
number: value.number,
};
if (findExisting.length === 0) {
const addBnums = new Bnums(num);
const addBnums = new Bnums(validatedNum);
addBnums.userId = creds[0].userId;
await addBnums.save();
} else {
@ -70,6 +74,13 @@ router.get("/getlocal", async (req, res) => {
userId: thetoken._id,
});
if (creds.length === 0) {
return res.status(400).json({
success: false,
message: "no secrets have been configured yet!",
});
}
const getNumbers = await Bnums.find({ userId: thetoken._id });
if (getNumbers.length === 0) {
@ -78,10 +89,6 @@ router.get("/getlocal", async (req, res) => {
message: "no numbers exist in the db for this user!",
});
}
// throw {
// message: "no numbers exist in the db for this user!",
// };
// }
res.status(200).json({ success: true, message: getNumbers });
} catch (err) {
@ -96,6 +103,13 @@ router.get("/getremote", async (req, res) => {
userId: thetoken._id,
});
if (creds.length === 0) {
return res.status(400).json({
success: false,
message: "no secrets have been configured yet!",
});
}
msger.CONFIG.setConfig(authConfig(creds));
const bnum = msger.BNUM.getInstance();
const getBnums = await bnum.get();
@ -112,8 +126,6 @@ router.get("/getremote", async (req, res) => {
});
}
console.log(getBnums);
if (getBnums && getBnums.message) {
const checkFail = getBnums.message.includes("fail");
if (checkFail)
@ -136,6 +148,13 @@ router.get("/register", async (req, res) => {
userId: thetoken._id,
});
if (creds.length === 0) {
return res.status(400).json({
success: false,
message: "no secrets have been configured yet!",
});
}
msger.CONFIG.setConfig(authConfig(creds));
const findBnums = await Bnums.find({ userId: thetoken._id });
@ -157,7 +176,7 @@ router.get("/register", async (req, res) => {
if (registeredBnums && registeredBnums.message) {
const checkFail = registeredBnums.message.includes("fail");
if (checkFail) {
throw { message: "Request failed!" };
throw { message: registeredBnums.message };
}
}

8
backend/routes/sms.js

@ -18,6 +18,14 @@ router.post("/send", async (req, res) => {
const creds = await MsgAuth.find({
userId: thetoken._id,
});
if (creds.length === 0) {
return res.status(400).json({
success: false,
message: "no secrets have been configured yet!",
});
}
msger.CONFIG.setConfig(authConfig(creds));
const smsData = req.body;

20
backend/routes/subscription.js

@ -26,6 +26,14 @@ router.get("/getremote", async (req, res) => {
const creds = await MsgAuth.find({
userId: thetoken._id,
});
if (creds.length === 0) {
return res.status(400).json({
success: false,
message: "no secrets have been configured yet!",
});
}
msger.CONFIG.setConfig(authConfig(creds));
const sub = msger.Subscription.getInstance();
const getSub = await sub.get({});
@ -38,7 +46,7 @@ router.get("/getremote", async (req, res) => {
if (getSub && getSub.message) {
const checkFail = getSub.message.includes("fail");
if (checkFail) {
throw { message: "Request failed! Check API secrets." };
throw { message: getSub.message };
}
}
@ -64,6 +72,14 @@ router.get("/new", async (req, res) => {
const creds = await MsgAuth.find({
userId: thetoken._id,
});
if (creds.length === 0) {
return res.status(400).json({
success: false,
message: "no secrets have been configured yet!",
});
}
msger.CONFIG.setConfig(authConfig(creds));
const sub = msger.Subscription.getInstance();
const createSub = await sub.create({});
@ -72,7 +88,7 @@ router.get("/new", async (req, res) => {
if (createSub && createSub.message) {
const checkFail = createSub.message.includes("fail");
if (checkFail) {
throw { message: "Request failed! Check API secrets." };
throw { message: createSub.message };
}
}

106
docker-compose.yml

@ -1,21 +1,23 @@
---
version: "2.4"
version: '2.4'
services:
sms-portal-db:
image: mongo
restart: always
container_name: sms-portal-db
environment:
MONGO_INITDB_DATABASE: ${MONGO_INITDB_DATABASE}
MONGO_INITDB_ROOT_USERNAME: ${dbadminuser}
MONGO_INITDB_ROOT_PASSWORD: ${dbadminpass}
dbuser: ${dbuser}
dbpass: ${dbpass}
dbname: ${dbname}
sms-portal-frontend:
image: node:alpine3.12
container_name: sms-portal-frontend
volumes:
- /home/blender/docker/sms-portal/db:/data/db
- /home/blender/docker/sms-portal/mongo-init.sh:/docker-entrypoint-initdb.d/mongo-init.sh:ro
- /home/blender/projects/sms-portal/frontend:/app
ports:
- 3102:3000
command: 'yarn start'
working_dir: /app
environment:
REACT_APP_APIURL: ${apiurl}
labels:
- 'traefik.enable=true'
- 'traefik.http.routers.sms-portal.rule=Host(`sms-portal.poyner.page`)'
- 'traefik.http.routers.sms-portal.entrypoints=websecure'
- 'traefik.http.routers.sms-portal.tls.certresolver=le'
sms-portal-backend:
image: sms-portal-backend:latest
@ -23,7 +25,7 @@ services:
build:
context: ./backend
volumes:
- /home/blender/docker/sms-portal/backend:/app
- /home/blender/projects/sms-portal/backend:/app
ports:
- 3100:3000
environment:
@ -34,47 +36,45 @@ services:
tokensecret: ${tokensecret}
cryptosecret: ${cryptosecret}
labels:
- "traefik.enable=true"
- "traefik.http.routers.sms-portal-api.rule=Host(`api.sms-portal.poyner.page`)"
- "traefik.http.routers.sms-portal-api.entrypoints=websecure"
- "traefik.http.routers.sms-portal-api.tls.certresolver=myresolver"
- 'traefik.enable=true'
- 'traefik.http.routers.sms-portal-api.rule=Host(`api.sms-portal.poyner.page`)'
- 'traefik.http.routers.sms-portal-api.entrypoints=websecure'
- 'traefik.http.routers.sms-portal-api.tls.certresolver=le'
sms-portal-db-admin:
image: mongo-express
restart: always
container_name: sms-portal-db-admin
environment:
ME_CONFIG_MONGODB_ADMINUSERNAME: ${dbadminuser}
ME_CONFIG_MONGODB_ADMINPASSWORD: ${dbadminpass}
ME_CONFIG_MONGODB_SERVER: ${dbhost}
ME_CONFIG_BASICAUTH_USERNAME: ${webadminuser}
ME_CONFIG_BASICAUTH_PASSWORD: ${webadminpass}
ports:
- 3101:8081
labels:
- "traefik.enable=true"
- "traefik.http.routers.sms-portal-mongoexpress.rule=Host(`mongoexpress.sms-portal.poyner.page`)"
- "traefik.http.routers.sms-portal-mongoexpress.entrypoints=websecure"
- "traefik.http.routers.sms-portal-mongoexpress.tls.certresolver=myresolver"
# sms-portal-db-admin:
# image: mongo-express
# restart: always
# container_name: sms-portal-db-admin
# environment:
# ME_CONFIG_MONGODB_ADMINUSERNAME: ${dbadminuser}
# ME_CONFIG_MONGODB_ADMINPASSWORD: ${dbadminpass}
# ME_CONFIG_MONGODB_SERVER: ${dbhost}
# ME_CONFIG_BASICAUTH_USERNAME: ${webadminuser}
# ME_CONFIG_BASICAUTH_PASSWORD: ${webadminpass}
# ports:
# - 3101:8081
# labels:
# - 'traefik.enable=true'
# - 'traefik.http.routers.sms-portal-mongoexpress.rule=Host(`mongoexpress.sms-portal.poyner.page`)'
# - 'traefik.http.routers.sms-portal-mongoexpress.entrypoints=websecure'
# - 'traefik.http.routers.sms-portal-mongoexpress.tls.certresolver=le'
sms-portal-frontend:
image: node:alpine3.12
container_name: sms-portal-frontend
volumes:
- /home/blender/docker/sms-portal/frontend:/app
ports:
- 3102:3000
command: "yarn start"
working_dir: /app
environment:
REACT_APP_APIURL: ${apiurl}
labels:
- "traefik.enable=true"
- "traefik.http.routers.sms-portal.rule=Host(`sms-portal.poyner.page`)"
- "traefik.http.routers.sms-portal.entrypoints=websecure"
- "traefik.http.routers.sms-portal.tls.certresolver=myresolver"
# sms-portal-db:
# image: mongo
# restart: always
# container_name: sms-portal-db
# environment:
# MONGO_INITDB_DATABASE: ${MONGO_INITDB_DATABASE}
# MONGO_INITDB_ROOT_USERNAME: ${dbadminuser}
# MONGO_INITDB_ROOT_PASSWORD: ${dbadminpass}
# dbuser: ${dbuser}
# dbpass: ${dbpass}
# dbname: ${dbname}
# volumes:
# - /home/blender/projects/sms-portal/db:/data/db
# - /home/blender/projects/sms-portal/mongo-init.sh:/docker-entrypoint-initdb.d/mongo-init.sh:ro
networks:
default:
external:
name: popnet
name: swarmnet-public

101
frontend/package-lock.json generated

@ -5,6 +5,7 @@
"requires": true,
"packages": {
"": {
"name": "app",
"version": "0.1.0",
"dependencies": {
"@material-ui/core": "^4.11.2",
@ -12,8 +13,11 @@
"@testing-library/jest-dom": "^5.11.4",
"@testing-library/react": "^11.1.0",
"@testing-library/user-event": "^12.1.10",
"axios": "^0.21.1",
"notistack": "^1.0.3",
"react": "^17.0.1",
"react-dom": "^17.0.1",
"react-number-format": "^4.4.4",
"react-scripts": "4.0.1",
"web-vitals": "^0.2.4"
}
@ -1978,7 +1982,6 @@
"jest-resolve": "^26.6.2",
"jest-util": "^26.6.2",
"jest-worker": "^26.6.2",
"node-notifier": "^8.0.0",
"slash": "^3.0.0",
"source-map": "^0.6.0",
"string-length": "^4.0.1",
@ -4176,6 +4179,14 @@
"node": ">=4"
}
},
"node_modules/axios": {
"version": "0.21.4",
"resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz",
"integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==",
"dependencies": {
"follow-redirects": "^1.14.0"
}
},
"node_modules/axobject-query": {
"version": "2.2.0",
"resolved": "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.2.0.tgz",
@ -5773,7 +5784,6 @@
"anymatch": "^2.0.0",
"async-each": "^1.0.1",
"braces": "^2.3.2",
"fsevents": "^1.2.7",
"glob-parent": "^3.1.0",
"inherits": "^2.0.3",
"is-binary-path": "^1.0.0",
@ -7838,8 +7848,7 @@
"esprima": "^4.0.1",
"estraverse": "^4.2.0",
"esutils": "^2.0.2",
"optionator": "^0.8.1",
"source-map": "~0.6.1"
"optionator": "^0.8.1"
},
"bin": {
"escodegen": "bin/escodegen.js",
@ -9255,18 +9264,22 @@
}
},
"node_modules/follow-redirects": {
"version": "1.13.0",
"resolved": "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.13.0.tgz",
"integrity": "sha512-aq6gF1BEKje4a9i9+5jimNFIpq4Q1WiwBToeRK5NvZBd/TRsmW8BsJfOEGkr76TbOyPVD3OVDN910EcUNtRYEA==",
"version": "1.14.5",
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.5.tgz",
"integrity": "sha512-wtphSXy7d4/OR+MvIFbCVBDzZ5520qV8XfPklSN5QtxuMUJZ+b0Wnst1e1lCDocfzuCkHqj8k0FpZqO+UIaKNA==",
"funding": [
{
"type": "individual",
"url": "https://github.com/sponsors/RubenVerborgh"
}
],
"license": "MIT",
"engines": {
"node": ">=4.0"
},
"peerDependenciesMeta": {
"debug": {
"optional": true
}
}
},
"node_modules/for-in": {
@ -9490,7 +9503,6 @@
"integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
"license": "MIT",
"dependencies": {
"graceful-fs": "^4.1.6",
"universalify": "^2.0.0"
},
"optionalDependencies": {
@ -11365,7 +11377,6 @@
"@types/node": "*",
"anymatch": "^3.0.3",
"fb-watchman": "^2.0.0",
"fsevents": "^2.1.2",
"graceful-fs": "^4.2.4",
"jest-regex-util": "^26.0.0",
"jest-serializer": "^26.6.2",
@ -11970,9 +11981,6 @@
"resolved": "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz",
"integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
"license": "MIT",
"dependencies": {
"graceful-fs": "^4.1.6"
},
"optionalDependencies": {
"graceful-fs": "^4.1.6"
}
@ -13165,6 +13173,24 @@
"node": ">=4"
}
},
"node_modules/notistack": {
"version": "1.0.10",
"resolved": "https://registry.npmjs.org/notistack/-/notistack-1.0.10.tgz",
"integrity": "sha512-z0y4jJaVtOoH3kc3GtNUlhNTY+5LE04QDeLVujX3VPhhzg67zw055mZjrBF+nzpv3V9aiPNph1EgRU4+t8kQTQ==",
"dependencies": {
"clsx": "^1.1.0",
"hoist-non-react-statics": "^3.3.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/notistack"
},
"peerDependencies": {
"@material-ui/core": "^4.0.0",
"react": "^16.8.0 || ^17.0.0",
"react-dom": "^16.8.0 || ^17.0.0"
}
},
"node_modules/npm-run-path": {
"version": "2.0.2",
"resolved": "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz",
@ -15693,6 +15719,18 @@
"integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==",
"license": "MIT"
},
"node_modules/react-number-format": {
"version": "4.8.0",
"resolved": "https://registry.npmjs.org/react-number-format/-/react-number-format-4.8.0.tgz",
"integrity": "sha512-oGGiQpqzvKTR5PD2/AJbyUsci8jyupaoKxpuSPevjpWHMhFkUtmo390t+EIpJOgnuAHZogLu6PHiXgb/OXETKA==",
"dependencies": {
"prop-types": "^15.7.2"
},
"peerDependencies": {
"react": "^0.14 || ^15.0.0-0 || ^16.0.0-0 || ^17.0.0-0",
"react-dom": "^0.14 || ^15.0.0-0 || ^16.0.0-0 || ^17.0.0-0"
}
},
"node_modules/react-refresh": {
"version": "0.8.3",
"resolved": "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.8.3.tgz",
@ -15736,7 +15774,6 @@
"eslint-webpack-plugin": "^2.1.0",
"file-loader": "6.1.1",
"fs-extra": "^9.0.1",
"fsevents": "^2.1.3",
"html-webpack-plugin": "4.5.0",
"identity-obj-proxy": "3.0.0",
"jest": "26.6.0",
@ -19569,10 +19606,8 @@
"integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==",
"license": "MIT",
"dependencies": {
"chokidar": "^3.4.1",
"graceful-fs": "^4.1.2",
"neo-async": "^2.5.0",
"watchpack-chokidar2": "^2.0.1"
"neo-async": "^2.5.0"
},
"optionalDependencies": {
"chokidar": "^3.4.1",
@ -19635,7 +19670,6 @@
"dependencies": {
"anymatch": "~3.1.1",
"braces": "~3.0.2",
"fsevents": "~2.1.2",
"glob-parent": "~5.1.0",
"is-binary-path": "~2.1.0",
"is-glob": "~4.0.1",
@ -23774,6 +23808,14 @@
"resolved": "https://registry.yarnpkg.com/axe-core/-/axe-core-4.1.1.tgz",
"integrity": "sha512-5Kgy8Cz6LPC9DJcNb3yjAXTu3XihQgEdnIg50c//zOC/MyLP0Clg+Y8Sh9ZjjnvBrDZU4DgXS9C3T9r4/scGZQ=="
},
"axios": {
"version": "0.21.4",
"resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz",
"integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==",
"requires": {
"follow-redirects": "^1.14.0"
}
},
"axobject-query": {
"version": "2.2.0",
"resolved": "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.2.0.tgz",
@ -27525,9 +27567,9 @@
}
},
"follow-redirects": {
"version": "1.13.0",
"resolved": "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.13.0.tgz",
"integrity": "sha512-aq6gF1BEKje4a9i9+5jimNFIpq4Q1WiwBToeRK5NvZBd/TRsmW8BsJfOEGkr76TbOyPVD3OVDN910EcUNtRYEA=="
"version": "1.14.5",
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.5.tgz",
"integrity": "sha512-wtphSXy7d4/OR+MvIFbCVBDzZ5520qV8XfPklSN5QtxuMUJZ+b0Wnst1e1lCDocfzuCkHqj8k0FpZqO+UIaKNA=="
},
"for-in": {
"version": "1.0.2",
@ -30315,6 +30357,15 @@
"sort-keys": "^1.0.0"
}
},
"notistack": {
"version": "1.0.10",
"resolved": "https://registry.npmjs.org/notistack/-/notistack-1.0.10.tgz",
"integrity": "sha512-z0y4jJaVtOoH3kc3GtNUlhNTY+5LE04QDeLVujX3VPhhzg67zw055mZjrBF+nzpv3V9aiPNph1EgRU4+t8kQTQ==",
"requires": {
"clsx": "^1.1.0",
"hoist-non-react-statics": "^3.3.0"
}
},
"npm-run-path": {
"version": "2.0.2",
"resolved": "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz",
@ -32136,6 +32187,14 @@
"resolved": "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz",
"integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
},
"react-number-format": {
"version": "4.8.0",
"resolved": "https://registry.npmjs.org/react-number-format/-/react-number-format-4.8.0.tgz",
"integrity": "sha512-oGGiQpqzvKTR5PD2/AJbyUsci8jyupaoKxpuSPevjpWHMhFkUtmo390t+EIpJOgnuAHZogLu6PHiXgb/OXETKA==",
"requires": {
"prop-types": "^15.7.2"
}
},
"react-refresh": {
"version": "0.8.3",
"resolved": "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.8.3.tgz",

24
frontend/src/Home.js

@ -75,19 +75,17 @@ const Home = () => {
</Grid>
<Grid item xs={12}>
<Paper className={classes.paper}>
<SimpleTabs
classes={classes}
sms={sms}
setSms={setSms}
sub={sub}
setSub={setSub}
contacts={contacts}
setContacts={setContacts}
sentmsg={sentmsg}
setSentmsg={setSentmsg}
/>
</Paper>
<SimpleTabs
classes={classes}
sms={sms}
setSms={setSms}
sub={sub}
setSub={setSub}
contacts={contacts}
setContacts={setContacts}
sentmsg={sentmsg}
setSentmsg={setSentmsg}
/>
</Grid>
</Grid>
</div>

28
frontend/src/components/APIHelper.js

@ -1,4 +1,4 @@
import axios from "axios";
import axios from 'axios';
const API_URL = `${process.env.REACT_APP_APIURL}`;
@ -7,7 +7,7 @@ const showErrors = (err) => {
const error = {
success: false,
message: err.response.data.message,
failure: "server says no",
failure: 'server says no',
};
return error;
@ -15,7 +15,7 @@ const showErrors = (err) => {
const error = {
success: false,
message: err.request,
failure: "client says no",
failure: 'client says no',
};
return error;
@ -47,7 +47,7 @@ export const userRegister = async (data) => {
export const userSecrets = async (data) => {
try {
let token = localStorage.getItem("jwt");
let token = localStorage.getItem('jwt');
const secretResponse = await axios.post(
`${API_URL}/api/msgauth/login`,
data,
@ -64,7 +64,7 @@ export const userSecrets = async (data) => {
export const createSub = async () => {
try {
let token = localStorage.getItem("jwt");
let token = localStorage.getItem('jwt');
const subcreateResponse = await axios.get(`${API_URL}/api/sub/new`, {
headers: { authtoken: token },
});
@ -77,7 +77,7 @@ export const createSub = async () => {
export const getSubLocal = async () => {
try {
let token = localStorage.getItem("jwt");
let token = localStorage.getItem('jwt');
const subLocalResponse = await axios.get(`${API_URL}/api/sub/getlocal`, {
headers: { authtoken: token },
});
@ -90,7 +90,7 @@ export const getSubLocal = async () => {
export const getSubRemote = async () => {
try {
let token = localStorage.getItem("jwt");
let token = localStorage.getItem('jwt');
const subRemoteResponse = await axios.get(`${API_URL}/api/sub/getremote`, {
headers: { authtoken: token },
});
@ -103,7 +103,7 @@ export const getSubRemote = async () => {
export const getlocalContacts = async () => {
try {
let token = localStorage.getItem("jwt");
let token = localStorage.getItem('jwt');
const contactLocalResponse = await axios.get(
`${API_URL}/api/bnum/getlocal`,
{
@ -119,7 +119,7 @@ export const getlocalContacts = async () => {
export const getremoteContacts = async () => {
try {
let token = localStorage.getItem("jwt");
let token = localStorage.getItem('jwt');
const contactRemoteResponse = await axios.get(
`${API_URL}/api/bnum/getremote`,
{
@ -135,7 +135,7 @@ export const getremoteContacts = async () => {
export const delContact = async (contact) => {
try {
let token = localStorage.getItem("jwt");
let token = localStorage.getItem('jwt');
const data = {
number: contact,
@ -157,7 +157,7 @@ export const delContact = async (contact) => {
export const addContact = async (contact) => {
try {
let token = localStorage.getItem("jwt");
let token = localStorage.getItem('jwt');
const addNumResponse = await axios.post(
`${API_URL}/api/bnum/addlocal`,
contact,
@ -174,7 +174,7 @@ export const addContact = async (contact) => {
export const registerContacts = async () => {
try {
let token = localStorage.getItem("jwt");
let token = localStorage.getItem('jwt');
const registerResponse = await axios.get(`${API_URL}/api/bnum/register`, {
headers: { authtoken: token },
});
@ -187,7 +187,7 @@ export const registerContacts = async () => {
export const sendMessage = async (data) => {
try {
let token = localStorage.getItem("jwt");
let token = localStorage.getItem('jwt');
const registerResponse = await axios.post(`${API_URL}/api/sms/send`, data, {
headers: { authtoken: token },
});
@ -200,7 +200,7 @@ export const sendMessage = async (data) => {
export const getSentMsgs = async () => {
try {
let token = localStorage.getItem("jwt");
let token = localStorage.getItem('jwt');
const sentmsgResponse = await axios.get(`${API_URL}/api/sms/getmsgs`, {
headers: { authtoken: token },
});

2
frontend/src/components/Appbar.js

@ -19,7 +19,7 @@ export default function ButtonAppBar(props) {
<AppBar position="static">
<Toolbar>
<Typography variant="h6" className={classes.title}>
Messager
smsMessenger
</Typography>
<Button
color="inherit"

45
frontend/yarn.lock

@ -2564,11 +2564,11 @@ axe-core@^4.0.2:
integrity sha512-5Kgy8Cz6LPC9DJcNb3yjAXTu3XihQgEdnIg50c//zOC/MyLP0Clg+Y8Sh9ZjjnvBrDZU4DgXS9C3T9r4/scGZQ==
axios@^0.21.1:
version "0.21.1"
resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.1.tgz#22563481962f4d6bde9a76d516ef0e5d3c09b2b8"
integrity sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==
version "0.21.4"
resolved "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz"
integrity sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==
dependencies:
follow-redirects "^1.10.0"
follow-redirects "^1.14.0"
axobject-query@^2.2.0:
version "2.2.0"
@ -5131,15 +5131,10 @@ flush-write-stream@^1.0.0:
inherits "^2.0.3"
readable-stream "^2.3.6"
follow-redirects@^1.0.0:
version "1.13.0"
resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.13.0.tgz"
integrity sha512-aq6gF1BEKje4a9i9+5jimNFIpq4Q1WiwBToeRK5NvZBd/TRsmW8BsJfOEGkr76TbOyPVD3OVDN910EcUNtRYEA==
follow-redirects@^1.10.0:
version "1.13.1"
resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.13.1.tgz#5f69b813376cee4fd0474a3aba835df04ab763b7"
integrity sha512-SSG5xmZh1mkPGyKzjZP8zLjltIfpW32Y5QpdNJyjcfGxK3qo3NDDkZOZSFiGn1A6SclQxY9GzEwAHQ3dmYRWpg==
follow-redirects@^1.0.0, follow-redirects@^1.14.0:
version "1.14.5"
resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.5.tgz"
integrity sha512-wtphSXy7d4/OR+MvIFbCVBDzZ5520qV8XfPklSN5QtxuMUJZ+b0Wnst1e1lCDocfzuCkHqj8k0FpZqO+UIaKNA==
for-in@^1.0.2:
version "1.0.2"
@ -5257,9 +5252,9 @@ fsevents@^1.2.7:
nan "^2.12.1"
fsevents@^2.1.2, fsevents@^2.1.3:
version "2.3.1"
resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.1.tgz#b209ab14c61012636c8863507edf7fb68cc54e9f"
integrity sha512-YR47Eg4hChJGAB1O3yEAOkGO+rlzutoICGqGo9EZ4lKWokzZRSyIW1QmTzqjtw8MJdj9srP869CuWw/hyzSiBw==
version "2.3.2"
resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a"
integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==
fsevents@~2.1.2:
version "2.1.3"
@ -7493,9 +7488,9 @@ multicast-dns@^6.0.1:
thunky "^1.0.2"
nan@^2.12.1:
version "2.14.2"
resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.2.tgz#f5376400695168f4cc694ac9393d0c9585eeea19"
integrity sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==
version "2.15.0"
resolved "https://registry.yarnpkg.com/nan/-/nan-2.15.0.tgz#3f34a473ff18e15c1b5626b62903b5ad6e665fee"
integrity sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==
nanoid@^3.1.18:
version "3.1.18"
@ -7663,9 +7658,9 @@ normalize-url@^3.0.0:
integrity sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==
notistack@^1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/notistack/-/notistack-1.0.3.tgz#ce86a5e8c2b192d713d655c0778347beb3ebead3"
integrity sha512-bRGF/eg2qNQ8BwagPLkHiqrz+W00PYtGY5Xl33I0Of1BTm7arksZO1JxssPTlti0qw127CxuWxm637ipn0eZ9g==
version "1.0.10"
resolved "https://registry.npmjs.org/notistack/-/notistack-1.0.10.tgz"
integrity sha512-z0y4jJaVtOoH3kc3GtNUlhNTY+5LE04QDeLVujX3VPhhzg67zw055mZjrBF+nzpv3V9aiPNph1EgRU4+t8kQTQ==
dependencies:
clsx "^1.1.0"
hoist-non-react-statics "^3.3.0"
@ -9190,9 +9185,9 @@ react-is@^17.0.1:
integrity sha512-NAnt2iGDXohE5LI7uBnLnqvLQMtzhkiAOLXTmv+qnF9Ky7xAPcX8Up/xWIhxvLVGJvuLiNc4xQLtuqDRzb4fSA==
react-number-format@^4.4.4:
version "4.4.4"
resolved "https://registry.yarnpkg.com/react-number-format/-/react-number-format-4.4.4.tgz#2a7f50be404f990ec15855cc6babfeae1be16351"
integrity sha512-/MuF1GOs1Z0xBaQie8+TTqCxUTT8xxjc6RqIFVWcWB6FM8GNIenSh2ayzN6Y1J2WMcXUDVwMdDXjweHKVjXm/w==
version "4.8.0"
resolved "https://registry.npmjs.org/react-number-format/-/react-number-format-4.8.0.tgz"
integrity sha512-oGGiQpqzvKTR5PD2/AJbyUsci8jyupaoKxpuSPevjpWHMhFkUtmo390t+EIpJOgnuAHZogLu6PHiXgb/OXETKA==
dependencies:
prop-types "^15.7.2"

Loading…
Cancel
Save