overhaul chat structure
This commit is contained in:
+6
-6
@@ -257,11 +257,6 @@ export function createApp(options = {}) {
|
||||
|
||||
app.use(observability.middleware);
|
||||
app.use(express.json({limit: "1mb"}));
|
||||
app.use(express.static(config.publicDir, {
|
||||
maxAge: config.staticMaxAge,
|
||||
etag: config.staticEtag,
|
||||
fallthrough: config.staticFallthrough
|
||||
}));
|
||||
app.use(session({
|
||||
store: options.sessionStore || (config.testMode ? undefined : new FileStore({path: config.sessionsDir, reapInterval: 3600})),
|
||||
secret: config.sessionSecret,
|
||||
@@ -284,12 +279,17 @@ export function createApp(options = {}) {
|
||||
app.locals.observability = observability;
|
||||
app.locals.close = createCloseHandler(closeHandlers);
|
||||
|
||||
app.use(createPagesRouter(config));
|
||||
app.use(express.static(config.publicDir, {
|
||||
maxAge: config.staticMaxAge,
|
||||
etag: config.staticEtag,
|
||||
fallthrough: config.staticFallthrough
|
||||
}));
|
||||
app.use(createAuthRouter({repositories, authRateLimiters, config}));
|
||||
app.use(createSettingsRouter({repositories}));
|
||||
app.use(createChatsRouter({repositories, chatService, modelService, config, chatRateLimiters}));
|
||||
app.use(createPersonasRouter({repositories, chatService, modelService, config}));
|
||||
app.use(createSystemRouter({modelService, config}));
|
||||
app.use(createPagesRouter(config));
|
||||
app.use(notFoundHandler);
|
||||
app.use(errorHandler);
|
||||
|
||||
|
||||
@@ -27,6 +27,8 @@ export function createAuthRouter({repositories, authRateLimiters, config}) {
|
||||
|
||||
const hashed = await bcrypt.hash(password, 10);
|
||||
repositories.insertUser(username, hashed);
|
||||
req.session.user = username;
|
||||
req.session.sessionVersion = 0;
|
||||
return res.json({message: "Registration successful"});
|
||||
});
|
||||
|
||||
|
||||
+33
-5
@@ -1,11 +1,39 @@
|
||||
import express from "express";
|
||||
import {readFile} from "node:fs/promises";
|
||||
import {renderSiteHeader} from "../pageLayout.js";
|
||||
|
||||
export function createPagesRouter(config) {
|
||||
const router = express.Router();
|
||||
|
||||
router.get("/market", (req, res) => res.sendFile(`${config.publicDir}/market.html`));
|
||||
router.get("/settings", (req, res) => res.sendFile(`${config.publicDir}/settings.html`));
|
||||
router.get("/", (req, res) => res.sendFile(`${config.publicDir}/index.html`));
|
||||
|
||||
const page = (name) => async (req, res, next) => {
|
||||
try {
|
||||
const template = await readFile(`${config.publicDir}/${name}.html`, "utf8");
|
||||
const header = renderSiteHeader({user: req.session.user, pathname: req.path});
|
||||
res.set("Cache-Control", "private, no-store").type("html").send(template.replace("<!-- site-header -->", () => header));
|
||||
} catch (error) { next(error); }
|
||||
};
|
||||
const signedIn = (req, res, next) => req.session.user ? next() : res.redirect(`/login?next=${encodeURIComponent(req.originalUrl)}`);
|
||||
router.get(["/", "/index.html"], (req, res, next) => {
|
||||
if (/^\d+$/.test(String(req.query.chat || ""))) return res.redirect(`/app/chats/${req.query.chat}`);
|
||||
return page("landing")(req, res, next);
|
||||
});
|
||||
router.get(["/login", "/register"], (req, res, next) => {
|
||||
if (req.session.user) return res.redirect("/app");
|
||||
return page("account")(req, res, next);
|
||||
});
|
||||
router.get("/market", (req, res, next) => page(req.session.user ? "market" : "discover")(req, res, next));
|
||||
router.get("/privacy.html", page("privacy"));
|
||||
router.get("/tos.html", page("tos"));
|
||||
router.get("/api/discover", (req, res) => {
|
||||
const personas = req.app.locals.repositories.listMarketPersonas().map(({id, name, background, creator_username, persona_type}) => ({id, name, description: String(background || "").slice(0, 240), creator_username, persona_type}));
|
||||
res.json({personas});
|
||||
});
|
||||
router.get(["/home.html", "/account.html", "/discover.html", "/landing.html"], (req, res) => res.redirect(({"/home.html": "/app", "/account.html": "/login", "/discover.html": "/market", "/landing.html": "/"})[req.path]));
|
||||
router.get("/settings", (req, res) => res.redirect(`/app/settings${req.url.slice(req.path.length)}`));
|
||||
router.get("/app", signedIn, page("home"));
|
||||
router.get(["/app/chats", "/app/chats/:id"], signedIn, page("chat"));
|
||||
router.get(["/app/settings", "/app/personas"], signedIn, page("settings"));
|
||||
router.get("/chat.html", signedIn, (req, res) => res.redirect("/app/chats"));
|
||||
router.get("/settings.html", signedIn, (req, res) => res.redirect("/app/settings"));
|
||||
router.get("/market.html", (req, res) => res.redirect("/market"));
|
||||
return router;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user