Skip to content

Commit 34127b4

Browse files
committed
backend auth
1 parent fe13740 commit 34127b4

File tree

23 files changed

+345
-233
lines changed

23 files changed

+345
-233
lines changed

AuthService/package-lock.json

Lines changed: 16 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

AuthService/package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,8 @@
1414
"dotenv": "^16.3.1",
1515
"express": "~4.16.1",
1616
"firebase": "^10.4.0",
17-
"http-errors": "~1.6.3"
17+
"http-errors": "~1.6.3",
18+
"mime": "^1.6.0"
1819
},
1920
"devDependencies": {
2021
"@types/express": "^4.17.18",

AuthService/src/auth/auth.controller.ts

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,13 @@ export async function handleSignUp(req: Request, res: Response) {
88
const signedUp = await signUp(email, password);
99
res.status(200).send(signedUp);
1010
} catch (error) {
11-
console.error(error);
12-
res.status(500).send(error);
11+
if (error instanceof Error) {
12+
console.error(error.message);
13+
res.status(500).send(error.message);
14+
} else {
15+
console.error(error);
16+
res.status(500).send(error);
17+
}
1318
}
1419
}
1520

@@ -20,8 +25,13 @@ export async function handleLogin(req: Request, res: Response) {
2025
const loggedIn = await login(email, password);
2126
res.status(200).send(loggedIn);
2227
} catch (error) {
23-
console.error(error);
24-
res.status(500).send(error);
28+
if (error instanceof Error) {
29+
console.error(error.message);
30+
res.status(500).send(error.message);
31+
} else {
32+
console.error(error);
33+
res.status(500).send(error);
34+
}
2535
}
2636
}
2737

AuthService/src/auth/auth.service.ts

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,17 +12,26 @@ import { firebaseConfig } from "../firebase/firebase.config";
1212
initializeApp(firebaseConfig);
1313
const auth = getAuth();
1414

15+
interface SignupCredential {
16+
user: UserCredential;
17+
token: string;
18+
}
19+
1520
export async function signUp(
1621
email: string,
1722
password: string
18-
): Promise<UserCredential> {
23+
): Promise<SignupCredential> {
1924
try {
2025
const user: UserCredential = await createUserWithEmailAndPassword(
2126
auth,
2227
email,
2328
password
2429
);
25-
return Promise.resolve(user);
30+
const token: string = await user.user.getIdToken();
31+
return Promise.resolve({
32+
user: user,
33+
token: token,
34+
});
2635
} catch (error: any) {
2736
return Promise.reject(error);
2837
}

AuthService/src/index.ts

Lines changed: 1 addition & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -4,35 +4,19 @@ import {
44
handleLogin,
55
handleLogout,
66
handleSignUp,
7-
handleDelete
7+
handleDelete,
88
} from "./auth/auth.controller";
9-
// import { Socket, Server } from 'socket.io';
10-
// import { initializeApp } from 'firebase/app';
11-
// import { getFirestore } from 'firebase/firestore';
12-
// import { firebaseConfig } from "./firebase/firebase.config";
13-
// import { Server as ServerHttp } from 'http';
149

1510
const app = express();
1611
const port = 3003;
1712
app.use(cors());
1813
app.use(express.json());
1914

20-
app.get("/", (req, res) => {
21-
res.send("Hello World!");
22-
});
23-
24-
2515
app.post("/signup", handleSignUp);
2616
app.post("/login", handleLogin);
2717
app.delete("/logout", handleLogout);
2818
app.delete("/delete", handleDelete);
2919

30-
31-
32-
// httpServer.listen(socketPort, () => {
33-
// console.log(`socket listening on port ${socketPort}`);
34-
// });
35-
3620
app.listen(port, () => {
3721
console.log(`Auth Service listening on port ${port}`);
3822
});

QuestionService/package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,8 @@
1414
"dotenv": "^16.3.1",
1515
"express": "~4.16.1",
1616
"firebase": "^10.4.0",
17-
"http-errors": "~1.6.3"
17+
"http-errors": "~1.6.3",
18+
"axios": "^1.5.1"
1819
},
1920
"devDependencies": {
2021
"@types/express": "^4.17.18",

QuestionService/src/question/question.controller.ts

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,13 @@
11
import { Request, Response } from "express";
2-
import {addQuestion, db, deleteQuestion, updateQuestion} from "./question.service";
32
import {
4-
getDocs,
5-
collection,
6-
} from "firebase/firestore";
3+
addQuestion,
4+
db,
5+
deleteQuestion,
6+
isValidToken,
7+
updateQuestion,
8+
} from "./question.service";
9+
import { getDocs, collection } from "firebase/firestore";
10+
import axios from "axios";
711

812
interface Question {
913
title: string;
@@ -22,8 +26,19 @@ interface Example {
2226

2327
export async function handleGetQuestions(req: Request, res: Response) {
2428
try {
25-
// console.log(req.query.email);
26-
// const { email } = req.query;
29+
console.log("getting questions");
30+
const { token } = req.query;
31+
if (!token) {
32+
res.status(500).send("unauthorized access");
33+
}
34+
if (typeof token === "string") {
35+
const response = await isValidToken(token);
36+
if (!response) {
37+
res.status(500).send("unauthorized access");
38+
}
39+
} else {
40+
res.status(500).send("invalid params");
41+
}
2742
const query = await getDocs(collection(db, "questions"));
2843
const result = await Promise.all(
2944
query.docs.map(async (d) => {
@@ -96,7 +111,7 @@ export async function handleUpdateQuestion(req: Request, res: Response) {
96111
examples,
97112
} = req.body;
98113
console.log(`updating question ${questionId}: ${title}`);
99-
const question = await updateQuestion(questionId,{
114+
const question = await updateQuestion(questionId, {
100115
title: title,
101116
tags: tags,
102117
categories: categories,

QuestionService/src/question/question.service.ts

Lines changed: 42 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,15 @@
11
import { initializeApp } from "firebase/app";
2-
import {addDoc, collection, deleteDoc, doc, getFirestore, setDoc} from "firebase/firestore";
3-
import { firebaseConfig } from "../firebase/firebase.config"
2+
import {
3+
addDoc,
4+
collection,
5+
deleteDoc,
6+
doc,
7+
getDocs,
8+
getFirestore,
9+
setDoc,
10+
query,
11+
} from "firebase/firestore";
12+
import { firebaseConfig } from "../firebase/firebase.config";
413

514
initializeApp(firebaseConfig);
615
export const db = getFirestore();
@@ -30,13 +39,19 @@ export async function deleteQuestion(questionId: string) {
3039
}
3140
}
3241

33-
export async function updateQuestion(questionId: string, question: Question): Promise<Question> {
42+
export async function updateQuestion(
43+
questionId: string,
44+
question: Question
45+
): Promise<Question> {
3446
try {
35-
let questionDoc: Omit<Question, "examples"> = question
47+
let questionDoc: Omit<Question, "examples"> = question;
3648
const docRef = doc(db, "questions", questionId);
3749
await setDoc(docRef, questionDoc);
3850
for (let i = 0; i < question.examples.length; i++) {
39-
const add = setDoc(doc(docRef, "examples", (i+1).toString()), question.examples[i]);
51+
const add = setDoc(
52+
doc(docRef, "examples", (i + 1).toString()),
53+
question.examples[i]
54+
);
4055
}
4156
return Promise.resolve(question);
4257
} catch (error) {
@@ -46,14 +61,34 @@ export async function updateQuestion(questionId: string, question: Question): Pr
4661

4762
export async function addQuestion(question: Question): Promise<Question> {
4863
try {
49-
let questionDoc: Omit<Question, "examples"> = question
64+
let questionDoc: Omit<Question, "examples"> = question;
5065
const docRef = await addDoc(collection(db, "questions"), questionDoc);
5166
for (let i = 0; i < question.examples.length; i++) {
52-
const add = setDoc(doc(docRef, "examples", (i+1).toString()), question.examples[i]);
67+
const add = setDoc(
68+
doc(docRef, "examples", (i + 1).toString()),
69+
question.examples[i]
70+
);
5371
}
5472
return Promise.resolve(question);
5573
} catch (error) {
5674
return Promise.reject(error);
5775
}
5876
}
5977

78+
export async function isValidToken(token: string): Promise<boolean> {
79+
try {
80+
const q = query(collection(db, "users"));
81+
const querySnapshot = await getDocs(q);
82+
const tokens = new Set();
83+
querySnapshot.forEach((doc) => {
84+
const user = doc.data();
85+
tokens.add(user.token);
86+
});
87+
if (tokens.has(token)) {
88+
return Promise.resolve(true);
89+
}
90+
return Promise.resolve(false);
91+
} catch (error) {
92+
return Promise.reject(error);
93+
}
94+
}

UserService/src/index.ts

Lines changed: 8 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,41 +1,26 @@
11
import express from "express";
22
import cors from "cors";
33

4-
// import { initializeApp } from 'firebase/app';
5-
// import { getFirestore } from 'firebase/firestore';
6-
// import { firebaseConfig } from "./firebase/firebase.config";
7-
// import { Socket, Server } from 'socket.io';
8-
// import { Server as ServerHttp } from 'http';
9-
10-
import { handleCreateUser, handleDeleteUser, handleGetUser, handleUpdateUser, handleCreateAdminUser, handleGetAdminUsers } from "./user/user.controller";
4+
import {
5+
handleCreateUser,
6+
handleDeleteUser,
7+
handleGetUser,
8+
handleUpdateUser,
9+
handleCreateAdminUser,
10+
handleGetAdminUsers,
11+
} from "./user/user.controller";
1112
const app = express();
1213
const port = 3004;
1314
app.use(cors());
1415
app.use(express.json());
1516

16-
17-
18-
app.get("/", (req, res) => {
19-
res.send("Hello World!");
20-
});
21-
22-
// Initialize Firebase Firestore and other configurations here
23-
// initializeApp(firebaseConfig);
24-
// const db = getFirestore();
25-
2617
app.post("/user", handleCreateUser);
2718
app.get("/adminusers", handleGetAdminUsers);
2819
app.post("/useradmin", handleCreateAdminUser);
2920
app.get("/user", handleGetUser);
3021
app.put("/user", handleUpdateUser);
3122
app.delete("/user", handleDeleteUser);
3223

33-
34-
35-
// httpServer.listen(socketPort, () => {
36-
// console.log(`socket listening on port ${socketPort}`);
37-
// });
38-
3924
app.listen(port, () => {
4025
console.log(`User Service listening on port ${port}`);
4126
});

UserService/src/user/user.controller.ts

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,19 @@
11
import { Request, Response } from "express";
22

3-
import { createAdminUser, delUser, createUser, getAdminUsers, getUser, updateUser } from "./user.service";
3+
import {
4+
createAdminUser,
5+
delUser,
6+
createUser,
7+
getAdminUsers,
8+
getUser,
9+
updateUser,
10+
} from "./user.service";
411

512
export async function handleCreateUser(req: Request, res: Response) {
613
try {
7-
const { email } = req.body;
14+
const { email, token } = req.body;
815
console.log(`creating user ${email}`);
9-
const user = await createUser(email);
16+
const user = await createUser(email, token);
1017
res.status(200).send(user);
1118
} catch (error) {
1219
console.error(error);
@@ -16,9 +23,9 @@ export async function handleCreateUser(req: Request, res: Response) {
1623

1724
export async function handleCreateAdminUser(req: Request, res: Response) {
1825
try {
19-
const { email } = req.body;
26+
const { email, token } = req.body;
2027
console.log(`creating admin user ${email}`);
21-
const user = await createAdminUser(email);
28+
const user = await createAdminUser(email, token);
2229
res.status(200).send(user);
2330
} catch (error) {
2431
console.error(error);
@@ -74,9 +81,9 @@ export async function handleUpdateUser(req: Request, res: Response) {
7481
export async function handleDeleteUser(req: Request, res: Response) {
7582
try {
7683
const user = req.query;
77-
if (user && typeof(user.email) === "string") {
84+
if (user && typeof user.email === "string") {
7885
console.log(`deleting user`);
79-
await delUser(user.email)
86+
await delUser(user.email);
8087
res.status(200).send("no params");
8188
} else {
8289
res.status(500).send("no params");

0 commit comments

Comments
 (0)