Merge pull request #53 from KeyZox71/docker-front

」 feat: added env variable to front
This commit is contained in:
Adam
2025-10-20 14:16:40 +02:00
committed by GitHub
12 changed files with 98 additions and 12 deletions

View File

@ -11,7 +11,8 @@ GRAPH_PORT=3000
ELK_PORT=5601
GOOGLE_CALLBACK_URL=https://localhost:8443/api/v1
# the url to which the user will be redirected when it logs with google
CALLBACK_REDIR=http://localhost:3000
GOOGLE_CLIENT_SECRET=susAF
GOOGLE_CLIENT_ID=Really
@ -25,4 +26,6 @@ SMTP_AUTH_USERNAME=<smtp-user>
SMTP_AUTH_PASSWORD=<smtp pass>
EMAIL_TO=<mail to send to>
USER_URL=<the url to the user api>
AUTH_URL=<the url to the auth api>
CORS_ORIGIN=<the url of origin for cors>

24
doc/auth/logout.md Normal file
View File

@ -0,0 +1,24 @@
# Logout
Available endpoints:
- GET `/logout`
Common return:
- 500 with response
```json
{
"error": "Internal server error"
}
```
## GET `/logout`
Used to logout the client (it just delete the cookie)
Returns:
- 200 with response and clear cookie
```json
{
"msg": "Logout successful"
}
```

View File

@ -3,3 +3,9 @@ GET `/me`
Inputs : just need the JWT cookie
Returns the user of the account
```
{
user: ":userId"
}
```

View File

@ -30,7 +30,7 @@ services:
- back
environment:
- TZ=Europe/Paris
- GOOGLE_CALLBACK_URL=${GOOGLE_CALLBACK_URL}
- GOOGLE_CALLBACK_URL=${AUTH_URL}
- GOOGLE_CLIENT_ID=${GOOGLE_CLIENT_ID}
- GOOGLE_CLIENT_SECRET=${GOOGLE_CLIENT_SECRET}
- API_TARGET=auth

View File

@ -13,6 +13,9 @@ RUN cd /build \
FROM node:lts-alpine AS builder-vite
ARG VITE_USER_URL
ARG VITE_AUTH_URL
RUN npm install -g pnpm
WORKDIR /app
@ -24,8 +27,8 @@ RUN pnpm install --frozen-lockfile
COPY vite.config.js tailwind.config.js ./
COPY src ./src
RUN pnpm vite build
RUN VITE_USER_URL=${VITE_USER_URL} VITE_AUTH_URL=${VITE_AUTH_URL}\
pnpm vite build
FROM alpine:3.22

View File

@ -4,6 +4,9 @@ services:
build:
dockerfile: docker/front/Dockerfile
context: ../../
args:
- VITE_USER_URL=${USER_URL}
- VITE_AUTH_URL=${AUTH_URL}
environment:
- TZ=Europe/Paris
networks:

View File

@ -11,6 +11,7 @@ import { gRegisterCallback } from './gRegisterCallback.js';
import { totpSetup } from './totpSetup.js';
import { totpDelete } from './totpDelete.js';
import { totpVerify } from './totpVerify.js';
import { logout } from './logout.js';
const saltRounds = 10;
export const appName = process.env.APP_NAME || 'knl_meowscendence';
@ -114,4 +115,6 @@ export default async function(fastify, options) {
}
}
}, async (request, reply) => { return register(request, reply, saltRounds, fastify); });
fastify.get('/logout', {}, async (request, reply) => { return logout(reply, fastify); })
}

View File

@ -37,7 +37,7 @@ export async function gLogCallback(request, reply, fastify) {
return reply.code(400).send({ error: "User does not exist" });
}
const token = fastify.jwt.sign(user);
const token = fastify.jwt.sign({ user: user.username});
return reply
.setCookie('token', token, {
@ -45,9 +45,7 @@ export async function gLogCallback(request, reply, fastify) {
path: '/',
secure: env !== 'development',
sameSite: 'lax',
})
.code(200)
.send({ msg: "Login successful" });
}).redirect(process.env.CALLBACK_REDIR);
} catch (error) {
fastify.log.error(error);
reply.code(500).send({ error: 'Internal server error' });

View File

@ -1,6 +1,7 @@
import axios from 'axios'
import authDB from '../../utils/authDB.js';
import { authUserCreate } from '../../utils/authUserCreate.js';
var env = process.env.NODE_ENV || 'development';
@ -46,7 +47,9 @@ export async function gRegisterCallback(request, reply, fastify) {
authDB.addUser(user.username, '');
const token = fastify.jwt.sign(user);
authUserCreate(user.username, fastify)
const token = fastify.jwt.sign({ user: user.username});
return reply
.setCookie('token', token, {
@ -54,9 +57,7 @@ export async function gRegisterCallback(request, reply, fastify) {
path: '/',
secure: env !== 'development',
sameSite: 'lax',
})
.code(200)
.send({ msg: "Register successful" });
}).redirect(process.env.CALLBACK_REDIR);
} catch (error) {
fastify.log.error(error);
reply.code(500).send({ error: 'Internal server error' });

18
src/api/auth/logout.js Normal file
View File

@ -0,0 +1,18 @@
/**
* @async
* @param {import("fastify").FastifyReply} reply
* @param {import("fastify").FastifyInstance} fastify
*
* @returns {import("fastify").FastifyReply}
*/
export async function logout(reply, fastify) {
try {
return reply
.code(200)
.clearCookie("token")
.send({ msg: "Logout successful" });
} catch {
fastify.log.error(err);
return reply.code(500).send({ error: "Internal server error" });
}
}

View File

@ -2,6 +2,7 @@ import bcrypt from 'bcrypt';
import { isValidString } from '../../utils/authUtils.js';
import authDB from '../../utils/authDB.js';
import { authUserCreate } from '../../utils/authUserCreate.js';
var env = process.env.NODE_ENV || 'development';
@ -36,6 +37,8 @@ export async function register(request, reply, saltRounds, fastify) {
const hash = await bcrypt.hash(password, saltRounds);
authDB.addUser(user, hash);
authUserCreate(user, fastify)
const token = fastify.jwt.sign({ user });
return reply

View File

@ -0,0 +1,24 @@
import axios from 'axios';
/**
* @param {string} username
* @param {import('fastify').FastifyInstance} fastify
*/
export async function authUserCreate(username, fastify) {
const payload = {
displayName: username,
};
const cookie = fastify.jwt.sign({ user: "admin" });
const url = process.env.USER_URL || "http://localhost:3002"
await axios.post(
url + "/users/" + username,
payload,
{
headers: {
'Cookie': 'token=' + cookie,
},
}
);
}