-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathaccessCodeUtils.js
More file actions
87 lines (76 loc) · 3.21 KB
/
Copy pathaccessCodeUtils.js
File metadata and controls
87 lines (76 loc) · 3.21 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
// Access code utilities for personal blog protection
import { doc, getDoc, setDoc } from 'firebase/firestore';
import { fireDb } from '../firebase/FirebaseConfig';
// Default access code - you can change this
const DEFAULT_ACCESS_CODE = 'personal2024';
// Store access code in localStorage for session persistence
const ACCESS_CODE_KEY = 'personal_blog_access_code';
export const verifyAccessCode = async (inputCode) => {
try {
// First check if the code is already verified in this session
const storedCode = localStorage.getItem(ACCESS_CODE_KEY);
if (storedCode === inputCode) {
return { success: true, message: 'Access granted' };
}
// Check against the default code
if (inputCode === DEFAULT_ACCESS_CODE) {
localStorage.setItem(ACCESS_CODE_KEY, inputCode);
return { success: true, message: 'Access granted' };
}
// Check against stored codes in Firebase (for future use)
try {
const accessCodeDoc = await getDoc(doc(fireDb, 'accessCodes', 'personal'));
if (accessCodeDoc.exists()) {
const validCodes = accessCodeDoc.data().codes || [];
if (validCodes.includes(inputCode)) {
localStorage.setItem(ACCESS_CODE_KEY, inputCode);
return { success: true, message: 'Access granted' };
}
}
} catch (error) {
console.warn('Could not check Firebase access codes:', error);
}
return { success: false, message: 'Invalid access code' };
} catch (error) {
console.error('Error verifying access code:', error);
return { success: false, message: 'Error verifying access code' };
}
};
export const isAccessCodeVerified = () => {
return localStorage.getItem(ACCESS_CODE_KEY) !== null;
};
export const clearAccessCode = () => {
localStorage.removeItem(ACCESS_CODE_KEY);
};
export const getStoredAccessCode = () => {
return localStorage.getItem(ACCESS_CODE_KEY);
};
// Function to add new access codes (for admin use)
export const addAccessCode = async (newCode) => {
try {
const accessCodeDoc = doc(fireDb, 'accessCodes', 'personal');
const currentDoc = await getDoc(accessCodeDoc);
if (currentDoc.exists()) {
const currentCodes = currentDoc.data().codes || [];
if (!currentCodes.includes(newCode)) {
await setDoc(accessCodeDoc, {
codes: [...currentCodes, newCode],
updatedAt: new Date()
}, { merge: true });
return { success: true, message: 'Access code added successfully' };
} else {
return { success: false, message: 'Access code already exists' };
}
} else {
await setDoc(accessCodeDoc, {
codes: [newCode],
createdAt: new Date(),
updatedAt: new Date()
});
return { success: true, message: 'Access code added successfully' };
}
} catch (error) {
console.error('Error adding access code:', error);
return { success: false, message: 'Error adding access code' };
}
};