UNTESTED: Updated all dependencies
This commit is contained in:
+33
-24
@@ -74,20 +74,19 @@ const question = (prompt, def = null) => {
|
|||||||
|
|
||||||
//generate the files
|
//generate the files
|
||||||
const ymlfile = `
|
const ymlfile = `
|
||||||
version: '3.8'
|
|
||||||
services:
|
services:
|
||||||
${appName}:
|
${appName}:
|
||||||
build:
|
build:
|
||||||
context: .
|
context: .
|
||||||
ports:
|
ports:
|
||||||
- "${appPort}"
|
- ${appPort}
|
||||||
labels:
|
labels:
|
||||||
- "traefik.enable=true"
|
- traefik.enable=true
|
||||||
- "traefik.http.routers.${appName}router.rule=Host(\`${appWebAddress}\`)"
|
- traefik.http.routers.${appName}router.rule=Host(\`${appWebAddress}\`)
|
||||||
- "traefik.http.routers.${appName}router.entrypoints=websecure"
|
- traefik.http.routers.${appName}router.entrypoints=websecure
|
||||||
- "traefik.http.routers.${appName}router.tls.certresolver=myresolver"
|
- traefik.http.routers.${appName}router.tls.certresolver=myresolver
|
||||||
- "traefik.http.routers.${appName}router.service=${appName}service@docker"
|
- traefik.http.routers.${appName}router.service=${appName}service@docker
|
||||||
- "traefik.http.services.${appName}service.loadbalancer.server.port=${appPort}"
|
- traefik.http.services.${appName}service.loadbalancer.server.port=${appPort}
|
||||||
environment:
|
environment:
|
||||||
- WEB_PROTOCOL=${appWebProtocol}
|
- WEB_PROTOCOL=${appWebProtocol}
|
||||||
- WEB_ORIGIN=${appWebOrigin}
|
- WEB_ORIGIN=${appWebOrigin}
|
||||||
@@ -109,10 +108,14 @@ services:
|
|||||||
- ADMIN_DEFAULT_PASSWORD=${appDefaultPass}
|
- ADMIN_DEFAULT_PASSWORD=${appDefaultPass}
|
||||||
- SECRET_ACCESS=${appSecretAccess}
|
- SECRET_ACCESS=${appSecretAccess}
|
||||||
- SECRET_REFRESH=${appSecretRefresh}
|
- SECRET_REFRESH=${appSecretRefresh}
|
||||||
|
volumes:
|
||||||
|
- /etc/timezone:/etc/timezone:ro
|
||||||
|
- /etc/localtime:/etc/localtime:ro
|
||||||
networks:
|
networks:
|
||||||
- app-network${ appDBHost != 'database' ? '' : `
|
- app-network${ appDBHost != 'database' ? '' : `
|
||||||
depends_on:
|
depends_on:
|
||||||
- database
|
- database
|
||||||
|
|
||||||
database:
|
database:
|
||||||
image: mariadb:latest
|
image: mariadb:latest
|
||||||
environment:
|
environment:
|
||||||
@@ -125,35 +128,41 @@ services:
|
|||||||
- app-network
|
- app-network
|
||||||
volumes:
|
volumes:
|
||||||
- ./mysql:/var/lib/mysql
|
- ./mysql:/var/lib/mysql
|
||||||
- ./startup.sql:/docker-entrypoint-initdb.d/startup.sql:ro`}
|
- ./startup.sql:/docker-entrypoint-initdb.d/startup.sql:ro
|
||||||
|
- /etc/timezone:/etc/timezone:ro
|
||||||
|
- /etc/localtime:/etc/localtime:ro`}
|
||||||
|
|
||||||
traefik_${appName}:
|
traefik_${appName}:
|
||||||
container_name: ${appName}_traefik
|
container_name: ${appName}_traefik
|
||||||
image: "traefik:v2.10"
|
image: traefik:latest
|
||||||
container_name: "traefik"
|
container_name: traefik
|
||||||
command:
|
command:
|
||||||
- "--log.level=ERROR"
|
- --log.level=ERROR
|
||||||
- "--api.insecure=false"
|
- --api.insecure=false
|
||||||
- "--providers.docker=true"
|
- --providers.docker=true
|
||||||
- "--providers.docker.exposedbydefault=false"
|
- --providers.docker.exposedbydefault=false
|
||||||
- "--entrypoints.websecure.address=:443"
|
- --entrypoints.websecure.address=:443
|
||||||
- "--certificatesresolvers.myresolver.acme.tlschallenge=true"
|
- --certificatesresolvers.myresolver.acme.tlschallenge=true
|
||||||
- "--certificatesresolvers.myresolver.acme.email=${supportEmail}"
|
- --certificatesresolvers.myresolver.acme.email=${supportEmail}
|
||||||
- "--certificatesresolvers.myresolver.acme.storage=/letsencrypt/acme.json"
|
- --certificatesresolvers.myresolver.acme.storage=/letsencrypt/acme.json
|
||||||
ports:
|
ports:
|
||||||
- "80:80"
|
- 80:80
|
||||||
- "443:443"
|
- 443:443
|
||||||
volumes:
|
volumes:
|
||||||
- "./letsencrypt:/letsencrypt"
|
- ./letsencrypt:/letsencrypt
|
||||||
- "/var/run/docker.sock:/var/run/docker.sock:ro"
|
- /var/run/docker.sock:/var/run/docker.sock:ro
|
||||||
|
- /etc/timezone:/etc/timezone:ro
|
||||||
|
- /etc/localtime:/etc/localtime:ro
|
||||||
networks:
|
networks:
|
||||||
- app-network
|
- app-network
|
||||||
|
|
||||||
networks:
|
networks:
|
||||||
app-network:
|
app-network:
|
||||||
driver: bridge
|
driver: bridge
|
||||||
`;
|
`;
|
||||||
|
|
||||||
const dockerfile = `
|
const dockerfile = `
|
||||||
FROM node:21-bookworm-slim
|
FROM node:22-bookworm-slim
|
||||||
WORKDIR "/app"
|
WORKDIR "/app"
|
||||||
COPY package*.json ./
|
COPY package*.json ./
|
||||||
RUN npm install --production
|
RUN npm install --production
|
||||||
|
|||||||
Generated
+76
-2609
File diff suppressed because it is too large
Load Diff
+1
-2
@@ -27,9 +27,8 @@
|
|||||||
"jsonwebtoken": "^9.0.2",
|
"jsonwebtoken": "^9.0.2",
|
||||||
"mariadb": "^3.3.0",
|
"mariadb": "^3.3.0",
|
||||||
"node-cron": "^3.0.3",
|
"node-cron": "^3.0.3",
|
||||||
"node-fetch": "^2.7.0",
|
"node-fetch": "^3.3.2",
|
||||||
"nodemailer": "^6.9.13",
|
"nodemailer": "^6.9.13",
|
||||||
"npm": "^10.5.2",
|
|
||||||
"sequelize": "^6.37.3"
|
"sequelize": "^6.37.3"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
const { pendingSignups, accounts } = require('../database/models');
|
const { pendingSignups, accounts } = require('../database/models');
|
||||||
const fetch = require('node-fetch');
|
const fetch = (...args) => import('node-fetch').then(({default: fetch}) => fetch(...args));
|
||||||
const jwt = require('jsonwebtoken');
|
const jwt = require('jsonwebtoken');
|
||||||
|
|
||||||
//auth/validation
|
//auth/validation
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import React, { useState, useEffect, createContext } from 'react';
|
import React, { useState, useEffect, createContext } from 'react';
|
||||||
import decode from 'jwt-decode';
|
import { jwtDecode } from 'jwt-decode';
|
||||||
|
|
||||||
export const TokenContext = createContext();
|
export const TokenContext = createContext();
|
||||||
|
|
||||||
@@ -31,7 +31,7 @@ const TokenProvider = props => {
|
|||||||
let bearer = accessToken;
|
let bearer = accessToken;
|
||||||
|
|
||||||
//if expired (10 minutes, normally)
|
//if expired (10 minutes, normally)
|
||||||
const expired = new Date(decode(accessToken).exp) < Date.now() / 1000;
|
const expired = new Date(jwtDecode(accessToken).exp) < Date.now() / 1000;
|
||||||
|
|
||||||
if (expired) {
|
if (expired) {
|
||||||
//BUGFIX: if logging out, just skip over the refresh token
|
//BUGFIX: if logging out, just skip over the refresh token
|
||||||
@@ -86,7 +86,7 @@ const TokenProvider = props => {
|
|||||||
let bearer = accessToken;
|
let bearer = accessToken;
|
||||||
|
|
||||||
//if expired (10 minutes, normally)
|
//if expired (10 minutes, normally)
|
||||||
const expired = new Date(decode(accessToken).exp) < Date.now() / 1000;
|
const expired = new Date(jwtDecode(accessToken).exp) < Date.now() / 1000;
|
||||||
|
|
||||||
if (expired) {
|
if (expired) {
|
||||||
//ping the auth server for a new token
|
//ping the auth server for a new token
|
||||||
@@ -119,7 +119,7 @@ const TokenProvider = props => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<TokenContext.Provider value={{ accessToken, setAccessToken, tokenFetch, tokenCallback, getPayload: () => decode(accessToken) }}>
|
<TokenContext.Provider value={{ accessToken, setAccessToken, tokenFetch, tokenCallback, getPayload: () => jwtDecode(accessToken) }}>
|
||||||
{props.children}
|
{props.children}
|
||||||
</TokenContext.Provider>
|
</TokenContext.Provider>
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user