Add openrouter
This commit is contained in:
parent
7c03c594c1
commit
36b686bbd4
8 changed files with 380 additions and 61 deletions
|
|
@ -72,6 +72,24 @@ const runMigrations = () => {
|
|||
db.exec("ALTER TABLE users ADD COLUMN gemini_api_key TEXT");
|
||||
console.log("Migration: Added gemini_api_key to users");
|
||||
}
|
||||
|
||||
const hasAiProvider = userTableInfo2.some(col => col.name === "ai_provider");
|
||||
if (!hasAiProvider) {
|
||||
db.exec("ALTER TABLE users ADD COLUMN ai_provider TEXT DEFAULT 'gemini'");
|
||||
console.log("Migration: Added ai_provider to users");
|
||||
}
|
||||
|
||||
const hasOpenRouterKey = userTableInfo2.some(col => col.name === "openrouter_api_key");
|
||||
if (!hasOpenRouterKey) {
|
||||
db.exec("ALTER TABLE users ADD COLUMN openrouter_api_key TEXT");
|
||||
console.log("Migration: Added openrouter_api_key to users");
|
||||
}
|
||||
|
||||
const hasOpenRouterModel = userTableInfo2.some(col => col.name === "openrouter_model");
|
||||
if (!hasOpenRouterModel) {
|
||||
db.exec("ALTER TABLE users ADD COLUMN openrouter_model TEXT");
|
||||
console.log("Migration: Added openrouter_model to users");
|
||||
}
|
||||
};
|
||||
|
||||
runMigrations();
|
||||
|
|
|
|||
|
|
@ -105,35 +105,50 @@ router.get('/me/preferences', (req: AuthenticatedRequest, res: Response) => {
|
|||
const userSub = req.user!.sub;
|
||||
|
||||
const user = db.prepare(`
|
||||
SELECT color_scheme as colorScheme, gemini_api_key as geminiApiKey
|
||||
SELECT color_scheme as colorScheme, gemini_api_key as geminiApiKey,
|
||||
ai_provider as aiProvider, openrouter_api_key as openRouterApiKey,
|
||||
openrouter_model as openRouterModel
|
||||
FROM users
|
||||
WHERE id = ?
|
||||
`).get(userSub) as { colorScheme: string | null; geminiApiKey: string | null } | undefined;
|
||||
`).get(userSub) as {
|
||||
colorScheme: string | null;
|
||||
geminiApiKey: string | null;
|
||||
aiProvider: string | null;
|
||||
openRouterApiKey: string | null;
|
||||
openRouterModel: string | null;
|
||||
} | undefined;
|
||||
|
||||
const groups = req.user!.groups || [];
|
||||
const hasAIAccess = groups.includes('kaboot-ai-access');
|
||||
|
||||
res.json({
|
||||
colorScheme: user?.colorScheme || 'blue',
|
||||
aiProvider: user?.aiProvider || 'gemini',
|
||||
geminiApiKey: decryptForUser(user?.geminiApiKey || null, userSub),
|
||||
openRouterApiKey: decryptForUser(user?.openRouterApiKey || null, userSub),
|
||||
openRouterModel: user?.openRouterModel || null,
|
||||
hasAIAccess,
|
||||
});
|
||||
});
|
||||
|
||||
router.put('/me/preferences', (req: AuthenticatedRequest, res: Response) => {
|
||||
const userSub = req.user!.sub;
|
||||
const { colorScheme, geminiApiKey } = req.body;
|
||||
const { colorScheme, geminiApiKey, aiProvider, openRouterApiKey, openRouterModel } = req.body;
|
||||
|
||||
const encryptedApiKey = encryptForUser(geminiApiKey || null, userSub);
|
||||
const encryptedGeminiKey = encryptForUser(geminiApiKey || null, userSub);
|
||||
const encryptedOpenRouterKey = encryptForUser(openRouterApiKey || null, userSub);
|
||||
const encryptedEmail = encryptForUser(req.user!.email || null, userSub);
|
||||
const encryptedDisplayName = encryptForUser(req.user!.name || null, userSub);
|
||||
|
||||
const upsertUser = db.prepare(`
|
||||
INSERT INTO users (id, username, email, display_name, color_scheme, gemini_api_key, last_login)
|
||||
VALUES (?, ?, ?, ?, ?, ?, CURRENT_TIMESTAMP)
|
||||
INSERT INTO users (id, username, email, display_name, color_scheme, gemini_api_key, ai_provider, openrouter_api_key, openrouter_model, last_login)
|
||||
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, CURRENT_TIMESTAMP)
|
||||
ON CONFLICT(id) DO UPDATE SET
|
||||
color_scheme = ?,
|
||||
gemini_api_key = ?,
|
||||
ai_provider = ?,
|
||||
openrouter_api_key = ?,
|
||||
openrouter_model = ?,
|
||||
last_login = CURRENT_TIMESTAMP
|
||||
`);
|
||||
|
||||
|
|
@ -143,9 +158,15 @@ router.put('/me/preferences', (req: AuthenticatedRequest, res: Response) => {
|
|||
encryptedEmail,
|
||||
encryptedDisplayName,
|
||||
colorScheme || 'blue',
|
||||
encryptedApiKey,
|
||||
encryptedGeminiKey,
|
||||
aiProvider || 'gemini',
|
||||
encryptedOpenRouterKey,
|
||||
openRouterModel || null,
|
||||
colorScheme || 'blue',
|
||||
encryptedApiKey
|
||||
encryptedGeminiKey,
|
||||
aiProvider || 'gemini',
|
||||
encryptedOpenRouterKey,
|
||||
openRouterModel || null
|
||||
);
|
||||
|
||||
res.json({ success: true });
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue