dashboard/src/http-web/server.ts

66 lines
2.5 KiB
TypeScript

import { json_content_parser, } from '../http/parse-request-content';
import { OIDCProvider } from '../security/openid-connect';
import { PKCECookieProvider } from '../security/pkce-cookie';
import { StorageProvider } from '../storage';
import { Argon2HashProvider } from '../security/argon-hash';
import { SessionProvider } from '../security/session';
import { BaseHttpDependencies, HttpConfig, create_http_server } from '../http/server';
import { SnowflakeProvider } from '../utilities/snowflake-uid';
import { register_csp_report_endpoint } from '../http/content-security-policy';
import { register_asset_endpoints } from './assets';
import { register_root_page_endpoint } from './root-page';
import { register_submit_login_endpoint } from './authentication/submit-login';
import { register_login_callback_endpoint } from './authentication/login-callback';
import { register_logout_endpoint } from './authentication/logout';
import { ColorThemeProvider } from '../utilities/color-themes';
import { OutboundHttpProvider } from '../http/outbound';
import { ServicesProvider } from '../services';
import { RSSFeedReaderProvider } from '../utilities/rss-feeds';
export interface HttpWebDependencies extends BaseHttpDependencies {
oidc: OIDCProvider;
pkce_cookie: PKCECookieProvider;
storage: StorageProvider;
argon2: Argon2HashProvider;
session: SessionProvider;
snowflake: SnowflakeProvider;
color_themes: ColorThemeProvider;
outbound_http: OutboundHttpProvider;
rss_feed_reader: RSSFeedReaderProvider;
services: ServicesProvider;
}
export function create_http_web_server(conf: HttpConfig, deps: HttpWebDependencies) {
return create_http_server(conf, deps, {
endpoints: [
register_csp_report_endpoint,
register_asset_endpoints,
// Login/logout
register_submit_login_endpoint,
register_login_callback_endpoint,
register_logout_endpoint,
// Pages
register_root_page_endpoint,
],
content_parsers: {
// 'application/ld+json': json_content_parser,
'application/csp-report': json_content_parser,
// 'application/yaml': yaml_content_parser,
// 'application/ld+yaml': yaml_content_parser,
// 'image/png': binary_content_parser,
// 'image/jpeg': binary_content_parser,
// 'image/gif': binary_content_parser,
// 'text/html': text_content_parser,
// 'text/markdown': text_content_parser,
// 'text/css': text_content_parser,
// 'text/xml': xml_content_parser,
// 'application/xml': xml_content_parser,
// 'application/rss+xml': xml_content_parser,
}
});
}