Update admin panel and server configuration
This commit is contained in:
@ -14,12 +14,16 @@ import {
|
||||
fetchEpisodesWithArticles,
|
||||
getAllCategories,
|
||||
getAllFeedsIncludingInactive,
|
||||
getAllSettings,
|
||||
getFeedByUrl,
|
||||
getFeedRequests,
|
||||
getFeedsByCategory,
|
||||
getFeedsGroupedByCategory,
|
||||
getSetting,
|
||||
getSettingsForAdminUI,
|
||||
toggleFeedActive,
|
||||
updateFeedRequestStatus,
|
||||
updateSetting,
|
||||
} from "./services/database.js";
|
||||
|
||||
// Validate configuration on startup
|
||||
@ -92,6 +96,74 @@ app.get("/api/admin/env", async (c) => {
|
||||
}
|
||||
});
|
||||
|
||||
// Settings management API endpoints
|
||||
app.get("/api/admin/settings", async (c) => {
|
||||
try {
|
||||
const settings = await getSettingsForAdminUI();
|
||||
return c.json(settings);
|
||||
} catch (error) {
|
||||
console.error("Error fetching settings:", error);
|
||||
return c.json({ error: "Failed to fetch settings" }, 500);
|
||||
}
|
||||
});
|
||||
|
||||
app.get("/api/admin/settings/:key", async (c) => {
|
||||
try {
|
||||
const key = c.req.param("key");
|
||||
const setting = await getSetting(key);
|
||||
|
||||
if (!setting) {
|
||||
return c.json({ error: "Setting not found" }, 404);
|
||||
}
|
||||
|
||||
// Mask credential values for security
|
||||
if (setting.isCredential && setting.value) {
|
||||
setting.value = "••••••••";
|
||||
}
|
||||
|
||||
return c.json(setting);
|
||||
} catch (error) {
|
||||
console.error("Error fetching setting:", error);
|
||||
return c.json({ error: "Failed to fetch setting" }, 500);
|
||||
}
|
||||
});
|
||||
|
||||
app.put("/api/admin/settings/:key", async (c) => {
|
||||
try {
|
||||
const key = c.req.param("key");
|
||||
const { value } = await c.req.json<{ value: string }>();
|
||||
|
||||
if (!value && value !== "") {
|
||||
return c.json({ error: "Setting value is required" }, 400);
|
||||
}
|
||||
|
||||
console.log(`🔧 Admin updating setting: ${key}`);
|
||||
|
||||
// Check if setting exists
|
||||
const existingSetting = await getSetting(key);
|
||||
if (!existingSetting) {
|
||||
return c.json({ error: "Setting not found" }, 404);
|
||||
}
|
||||
|
||||
const updated = await updateSetting(key, value);
|
||||
|
||||
if (updated) {
|
||||
return c.json({
|
||||
result: "UPDATED",
|
||||
message: "Setting updated successfully",
|
||||
key,
|
||||
// Don't return the value for credentials
|
||||
value: existingSetting.isCredential ? "••••••••" : value,
|
||||
});
|
||||
} else {
|
||||
return c.json({ error: "Failed to update setting" }, 500);
|
||||
}
|
||||
} catch (error) {
|
||||
console.error("Error updating setting:", error);
|
||||
return c.json({ error: "Failed to update setting" }, 500);
|
||||
}
|
||||
});
|
||||
|
||||
// Feed management API endpoints
|
||||
app.get("/api/admin/feeds", async (c) => {
|
||||
try {
|
||||
|
Reference in New Issue
Block a user