1
0
Fork 0
mirror of https://github.com/zigzap/zap.git synced 2025-10-20 15:14:08 +00:00

Merge pull request #164 from fwfurtado/hotfix/add-missing-head-handler-to-endpoints

fix: add missing head handler for EndpointType
This commit is contained in:
Rene Schallner 2025-04-22 21:32:52 +02:00 committed by GitHub
commit ec7cac6f6a
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
12 changed files with 39 additions and 1 deletions

View file

@ -65,6 +65,7 @@ const MyEndpoint = struct {
pub fn delete(_: *MyEndpoint, _: Allocator, _: *MyContext, _: zap.Request) !void {} pub fn delete(_: *MyEndpoint, _: Allocator, _: *MyContext, _: zap.Request) !void {}
pub fn patch(_: *MyEndpoint, _: Allocator, _: *MyContext, _: zap.Request) !void {} pub fn patch(_: *MyEndpoint, _: Allocator, _: *MyContext, _: zap.Request) !void {}
pub fn options(_: *MyEndpoint, _: Allocator, _: *MyContext, _: zap.Request) !void {} pub fn options(_: *MyEndpoint, _: Allocator, _: *MyContext, _: zap.Request) !void {}
pub fn head(_: *MyEndpoint, _: Allocator, _: *MyContext, _: zap.Request) !void {}
}; };
pub fn main() !void { pub fn main() !void {

View file

@ -66,6 +66,7 @@ const SimpleEndpoint = struct {
pub fn delete(_: *SimpleEndpoint, _: Allocator, _: *MyContext, _: zap.Request) !void {} pub fn delete(_: *SimpleEndpoint, _: Allocator, _: *MyContext, _: zap.Request) !void {}
pub fn patch(_: *SimpleEndpoint, _: Allocator, _: *MyContext, _: zap.Request) !void {} pub fn patch(_: *SimpleEndpoint, _: Allocator, _: *MyContext, _: zap.Request) !void {}
pub fn options(_: *SimpleEndpoint, _: Allocator, _: *MyContext, _: zap.Request) !void {} pub fn options(_: *SimpleEndpoint, _: Allocator, _: *MyContext, _: zap.Request) !void {}
pub fn head(_: *SimpleEndpoint, _: Allocator, _: *MyContext, _: zap.Request) !void {}
}; };
const StopEndpoint = struct { const StopEndpoint = struct {

View file

@ -53,6 +53,7 @@ const ErrorEndpoint = struct {
pub fn delete(_: *ErrorEndpoint, _: Allocator, _: *MyContext, _: zap.Request) !void {} pub fn delete(_: *ErrorEndpoint, _: Allocator, _: *MyContext, _: zap.Request) !void {}
pub fn patch(_: *ErrorEndpoint, _: Allocator, _: *MyContext, _: zap.Request) !void {} pub fn patch(_: *ErrorEndpoint, _: Allocator, _: *MyContext, _: zap.Request) !void {}
pub fn options(_: *ErrorEndpoint, _: Allocator, _: *MyContext, _: zap.Request) !void {} pub fn options(_: *ErrorEndpoint, _: Allocator, _: *MyContext, _: zap.Request) !void {}
pub fn head(_: *ErrorEndpoint, _: Allocator, _: *MyContext, _: zap.Request) !void {}
}; };
const StopEndpoint = struct { const StopEndpoint = struct {

View file

@ -20,3 +20,4 @@ pub fn put(_: *ErrorEndpoint, _: zap.Request) !void {}
pub fn delete(_: *ErrorEndpoint, _: zap.Request) !void {} pub fn delete(_: *ErrorEndpoint, _: zap.Request) !void {}
pub fn patch(_: *ErrorEndpoint, _: zap.Request) !void {} pub fn patch(_: *ErrorEndpoint, _: zap.Request) !void {}
pub fn options(_: *ErrorEndpoint, _: zap.Request) !void {} pub fn options(_: *ErrorEndpoint, _: zap.Request) !void {}
pub fn head(_: *ErrorEndpoint, _: zap.Request) !void {}

View file

@ -23,3 +23,4 @@ pub fn put(_: *StopEndpoint, _: zap.Request) !void {}
pub fn delete(_: *StopEndpoint, _: zap.Request) !void {} pub fn delete(_: *StopEndpoint, _: zap.Request) !void {}
pub fn patch(_: *StopEndpoint, _: zap.Request) !void {} pub fn patch(_: *StopEndpoint, _: zap.Request) !void {}
pub fn options(_: *StopEndpoint, _: zap.Request) !void {} pub fn options(_: *StopEndpoint, _: zap.Request) !void {}
pub fn head(_: *StopEndpoint, _: zap.Request) !void {}

View file

@ -127,7 +127,12 @@ pub fn delete(self: *UserWeb, r: zap.Request) !void {
pub fn options(_: *UserWeb, r: zap.Request) !void { pub fn options(_: *UserWeb, r: zap.Request) !void {
try r.setHeader("Access-Control-Allow-Origin", "*"); try r.setHeader("Access-Control-Allow-Origin", "*");
try r.setHeader("Access-Control-Allow-Methods", "GET, POST, PUT, PATCH, DELETE, OPTIONS"); try r.setHeader("Access-Control-Allow-Methods", "GET, POST, PUT, PATCH, DELETE, OPTIONS, HEAD");
r.setStatus(zap.http.StatusCode.no_content);
r.markAsFinished(true);
}
pub fn head(_: *UserWeb, r: zap.Request) !void {
r.setStatus(zap.http.StatusCode.no_content); r.setStatus(zap.http.StatusCode.no_content);
r.markAsFinished(true); r.markAsFinished(true);
} }

View file

@ -38,6 +38,7 @@ const Endpoint = struct {
pub fn delete(_: *Endpoint, _: zap.Request) !void {} pub fn delete(_: *Endpoint, _: zap.Request) !void {}
pub fn patch(_: *Endpoint, _: zap.Request) !void {} pub fn patch(_: *Endpoint, _: zap.Request) !void {}
pub fn options(_: *Endpoint, _: zap.Request) !void {} pub fn options(_: *Endpoint, _: zap.Request) !void {}
pub fn head(_: *Endpoint, _: zap.Request) !void {}
}; };
pub fn main() !void { pub fn main() !void {

View file

@ -157,6 +157,7 @@ const HtmlEndpoint = struct {
pub fn delete(_: *HtmlEndpoint, _: zap.Request) !void {} pub fn delete(_: *HtmlEndpoint, _: zap.Request) !void {}
pub fn patch(_: *HtmlEndpoint, _: zap.Request) !void {} pub fn patch(_: *HtmlEndpoint, _: zap.Request) !void {}
pub fn options(_: *HtmlEndpoint, _: zap.Request) !void {} pub fn options(_: *HtmlEndpoint, _: zap.Request) !void {}
pub fn head(_: *HtmlEndpoint, _: zap.Request) !void {}
pub fn get(_: *HtmlEndpoint, r: zap.Request) !void { pub fn get(_: *HtmlEndpoint, r: zap.Request) !void {
var buf: [1024]u8 = undefined; var buf: [1024]u8 = undefined;

View file

@ -117,6 +117,7 @@ pub fn Create(
.DELETE => self.endpoint.*.delete(arena, app_context, r), .DELETE => self.endpoint.*.delete(arena, app_context, r),
.PATCH => self.endpoint.*.patch(arena, app_context, r), .PATCH => self.endpoint.*.patch(arena, app_context, r),
.OPTIONS => self.endpoint.*.options(arena, app_context, r), .OPTIONS => self.endpoint.*.options(arena, app_context, r),
.HEAD => self.endpoint.*.head(arena, app_context, r),
else => error.UnsupportedHtmlRequestMethod, else => error.UnsupportedHtmlRequestMethod,
}; };
if (ret) { if (ret) {
@ -173,6 +174,7 @@ pub fn Create(
"delete", "delete",
"patch", "patch",
"options", "options",
"head",
}; };
const params_to_check = [_]type{ const params_to_check = [_]type{
*T, *T,
@ -305,6 +307,15 @@ pub fn Create(
.Handled => {}, .Handled => {},
}; };
} }
/// Authenticates HEAD requests using the Authenticator.
pub fn head(self: *AuthenticatingEndpoint, arena: Allocator, context: *Context, request: zap.Request) anyerror!void {
try switch (self.authenticator.authenticateRequest(&request)) {
.AuthFailed => return self.ep.*.unauthorized(arena, context, request),
.AuthOK => self.ep.*.head(arena, context, request),
.Handled => {},
};
}
}; };
} }
}; };

View file

@ -19,6 +19,7 @@
//! pub fn delete(_: *Self, _: zap.Request) !void {} //! pub fn delete(_: *Self, _: zap.Request) !void {}
//! pub fn patch(_: *Self, _: zap.Request) !void {} //! pub fn patch(_: *Self, _: zap.Request) !void {}
//! pub fn options(_: *Self, _: zap.Request) !void {} //! pub fn options(_: *Self, _: zap.Request) !void {}
//! pub fn head(_: *Self, _: zap.Request) !void {}
//! //!
//! // optional, if auth stuff is used: //! // optional, if auth stuff is used:
//! pub fn unauthorized(_: *Self, _: zap.Request) !void {} //! pub fn unauthorized(_: *Self, _: zap.Request) !void {}
@ -49,6 +50,7 @@
//! pub fn delete(_: *StopEndpoint, _: zap.Request) !void {} //! pub fn delete(_: *StopEndpoint, _: zap.Request) !void {}
//! pub fn patch(_: *StopEndpoint, _: zap.Request) !void {} //! pub fn patch(_: *StopEndpoint, _: zap.Request) !void {}
//! pub fn options(_: *StopEndpoint, _: zap.Request) !void {} //! pub fn options(_: *StopEndpoint, _: zap.Request) !void {}
//! pub fn head(_: *StopEndpoint, _: zap.Request) !void {}
//! }; //! };
//! ``` //! ```
@ -97,6 +99,7 @@ pub fn checkEndpointType(T: type) void {
"delete", "delete",
"patch", "patch",
"options", "options",
"head",
}; };
const params_to_check = [_]type{ const params_to_check = [_]type{
@ -192,6 +195,7 @@ pub const Binder = struct {
.DELETE => self.endpoint.*.delete(r), .DELETE => self.endpoint.*.delete(r),
.PATCH => self.endpoint.*.patch(r), .PATCH => self.endpoint.*.patch(r),
.OPTIONS => self.endpoint.*.options(r), .OPTIONS => self.endpoint.*.options(r),
.HEAD => self.endpoint.*.head(r),
else => error.UnsupportedHtmlRequestMethod, else => error.UnsupportedHtmlRequestMethod,
}; };
if (ret) { if (ret) {
@ -295,6 +299,15 @@ pub fn Authenticating(EndpointType: type, Authenticator: type) type {
.Handled => {}, .Handled => {},
}; };
} }
/// Authenticates HEAD requests using the Authenticator.
pub fn head(self: *AuthenticatingEndpoint, r: zap.Request) anyerror!void {
try switch (self.authenticator.authenticateRequest(&r)) {
.AuthFailed => return self.ep.*.unauthorized(r),
.AuthOK => self.ep.*.head(r),
.Handled => {},
};
}
}; };
} }

View file

@ -109,6 +109,7 @@ pub fn EndpointHandler(comptime HandlerType: anytype, comptime EndpointType: any
.DELETE => try self.endpoint.*.delete(r), .DELETE => try self.endpoint.*.delete(r),
.PATCH => try self.endpoint.*.patch(r), .PATCH => try self.endpoint.*.patch(r),
.OPTIONS => try self.endpoint.*.options(r), .OPTIONS => try self.endpoint.*.options(r),
.HEAD => try self.endpoint.*.head(r),
else => {}, else => {},
} }
} }

View file

@ -170,6 +170,7 @@ pub const Endpoint = struct {
pub fn delete(_: *Endpoint, _: zap.Request) !void {} pub fn delete(_: *Endpoint, _: zap.Request) !void {}
pub fn patch(_: *Endpoint, _: zap.Request) !void {} pub fn patch(_: *Endpoint, _: zap.Request) !void {}
pub fn options(_: *Endpoint, _: zap.Request) !void {} pub fn options(_: *Endpoint, _: zap.Request) !void {}
pub fn head(_: *Endpoint, _: zap.Request) !void {}
}; };
// //
// end of http client code // end of http client code