libre-webui 0.2.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/LICENSE +201 -0
- package/README.md +204 -0
- package/backend/dist/db.d.ts +19 -0
- package/backend/dist/db.d.ts.map +1 -0
- package/backend/dist/db.js +355 -0
- package/backend/dist/db.js.map +1 -0
- package/backend/dist/env.d.ts +2 -0
- package/backend/dist/env.d.ts.map +1 -0
- package/backend/dist/env.js +22 -0
- package/backend/dist/env.js.map +1 -0
- package/backend/dist/index.d.ts +4 -0
- package/backend/dist/index.d.ts.map +1 -0
- package/backend/dist/index.js +751 -0
- package/backend/dist/index.js.map +1 -0
- package/backend/dist/middleware/auth.d.ts +18 -0
- package/backend/dist/middleware/auth.d.ts.map +1 -0
- package/backend/dist/middleware/auth.js +98 -0
- package/backend/dist/middleware/auth.js.map +1 -0
- package/backend/dist/middleware/index.d.ts +5 -0
- package/backend/dist/middleware/index.d.ts.map +1 -0
- package/backend/dist/middleware/index.js +62 -0
- package/backend/dist/middleware/index.js.map +1 -0
- package/backend/dist/models/personaModel.d.ts +37 -0
- package/backend/dist/models/personaModel.d.ts.map +1 -0
- package/backend/dist/models/personaModel.js +269 -0
- package/backend/dist/models/personaModel.js.map +1 -0
- package/backend/dist/models/userModel.d.ts +86 -0
- package/backend/dist/models/userModel.d.ts.map +1 -0
- package/backend/dist/models/userModel.js +212 -0
- package/backend/dist/models/userModel.js.map +1 -0
- package/backend/dist/routes/auth.d.ts +3 -0
- package/backend/dist/routes/auth.d.ts.map +1 -0
- package/backend/dist/routes/auth.js +389 -0
- package/backend/dist/routes/auth.js.map +1 -0
- package/backend/dist/routes/chat.d.ts +3 -0
- package/backend/dist/routes/chat.d.ts.map +1 -0
- package/backend/dist/routes/chat.js +767 -0
- package/backend/dist/routes/chat.js.map +1 -0
- package/backend/dist/routes/documents.d.ts +3 -0
- package/backend/dist/routes/documents.d.ts.map +1 -0
- package/backend/dist/routes/documents.js +244 -0
- package/backend/dist/routes/documents.js.map +1 -0
- package/backend/dist/routes/ollama.d.ts +3 -0
- package/backend/dist/routes/ollama.d.ts.map +1 -0
- package/backend/dist/routes/ollama.js +549 -0
- package/backend/dist/routes/ollama.js.map +1 -0
- package/backend/dist/routes/personas.d.ts +3 -0
- package/backend/dist/routes/personas.d.ts.map +1 -0
- package/backend/dist/routes/personas.js +505 -0
- package/backend/dist/routes/personas.js.map +1 -0
- package/backend/dist/routes/plugins.d.ts +3 -0
- package/backend/dist/routes/plugins.d.ts.map +1 -0
- package/backend/dist/routes/plugins.js +417 -0
- package/backend/dist/routes/plugins.js.map +1 -0
- package/backend/dist/routes/preferences.d.ts +3 -0
- package/backend/dist/routes/preferences.d.ts.map +1 -0
- package/backend/dist/routes/preferences.js +303 -0
- package/backend/dist/routes/preferences.js.map +1 -0
- package/backend/dist/routes/tts.d.ts +3 -0
- package/backend/dist/routes/tts.d.ts.map +1 -0
- package/backend/dist/routes/tts.js +304 -0
- package/backend/dist/routes/tts.js.map +1 -0
- package/backend/dist/routes/users.d.ts +3 -0
- package/backend/dist/routes/users.d.ts.map +1 -0
- package/backend/dist/routes/users.js +246 -0
- package/backend/dist/routes/users.js.map +1 -0
- package/backend/dist/services/authService.d.ts +51 -0
- package/backend/dist/services/authService.d.ts.map +1 -0
- package/backend/dist/services/authService.js +153 -0
- package/backend/dist/services/authService.js.map +1 -0
- package/backend/dist/services/chatService.d.ts +52 -0
- package/backend/dist/services/chatService.d.ts.map +1 -0
- package/backend/dist/services/chatService.js +645 -0
- package/backend/dist/services/chatService.js.map +1 -0
- package/backend/dist/services/documentService.d.ts +34 -0
- package/backend/dist/services/documentService.d.ts.map +1 -0
- package/backend/dist/services/documentService.js +428 -0
- package/backend/dist/services/documentService.js.map +1 -0
- package/backend/dist/services/encryptionService.d.ts +62 -0
- package/backend/dist/services/encryptionService.d.ts.map +1 -0
- package/backend/dist/services/encryptionService.js +284 -0
- package/backend/dist/services/encryptionService.js.map +1 -0
- package/backend/dist/services/memoryService.d.ts +140 -0
- package/backend/dist/services/memoryService.d.ts.map +1 -0
- package/backend/dist/services/memoryService.js +867 -0
- package/backend/dist/services/memoryService.js.map +1 -0
- package/backend/dist/services/mutationEngineService.d.ts +49 -0
- package/backend/dist/services/mutationEngineService.d.ts.map +1 -0
- package/backend/dist/services/mutationEngineService.js +432 -0
- package/backend/dist/services/mutationEngineService.js.map +1 -0
- package/backend/dist/services/ollamaService.d.ts +55 -0
- package/backend/dist/services/ollamaService.d.ts.map +1 -0
- package/backend/dist/services/ollamaService.js +450 -0
- package/backend/dist/services/ollamaService.js.map +1 -0
- package/backend/dist/services/personaService.d.ts +67 -0
- package/backend/dist/services/personaService.d.ts.map +1 -0
- package/backend/dist/services/personaService.js +373 -0
- package/backend/dist/services/personaService.js.map +1 -0
- package/backend/dist/services/pluginService.d.ts +42 -0
- package/backend/dist/services/pluginService.d.ts.map +1 -0
- package/backend/dist/services/pluginService.js +961 -0
- package/backend/dist/services/pluginService.js.map +1 -0
- package/backend/dist/services/preferencesService.d.ts +35 -0
- package/backend/dist/services/preferencesService.d.ts.map +1 -0
- package/backend/dist/services/preferencesService.js +255 -0
- package/backend/dist/services/preferencesService.js.map +1 -0
- package/backend/dist/services/simpleGitHubOAuth.d.ts +48 -0
- package/backend/dist/services/simpleGitHubOAuth.d.ts.map +1 -0
- package/backend/dist/services/simpleGitHubOAuth.js +203 -0
- package/backend/dist/services/simpleGitHubOAuth.js.map +1 -0
- package/backend/dist/services/simpleHuggingFaceOAuth.d.ts +43 -0
- package/backend/dist/services/simpleHuggingFaceOAuth.d.ts.map +1 -0
- package/backend/dist/services/simpleHuggingFaceOAuth.js +159 -0
- package/backend/dist/services/simpleHuggingFaceOAuth.js.map +1 -0
- package/backend/dist/services/userService.d.ts +1 -0
- package/backend/dist/services/userService.d.ts.map +1 -0
- package/backend/dist/services/userService.js +18 -0
- package/backend/dist/services/userService.js.map +1 -0
- package/backend/dist/storage.d.ts +55 -0
- package/backend/dist/storage.d.ts.map +1 -0
- package/backend/dist/storage.js +741 -0
- package/backend/dist/storage.js.map +1 -0
- package/backend/dist/test-encryption.d.ts +2 -0
- package/backend/dist/test-encryption.d.ts.map +1 -0
- package/backend/dist/test-encryption.js +64 -0
- package/backend/dist/test-encryption.js.map +1 -0
- package/backend/dist/types/index.d.ts +523 -0
- package/backend/dist/types/index.d.ts.map +1 -0
- package/backend/dist/types/index.js +31 -0
- package/backend/dist/types/index.js.map +1 -0
- package/backend/dist/utils/generationUtils.d.ts +10 -0
- package/backend/dist/utils/generationUtils.d.ts.map +1 -0
- package/backend/dist/utils/generationUtils.js +49 -0
- package/backend/dist/utils/generationUtils.js.map +1 -0
- package/backend/dist/utils/hash.d.ts +29 -0
- package/backend/dist/utils/hash.d.ts.map +1 -0
- package/backend/dist/utils/hash.js +73 -0
- package/backend/dist/utils/hash.js.map +1 -0
- package/backend/dist/utils/jwt.d.ts +37 -0
- package/backend/dist/utils/jwt.d.ts.map +1 -0
- package/backend/dist/utils/jwt.js +86 -0
- package/backend/dist/utils/jwt.js.map +1 -0
- package/bin/cli.js +150 -0
- package/electron/main.js +322 -0
- package/frontend/dist/_redirects +1 -0
- package/frontend/dist/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
- package/frontend/dist/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
- package/frontend/dist/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
- package/frontend/dist/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
- package/frontend/dist/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
- package/frontend/dist/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
- package/frontend/dist/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
- package/frontend/dist/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
- package/frontend/dist/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
- package/frontend/dist/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
- package/frontend/dist/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
- package/frontend/dist/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
- package/frontend/dist/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
- package/frontend/dist/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
- package/frontend/dist/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
- package/frontend/dist/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
- package/frontend/dist/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
- package/frontend/dist/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
- package/frontend/dist/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
- package/frontend/dist/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
- package/frontend/dist/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
- package/frontend/dist/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
- package/frontend/dist/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
- package/frontend/dist/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
- package/frontend/dist/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
- package/frontend/dist/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
- package/frontend/dist/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
- package/frontend/dist/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
- package/frontend/dist/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
- package/frontend/dist/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
- package/frontend/dist/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
- package/frontend/dist/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
- package/frontend/dist/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
- package/frontend/dist/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
- package/frontend/dist/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
- package/frontend/dist/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
- package/frontend/dist/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
- package/frontend/dist/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
- package/frontend/dist/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
- package/frontend/dist/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
- package/frontend/dist/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
- package/frontend/dist/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
- package/frontend/dist/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
- package/frontend/dist/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
- package/frontend/dist/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
- package/frontend/dist/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
- package/frontend/dist/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
- package/frontend/dist/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
- package/frontend/dist/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
- package/frontend/dist/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
- package/frontend/dist/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
- package/frontend/dist/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
- package/frontend/dist/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
- package/frontend/dist/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
- package/frontend/dist/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
- package/frontend/dist/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
- package/frontend/dist/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
- package/frontend/dist/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
- package/frontend/dist/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
- package/frontend/dist/assets/index-CRQkB7Wz.js +3 -0
- package/frontend/dist/css/index-B1OjddR-.css +1 -0
- package/frontend/dist/favicon-dark.png +0 -0
- package/frontend/dist/favicon-light.png +0 -0
- package/frontend/dist/index.html +23 -0
- package/frontend/dist/js/ArtifactContainer-c_oi7XMs.js +23 -0
- package/frontend/dist/js/ArtifactDemoPage-CdfwJVXu.js +98 -0
- package/frontend/dist/js/ChatPage-CyotkmS0.js +281 -0
- package/frontend/dist/js/ModelsPage-DNaziPHc.js +2 -0
- package/frontend/dist/js/PersonasPage-DcnbJf8Q.js +13 -0
- package/frontend/dist/js/UserManagementPage-DtTf92dS.js +1 -0
- package/frontend/dist/js/markdown-vendor-D-79K2xZ.js +22 -0
- package/frontend/dist/js/react-vendor-N--QU9DW.js +8 -0
- package/frontend/dist/js/router-vendor-B-t91v39.js +3 -0
- package/frontend/dist/js/ui-vendor-VxSCY_bv.js +177 -0
- package/frontend/dist/js/utils-vendor-DNzxLBGx.js +6 -0
- package/frontend/dist/logo-dark.png +0 -0
- package/frontend/dist/logo-light.png +0 -0
- package/frontend/dist/logo.svg +14 -0
- package/package.json +128 -0
- package/plugins/anthropic.json +25 -0
- package/plugins/elevenlabs.json +58 -0
- package/plugins/gemini.json +57 -0
- package/plugins/github.json +23 -0
- package/plugins/groq.json +25 -0
- package/plugins/mistral.json +73 -0
- package/plugins/openai-tts.json +38 -0
- package/plugins/openai.json +132 -0
- package/plugins/openrouter.json +353 -0
|
@@ -0,0 +1,389 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Libre WebUI
|
|
3
|
+
* Copyright (C) 2025 Kroonen AI, Inc.
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at:
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
import express from 'express';
|
|
18
|
+
import rateLimit from 'express-rate-limit';
|
|
19
|
+
import { githubOAuthService } from '../services/simpleGitHubOAuth.js';
|
|
20
|
+
import { huggingFaceOAuthService } from '../services/simpleHuggingFaceOAuth.js';
|
|
21
|
+
import { authService } from '../services/authService.js';
|
|
22
|
+
import { authenticate } from '../middleware/auth.js';
|
|
23
|
+
import { encryptionService } from '../services/encryptionService.js';
|
|
24
|
+
const router = express.Router();
|
|
25
|
+
// Fallback frontend URL for OAuth redirects
|
|
26
|
+
const FALLBACK_FRONTEND_URL = 'http://localhost:5173';
|
|
27
|
+
// Rate limiter for authentication routes: 5 login attempts per 15 minutes
|
|
28
|
+
const authRateLimiter = rateLimit({
|
|
29
|
+
windowMs: 15 * 60 * 1000, // 15 minutes
|
|
30
|
+
max: 5, // limit each IP to 5 requests per windowMs for auth
|
|
31
|
+
message: {
|
|
32
|
+
success: false,
|
|
33
|
+
message: 'Too many authentication attempts, please try again later',
|
|
34
|
+
},
|
|
35
|
+
standardHeaders: true,
|
|
36
|
+
legacyHeaders: false,
|
|
37
|
+
});
|
|
38
|
+
// Rate limiter for general auth routes: 100 requests per 15 minutes
|
|
39
|
+
const generalAuthRateLimiter = rateLimit({
|
|
40
|
+
windowMs: 15 * 60 * 1000, // 15 minutes
|
|
41
|
+
max: 100, // limit each IP to 100 requests per windowMs
|
|
42
|
+
message: {
|
|
43
|
+
success: false,
|
|
44
|
+
message: 'Too many requests, please try again later',
|
|
45
|
+
},
|
|
46
|
+
standardHeaders: true,
|
|
47
|
+
legacyHeaders: false,
|
|
48
|
+
});
|
|
49
|
+
/**
|
|
50
|
+
* Login endpoint
|
|
51
|
+
*/
|
|
52
|
+
router.post('/login', authRateLimiter, async (req, res) => {
|
|
53
|
+
try {
|
|
54
|
+
const { username, password } = req.body;
|
|
55
|
+
if (!username || !password) {
|
|
56
|
+
res.status(400).json({
|
|
57
|
+
success: false,
|
|
58
|
+
message: 'Username and password are required',
|
|
59
|
+
});
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
const result = await authService.login(username, password);
|
|
63
|
+
if (!result) {
|
|
64
|
+
res.status(401).json({
|
|
65
|
+
success: false,
|
|
66
|
+
message: 'Invalid credentials',
|
|
67
|
+
});
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
const systemInfo = authService.getSystemInfo();
|
|
71
|
+
res.json({
|
|
72
|
+
success: true,
|
|
73
|
+
data: {
|
|
74
|
+
user: result.user,
|
|
75
|
+
token: result.token,
|
|
76
|
+
systemInfo,
|
|
77
|
+
},
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
catch (error) {
|
|
81
|
+
console.error('Login error:', error);
|
|
82
|
+
res.status(500).json({
|
|
83
|
+
success: false,
|
|
84
|
+
message: 'Internal server error',
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
/**
|
|
89
|
+
* Logout endpoint
|
|
90
|
+
*/
|
|
91
|
+
router.post('/logout', generalAuthRateLimiter, authenticate, async (req, res) => {
|
|
92
|
+
try {
|
|
93
|
+
// In a stateless JWT system, logout is handled client-side
|
|
94
|
+
// But we can log it for audit purposes
|
|
95
|
+
console.log(`User ${req.user?.username} logged out`);
|
|
96
|
+
res.json({
|
|
97
|
+
success: true,
|
|
98
|
+
message: 'Logged out successfully',
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
catch (error) {
|
|
102
|
+
console.error('Logout error:', error);
|
|
103
|
+
res.status(500).json({
|
|
104
|
+
success: false,
|
|
105
|
+
message: 'Internal server error',
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
});
|
|
109
|
+
/**
|
|
110
|
+
* Verify token endpoint
|
|
111
|
+
*/
|
|
112
|
+
router.get('/verify', generalAuthRateLimiter, authenticate, async (req, res) => {
|
|
113
|
+
try {
|
|
114
|
+
const user = await authService.getUserFromToken(req.headers.authorization.substring(7));
|
|
115
|
+
if (!user) {
|
|
116
|
+
res.status(401).json({
|
|
117
|
+
success: false,
|
|
118
|
+
message: 'Invalid token',
|
|
119
|
+
});
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
res.json({
|
|
123
|
+
success: true,
|
|
124
|
+
data: user,
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
catch (error) {
|
|
128
|
+
console.error('Token verification error:', error);
|
|
129
|
+
res.status(500).json({
|
|
130
|
+
success: false,
|
|
131
|
+
message: 'Internal server error',
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
});
|
|
135
|
+
/**
|
|
136
|
+
* Get system information
|
|
137
|
+
*/
|
|
138
|
+
router.get('/system-info', async (req, res) => {
|
|
139
|
+
try {
|
|
140
|
+
const systemInfo = authService.getSystemInfo();
|
|
141
|
+
res.json({
|
|
142
|
+
success: true,
|
|
143
|
+
data: systemInfo,
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
catch (error) {
|
|
147
|
+
console.error('System info error:', error);
|
|
148
|
+
res.status(500).json({
|
|
149
|
+
success: false,
|
|
150
|
+
message: 'Internal server error',
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
});
|
|
154
|
+
/**
|
|
155
|
+
* Get encryption key for first-time setup
|
|
156
|
+
* Only accessible during initial setup (single user mode - just created first admin)
|
|
157
|
+
*/
|
|
158
|
+
router.get('/encryption-key', generalAuthRateLimiter, async (req, res) => {
|
|
159
|
+
try {
|
|
160
|
+
const systemInfo = authService.getSystemInfo();
|
|
161
|
+
// Only allow access during first-time setup (when only one user exists - the newly created admin)
|
|
162
|
+
if (!systemInfo.singleUserMode) {
|
|
163
|
+
res.status(403).json({
|
|
164
|
+
success: false,
|
|
165
|
+
message: 'Encryption key is only available during first-time setup',
|
|
166
|
+
});
|
|
167
|
+
return;
|
|
168
|
+
}
|
|
169
|
+
const encryptionKey = encryptionService.getKeyForDisplay();
|
|
170
|
+
res.json({
|
|
171
|
+
success: true,
|
|
172
|
+
data: { encryptionKey },
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
catch (error) {
|
|
176
|
+
console.error('Encryption key retrieval error:', error);
|
|
177
|
+
res.status(500).json({
|
|
178
|
+
success: false,
|
|
179
|
+
message: 'Internal server error',
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
});
|
|
183
|
+
/**
|
|
184
|
+
* Signup endpoint
|
|
185
|
+
*/
|
|
186
|
+
router.post('/signup', authRateLimiter, async (req, res) => {
|
|
187
|
+
try {
|
|
188
|
+
const { username, password, email } = req.body;
|
|
189
|
+
if (!username || !password) {
|
|
190
|
+
res.status(400).json({
|
|
191
|
+
success: false,
|
|
192
|
+
message: 'Username and password are required',
|
|
193
|
+
});
|
|
194
|
+
return;
|
|
195
|
+
}
|
|
196
|
+
// Check if user already exists
|
|
197
|
+
const existingUser = await authService.getUserByUsername(username);
|
|
198
|
+
if (existingUser) {
|
|
199
|
+
res.status(409).json({
|
|
200
|
+
success: false,
|
|
201
|
+
message: 'Username already exists',
|
|
202
|
+
});
|
|
203
|
+
return;
|
|
204
|
+
}
|
|
205
|
+
const result = await authService.signup(username, password, email);
|
|
206
|
+
if (!result) {
|
|
207
|
+
res.status(500).json({
|
|
208
|
+
success: false,
|
|
209
|
+
message: 'Failed to create account',
|
|
210
|
+
});
|
|
211
|
+
return;
|
|
212
|
+
}
|
|
213
|
+
const systemInfo = authService.getSystemInfo();
|
|
214
|
+
res.json({
|
|
215
|
+
success: true,
|
|
216
|
+
data: {
|
|
217
|
+
user: result.user,
|
|
218
|
+
token: result.token,
|
|
219
|
+
systemInfo,
|
|
220
|
+
},
|
|
221
|
+
});
|
|
222
|
+
}
|
|
223
|
+
catch (error) {
|
|
224
|
+
console.error('Signup error:', error);
|
|
225
|
+
res.status(500).json({
|
|
226
|
+
success: false,
|
|
227
|
+
message: 'Internal server error',
|
|
228
|
+
});
|
|
229
|
+
}
|
|
230
|
+
});
|
|
231
|
+
/**
|
|
232
|
+
* GitHub OAuth Routes
|
|
233
|
+
* These routes integrate GitHub OAuth with the existing JWT authentication system
|
|
234
|
+
*/
|
|
235
|
+
// GitHub OAuth setup if credentials are provided
|
|
236
|
+
const isGitHubConfigured = githubOAuthService.isConfigured();
|
|
237
|
+
/**
|
|
238
|
+
* GitHub OAuth - Start authentication
|
|
239
|
+
*/
|
|
240
|
+
router.get('/oauth/github', generalAuthRateLimiter, (req, res) => {
|
|
241
|
+
if (!isGitHubConfigured) {
|
|
242
|
+
return res.status(404).json({ error: 'GitHub OAuth not configured' });
|
|
243
|
+
}
|
|
244
|
+
const authUrl = githubOAuthService.getAuthUrl();
|
|
245
|
+
res.redirect(authUrl);
|
|
246
|
+
});
|
|
247
|
+
/**
|
|
248
|
+
* GitHub OAuth - Handle callback and generate JWT
|
|
249
|
+
*/
|
|
250
|
+
router.get('/oauth/github/callback', generalAuthRateLimiter, async (req, res) => {
|
|
251
|
+
try {
|
|
252
|
+
if (!isGitHubConfigured) {
|
|
253
|
+
return res.redirect(`${process.env.CORS_ORIGIN || FALLBACK_FRONTEND_URL}?error=oauth_not_configured`);
|
|
254
|
+
}
|
|
255
|
+
const { code } = req.query;
|
|
256
|
+
if (!code || typeof code !== 'string') {
|
|
257
|
+
return res.redirect(`${process.env.CORS_ORIGIN || FALLBACK_FRONTEND_URL}?error=oauth_failed`);
|
|
258
|
+
}
|
|
259
|
+
// Exchange code for access token
|
|
260
|
+
const accessToken = await githubOAuthService.exchangeCodeForToken(code);
|
|
261
|
+
if (!accessToken) {
|
|
262
|
+
return res.redirect(`${process.env.CORS_ORIGIN || FALLBACK_FRONTEND_URL}?error=oauth_failed`);
|
|
263
|
+
}
|
|
264
|
+
// Get user profile
|
|
265
|
+
const profile = await githubOAuthService.getUserProfile(accessToken);
|
|
266
|
+
if (!profile) {
|
|
267
|
+
return res.redirect(`${process.env.CORS_ORIGIN || FALLBACK_FRONTEND_URL}?error=oauth_failed`);
|
|
268
|
+
}
|
|
269
|
+
// Process user with GitHub OAuth service
|
|
270
|
+
const user = await githubOAuthService.processUser(profile);
|
|
271
|
+
if (!user) {
|
|
272
|
+
return res.redirect(`${process.env.CORS_ORIGIN || FALLBACK_FRONTEND_URL}?error=oauth_failed`);
|
|
273
|
+
}
|
|
274
|
+
// Generate JWT token using existing auth service
|
|
275
|
+
const token = authService.generateToken(user);
|
|
276
|
+
console.log('GitHub OAuth successful for user:', user.username);
|
|
277
|
+
// Redirect to frontend with token in URL
|
|
278
|
+
res.redirect(`${process.env.CORS_ORIGIN || FALLBACK_FRONTEND_URL}?token=${token}&auth=success`);
|
|
279
|
+
}
|
|
280
|
+
catch (error) {
|
|
281
|
+
console.error('GitHub OAuth callback error:', error);
|
|
282
|
+
res.redirect(`${process.env.CORS_ORIGIN || FALLBACK_FRONTEND_URL}?error=oauth_failed`);
|
|
283
|
+
}
|
|
284
|
+
});
|
|
285
|
+
/**
|
|
286
|
+
* Check if GitHub OAuth is configured
|
|
287
|
+
*/
|
|
288
|
+
router.get('/oauth/github/status', generalAuthRateLimiter, (req, res) => {
|
|
289
|
+
res.json({ configured: isGitHubConfigured });
|
|
290
|
+
});
|
|
291
|
+
/**
|
|
292
|
+
* Hugging Face OAuth Routes
|
|
293
|
+
* These routes integrate Hugging Face OAuth with the existing JWT authentication system
|
|
294
|
+
*/
|
|
295
|
+
// Hugging Face OAuth setup if credentials are provided
|
|
296
|
+
const isHuggingFaceConfigured = huggingFaceOAuthService.isConfigured();
|
|
297
|
+
/**
|
|
298
|
+
* Hugging Face OAuth - Start authentication
|
|
299
|
+
*/
|
|
300
|
+
router.get('/oauth/huggingface', generalAuthRateLimiter, (req, res) => {
|
|
301
|
+
if (!isHuggingFaceConfigured) {
|
|
302
|
+
return res.status(404).json({ error: 'Hugging Face OAuth not configured' });
|
|
303
|
+
}
|
|
304
|
+
const authUrl = huggingFaceOAuthService.getAuthUrl();
|
|
305
|
+
res.redirect(authUrl);
|
|
306
|
+
});
|
|
307
|
+
/**
|
|
308
|
+
* Hugging Face OAuth - Handle callback and generate JWT
|
|
309
|
+
*/
|
|
310
|
+
router.get('/oauth/huggingface/callback', generalAuthRateLimiter, async (req, res) => {
|
|
311
|
+
try {
|
|
312
|
+
if (!isHuggingFaceConfigured) {
|
|
313
|
+
return res.redirect(`${process.env.CORS_ORIGIN || FALLBACK_FRONTEND_URL}?error=oauth_not_configured`);
|
|
314
|
+
}
|
|
315
|
+
const { code } = req.query;
|
|
316
|
+
if (!code || typeof code !== 'string') {
|
|
317
|
+
return res.redirect(`${process.env.CORS_ORIGIN || FALLBACK_FRONTEND_URL}?error=oauth_failed`);
|
|
318
|
+
}
|
|
319
|
+
// Exchange code for access token
|
|
320
|
+
const accessToken = await huggingFaceOAuthService.exchangeCodeForToken(code);
|
|
321
|
+
if (!accessToken) {
|
|
322
|
+
return res.redirect(`${process.env.CORS_ORIGIN || FALLBACK_FRONTEND_URL}?error=oauth_failed`);
|
|
323
|
+
}
|
|
324
|
+
// Get user profile
|
|
325
|
+
const profile = await huggingFaceOAuthService.getUserProfile(accessToken);
|
|
326
|
+
if (!profile) {
|
|
327
|
+
return res.redirect(`${process.env.CORS_ORIGIN || FALLBACK_FRONTEND_URL}?error=oauth_failed`);
|
|
328
|
+
}
|
|
329
|
+
// Process user with Hugging Face OAuth service
|
|
330
|
+
const user = await huggingFaceOAuthService.processUser(profile);
|
|
331
|
+
if (!user) {
|
|
332
|
+
return res.redirect(`${process.env.CORS_ORIGIN || FALLBACK_FRONTEND_URL}?error=oauth_failed`);
|
|
333
|
+
}
|
|
334
|
+
// Generate JWT token
|
|
335
|
+
const token = authService.generateToken(user);
|
|
336
|
+
console.log('Hugging Face OAuth successful for user:', user.username);
|
|
337
|
+
// Redirect to frontend with token in URL
|
|
338
|
+
res.redirect(`${process.env.CORS_ORIGIN || FALLBACK_FRONTEND_URL}?token=${token}&auth=success`);
|
|
339
|
+
}
|
|
340
|
+
catch (error) {
|
|
341
|
+
console.error('Hugging Face OAuth callback error:', error);
|
|
342
|
+
res.redirect(`${process.env.CORS_ORIGIN || FALLBACK_FRONTEND_URL}?error=oauth_failed`);
|
|
343
|
+
}
|
|
344
|
+
});
|
|
345
|
+
/**
|
|
346
|
+
* Check if Hugging Face OAuth is configured
|
|
347
|
+
*/
|
|
348
|
+
router.get('/oauth/huggingface/status', generalAuthRateLimiter, (req, res) => {
|
|
349
|
+
res.json({ configured: isHuggingFaceConfigured });
|
|
350
|
+
});
|
|
351
|
+
/**
|
|
352
|
+
* Get current user info (works with both regular JWT and GitHub OAuth JWT)
|
|
353
|
+
*/
|
|
354
|
+
router.get('/me', generalAuthRateLimiter,
|
|
355
|
+
// We can't use the existing authenticate middleware due to type conflicts
|
|
356
|
+
// So we'll do manual JWT verification
|
|
357
|
+
async (req, res) => {
|
|
358
|
+
try {
|
|
359
|
+
const token = req.headers.authorization?.startsWith('Bearer ')
|
|
360
|
+
? req.headers.authorization.substring(7)
|
|
361
|
+
: null;
|
|
362
|
+
if (!token) {
|
|
363
|
+
return res.status(401).json({
|
|
364
|
+
success: false,
|
|
365
|
+
message: 'No token provided',
|
|
366
|
+
});
|
|
367
|
+
}
|
|
368
|
+
const user = await authService.getUserFromToken(token);
|
|
369
|
+
if (!user) {
|
|
370
|
+
return res.status(401).json({
|
|
371
|
+
success: false,
|
|
372
|
+
message: 'Invalid token',
|
|
373
|
+
});
|
|
374
|
+
}
|
|
375
|
+
res.json({
|
|
376
|
+
success: true,
|
|
377
|
+
data: user,
|
|
378
|
+
});
|
|
379
|
+
}
|
|
380
|
+
catch (error) {
|
|
381
|
+
console.error('Get user error:', error);
|
|
382
|
+
res.status(500).json({
|
|
383
|
+
success: false,
|
|
384
|
+
message: 'Internal server error',
|
|
385
|
+
});
|
|
386
|
+
}
|
|
387
|
+
});
|
|
388
|
+
export default router;
|
|
389
|
+
//# sourceMappingURL=auth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/routes/auth.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat.d.ts","sourceRoot":"","sources":["../../src/routes/chat.ts"],"names":[],"mappings":"AAsCA,QAAA,MAAM,MAAM,4CAAmB,CAAC;AAkgChC,eAAe,MAAM,CAAC"}
|