diff --git a/configs/tokenskey.json b/configs/tokenskey.json new file mode 100644 index 0000000000000000000000000000000000000000..005f9dc4c2eb6aa22dc3c213bd2591e846f1bc98 --- /dev/null +++ b/configs/tokenskey.json @@ -0,0 +1,3 @@ +{ + "Key": "IZOEJFgX0z/Bfx403KdRjfA6FTMcJiOtUb9a4vMWhlU=" +} \ No newline at end of file diff --git a/docker-compose.old.yml b/docker-compose.old.yml new file mode 100644 index 0000000000000000000000000000000000000000..7d966d379a2f0381d8de14b1c987e2c2117a8a62 --- /dev/null +++ b/docker-compose.old.yml @@ -0,0 +1,32 @@ +version: '3.7' +services: + nginx: + image: nginx:1.16 + restart: unless-stopped + volumes: + - ./nginx/site.conf:/etc/nginx/conf.d/default.conf + - ./nginx/nginx.conf:/etc/nginx/nginx.conf + command: ["nginx", "-g", "daemon off;"] + ports: + - 8081:8080 + networks: + backoffice: + depends_on: + - front + links: + - front + + front: + image: bayesimpact/react-base + restart: unless-stopped + volumes: + - ./:/usr/app + working_dir: /usr/app + ports: + - 3000:3000 + networks: + backoffice: + +networks: + backoffice: + \ No newline at end of file diff --git a/docker-compose.pro.yml b/docker-compose.pro.yml deleted file mode 100644 index b69125f9f54d54aa3da8f114bdaa0733e3d6f357..0000000000000000000000000000000000000000 --- a/docker-compose.pro.yml +++ /dev/null @@ -1,9 +0,0 @@ -version: '3.7' -services: - nginx: - image: backoffice #TODO: replace with forge image tag - build: - context: . - restart: unless-stopped - ports: - - 8080:80 diff --git a/docker-compose.yml b/docker-compose.yml index 7d966d379a2f0381d8de14b1c987e2c2117a8a62..acf1773f51ce1bd176a32f888f0cad06b07ae04b 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,32 +1,64 @@ version: '3.7' services: nginx: - image: nginx:1.16 + image: test restart: unless-stopped + ports: + - 443:443 + networks: + backoffice: volumes: - ./nginx/site.conf:/etc/nginx/conf.d/default.conf - ./nginx/nginx.conf:/etc/nginx/nginx.conf - command: ["nginx", "-g", "daemon off;"] + - ./cert.pem:/etc/nginx/cert.pem + - ./key.pem:/etc/nginx/key.pem + + database: + image: mysql:5 ports: - - 8081:8080 + - 3306:3306 networks: backoffice: - depends_on: - - front - links: - - front + environment: + MYSQL_ROOT_PASSWORD: ${DATABASE_PASSWORD} + MYSQL_DATABASE: ${DATABASE_NAME} + healthcheck: + test: mysqladmin ping -h 127.0.0.1 -u root --password=$$MYSQL_ROOT_PASSWORD + interval: 5s + timeout: 10s + retries: 60 - front: - image: bayesimpact/react-base + backend: + image: back + networks: + backoffice: + depends_on: + database: + condition: service_healthy restart: unless-stopped volumes: - - ./:/usr/app - working_dir: /usr/app + - /etc/localtime:/etc/localtime:ro + - ./configs:/app/configs + - ./letsencrypt_cache:/app/letsencrypt_cache + - ./data:/app/data ports: - - 3000:3000 - networks: - backoffice: + - ${HTTPS_PORT}:${HTTPS_PORT} + - 8090:8090 + environment: + - HOSTNAME=${HOSTNAME} + - HTTPS_PORT=${HTTPS_PORT} + - ADMIN_ROLE=${ADMIN_ROLE} + - REDIRECT_URL=${REDIRECT_URL} + - CLIENT_ID=${CLIENT_ID} + - CLIENT_SECRET=${CLIENT_SECRET} + - AUTH_URL=${AUTH_URL} + - TOKEN_URL=${TOKEN_URL} + - USERINFO_URL=${USERINFO_URL} + - DEBUG_MODE=${DEBUG_MODE} + - DATABASE_USER=${DATABASE_USER} + - DATABASE_NAME=${DATABASE_NAME} + - DATABASE_PASSWORD=${DATABASE_PASSWORD} + - DATABASE_HOST=database networks: - backoffice: - \ No newline at end of file + backoffice: diff --git a/nginx/nginx.conf b/nginx/nginx.conf index bbb55f1abbc00ea4cfb5b8f3726e026f6bdade3e..af0a4a69be83e562124788fe33855439154811aa 100644 --- a/nginx/nginx.conf +++ b/nginx/nginx.conf @@ -1,4 +1,4 @@ -worker_processes 1; +worker_processes auto; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; @@ -20,6 +20,7 @@ http { #tcp_nopush on; keepalive_timeout 65; + keepalive_requests 65; # Gzip conf gzip on; diff --git a/nginx/site.conf b/nginx/site.conf index 94068a9a83bf29b7c574da5ff62ccb1e93b81bd8..e6d27c771cb85e336cc864e81228305a257148c7 100644 --- a/nginx/site.conf +++ b/nginx/site.conf @@ -1,15 +1,26 @@ server { - listen 8080; - server_name localhost; + listen 443 ssl; + server_name localhost; + ssl_certificate /etc/nginx/cert.pem; + ssl_certificate_key /etc/nginx/key.pem; + ssl_protocols TLSv1 TLSv1.1 TLSv1.2; + ssl_ciphers HIGH:!aNULL:!MD5; location / { - proxy_pass http://front:3000; - proxy_set_header Upgrade $http_upgrade; - proxy_set_header Connection $http_connection; - proxy_set_header Host $host; - proxy_set_header X-Forwarded-Proto $scheme; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - add_header Access-Control-Allow-Origin *; + root /usr/share/nginx/html; + index index.html index.htm; + try_files $uri $uri/ /index.html =404; + } + location /api { + proxy_pass https://backend:1443/api; + } + location /OAuth2Login { + proxy_pass https://backend:1443/OAuth2Login; + } + location /OAuth2Callback { + proxy_pass https://backend:1443/OAuth2Callback; + } + location /Logout { + proxy_pass https://backend:1443/Logout; } } diff --git a/src/components/Layout/layout.module.scss b/src/components/Layout/layout.module.scss index 4b8d70d0c0c416688a4ea43c470811589c52aa1e..a67ace330c72728ec231cf94cc79708c18c15b14 100644 --- a/src/components/Layout/layout.module.scss +++ b/src/components/Layout/layout.module.scss @@ -14,7 +14,7 @@ height: 100vh; z-index: 1501; - @media screen and(max-width: $width-phone) { + @media screen and(max-width: $width-tablet) { width: 0; display: none; } @@ -35,7 +35,7 @@ box-shadow: 0px 5px 5px rgb(0 0 0 / 20%), 0px 3px 14px rgb(0 0 0 / 12%), 0px 8px 10px rgb(0 0 0 / 14%); background: $dark-light; - @media screen and(max-width: $width-phone) { + @media screen and(max-width: $width-tablet) { margin-left: 0; padding-bottom: $navbar-height; } diff --git a/src/components/Login/login.scss b/src/components/Login/login.scss index 8ce4f8b00b012ee570ef6fadb4bc406d63e57989..ee3b921580016004c02261c867ea1a3b9fc51900 100644 --- a/src/components/Login/login.scss +++ b/src/components/Login/login.scss @@ -5,5 +5,6 @@ min-height: 95vh; .container { margin: auto; + padding: 2rem; } } diff --git a/src/hooks/useAuth.ts b/src/hooks/useAuth.ts index aa4e1c1b1264799e29a4de3ad8bdff3a5dd99556..5033ce15bcea29d77a1e410c8f70ba7839ade792 100644 --- a/src/hooks/useAuth.ts +++ b/src/hooks/useAuth.ts @@ -3,7 +3,7 @@ import axios from 'axios' import { UserContext } from './userContext' import { useHistory } from 'react-router-dom' -const _apiUrl: string = 'https://localhost:1443/' +const _apiUrl: string = 'https://localhost:443/' export interface Auth { loginUser: () => Promise<void> @@ -18,7 +18,7 @@ export const useAuth = (): Auth => { //login user const loginUser = async (): Promise<void> => { try { - await axios.get(`${_apiUrl}OAuth2Login`) + await axios.get(`${_apiUrl}OAuth2Login`, { withCredentials: true }) await setUserContext() } catch (e) { setError(e) @@ -37,10 +37,11 @@ export const useAuth = (): Auth => { //set user in context and push them home const setUserContext = async (): Promise<void> => { try { - const { data } = await axios.get(`${_apiUrl}api/common/WhoAmI`) + const { data } = await axios.get(`${_apiUrl}api/common/WhoAmI`, { + withCredentials: true, + }) if (data && setUser) { setUser(data) - console.log('usertoContext', data) history.push('/editing') } } catch (e) { diff --git a/src/hooks/useFindUser.ts b/src/hooks/useFindUser.ts index 5a3c38eedb100f8bec0519f5895799fa229440fa..2d3ae84939351b8b64a9d19a34de65e241064609 100644 --- a/src/hooks/useFindUser.ts +++ b/src/hooks/useFindUser.ts @@ -5,7 +5,7 @@ import { User } from '../models/user.model' const useFindUser = () => { const [user, setUser] = useState<User | null>(null) const [isLoading, setLoading] = useState<boolean>(true) - const _apiUrl: string = 'https://localhost:1443/' + const _apiUrl: string = 'https://localhost:443/' useEffect(() => { async function findUser() { diff --git a/src/services/monthlyNews.service.ts b/src/services/monthlyNews.service.ts index 920018e7fd85a95c928eaa63520effaa817725a8..2185f2a010e2184d7f5de11d1396a09eeebc7917 100644 --- a/src/services/monthlyNews.service.ts +++ b/src/services/monthlyNews.service.ts @@ -5,7 +5,7 @@ import { toast } from 'react-toastify' export class MonthlyNewsService { private readonly _apiUrl: string constructor() { - this._apiUrl = 'https://localhost:1443/' + this._apiUrl = 'https://localhost:443/' } /** * Creates a quotation and header for selected month