Download js/auth/authentication.js from Mhdeusi/RewardApp: direct link, hf CLI and curl.
- Browser
- Download file 7.47 kB
-
https://huggingface.co/spaces/Mhdeusi/RewardApp/resolve/main/js/auth/authentication.js
- Command line
-
hf download hf://spaces/Mhdeusi/RewardApp/js/auth/authentication.js
-
curl -L -o authentication.js https://huggingface.co/spaces/Mhdeusi/RewardApp/resolve/main/js/auth/authentication.js
7.47 kB
| class Authentication { | |
| constructor() { | |
| this.tokenKey = 'authToken'; | |
| this.userKey = 'currentUser'; | |
| this.usersKey = 'appUsers'; | |
| } | |
| generateToken(userId, username, role = 'student') { | |
| // ایجاد توکن ساده برای محیط استاتیک | |
| const tokenData = { | |
| userId: userId, | |
| username: username, | |
| role: role, | |
| timestamp: Date.now(), | |
| exp: Date.now() + (7 * 24 * 60 * 60 * 1000) // 7 روز | |
| }; | |
| return btoa(JSON.stringify(tokenData)); | |
| } | |
| verifyToken(token) { | |
| try { | |
| const tokenData = JSON.parse(atob(token)); | |
| if (tokenData.exp > Date.now()) { | |
| return tokenData; | |
| } else { | |
| this.logout(); | |
| return null; | |
| } | |
| } catch (error) { | |
| console.error('Token verification failed:', error); | |
| return null; | |
| } | |
| } | |
| hashPassword(password) { | |
| // هش ساده برای محیط توسعه - در تولید از روش امنتری استفاده شود | |
| let hash = 0; | |
| for (let i = 0; i < password.length; i++) { | |
| const char = password.charCodeAt(i); | |
| hash = ((hash << 5) - hash) + char; | |
| hash = Math.abs(hash & hash); | |
| } | |
| return hash.toString(); | |
| } | |
| setToken(token) { | |
| localStorage.setItem(this.tokenKey, token); | |
| } | |
| getToken() { | |
| return localStorage.getItem(this.tokenKey); | |
| } | |
| setCurrentUser(user) { | |
| localStorage.setItem(this.userKey, JSON.stringify(user)); | |
| } | |
| getCurrentUser() { | |
| const userStr = localStorage.getItem(this.userKey); | |
| return userStr ? JSON.parse(userStr) : null; | |
| } | |
| isAuthenticated() { | |
| const token = this.getToken(); | |
| if (!token) return false; | |
| const tokenData = this.verifyToken(token); | |
| return tokenData !== null; | |
| } | |
| logout() { | |
| localStorage.removeItem(this.tokenKey); | |
| localStorage.removeItem(this.userKey); | |
| } | |
| // مدیریت کاربران در localStorage | |
| initializeDefaultUsers() { | |
| const existingUsers = this.getUsers(); | |
| if (Object.keys(existingUsers).length === 0) { | |
| const defaultUsers = { | |
| '1': { | |
| userId: '1', | |
| username: 'student', | |
| email: 'student@example.com', | |
| password: this.hashPassword('password123'), | |
| role: 'student', | |
| createdAt: new Date().toISOString(), | |
| profile: { | |
| fullName: 'دانشجوی نمونه', | |
| bio: 'علاقمند به توسعه وب' | |
| }, | |
| progress: { | |
| totalScore: 0, | |
| completedLessons: [], | |
| currentLesson: 1 | |
| }, | |
| isActive: true | |
| }, | |
| '2': { | |
| userId: '2', | |
| username: 'admin', | |
| email: 'admin@example.com', | |
| password: this.hashPassword('admin123'), | |
| role: 'admin', | |
| createdAt: new Date().toISOString(), | |
| profile: { | |
| fullName: 'مدیر سیستم', | |
| bio: 'مدیر پلتفرم آموزشی' | |
| }, | |
| progress: { | |
| totalScore: 0, | |
| completedLessons: [], | |
| currentLesson: 1 | |
| }, | |
| isActive: true | |
| } | |
| }; | |
| this.saveUsers(defaultUsers); | |
| } | |
| } | |
| getUsers() { | |
| const usersStr = localStorage.getItem(this.usersKey); | |
| return usersStr ? JSON.parse(usersStr) : {}; | |
| } | |
| saveUsers(users) { | |
| localStorage.setItem(this.usersKey, JSON.stringify(users)); | |
| } | |
| registerUser(username, email, password, role = 'student', profile = {}) { | |
| const users = this.getUsers(); | |
| // بررسی وجود کاربر | |
| for (const userId in users) { | |
| if (users[userId].username === username) { | |
| return { success: false, message: 'نام کاربری already exists' }; | |
| } | |
| if (users[userId].email === email) { | |
| return { success: false, message: 'ایمیل already exists' }; | |
| } | |
| } | |
| // ایجاد کاربر جدید | |
| const newUserId = Object.keys(users).length + 1; | |
| const newUser = { | |
| userId: newUserId.toString(), | |
| username: username, | |
| email: email, | |
| password: this.hashPassword(password), | |
| role: role, | |
| createdAt: new Date().toISOString(), | |
| profile: { | |
| fullName: profile.fullName || '', | |
| bio: profile.bio || '', | |
| avatar: profile.avatar || '' | |
| }, | |
| progress: { | |
| totalScore: 0, | |
| completedLessons: [], | |
| currentLesson: 1, | |
| achievements: [] | |
| }, | |
| isActive: true | |
| }; | |
| users[newUserId] = newUser; | |
| this.saveUsers(users); | |
| return { success: true, user: newUser }; | |
| } | |
| loginUser(username, password) { | |
| const users = this.getUsers(); | |
| const hashedPassword = this.hashPassword(password); | |
| console.log('🔐 Login attempt:', { username, hashedPassword }); // برای دیباگ | |
| for (const userId in users) { | |
| const user = users[userId]; | |
| console.log('📋 User in DB:', { | |
| username: user.username, | |
| password: user.password, | |
| isActive: user.isActive | |
| }); // برای دیباگ | |
| if (user.username === username && user.password === hashedPassword && user.isActive) { | |
| // ایجاد توکن | |
| const token = this.generateToken(user.userId, user.username, user.role); | |
| this.setToken(token); | |
| this.setCurrentUser(user); | |
| // بهروزرسانی آخرین ورود | |
| user.lastLogin = new Date().toISOString(); | |
| this.saveUsers(users); | |
| // انتشار رویداد تغییر وضعیت | |
| document.dispatchEvent(new CustomEvent('authStateChanged')); | |
| return { success: true, user: user, token: token }; | |
| } | |
| } | |
| return { success: false, message: 'نام کاربری یا رمز عبور اشتباه است' }; | |
| } | |
| updateUserProgress(userId, score = 0, completedLesson = null) { | |
| const users = this.getUsers(); | |
| if (users[userId]) { | |
| const user = users[userId]; | |
| if (score > 0) { | |
| user.progress.totalScore = (user.progress.totalScore || 0) + score; | |
| } | |
| if (completedLesson && !user.progress.completedLessons.includes(completedLesson)) { | |
| user.progress.completedLessons.push(completedLesson); | |
| } | |
| this.saveUsers(users); | |
| return { success: true, progress: user.progress }; | |
| } | |
| return { success: false, message: 'User not found' }; | |
| } | |
| } | |
| // ایجاد نمونه singleton | |
| const authManager = new Authentication(); |