Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add Keycloak #153

Merged
merged 98 commits into from
Apr 2, 2024
Merged
Show file tree
Hide file tree
Changes from 72 commits
Commits
Show all changes
98 commits
Select commit Hold shift + click to select a range
10e8af4
Separate out MeetingProvider
gf-rog Mar 5, 2024
ac0594f
Rename UserProvider to RestUserProvider
gf-rog Mar 5, 2024
44bb218
Separate out UserContext
gf-rog Mar 5, 2024
4abe4c7
Refactor user provider
gf-rog Mar 5, 2024
7e93726
Wrap protected routes in a Protected element
gf-rog Mar 5, 2024
e8a0d4b
Fix ProfilePageFormProps type error
gf-rog Mar 5, 2024
519f5d7
Use protected user context
gf-rog Mar 5, 2024
d6c98b7
Add Keycloak container
gf-rog Mar 6, 2024
ec6e17c
Rename UserProvider file to RestUserProvider
gf-rog Mar 6, 2024
af67d0b
Add keycloak-js
gf-rog Mar 6, 2024
cf32c18
Get useUser hook from UserContext
gf-rog Mar 6, 2024
6e9e98b
Use redirectToLogin function
gf-rog Mar 6, 2024
5a35d31
Remove redundant redirects
gf-rog Mar 6, 2024
6f3f705
Add KeycloakUserProvider
gf-rog Mar 6, 2024
f88dc9f
Use redirectToLogin instead of a Link
gf-rog Mar 6, 2024
a179bbb
Import keycloak data on first run
gf-rog Mar 15, 2024
fcb49af
Separate user models
gf-rog Mar 15, 2024
868cd72
Separate user functions from routes
gf-rog Mar 15, 2024
d1bbc69
Add mercury-backend client for REST API use
gf-rog Mar 16, 2024
53e9085
Remove master realm (not imported)
gf-rog Mar 17, 2024
6af6980
Move backend client to mercury realm
gf-rog Mar 17, 2024
c7fc94f
Add test rest API script
gf-rog Mar 17, 2024
befe95d
Separate getUser and getDbUser
gf-rog Mar 17, 2024
a424c0c
Get user using getDbUser instead of query
gf-rog Mar 17, 2024
174c88a
Change create user data type
gf-rog Mar 17, 2024
e867c44
Use createUser function
gf-rog Mar 17, 2024
e1a926b
Add @keycloak/keycloak-admin-client
gf-rog Mar 17, 2024
1edbfa3
Add register user stub
gf-rog Mar 19, 2024
1d2b48c
Convert backend from CommonJS to ESM (es2022)
gf-rog Mar 19, 2024
1fb5068
Use email as username
gf-rog Mar 19, 2024
83a54b0
Add Keycloak admin client
gf-rog Mar 19, 2024
6c5a65b
Add Keycloak user register function
gf-rog Mar 19, 2024
ddcb298
Fix tuple type to array type
gf-rog Mar 19, 2024
3acf091
Improve type
gf-rog Mar 20, 2024
c45a4a3
Add Either type
gf-rog Mar 20, 2024
c0f0cba
Extend DbUser type
gf-rog Mar 20, 2024
1b173c8
Complete user registering
gf-rog Mar 20, 2024
39b84bc
Add test user registering logs
gf-rog Mar 20, 2024
b318abd
Add get-token endpoint
gf-rog Mar 20, 2024
77d3ea0
Use query parameter to get Keycloak user
gf-rog Mar 20, 2024
d424c54
Complete KeycloakUserProvider
gf-rog Mar 20, 2024
27a891f
Use query parameter to register Keycloak user
gf-rog Mar 20, 2024
aa949b7
Add Keycloak user registering
gf-rog Mar 20, 2024
45a84c5
Fix redirects
gf-rog Mar 20, 2024
30f522f
Delete user in Keycloak
gf-rog Mar 20, 2024
5926ee3
Update user in Keycloak
gf-rog Mar 20, 2024
5c4ab4e
Redirect to home page on delete user
gf-rog Mar 20, 2024
6f0b693
Capitalize Mercury in login page
gf-rog Mar 20, 2024
39a4f57
Move realm export command to script
gf-rog Mar 20, 2024
f35b18b
Fix unauthorized after token expired
gf-rog Mar 20, 2024
5ca4487
Fix wrong issuer ID if user exists in Neo4j but not in Keycloak
gf-rog Mar 21, 2024
8ba6f79
Merge remote-tracking branch 'origin/dev' into keycloak
gf-rog Mar 21, 2024
141abbb
Add provider to user context
gf-rog Mar 21, 2024
2f42bb1
Check password fields if user is NativeUser
gf-rog Mar 21, 2024
2419943
Don't show password inputs if using KeycloakUserProvider
gf-rog Mar 21, 2024
9bbc9d9
Modify token handling to include Keycloak tokens
gf-rog Mar 21, 2024
916bcdb
Require valid access token to change password
gf-rog Mar 21, 2024
6108126
Fix build errors
gf-rog Mar 21, 2024
9e31b2c
Use environment variables for Keycloak URI
gf-rog Mar 22, 2024
f252a5c
Change environment variable formatting
gf-rog Mar 22, 2024
313769e
Remove unused profile page form
gf-rog Mar 22, 2024
fe4adde
Fix user edits not visible after editing
gf-rog Mar 22, 2024
eecea12
Fix error if no issuer found in token
gf-rog Mar 22, 2024
33fec8d
Expose token in KeycloakUserProvider
gf-rog Mar 22, 2024
2a9ac1f
Fix password not changing due to lack of access token
gf-rog Mar 22, 2024
8514156
Remove warning if using KeycloakUserProvider
gf-rog Mar 22, 2024
0005f72
Fix invalid access token in docker container
gf-rog Mar 22, 2024
f4c972e
Rename Keycloak image
gf-rog Mar 22, 2024
b46d297
Increase wait time
gf-rog Mar 22, 2024
6c2c3e8
Fix no await before session.close()
gf-rog Mar 22, 2024
b76efae
Fix database empty check after creating user
gf-rog Mar 22, 2024
4918c6d
Apply formatting
gf-rog Mar 22, 2024
51a0d46
Add users as Keycloak users
gf-rog Mar 24, 2024
3d124a2
Rename realms directory to import
gf-rog Mar 24, 2024
4686579
Fix warning about a relative path format
gf-rog Mar 24, 2024
7ebb31c
Add Keycloak theme
gf-rog Mar 25, 2024
be581e6
Use tsx and tsc-watch instead of ts-node and nodemon
gf-rog Mar 25, 2024
afbad7f
Fix deprecated punycode module
gf-rog Mar 25, 2024
e67dfb5
Merge remote-tracking branch 'origin/keycloak' into keycloak
gf-rog Mar 25, 2024
5761645
Increase wait time for creating initial users
gf-rog Mar 25, 2024
080693f
Apply formatting
gf-rog Mar 25, 2024
969df1f
Ignore build directory
gf-rog Mar 26, 2024
6e8604c
Add tests for Keycloak
Piterson25 Mar 30, 2024
9f507fd
Merge branch 'dev' into keycloak
gf-rog Mar 30, 2024
059701c
Merge remote-tracking branch 'origin/keycloak' into keycloak
gf-rog Mar 30, 2024
a3a9e7b
Fix userId not exists
gf-rog Mar 30, 2024
b39a5b3
Remove unused endpoint implementation
gf-rog Mar 30, 2024
316ec29
Remove unused imports
gf-rog Mar 30, 2024
84350e5
Add verifier
gf-rog Apr 2, 2024
2b4d83c
Refactor pagination
gf-rog Apr 2, 2024
e73e0be
Fix tests
gf-rog Apr 2, 2024
1cfa168
Remove unused imports
gf-rog Apr 2, 2024
e6b170b
Remove redundant function
gf-rog Apr 2, 2024
f97ccae
Don't emit transpiled code
gf-rog Apr 2, 2024
61097e3
Fix no page and maxUsers in friend requests endpoint
gf-rog Apr 2, 2024
33b4850
Fix caniuse-lite is outdated
gf-rog Apr 2, 2024
80b9162
Fix endpoints
gf-rog Apr 2, 2024
00c5b1c
Apply formatting
gf-rog Apr 2, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/docker.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ jobs:

- name: Wait for containers to start
run: |
sleep 18
sleep 80
docker run \
--rm \
--network mercury-project_default \
Expand Down
2 changes: 1 addition & 1 deletion backend/.env
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
TOKEN_SECRET=27a0967eed44a78feec1ccd9225343258894288202c0a45a8f93adce6786dbc9ae5a7fc4df716f29eefed7067d9b94fa9f7c2ab7dd7781d36cb22206bf25b886
LINK_SECRET=ijr2iq34rfeiadsfkjq3ew

CLIENT_SECRET=fOP43IDxXavjRogZMQWKW1qmJAz5zeEf
122 changes: 102 additions & 20 deletions backend/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 3 additions & 1 deletion backend/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@
"name": "backend",
"version": "0.0.1",
"description": "",
"main": "index.js",
"keywords": [],
"author": "",
"license": "ISC",
Expand All @@ -13,7 +12,10 @@
"build": "tsc",
"prod": "node build/index.js"
},
"type": "module",
"exports": "src/index.ts",
"dependencies": {
"@keycloak/keycloak-admin-client": "^24.0.1",
"@types/jsonwebtoken": "^9.0.5",
"axios": "^1.6.2",
"bcrypt": "^5.1.1",
Expand Down
56 changes: 26 additions & 30 deletions backend/src/db.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,7 @@
import { v4 as uuidv4 } from "uuid";
import driver from "./driver/driver.js";

import driver from "./driver/driver";
import bcrypt from "bcrypt";

import userData from "./data/users";
import wordToVec from "./misc/wordToVec";
import userData from "./data/users.js";
import { createUser, registerUser } from "./users.js";

export async function isDatabaseEmpty() {
const session = driver.session();
Expand All @@ -18,12 +15,28 @@ export async function isDatabaseEmpty() {
console.error("Error while loading database:", error);
return false;
} finally {
session.close();
await session.close();
}
}

export async function importInitialData() {
const isEmpty = await isDatabaseEmpty();

const testUser = await registerUser({
first_name: "John",
last_name: "Smith",
country: "PL",
profile_picture: "",
mail: "[email protected]",
password: "password",
});

if ("errors" in testUser) {
console.log("Couldn't register test user: ", testUser.errors);
} else {
console.log("Test user created: ", testUser);
}

if (!isEmpty) {
return "Database is not empty";
}
Expand All @@ -32,28 +45,11 @@ export async function importInitialData() {
try {
const userIds: string[] = [];

// Create users
const createUserQuery = `
CREATE (u:User $user)
`;

for (const user of userData) {
const userId = uuidv4();
userIds.push(userId);

const userClean: any = Object.assign({}, user);
delete userClean.friend_ids;
delete userClean.chats;

userClean.id = userId;
userClean.name_embedding = wordToVec(
userClean.first_name + userClean.last_name,
);
const { password } = userClean;
const passwordHashed = await bcrypt.hash(password, 10);
userClean.password = passwordHashed;

await session.run(createUserQuery, { user: userClean });
const newUser = await createUser(session, user);
if (!("errors" in newUser)) {
userIds.push(newUser.id);
}
}

// Create relationships
Expand Down Expand Up @@ -93,13 +89,13 @@ export async function importInitialData() {
} catch (error) {
return "Error importing data";
} finally {
session.close();
await session.close();
}
}

export async function cleanUpData() {
const session = driver.session();
await session.run(`MATCH (m:Meeting) DETACH DELETE m`);
await session.run(`MATCH (s:Socket) DETACH DELETE s`);
session.close();
await session.close();
}
10 changes: 5 additions & 5 deletions backend/src/httpServer.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import dotenv from "dotenv";
import servers from "./server";
import usersRouter from "./routes/usersRoute";
import authRouter from "./routes/authRoute";
import chatRouter from "./routes/chatRoute";
import { cleanUpData, importInitialData } from "./db";
import servers from "./server.js";
import usersRouter from "./routes/usersRoute.js";
import authRouter from "./routes/authRoute.js";
import chatRouter from "./routes/chatRoute.js";
import { cleanUpData, importInitialData } from "./db.js";

const { app } = servers;

Expand Down
5 changes: 3 additions & 2 deletions backend/src/index.ts
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
import "./httpServer";
import "./socketServer";
import "./httpServer.js";
import "./socketServer.js";
import "./kcAdminClient.js";
Loading