diff --git a/package-lock.json b/package-lock.json
index 3ec669a..fd7c2ee 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -19,6 +19,7 @@
"@angular/router": "^17.2.0",
"@ngx-translate/core": "^15.0.0",
"@ngx-translate/http-loader": "^8.0.0",
+ "crypto-js": "^4.2.0",
"ngx-color-picker": "^16.0.0",
"rxjs": "~7.8.0",
"tslib": "^2.3.0",
@@ -28,6 +29,7 @@
"@angular-devkit/build-angular": "^17.2.1",
"@angular/cli": "^17.2.1",
"@angular/compiler-cli": "^17.2.0",
+ "@types/crypto-js": "^4.2.2",
"@types/jasmine": "~5.1.0",
"jasmine-core": "~5.1.0",
"karma": "~6.4.0",
@@ -4354,6 +4356,12 @@
"@types/node": "*"
}
},
+ "node_modules/@types/crypto-js": {
+ "version": "4.2.2",
+ "resolved": "https://registry.npmjs.org/@types/crypto-js/-/crypto-js-4.2.2.tgz",
+ "integrity": "sha512-sDOLlVbHhXpAUAL0YHDUUwDZf3iN4Bwi4W6a0W0b+QcAezUbRtH4FVb+9J4h+XFPW7l/gQ9F8qC7P+Ec4k8QVQ==",
+ "dev": true
+ },
"node_modules/@types/eslint": {
"version": "8.56.6",
"resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.6.tgz",
@@ -6076,6 +6084,11 @@
"node": ">= 8"
}
},
+ "node_modules/crypto-js": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.2.0.tgz",
+ "integrity": "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q=="
+ },
"node_modules/css-loader": {
"version": "6.10.0",
"resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.10.0.tgz",
diff --git a/package.json b/package.json
index c0039a1..c3c3e96 100644
--- a/package.json
+++ b/package.json
@@ -21,6 +21,7 @@
"@angular/router": "^17.2.0",
"@ngx-translate/core": "^15.0.0",
"@ngx-translate/http-loader": "^8.0.0",
+ "crypto-js": "^4.2.0",
"ngx-color-picker": "^16.0.0",
"rxjs": "~7.8.0",
"tslib": "^2.3.0",
@@ -30,6 +31,7 @@
"@angular-devkit/build-angular": "^17.2.1",
"@angular/cli": "^17.2.1",
"@angular/compiler-cli": "^17.2.0",
+ "@types/crypto-js": "^4.2.2",
"@types/jasmine": "~5.1.0",
"jasmine-core": "~5.1.0",
"karma": "~6.4.0",
diff --git a/src/app/app.component.html b/src/app/app.component.html
index e0fb758..d1b27e6 100644
--- a/src/app/app.component.html
+++ b/src/app/app.component.html
@@ -1,4 +1,4 @@
-@if (this.isLoggedIn === undefined) {
+@if (this.isLoggedIn === null) {
} @else {
diff --git a/src/app/app.component.ts b/src/app/app.component.ts
index 1cfb409..6fccb2d 100644
--- a/src/app/app.component.ts
+++ b/src/app/app.component.ts
@@ -48,7 +48,7 @@ export class AppComponent {
}
ngOnInit() {
- if (this.isLoggedIn === undefined) {
+ if (this.isLoggedIn === null) {
this.checkPwResetRoute();
} else {
this.router.navigate(['/summary']);
diff --git a/src/app/services/firebase.service.ts b/src/app/services/firebase.service.ts
index 275fd27..f7c6ef0 100644
--- a/src/app/services/firebase.service.ts
+++ b/src/app/services/firebase.service.ts
@@ -13,12 +13,15 @@ import {
} from '@angular/fire/firestore';
import { Task } from '../interfaces/task.interface';
import { User } from '../interfaces/user.interface';
+import * as CryptoJS from 'crypto-js';
+import { CryptoJSSecretKey } from './../environments/config';
@Injectable({
providedIn: 'root',
})
export class FirebaseService implements OnDestroy {
firestore: Firestore = inject(Firestore);
+ private secretKey: string = CryptoJSSecretKey.secretKey;
allTasks: Task[] = [];
filteredTasks: Task[] = [];
@@ -130,10 +133,13 @@ export class FirebaseService implements OnDestroy {
}
getCurrentUserId() {
- let currentUser = localStorage.getItem('currentUserJOIN');
- if (currentUser !== null) {
- return JSON.parse(currentUser);
+ const encryptedValue = localStorage.getItem('currentUserJOIN');
+ if (encryptedValue) {
+ const bytes = CryptoJS.AES.decrypt(encryptedValue, this.secretKey);
+ const decryptedValue = bytes.toString(CryptoJS.enc.Utf8);
+ return JSON.parse(decryptedValue);
}
+ return null;
}
getUserDetails(userId: string, query: keyof User) {
diff --git a/src/app/services/login.service.ts b/src/app/services/login.service.ts
index 14ab39e..4627dc1 100644
--- a/src/app/services/login.service.ts
+++ b/src/app/services/login.service.ts
@@ -22,6 +22,9 @@ import {
import { SharedService } from './shared.service';
import { User } from '../interfaces/user.interface';
import { Router } from '@angular/router';
+import * as CryptoJS from 'crypto-js';
+import { CryptoJSSecretKey } from './../environments/config';
+
@Injectable({
providedIn: 'root',
})
@@ -31,6 +34,8 @@ export class LoginService {
passwordIcon: string = './../../../assets/img/login/close-eye.svg';
errorCode: string = '';
+ private secretKey: string = CryptoJSSecretKey.secretKey;
+
constructor(
private firebaseService: FirebaseService,
public sharedService: SharedService,
@@ -43,7 +48,7 @@ export class LoginService {
const user = userCredential.user;
const userData = this.firebaseService.getUserDataFromUid(user.uid);
if (userData.length > 0 && userData[0].id) {
- this.getUserIdInLocalStorage(userData[0].id);
+ this.getUserIdInLocalStorage(this.secretKey, userData[0].id);
this.updateUserOnlineStatus(userData[0].id, true);
}
})
@@ -156,7 +161,7 @@ export class LoginService {
ifExistUser(user: string) {
const userData = this.firebaseService.getUserDataFromUid(user);
if (userData.length > 0 && userData[0].id) {
- this.getUserIdInLocalStorage(userData[0].id);
+ this.getUserIdInLocalStorage(this.secretKey, userData[0].id);
this.updateUserOnlineStatus(userData[0].id, true);
}
}
@@ -182,8 +187,12 @@ export class LoginService {
: './../../../assets/img/login/close-eye.svg';
}
- getUserIdInLocalStorage(userId: string) {
- localStorage.setItem('currentUserJOIN', JSON.stringify(userId));
+ getUserIdInLocalStorage(key: string, userId: string): void {
+ const encryptedValue = CryptoJS.AES.encrypt(
+ JSON.stringify(userId),
+ this.secretKey
+ ).toString();
+ localStorage.setItem('currentUserJOIN', encryptedValue);
}
// LOGOUT