From f46748167c8f5cd51afc999794cc25b08d6c10d7 Mon Sep 17 00:00:00 2001 From: Benjamin Sherriff Date: Thu, 19 Oct 2023 16:55:13 -0400 Subject: [PATCH] Updated axios request object, added minio --- service/.env.TEMPLATE | 6 ++++++ service/Cargo.toml | 1 + service/Makefile | 1 + service/docker-compose.yml | 27 +++++++++++++++++++++++---- service/src/auth/routes.rs | 4 ++++ ui/docker-compose.yml | 2 +- ui/src/api/auth.ts | 10 +++++----- ui/src/api/index.ts | 30 +++++++++++++++++++++++------- ui/src/components/Topbar/index.tsx | 2 +- 9 files changed, 65 insertions(+), 18 deletions(-) diff --git a/service/.env.TEMPLATE b/service/.env.TEMPLATE index 3d99b8d..78817a9 100644 --- a/service/.env.TEMPLATE +++ b/service/.env.TEMPLATE @@ -17,6 +17,12 @@ REFRESH_TOKEN_MAXAGE=30 REDIS_HOST=localhost REDIS_PORT=6379 +MINIO_ROOT_USER=siren +MINIO_ROOT_PASSWORD= +MINIO_HOST=localhost +MINIO_PORT=9000 +MINIO_PORT_INTERNAL=9001 + SERVICE_HOST=localhost SERVICE_PORT=5000 DATA_DIR_PATH= diff --git a/service/Cargo.toml b/service/Cargo.toml index bc51c7f..fc7dd6d 100644 --- a/service/Cargo.toml +++ b/service/Cargo.toml @@ -28,6 +28,7 @@ argon2 = "0.5.2" jsonwebtoken = "9.0.0" redis = { version = "0.23.3", features = ["tokio-comp", "connection-manager", "r2d2"] } base64 = "0.21.4" +rust-s3 = "0.33.0" [dependencies.tokio] version = "1.32.0" diff --git a/service/Makefile b/service/Makefile index c597f7a..ed6d42a 100644 --- a/service/Makefile +++ b/service/Makefile @@ -16,6 +16,7 @@ build: ## Build the docker image utils: ## Start the utils docker compose up -d db docker compose up -d redis + docker compose up -d minio up: ## Start the app docker compose up -d diff --git a/service/docker-compose.yml b/service/docker-compose.yml index 8495a82..1997cd7 100644 --- a/service/docker-compose.yml +++ b/service/docker-compose.yml @@ -1,5 +1,8 @@ version: '3.8' +x-env_file_personifi: &env + - .env + name: siren services: service: @@ -10,13 +13,14 @@ services: dockerfile: ./Dockerfile args: - VERSION=${SIREN_VERSION:-latest} - env_file: - - .env + env_file: *env environment: DATABASE_HOST: db DATABASE_PORT: 5432 REDIS_HOST: redis REDIS_PORT: 6379 + MINIO_HOST: minio + MINIO_PORT: 9000 SERVICE_HOST: service SERVICE_PORT: 5000 DATA_DIR_PATH: /data @@ -33,8 +37,7 @@ services: db: image: postgres:latest container_name: siren-db - env_file: - - .env + env_file: *env environment: POSTGRES_USER: ${DATABASE_USER} POSTGRES_PASSWORD: ${DATABASE_PASSWORD} @@ -55,10 +58,26 @@ services: networks: - backend restart: unless-stopped + minio: + image: minio/minio + container_name: siren-minio + environment: + MINIO_ROOT_USER: ${MINIO_ROOT_USER} + MINIO_ROOT_PASSWORD: ${MINIO_ROOT_PASSWORD} + volumes: + - minio:/data + ports: + - ${MINIO_PORT:-9000}:9000 + - ${MINIO_PORT_INTERNAL:-9001}:9001 + networks: + - backend + command: server --console-address ":9001" /data + restart: unless-stopped volumes: db: db_logs: + minio: networks: frontend: diff --git a/service/src/auth/routes.rs b/service/src/auth/routes.rs index 210c973..24480a8 100644 --- a/service/src/auth/routes.rs +++ b/service/src/auth/routes.rs @@ -98,11 +98,13 @@ async fn login(request: web::Json) -> HttpResponse { .path("/") .max_age(Duration::new(access_token_max_age * 60, 0)) .http_only(true) + .secure(true) .finish(); let refresh_cookie = Cookie::build("refresh_token", refresh_token_details.token.clone().unwrap()) .path("/") .max_age(Duration::new(refresh_token_max_age * 60, 0)) .http_only(true) + .secure(true) .finish(); let logged_in_cookie = Cookie::build("logged_in", "true") .path("/") @@ -210,6 +212,7 @@ async fn refresh(req: HttpRequest) -> HttpResponse { .path("/") .max_age(Duration::new(access_token_max_age * 60, 0)) .http_only(true) + .secure(true) .finish(); let logged_in_cookie = Cookie::build("logged_in", "true") .path("/") @@ -254,6 +257,7 @@ async fn refresh(req: HttpRequest) -> HttpResponse { .path("/") .max_age(Duration::new(refresh_token_max_age * 60, 0)) .http_only(true) + .secure(true) .finish(); HttpResponse::Ok() diff --git a/ui/docker-compose.yml b/ui/docker-compose.yml index 7e5f30e..b95adaf 100644 --- a/ui/docker-compose.yml +++ b/ui/docker-compose.yml @@ -9,7 +9,7 @@ services: environment: - NODE_ENV=${NODE_ENV:-development} ports: - - ${UI_PORT:-8080}:3000 + - ${UI_PORT:-3000}:3000 build: context: ./ target: dev diff --git a/ui/src/api/auth.ts b/ui/src/api/auth.ts index ff25d94..9b460b0 100644 --- a/ui/src/api/auth.ts +++ b/ui/src/api/auth.ts @@ -2,7 +2,7 @@ import { getRequest, postRequest } from '.'; import { RegisterUser, ResponseAuth } from './auth.types'; export async function login(email: string, password: string): Promise { - const response = await postRequest('auth/login', { email, password }, { withCredentials: true }); + const response = await postRequest('auth/login', { email, password }); if (response?.status === 200) { return response.data as ResponseAuth; } else { @@ -11,7 +11,7 @@ export async function login(email: string, password: string): Promise { - const response = await postRequest('auth/register', user, { withCredentials: true }); + const response = await postRequest('auth/register', user); if (response?.status === 201) { return true; } else { @@ -20,11 +20,11 @@ export async function register(user: RegisterUser): Promise { } export async function logout() { - return await postRequest('auth/logout', {}, { withCredentials: true }); + return await postRequest('auth/logout', {}); } export async function refresh(refresh_token_rotation?: boolean): Promise { - const response = await getRequest('auth/refresh', { withCredentials: true, params: { refresh_token_rotation } }); + const response = await getRequest('auth/refresh', { params: { refresh_token_rotation } }); if (response?.status === 200) { return response.data as ResponseAuth; } else { @@ -33,7 +33,7 @@ export async function refresh(refresh_token_rotation?: boolean): Promise { - const response = await getRequest('auth/me', { withCredentials: true }); + const response = await getRequest('auth/me'); if (response?.status === 200) { return response.data; } else { diff --git a/ui/src/api/index.ts b/ui/src/api/index.ts index bce1031..5facad5 100644 --- a/ui/src/api/index.ts +++ b/ui/src/api/index.ts @@ -1,15 +1,33 @@ -import axios, { AxiosRequestConfig, AxiosResponse } from 'axios'; +import axios, { AxiosInstance, AxiosRequestConfig, AxiosResponse } from 'axios'; const serviceHost = process.env.SERVICE_HOST || 'http://localhost'; const servicePort = process.env.SERVICE_PORT || 5000; +function createAxiosClient(): AxiosInstance { + const axiosClient = axios.create({ + baseURL: `${serviceHost}:${servicePort}` + }); + + axiosClient.interceptors.request.use( + (request) => { + request.withCredentials = true; + return request; + }, + (error) => { + console.error(error); + return Promise.reject(error); + } + ); + return axiosClient; +} + +const axiosClient = createAxiosClient(); + export async function getRequest( url: string, config?: AxiosRequestConfig ): Promise | undefined> { - const response = await axios - .get(`${serviceHost}:${servicePort}/${url}`, config) - .catch((error) => console.error(error)); + const response = await axiosClient.get(`/${url}`, config); return response || undefined; } @@ -18,9 +36,7 @@ export async function postRequest( data?: any, config?: AxiosRequestConfig ): Promise | undefined> { - const response = await axios - .post(`${serviceHost}:${servicePort}/${url}`, data, config) - .catch((error) => console.error(error)); + const response = await axiosClient.post(`/${url}`, data, config); return response || undefined; } diff --git a/ui/src/components/Topbar/index.tsx b/ui/src/components/Topbar/index.tsx index 422154d..b68a663 100644 --- a/ui/src/components/Topbar/index.tsx +++ b/ui/src/components/Topbar/index.tsx @@ -92,7 +92,7 @@ export default function Topbar() { } }); } - }, []); + }, [pathName]); useEffect(() => { const h: HeaderItem[] = [];