srctree

Gregory Mullen parent 6df64187 e0cfca11
add auth createSession function

src/auth.zig added: 21, removed: 6, total 15
@@ -60,6 +60,7 @@ pub const MTLS = struct {
.authenticate = authenticate,
.valid = valid,
.lookup_user = lookupUser,
.create_session = null,
},
};
}
@@ -100,6 +101,7 @@ pub const InvalidAuth = struct {
.authenticate = null, // TODO write invalid
.valid = valid,
.lookup_user = lookupUser,
.create_session = null,
},
};
}
@@ -141,6 +143,7 @@ const TestingAuth = struct {
.authenticate = null,
.valid = null,
.lookup_user = lookupUserUntyped,
.create_session = null,
},
};
}
 
src/auth/provider.zig added: 21, removed: 6, total 15
@@ -9,19 +9,22 @@ pub const VTable = struct {
authenticate: ?AuthenticateFn,
lookup_user: ?LookupUserFn,
valid: ?ValidFn,
create_session: ?CreateSessionFn,
 
pub const AuthenticateFn = *const fn (*anyopaque, *const Headers) Auth.Error!Auth.User;
pub const LookupUserFn = *const fn (*anyopaque, []const u8) Auth.Error!Auth.User;
pub const AuthenticateFn = *const fn (*anyopaque, *const Headers) Error!User;
pub const LookupUserFn = *const fn (*anyopaque, []const u8) Error!User;
pub const ValidFn = *const fn (*anyopaque, *const User) bool;
pub const CreateSessionFn = *const fn (*anyopaque, *const User) Error!void;
 
pub const Empty = .{
.authenticate = null,
.lookup_user = null,
.valid = null,
.create_session = null,
};
};
 
pub fn authenticate(self: *const Provider, headers: *const Headers) Auth.Error!Auth.User {
pub fn authenticate(self: *const Provider, headers: *const Headers) Error!User {
if (self.vtable.authenticate) |func| {
return try func(self.ctx, headers);
}
@@ -38,7 +41,7 @@ pub fn valid(self: *const Provider, user: *const User) bool {
}
 
/// TODO document the implications of non consttime function
pub fn lookupUser(self: *const Provider, user_id: []const u8) Auth.Error!Auth.User {
pub fn lookupUser(self: *const Provider, user_id: []const u8) Error!User {
if (self.vtable.lookup_user) |func| {
return try func(self.ctx, user_id);
}
@@ -46,6 +49,15 @@ pub fn lookupUser(self: *const Provider, user_id: []const u8) Auth.Error!Auth.Us
return error.NotProvided;
}
 
pub fn createSession(self: *const Provider, user: *User) Error!void {
if (self.vtable.create_session) |func| {
return try func(self.ctx, user);
}
 
return error.NotProvided;
}
 
const Auth = @import("../auth.zig");
pub const Error = Auth.Error;
const Headers = @import("../headers.zig");
const User = @import("user.zig");