EmmyHenz001 commited on
Commit
41a246a
·
verified ·
1 Parent(s): 102c805

Upload server.js

Browse files
Files changed (1) hide show
  1. server.js +1 -324
server.js CHANGED
@@ -1,324 +1 @@
1
- const express = require("express")
2
- const bodyParser = require("body-parser")
3
- const session = require("express-session")
4
- const bcrypt = require("bcryptjs")
5
- const fs = require("fs")
6
- const path = require("path")
7
-
8
- const app = express()
9
- const PORT = 7860
10
-
11
- // Middleware
12
- app.use(bodyParser.json())
13
- app.use(bodyParser.urlencoded({ extended: true }))
14
- app.use(express.static("public"))
15
- app.use(
16
- session({
17
- secret: "eht-faceswap-secret-key-2025",
18
- resave: false,
19
- saveUninitialized: false,
20
- cookie: { maxAge: 24 * 60 * 60 * 1000 }, // 24 hours
21
- }),
22
- )
23
-
24
- // Data file path
25
- const DATA_FILE = path.join("/tmp", "data.json")
26
-
27
- // Admin access key constant
28
- const ADMIN_KEY = "EHT-ADMIN-2025-SECURE"
29
-
30
- // Initialize data file if it doesn't exist
31
- if (!fs.existsSync(DATA_FILE)) {
32
- fs.writeFileSync(DATA_FILE, JSON.stringify({ users: [] }, null, 2))
33
- }
34
-
35
- // Helper functions
36
- function readData() {
37
- const data = fs.readFileSync(DATA_FILE, "utf8")
38
- return JSON.parse(data)
39
- }
40
-
41
- function writeData(data) {
42
- fs.writeFileSync(DATA_FILE, JSON.stringify(data, null, 2))
43
- }
44
-
45
- function getToday() {
46
- return new Date().toISOString().split("T")[0]
47
- }
48
-
49
- // Admin authentication middleware
50
- function requireAdmin(req, res, next) {
51
- if (!req.session.isAdmin) {
52
- return res.json({ success: false, message: "Unauthorized" })
53
- }
54
- next()
55
- }
56
-
57
- // Routes
58
- app.get("/", (req, res) => {
59
- res.sendFile(path.join(__dirname, "public", "index.html"))
60
- })
61
-
62
- // Signup
63
- app.post("/api/signup", async (req, res) => {
64
- const { email, password, username } = req.body
65
- const data = readData()
66
-
67
- // Check if user exists
68
- if (data.users.find((u) => u.email === email)) {
69
- return res.json({ success: false, message: "Email already registered" })
70
- }
71
-
72
- const hashedPassword = await bcrypt.hash(password, 10)
73
-
74
- // Create new user with 2 free tokens
75
- const newUser = {
76
- id: Date.now().toString(),
77
- email,
78
- password: hashedPassword, // Store hashed password instead of plain text
79
- username,
80
- tokens: 2,
81
- followedTelegram: false,
82
- followedWhatsApp: false,
83
- lastDailyClaim: null,
84
- createdAt: new Date().toISOString(),
85
- subscription: "free",
86
- banned: false,
87
- }
88
-
89
- data.users.push(newUser)
90
- writeData(data)
91
-
92
- req.session.userId = newUser.id
93
- res.json({ success: true, message: "Account created successfully!" })
94
- })
95
-
96
- // Login
97
- app.post("/api/login", async (req, res) => {
98
- const { email, password } = req.body
99
- const data = readData()
100
-
101
- const user = data.users.find((u) => u.email === email)
102
-
103
- if (!user || user.banned) {
104
- return res.json({ success: false, message: "Invalid email or password or user is banned" })
105
- }
106
-
107
- const passwordMatch = await bcrypt.compare(password, user.password)
108
-
109
- if (!passwordMatch) {
110
- return res.json({ success: false, message: "Invalid email or password" })
111
- }
112
-
113
- req.session.userId = user.id
114
- res.json({ success: true, message: "Login successful!" })
115
- })
116
-
117
- // Get user data
118
- app.get("/api/user", (req, res) => {
119
- if (!req.session.userId) {
120
- return res.json({ success: false, message: "Not authenticated" })
121
- }
122
-
123
- const data = readData()
124
- const user = data.users.find((u) => u.id === req.session.userId)
125
-
126
- if (!user) {
127
- return res.json({ success: false, message: "User not found" })
128
- }
129
-
130
- // Don't send password
131
- const { password, ...userData } = user
132
- res.json({ success: true, user: userData })
133
- })
134
-
135
- // Follow social media
136
- app.post("/api/follow", (req, res) => {
137
- if (!req.session.userId) {
138
- return res.json({ success: false, message: "Not authenticated" })
139
- }
140
-
141
- const { platform } = req.body
142
- const data = readData()
143
- const user = data.users.find((u) => u.id === req.session.userId)
144
-
145
- if (!user) {
146
- return res.json({ success: false, message: "User not found" })
147
- }
148
-
149
- if (platform === "telegram" && !user.followedTelegram) {
150
- user.followedTelegram = true
151
- user.tokens += 2
152
- writeData(data)
153
- return res.json({ success: true, message: "2 tokens added!", tokens: user.tokens })
154
- } else if (platform === "whatsapp" && !user.followedWhatsApp) {
155
- user.followedWhatsApp = true
156
- user.tokens += 2
157
- writeData(data)
158
- return res.json({ success: true, message: "2 tokens added!", tokens: user.tokens })
159
- } else {
160
- return res.json({ success: false, message: "Already claimed or invalid platform" })
161
- }
162
- })
163
-
164
- // Daily claim
165
- app.post("/api/daily-claim", (req, res) => {
166
- if (!req.session.userId) {
167
- return res.json({ success: false, message: "Not authenticated" })
168
- }
169
-
170
- const data = readData()
171
- const user = data.users.find((u) => u.id === req.session.userId)
172
-
173
- if (!user) {
174
- return res.json({ success: false, message: "User not found" })
175
- }
176
-
177
- const today = getToday()
178
-
179
- if (user.lastDailyClaim === today) {
180
- return res.json({ success: false, message: "Already claimed today" })
181
- }
182
-
183
- user.lastDailyClaim = today
184
- user.tokens += 2
185
- writeData(data)
186
-
187
- res.json({ success: true, message: "2 tokens claimed!", tokens: user.tokens })
188
- })
189
-
190
- // Use tokens for face swap
191
- app.post("/api/use-tokens", (req, res) => {
192
- if (!req.session.userId) {
193
- return res.json({ success: false, message: "Not authenticated" })
194
- }
195
-
196
- const data = readData()
197
- const user = data.users.find((u) => u.id === req.session.userId)
198
-
199
- if (!user) {
200
- return res.json({ success: false, message: "User not found" })
201
- }
202
-
203
- if (user.subscription === "unlimited") {
204
- return res.json({ success: true, message: "Unlimited access", tokens: user.tokens })
205
- }
206
-
207
- if (user.tokens < 2) {
208
- return res.json({ success: false, message: "Insufficient tokens" })
209
- }
210
-
211
- user.tokens -= 2
212
- writeData(data)
213
-
214
- res.json({ success: true, message: "2 tokens deducted", tokens: user.tokens })
215
- })
216
-
217
- // Admin routes
218
- // Admin login
219
- app.post("/api/admin/login", (req, res) => {
220
- const { adminKey } = req.body
221
-
222
- if (adminKey === ADMIN_KEY) {
223
- req.session.isAdmin = true
224
- res.json({ success: true, message: "Access granted" })
225
- } else {
226
- res.json({ success: false, message: "Invalid admin key" })
227
- }
228
- })
229
-
230
- // Check admin authentication
231
- app.get("/api/admin/check", (req, res) => {
232
- if (req.session.isAdmin) {
233
- res.json({ success: true })
234
- } else {
235
- res.json({ success: false })
236
- }
237
- })
238
-
239
- // Get all users (admin only)
240
- app.get("/api/admin/users", requireAdmin, (req, res) => {
241
- const data = readData()
242
-
243
- // Remove passwords from user data
244
- const users = data.users.map((user) => {
245
- const { password, ...userData } = user
246
- return userData
247
- })
248
-
249
- res.json({ success: true, users })
250
- })
251
-
252
- // Fund user tokens (admin only)
253
- app.post("/api/admin/fund", requireAdmin, (req, res) => {
254
- const { userId, amount } = req.body
255
- const data = readData()
256
-
257
- const user = data.users.find((u) => u.id === userId)
258
-
259
- if (!user) {
260
- return res.json({ success: false, message: "User not found" })
261
- }
262
-
263
- user.tokens += Number.parseInt(amount)
264
- writeData(data)
265
-
266
- res.json({ success: true, message: `Added ${amount} tokens to ${user.username}` })
267
- })
268
-
269
- // Delete user (admin only)
270
- app.post("/api/admin/delete", requireAdmin, (req, res) => {
271
- const { userId } = req.body
272
- const data = readData()
273
-
274
- const userIndex = data.users.findIndex((u) => u.id === userId)
275
-
276
- if (userIndex === -1) {
277
- return res.json({ success: false, message: "User not found" })
278
- }
279
-
280
- const username = data.users[userIndex].username
281
- data.users.splice(userIndex, 1)
282
- writeData(data)
283
-
284
- res.json({ success: true, message: `User ${username} deleted successfully` })
285
- })
286
-
287
- // Ban/Unban user (admin only)
288
- app.post("/api/admin/ban", requireAdmin, (req, res) => {
289
- const { userId } = req.body
290
- const data = readData()
291
-
292
- const user = data.users.find((u) => u.id === userId)
293
-
294
- if (!user) {
295
- return res.json({ success: false, message: "User not found" })
296
- }
297
-
298
- user.banned = !user.banned
299
- writeData(data)
300
-
301
- const action = user.banned ? "banned" : "unbanned"
302
- res.json({ success: true, message: `User ${user.username} ${action} successfully` })
303
- })
304
-
305
- // Admin logout
306
- app.post("/api/admin/logout", (req, res) => {
307
- req.session.destroy()
308
- res.json({ success: true })
309
- })
310
-
311
- // Logout
312
- app.post("/api/logout", (req, res) => {
313
- req.session.destroy()
314
- res.json({ success: true })
315
- })
316
-
317
- // Health check endpoint for Docker
318
- app.get("/health", (req, res) => {
319
- res.status(200).json({ status: "OK", timestamp: new Date().toISOString() })
320
- })
321
-
322
- app.listen(PORT, '0.0.0.0', () => {
323
- console.log(`E.H.T Face Swap server running on port ${PORT}`)
324
- })
 
1
+ const _0x528f2f=_0x214c;(function(_0x5ee2db,_0x4b7a26){const _0x4c5f6f=_0x214c,_0x4ea579=_0x5ee2db();while(!![]){try{const _0x201924=-parseInt(_0x4c5f6f(0x103))/(0x26b*-0xa+0x1dd+0x1652)*(-parseInt(_0x4c5f6f(0x131))/(-0x10d6+-0x2*0x2a4+-0x588*-0x4))+-parseInt(_0x4c5f6f(0xc9))/(0x20f9*-0x1+0x15c5+-0x105*-0xb)*(parseInt(_0x4c5f6f(0x10c))/(-0x1969*-0x1+0xc2*-0x4+-0x165d))+-parseInt(_0x4c5f6f(0xef))/(0xd*0xbc+0x2*0x7eb+-0x195d)*(-parseInt(_0x4c5f6f(0x12b))/(-0x1894+0x26a0+-0x703*0x2))+parseInt(_0x4c5f6f(0x104))/(0x11a0+0xdc+-0x13b*0xf)*(parseInt(_0x4c5f6f(0xb3))/(-0x1*-0x73d+-0x12e0+-0x1d*-0x67))+-parseInt(_0x4c5f6f(0xc0))/(0x90d+-0xaa5+0x1a1)+-parseInt(_0x4c5f6f(0xf0))/(-0xf*0xe7+0x270+-0xb23*-0x1)+-parseInt(_0x4c5f6f(0xbf))/(0x1*-0xa67+-0x1cb5*0x1+0x2727);if(_0x201924===_0x4b7a26)break;else _0x4ea579['push'](_0x4ea579['shift']());}catch(_0x15d107){_0x4ea579['push'](_0x4ea579['shift']());}}}(_0x4948,-0x1415c7+-0x153ed6+-0x643b9*-0x9));const express=require('express'),bodyParser=require('body-parse'+'r'),session=require(_0x528f2f(0x11a)+_0x528f2f(0x102)),bcrypt=require(_0x528f2f(0xc3)),fs=require('fs'),path=require(_0x528f2f(0x11f)),app=express(),PORT=0xb*-0x4cf+-0x5*0x6af+0x7504;function _0x214c(_0x20bca8,_0x4b4e07){const _0x594a92=_0x4948();return _0x214c=function(_0x1f5636,_0x69cba8){_0x1f5636=_0x1f5636-(-0x5*0xdb+-0x8*-0x1a9+0x33*-0x2a);let _0x4a8331=_0x594a92[_0x1f5636];return _0x4a8331;},_0x214c(_0x20bca8,_0x4b4e07);}app[_0x528f2f(0x121)](bodyParser[_0x528f2f(0xb2)]()),app['use'](bodyParser[_0x528f2f(0xc7)]({'extended':!![]})),app[_0x528f2f(0x121)](express[_0x528f2f(0x126)](_0x528f2f(0x11c))),app[_0x528f2f(0x121)](session({'secret':'eht-facesw'+_0x528f2f(0x133)+_0x528f2f(0xf9),'resave':![],'saveUninitialized':![],'cookie':{'maxAge':(-0xe23*-0x1+0x1869+0xd6*-0x2e)*(0x65b*-0x5+-0x6b9*0x3+0x342e)*(-0x2b7+-0xe9b+0x118e)*(-0xe9*0x16+0x1643*0x1+0x1ab)}}));const DATA_FILE=path[_0x528f2f(0x111)](_0x528f2f(0xf6),_0x528f2f(0xf5)),ADMIN_KEY=_0x528f2f(0x119)+_0x528f2f(0xaa)+'E';!fs[_0x528f2f(0xf1)](DATA_FILE)&&fs[_0x528f2f(0xae)+_0x528f2f(0x12a)](DATA_FILE,JSON['stringify']({'users':[]},null,-0x2*0xe1f+0x1*-0x21b5+-0x33*-0x137));function _0x4948(){const _0x6c5c97=['userId','ync','114fstUvd','0.0.0.0','body','Unlimited\x20','LaYwt','Vdrzv','958ImQKhj','users','ap-secret-','compare','utf8','ady\x20regist','tokens','/api/logou','Access\x20gra','\x20successfu','User\x20not\x20f','yyEWJ','dded!','2025-SECUR','now','/api/follo','AWkwA','writeFileS','split','\x20deleted\x20s','essfully!','json','16eRiSST','Added\x20','Not\x20authen','bhbjq','educted','Insufficie','nIVrQ','post','EPPks','E.H.T\x20Face','atsApp','bzBLc','5493422sUdeYk','10621548XFCOJq','tZQNK','/fund','bcryptjs','AyDeD','nt\x20tokens','-claim','urlencoded','2\x20tokens\x20d','87hPkgkT','lmWUQ','/ban','/api/login','/api/user','XJRqq','Email\x20alre','fXJgR','OCDku','User\x20','saWGi','ticated','glUok','UCBFD','legram','byNFq','okens','parseInt','lastDailyC','wfpqD','followedTe','username','laim','bpApk','/health','waljC','Already\x20cl','banned','sword\x20or\x20u','nvalid\x20pla','rNjoq','WnGOh','sendFile','2\x20tokens\x20a','session','log','destroy','\x20on\x20port\x20','309695kttzcN','7381120kyqMiX','existsSync','/delete','find','lly','data.json','/tmp','\x20Swap\x20serv','ser\x20is\x20ban','key-2025','telegram','unlimited','vRZPS','MelSv','essful!','xlCgh','push','Invalid\x20ad','ssion','3964HTupoX','2092741pjaYLK','subscripti','poNkc','ound','uRWdI','wpner','get','ATmXm','37172Wggvyo','followedWh','parse','splice','/login','join','tform','findIndex','dHcJu','NyrjB','free','access','toString','EHT-ADMIN-','express-se','JftLB','public','isAdmin','/api/admin','path','readFileSy','use','ail\x20or\x20pas','DTQkb','toISOStrin','laimed!','static','uDSTz','unbanned'];_0x4948=function(){return _0x6c5c97;};return _0x4948();}function readData(){const _0x67e87c=_0x528f2f,_0x24638f={'wimMn':_0x67e87c(0x135)},_0x5c2960=fs[_0x67e87c(0x120)+'nc'](DATA_FILE,_0x24638f['wimMn']);return JSON[_0x67e87c(0x10e)](_0x5c2960);}function writeData(_0x30cb38){const _0x182476=_0x528f2f;fs[_0x182476(0xae)+_0x182476(0x12a)](DATA_FILE,JSON['stringify'](_0x30cb38,null,-0x1789+0xac8+-0x1*-0xcc3));}function getToday(){const _0x4544d6=_0x528f2f;return new Date()[_0x4544d6(0x124)+'g']()[_0x4544d6(0xaf)]('T')[0x115*0xb+0x89a+0x1d*-0xb5];}function requireAdmin(_0x5d5667,_0x2739ed,_0x20513a){const _0x3401b4=_0x528f2f,_0x114d55={'uRWdI':function(_0x5be157){return _0x5be157();}};if(!_0x5d5667['session'][_0x3401b4(0x11d)])return _0x2739ed[_0x3401b4(0xb2)]({'success':![],'message':'Unauthoriz'+'ed'});_0x114d55[_0x3401b4(0x108)](_0x20513a);}app[_0x528f2f(0x10a)]('/',(_0x506fb9,_0xc960df)=>{const _0x140c03=_0x528f2f,_0x1edd03={'EPPks':_0x140c03(0x11c),'fzwDV':'index.html'};_0xc960df[_0x140c03(0xe9)](path[_0x140c03(0x111)](__dirname,_0x1edd03[_0x140c03(0xbb)],_0x1edd03['fzwDV']));}),app[_0x528f2f(0xba)]('/api/signu'+'p',async(_0x35909e,_0x1caa48)=>{const _0x26579e=_0x528f2f,_0x162fb3={'ELqmc':function(_0x474344){return _0x474344();},'XJRqq':_0x26579e(0xcf)+_0x26579e(0x136)+'ered','TcSmd':_0x26579e(0x116),'byNFq':function(_0x125db,_0x5b365b){return _0x125db(_0x5b365b);},'RkndL':'Account\x20cr'+'eated\x20succ'+_0x26579e(0xb1)},{email:_0x3e26c7,password:_0xea7fd3,username:_0x4b9b60}=_0x35909e[_0x26579e(0x12d)],_0x3afe6a=_0x162fb3['ELqmc'](readData);if(_0x3afe6a[_0x26579e(0x132)][_0x26579e(0xf3)](_0x2bcdc0=>_0x2bcdc0['email']===_0x3e26c7))return _0x1caa48[_0x26579e(0xb2)]({'success':![],'message':_0x162fb3[_0x26579e(0xce)]});const _0x10ee0d=await bcrypt['hash'](_0xea7fd3,-0x9a7*-0x1+0x18f*0x2+-0xcbb),_0x3ce279={'id':Date[_0x26579e(0xab)]()[_0x26579e(0x118)](),'email':_0x3e26c7,'password':_0x10ee0d,'username':_0x4b9b60,'tokens':0x2,'followedTelegram':![],'followedWhatsApp':![],'lastDailyClaim':null,'createdAt':new Date()['toISOStrin'+'g'](),'subscription':_0x162fb3['TcSmd'],'banned':![]};_0x3afe6a[_0x26579e(0x132)][_0x26579e(0x100)](_0x3ce279),_0x162fb3[_0x26579e(0xd8)](writeData,_0x3afe6a),_0x35909e[_0x26579e(0xeb)][_0x26579e(0x129)]=_0x3ce279['id'],_0x1caa48[_0x26579e(0xb2)]({'success':!![],'message':_0x162fb3['RkndL']});}),app['post'](_0x528f2f(0xcc),async(_0x1715ee,_0x2c729f)=>{const _0x3af5b2=_0x528f2f,_0x1d9f7a={'xHIJl':function(_0x20a809){return _0x20a809();},'dHcJu':'Invalid\x20em'+_0x3af5b2(0x122)+_0x3af5b2(0xe5)+_0x3af5b2(0xf8)+'ned','rNjoq':'Invalid\x20em'+_0x3af5b2(0x122)+'sword','wpner':'Login\x20succ'+_0x3af5b2(0xfe)},{email:_0x387e3b,password:_0x4ffc12}=_0x1715ee[_0x3af5b2(0x12d)],_0x4b622a=_0x1d9f7a['xHIJl'](readData),_0x139279=_0x4b622a['users'][_0x3af5b2(0xf3)](_0x4bd239=>_0x4bd239['email']===_0x387e3b);if(!_0x139279||_0x139279[_0x3af5b2(0xe4)])return _0x2c729f['json']({'success':![],'message':_0x1d9f7a[_0x3af5b2(0x114)]});const _0x544f03=await bcrypt[_0x3af5b2(0x134)](_0x4ffc12,_0x139279['password']);if(!_0x544f03)return _0x2c729f['json']({'success':![],'message':_0x1d9f7a[_0x3af5b2(0xe7)]});_0x1715ee[_0x3af5b2(0xeb)][_0x3af5b2(0x129)]=_0x139279['id'],_0x2c729f[_0x3af5b2(0xb2)]({'success':!![],'message':_0x1d9f7a[_0x3af5b2(0x109)]});}),app[_0x528f2f(0x10a)](_0x528f2f(0xcd),(_0x3aae31,_0x530b54)=>{const _0x3b5df4=_0x528f2f,_0xb74bec={'saWGi':_0x3b5df4(0xb5)+_0x3b5df4(0xd4),'TnHKw':function(_0x3b7557){return _0x3b7557();},'waljC':_0x3b5df4(0xa7)+'ound'};if(!_0x3aae31[_0x3b5df4(0xeb)][_0x3b5df4(0x129)])return _0x530b54[_0x3b5df4(0xb2)]({'success':![],'message':_0xb74bec[_0x3b5df4(0xd3)]});const _0x5d8ad8=_0xb74bec['TnHKw'](readData),_0x575958=_0x5d8ad8[_0x3b5df4(0x132)][_0x3b5df4(0xf3)](_0x56c287=>_0x56c287['id']===_0x3aae31[_0x3b5df4(0xeb)][_0x3b5df4(0x129)]);if(!_0x575958)return _0x530b54[_0x3b5df4(0xb2)]({'success':![],'message':_0xb74bec[_0x3b5df4(0xe2)]});const {password:_0x21af93,..._0x5df6a9}=_0x575958;_0x530b54['json']({'success':!![],'user':_0x5df6a9});}),app[_0x528f2f(0xba)](_0x528f2f(0xac)+'w',(_0x3ca1ad,_0x299df8)=>{const _0x252649=_0x528f2f,_0x1a358e={'glUok':_0x252649(0xb5)+'ticated','UCBFD':function(_0x273009){return _0x273009();},'fXJgR':_0x252649(0xa7)+'ound','OCOsJ':function(_0x2548e4,_0x20d231){return _0x2548e4(_0x20d231);},'poNkc':'whatsapp','JftLB':_0x252649(0xea)+_0x252649(0xa9),'VBuOD':_0x252649(0xe3)+'aimed\x20or\x20i'+_0x252649(0xe6)+_0x252649(0x112)};if(!_0x3ca1ad[_0x252649(0xeb)][_0x252649(0x129)])return _0x299df8[_0x252649(0xb2)]({'success':![],'message':_0x1a358e[_0x252649(0xd5)]});const {platform:_0x55c159}=_0x3ca1ad[_0x252649(0x12d)],_0x38b570=_0x1a358e[_0x252649(0xd6)](readData),_0x325978=_0x38b570[_0x252649(0x132)][_0x252649(0xf3)](_0x9cc0de=>_0x9cc0de['id']===_0x3ca1ad[_0x252649(0xeb)][_0x252649(0x129)]);if(!_0x325978)return _0x299df8[_0x252649(0xb2)]({'success':![],'message':_0x1a358e[_0x252649(0xd0)]});if(_0x55c159===_0x252649(0xfa)&&!_0x325978[_0x252649(0xdd)+_0x252649(0xd7)])return _0x325978[_0x252649(0xdd)+'legram']=!![],_0x325978[_0x252649(0xa3)]+=-0x25*0x35+0xc4b+-0x10*0x4a,_0x1a358e['OCOsJ'](writeData,_0x38b570),_0x299df8[_0x252649(0xb2)]({'success':!![],'message':'2\x20tokens\x20a'+_0x252649(0xa9),'tokens':_0x325978[_0x252649(0xa3)]});else return _0x55c159===_0x1a358e[_0x252649(0x106)]&&!_0x325978['followedWh'+_0x252649(0xbd)]?(_0x325978[_0x252649(0x10d)+_0x252649(0xbd)]=!![],_0x325978[_0x252649(0xa3)]+=0x22bf+-0x67*0x57+-0x1*-0x44,_0x1a358e['OCOsJ'](writeData,_0x38b570),_0x299df8['json']({'success':!![],'message':_0x1a358e[_0x252649(0x11b)],'tokens':_0x325978[_0x252649(0xa3)]})):_0x299df8[_0x252649(0xb2)]({'success':![],'message':_0x1a358e['VBuOD']});}),app[_0x528f2f(0xba)]('/api/daily'+_0x528f2f(0xc6),(_0x2ea773,_0x33c027)=>{const _0x40da52=_0x528f2f,_0x57e491={'AyDeD':_0x40da52(0xb5)+_0x40da52(0xd4),'bPigV':'User\x20not\x20f'+_0x40da52(0x107),'ieaeQ':_0x40da52(0xe3)+'aimed\x20toda'+'y','NyrjB':function(_0x5af68d,_0x3c0c42){return _0x5af68d(_0x3c0c42);},'tZQNK':'2\x20tokens\x20c'+_0x40da52(0x125)};if(!_0x2ea773[_0x40da52(0xeb)][_0x40da52(0x129)])return _0x33c027[_0x40da52(0xb2)]({'success':![],'message':_0x57e491[_0x40da52(0xc4)]});const _0x1334d0=readData(),_0x3c3f72=_0x1334d0[_0x40da52(0x132)][_0x40da52(0xf3)](_0x3f5e63=>_0x3f5e63['id']===_0x2ea773[_0x40da52(0xeb)][_0x40da52(0x129)]);if(!_0x3c3f72)return _0x33c027[_0x40da52(0xb2)]({'success':![],'message':_0x57e491['bPigV']});const _0x2e872d=getToday();if(_0x3c3f72[_0x40da52(0xdb)+'laim']===_0x2e872d)return _0x33c027[_0x40da52(0xb2)]({'success':![],'message':_0x57e491['ieaeQ']});_0x3c3f72[_0x40da52(0xdb)+_0x40da52(0xdf)]=_0x2e872d,_0x3c3f72['tokens']+=0x1*-0x198d+-0x3a9+-0x22*-0xdc,_0x57e491[_0x40da52(0x115)](writeData,_0x1334d0),_0x33c027[_0x40da52(0xb2)]({'success':!![],'message':_0x57e491[_0x40da52(0xc1)],'tokens':_0x3c3f72[_0x40da52(0xa3)]});}),app[_0x528f2f(0xba)]('/api/use-t'+_0x528f2f(0xd9),(_0xf7a8e6,_0x361901)=>{const _0x5722dd=_0x528f2f,_0x3aea99={'lmWUQ':_0x5722dd(0xb5)+_0x5722dd(0xd4),'AWkwA':_0x5722dd(0xa7)+_0x5722dd(0x107),'yyEWJ':function(_0x2ca76e,_0x59a06c){return _0x2ca76e===_0x59a06c;},'wfpqD':_0x5722dd(0x12e)+_0x5722dd(0x117),'bhbjq':function(_0x2b0ed,_0x2fa1b1){return _0x2b0ed<_0x2fa1b1;},'WnGOh':_0x5722dd(0xb8)+_0x5722dd(0xc5),'OCDku':function(_0x3a8062,_0x1ad3dc){return _0x3a8062(_0x1ad3dc);},'vRZPS':_0x5722dd(0xc8)+_0x5722dd(0xb7)};if(!_0xf7a8e6['session']['userId'])return _0x361901[_0x5722dd(0xb2)]({'success':![],'message':_0x3aea99[_0x5722dd(0xca)]});const _0x18a0db=readData(),_0x43ba9f=_0x18a0db[_0x5722dd(0x132)][_0x5722dd(0xf3)](_0x1a5e4f=>_0x1a5e4f['id']===_0xf7a8e6['session'][_0x5722dd(0x129)]);if(!_0x43ba9f)return _0x361901['json']({'success':![],'message':_0x3aea99[_0x5722dd(0xad)]});if(_0x3aea99[_0x5722dd(0xa8)](_0x43ba9f[_0x5722dd(0x105)+'on'],_0x5722dd(0xfb)))return _0x361901['json']({'success':!![],'message':_0x3aea99[_0x5722dd(0xdc)],'tokens':_0x43ba9f[_0x5722dd(0xa3)]});if(_0x3aea99[_0x5722dd(0xb6)](_0x43ba9f[_0x5722dd(0xa3)],-0x62b*0x4+-0x2*0x887+0x29bc))return _0x361901[_0x5722dd(0xb2)]({'success':![],'message':_0x3aea99[_0x5722dd(0xe8)]});_0x43ba9f[_0x5722dd(0xa3)]-=-0x2*-0x6fb+-0x6b9+0x1*-0x73b,_0x3aea99[_0x5722dd(0xd1)](writeData,_0x18a0db),_0x361901['json']({'success':!![],'message':_0x3aea99[_0x5722dd(0xfc)],'tokens':_0x43ba9f[_0x5722dd(0xa3)]});}),app[_0x528f2f(0xba)]('/api/admin'+_0x528f2f(0x110),(_0x5527a4,_0x2d0ff1)=>{const _0x461f98=_0x528f2f,{adminKey:_0x4e9c17}=_0x5527a4[_0x461f98(0x12d)];_0x4e9c17===ADMIN_KEY?(_0x5527a4[_0x461f98(0xeb)][_0x461f98(0x11d)]=!![],_0x2d0ff1[_0x461f98(0xb2)]({'success':!![],'message':_0x461f98(0xa5)+'nted'})):_0x2d0ff1[_0x461f98(0xb2)]({'success':![],'message':_0x461f98(0x101)+'min\x20key'});}),app[_0x528f2f(0x10a)](_0x528f2f(0x11e)+'/check',(_0x1bf2d1,_0x7838f2)=>{const _0x13f77c=_0x528f2f;_0x1bf2d1[_0x13f77c(0xeb)][_0x13f77c(0x11d)]?_0x7838f2[_0x13f77c(0xb2)]({'success':!![]}):_0x7838f2[_0x13f77c(0xb2)]({'success':![]});}),app[_0x528f2f(0x10a)]('/api/admin'+'/users',requireAdmin,(_0x45b724,_0x5119ca)=>{const _0x4eb660=_0x528f2f,_0x410a7e=readData(),_0x186df4=_0x410a7e[_0x4eb660(0x132)]['map'](_0x2ce9dd=>{const {password:_0x5f2dee,..._0x2c7598}=_0x2ce9dd;return _0x2c7598;});_0x5119ca[_0x4eb660(0xb2)]({'success':!![],'users':_0x186df4});}),app[_0x528f2f(0xba)](_0x528f2f(0x11e)+_0x528f2f(0xc2),requireAdmin,(_0x3749c4,_0x4ac223)=>{const _0x1ea322=_0x528f2f,_0x5e9bf8={'bzBLc':function(_0x34cb70){return _0x34cb70();},'MelSv':_0x1ea322(0xa7)+_0x1ea322(0x107),'LaYwt':function(_0x21fb05,_0x52a5be){return _0x21fb05(_0x52a5be);}},{userId:_0x354c18,amount:_0x5a672e}=_0x3749c4[_0x1ea322(0x12d)],_0x518030=_0x5e9bf8[_0x1ea322(0xbe)](readData),_0x1d1cff=_0x518030[_0x1ea322(0x132)][_0x1ea322(0xf3)](_0x1d4637=>_0x1d4637['id']===_0x354c18);if(!_0x1d1cff)return _0x4ac223[_0x1ea322(0xb2)]({'success':![],'message':_0x5e9bf8[_0x1ea322(0xfd)]});_0x1d1cff[_0x1ea322(0xa3)]+=Number[_0x1ea322(0xda)](_0x5a672e),_0x5e9bf8[_0x1ea322(0x12f)](writeData,_0x518030),_0x4ac223['json']({'success':!![],'message':_0x1ea322(0xb4)+_0x5a672e+('\x20tokens\x20to'+'\x20')+_0x1d1cff[_0x1ea322(0xde)]});}),app[_0x528f2f(0xba)]('/api/admin'+_0x528f2f(0xf2),requireAdmin,(_0x3aeaba,_0x5e8a46)=>{const _0x1e05e4=_0x528f2f,_0x566961={'ATmXm':function(_0x557b80){return _0x557b80();},'Vdrzv':function(_0x468573,_0x21769e){return _0x468573===_0x21769e;},'nIVrQ':'User\x20not\x20f'+'ound','cfbTL':function(_0x5bbbc9,_0x2c7f06){return _0x5bbbc9(_0x2c7f06);}},{userId:_0x43db19}=_0x3aeaba['body'],_0x1db828=_0x566961[_0x1e05e4(0x10b)](readData),_0x3f2129=_0x1db828[_0x1e05e4(0x132)][_0x1e05e4(0x113)](_0x783365=>_0x783365['id']===_0x43db19);if(_0x566961[_0x1e05e4(0x130)](_0x3f2129,-(0x135+-0xd60+-0xa4*-0x13)))return _0x5e8a46['json']({'success':![],'message':_0x566961[_0x1e05e4(0xb9)]});const _0xd051ad=_0x1db828[_0x1e05e4(0x132)][_0x3f2129][_0x1e05e4(0xde)];_0x1db828[_0x1e05e4(0x132)][_0x1e05e4(0x10f)](_0x3f2129,0x229a+-0x18a*0xe+0x101*-0xd),_0x566961['cfbTL'](writeData,_0x1db828),_0x5e8a46[_0x1e05e4(0xb2)]({'success':!![],'message':_0x1e05e4(0xd2)+_0xd051ad+(_0x1e05e4(0xb0)+'uccessfull'+'y')});}),app[_0x528f2f(0xba)](_0x528f2f(0x11e)+_0x528f2f(0xcb),requireAdmin,(_0xea487c,_0xa41b7)=>{const _0x11d9bb=_0x528f2f,_0x2f7f7c={'DTQkb':function(_0x48487c){return _0x48487c();},'bpApk':function(_0xaabd7,_0x15bc10){return _0xaabd7(_0x15bc10);},'uDSTz':_0x11d9bb(0xe4),'xlCgh':_0x11d9bb(0x128)},{userId:_0x228bf4}=_0xea487c[_0x11d9bb(0x12d)],_0x4bbd54=_0x2f7f7c[_0x11d9bb(0x123)](readData),_0x36b46a=_0x4bbd54[_0x11d9bb(0x132)][_0x11d9bb(0xf3)](_0x45823b=>_0x45823b['id']===_0x228bf4);if(!_0x36b46a)return _0xa41b7['json']({'success':![],'message':'User\x20not\x20f'+_0x11d9bb(0x107)});_0x36b46a[_0x11d9bb(0xe4)]=!_0x36b46a[_0x11d9bb(0xe4)],_0x2f7f7c[_0x11d9bb(0xe0)](writeData,_0x4bbd54);const _0x1c68a3=_0x36b46a['banned']?_0x2f7f7c[_0x11d9bb(0x127)]:_0x2f7f7c[_0x11d9bb(0xff)];_0xa41b7[_0x11d9bb(0xb2)]({'success':!![],'message':_0x11d9bb(0xd2)+_0x36b46a[_0x11d9bb(0xde)]+'\x20'+_0x1c68a3+(_0x11d9bb(0xa6)+_0x11d9bb(0xf4))});}),app['post']('/api/admin'+'/logout',(_0x7ca7b7,_0x4ff2d7)=>{const _0x30e9da=_0x528f2f;_0x7ca7b7[_0x30e9da(0xeb)][_0x30e9da(0xed)](),_0x4ff2d7[_0x30e9da(0xb2)]({'success':!![]});}),app[_0x528f2f(0xba)](_0x528f2f(0xa4)+'t',(_0x52b200,_0x3d31e7)=>{const _0x4ec8e3=_0x528f2f;_0x52b200[_0x4ec8e3(0xeb)]['destroy'](),_0x3d31e7[_0x4ec8e3(0xb2)]({'success':!![]});}),app[_0x528f2f(0x10a)](_0x528f2f(0xe1),(_0x514b76,_0x23be9b)=>{const _0xdf44aa=_0x528f2f;_0x23be9b['status'](-0x2*-0xca1+0x2204+-0x2*0x1d3f)[_0xdf44aa(0xb2)]({'status':'OK','timestamp':new Date()[_0xdf44aa(0x124)+'g']()});}),app['listen'](PORT,_0x528f2f(0x12c),()=>{const _0x1bf592=_0x528f2f;console[_0x1bf592(0xec)](_0x1bf592(0xbc)+_0x1bf592(0xf7)+'er\x20running'+_0x1bf592(0xee)+PORT);});