summaryrefslogtreecommitdiff
path: root/backend/api/src/server.zig
diff options
context:
space:
mode:
Diffstat (limited to 'backend/api/src/server.zig')
-rw-r--r--backend/api/src/server.zig101
1 files changed, 101 insertions, 0 deletions
diff --git a/backend/api/src/server.zig b/backend/api/src/server.zig
new file mode 100644
index 0000000..99f12d6
--- /dev/null
+++ b/backend/api/src/server.zig
@@ -0,0 +1,101 @@
+const z = @import( "std" );
+const u = @import( "util.zig" );
+const zap = @import( "zap" );
+const api = @import( "api.zig" );
+const user = @import( "user.zig" );
+const chat = @import( "chat.zig" );
+const prefs = @import( "userdata.zig" );
+const model = @import( "model.zig" );
+const stripe = @import( "stripe.zig" );
+const config = @import( "config.zig" );
+const userdata = @import( "userdata.zig" );
+
+const Allocator = z.mem.Allocator;
+const Status = zap.StatusCode;
+const Request = zap.Request;
+
+const bufprint = z.fmt.bufPrint;
+var routes: z.StringHashMap( zap.HttpRequestFn ) = undefined;
+const alloc = u.alloc;
+
+fn index( r: Request ) void {
+ r.sendBody( "" ) catch {};
+}
+
+fn stop( r: Request ) void {
+ api.stop();
+ z.time.sleep( 5000000000 );
+ zap.stop();
+ r.sendBody( "" ) catch {};
+}
+
+fn setupRoutes( a: Allocator ) void {
+ routes = z.StringHashMap( zap.HttpRequestFn ).init( a );
+ routes.put( "/", index ) catch {};
+ //routes.put( "/stop", stop ) catch {};
+
+ // user routes
+ routes.put( "/login", user.routes.@"login" ) catch {};
+ routes.put( "/get-tokens", user.routes.@"get-tokens" ) catch {};
+ routes.put( "/create-token", user.routes.@"create-token" ) catch {};
+ routes.put( "/delete-token", user.routes.@"delete-token" ) catch {};
+ routes.put( "/delete-tokens", user.routes.@"delete-tokens" ) catch {};
+ routes.put( "/send-login-link", user.routes.@"send-login-link" ) catch {};
+ routes.put( "/invalidate-session", user.routes.@"invalidate-session" ) catch {};
+ routes.put( "/invalidate-all-sessions", user.routes.@"invalidate-all-sessions" ) catch {};
+
+ // settings routes
+ routes.put( "/settings", prefs.routes.@"settings" ) catch {};
+ routes.put( "/get-notes", prefs.routes.@"get-notes" ) catch {};
+ routes.put( "/getalldata", prefs.routes.@"getalldata" ) catch {};
+ routes.put( "/delete-note", prefs.routes.@"delete-note" ) catch {};
+ routes.put( "/delete-notes", prefs.routes.@"delete-notes" ) catch {};
+ routes.put( "/update-settings", prefs.routes.@"update-settings" ) catch {};
+
+ // models route
+ routes.put( "/models", model.routes.@"models" ) catch {};
+
+ // stripe route
+ routes.put( "/create-payment-intent", stripe.routes.@"create-payment-intent" ) catch {};
+
+ // chat routes
+ routes.put( "/chat", chat.routes.@"chat" ) catch {};
+ routes.put( "/get-chat", chat.routes.@"get-chat" ) catch {};
+ routes.put( "/generate", chat.routes.@"generate" ) catch {};
+ routes.put( "/create-chat", chat.routes.@"create-chat" ) catch {};
+ routes.put( "/delete-chat", chat.routes.@"delete-chat" ) catch {};
+}
+
+fn onRequest( r: Request ) void {
+ r.setHeader( "Access-Control-Allow-Origin", "*" ) catch {};
+ r.setHeader( "Access-Control-Allow-Methods", "*" ) catch {};
+ r.setHeader( "Access-Control-Allow-Headers", "*" ) catch {};
+ r.setHeader( "Access-Control-Allow-Credentials", "true" ) catch {};
+ if( r.path ) |p| {
+ if( routes.get( p ) ) |route| {
+ route( r );
+ return;
+ }
+ }
+
+ r.setStatus( .not_found );
+ r.sendBody( "<h1>404 Not Found</h1>" ) catch return;
+}
+
+var listener: zap.HttpListener = undefined;
+
+pub fn listen( a: Allocator ) !void {
+ setupRoutes( a );
+
+ listener = zap.HttpListener.init( .{
+ .port = config.server_port,
+ .on_request = onRequest,
+ .max_clients = 5000,
+ } );
+
+ try listener.listen();
+}
+
+pub fn deinit() void {
+ routes.deinit();
+}