neoagent 2.0.2 → 2.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json
CHANGED
|
@@ -37,6 +37,6 @@ _flutter.buildConfig = {"engineRevision":"052f31d115eceda8cbff1b3481fcde4330c4ae
|
|
|
37
37
|
|
|
38
38
|
_flutter.loader.load({
|
|
39
39
|
serviceWorkerSettings: {
|
|
40
|
-
serviceWorkerVersion: "
|
|
40
|
+
serviceWorkerVersion: "2062946621" /* Flutter's service worker is deprecated and will be removed in a future Flutter release. */
|
|
41
41
|
}
|
|
42
42
|
});
|
package/server/routes/auth.js
CHANGED
|
@@ -13,6 +13,30 @@ const authLimiter = rateLimit({
|
|
|
13
13
|
legacyHeaders: false
|
|
14
14
|
});
|
|
15
15
|
|
|
16
|
+
function establishSession(req, res, user) {
|
|
17
|
+
req.session.regenerate((regenerateError) => {
|
|
18
|
+
if (regenerateError) {
|
|
19
|
+
console.error('Auth session regenerate error:', regenerateError);
|
|
20
|
+
return res.status(500).json({ error: 'Session error' });
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
req.session.userId = user.id;
|
|
24
|
+
req.session.username = user.username;
|
|
25
|
+
req.session.save((saveError) => {
|
|
26
|
+
if (saveError) {
|
|
27
|
+
console.error('Auth session save error:', saveError);
|
|
28
|
+
return res.status(500).json({ error: 'Session save error' });
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
return res.json({
|
|
32
|
+
success: true,
|
|
33
|
+
redirect: '/app',
|
|
34
|
+
user: { id: user.id, username: user.username }
|
|
35
|
+
});
|
|
36
|
+
});
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
|
|
16
40
|
router.get('/api/auth/status', (req, res) => {
|
|
17
41
|
const count = db.prepare('SELECT COUNT(*) as count FROM users').get();
|
|
18
42
|
res.json({ hasUser: count.count > 0 });
|
|
@@ -36,14 +60,9 @@ router.post('/api/auth/register', authLimiter, async (req, res) => {
|
|
|
36
60
|
const hash = await bcrypt.hash(password, 12);
|
|
37
61
|
const result = db.prepare('INSERT INTO users (username, password) VALUES (?, ?)').run(username, hash);
|
|
38
62
|
|
|
39
|
-
req
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
req.session.username = username;
|
|
43
|
-
req.session.save((err) => {
|
|
44
|
-
if (err) return res.status(500).json({ error: 'Session save error' });
|
|
45
|
-
res.json({ success: true, redirect: '/app', user: { id: result.lastInsertRowid, username } });
|
|
46
|
-
});
|
|
63
|
+
establishSession(req, res, {
|
|
64
|
+
id: result.lastInsertRowid,
|
|
65
|
+
username
|
|
47
66
|
});
|
|
48
67
|
} catch (err) {
|
|
49
68
|
console.error('Register error:', err);
|
|
@@ -68,17 +87,14 @@ router.post('/api/auth/login', authLimiter, async (req, res) => {
|
|
|
68
87
|
return res.status(401).json({ error: 'Invalid credentials' });
|
|
69
88
|
}
|
|
70
89
|
|
|
71
|
-
|
|
90
|
+
try {
|
|
91
|
+
db.prepare('UPDATE users SET last_login = datetime(\'now\') WHERE id = ?').run(user.id);
|
|
92
|
+
} catch (updateError) {
|
|
93
|
+
// Keep login functional even if analytics-style metadata cannot be written.
|
|
94
|
+
console.warn('Login last_login update failed:', updateError);
|
|
95
|
+
}
|
|
72
96
|
|
|
73
|
-
req
|
|
74
|
-
if (err) return res.status(500).json({ error: 'Session error' });
|
|
75
|
-
req.session.userId = user.id;
|
|
76
|
-
req.session.username = user.username;
|
|
77
|
-
req.session.save((err) => {
|
|
78
|
-
if (err) return res.status(500).json({ error: 'Session save error' });
|
|
79
|
-
res.json({ success: true, redirect: '/app', user: { id: user.id, username: user.username } });
|
|
80
|
-
});
|
|
81
|
-
});
|
|
97
|
+
establishSession(req, res, user);
|
|
82
98
|
} catch (err) {
|
|
83
99
|
console.error('Login error:', err);
|
|
84
100
|
res.status(500).json({ error: 'Login failed' });
|