diff options
Diffstat (limited to 'backend/api/src/server.zig')
| -rw-r--r-- | backend/api/src/server.zig | 101 |
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(); +} |
