mirror of
https://github.com/KeyZox71/knl_meowscendence.git
synced 2025-12-31 21:56:41 +01:00
Merge pull request #53 from KeyZox71/docker-front
「✨」 feat: added env variable to front
This commit is contained in:
@ -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
24
doc/auth/logout.md
Normal 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"
|
||||
}
|
||||
```
|
||||
@ -3,3 +3,9 @@ GET `/me`
|
||||
Inputs : just need the JWT cookie
|
||||
|
||||
Returns the user of the account
|
||||
|
||||
```
|
||||
{
|
||||
user: ":userId"
|
||||
}
|
||||
```
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
@ -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:
|
||||
|
||||
@ -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); })
|
||||
}
|
||||
|
||||
@ -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' });
|
||||
|
||||
@ -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
18
src/api/auth/logout.js
Normal 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" });
|
||||
}
|
||||
}
|
||||
@ -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
|
||||
|
||||
24
src/utils/authUserCreate.js
Normal file
24
src/utils/authUserCreate.js
Normal 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,
|
||||
},
|
||||
}
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user