srctree

Gregory Mullen parent 1c633061 78ca0cd9
remove alloc from types user loader

inlinesplit
src/main.zig added: 34, removed: 21, total 13
@@ -104,9 +104,7 @@ const Auth = struct {
alloc: Allocator,
 
pub fn init(a: Allocator) Auth {
return .{
.alloc = a,
};
return .{ .alloc = a };
}
 
pub fn raze(_: Auth) void {}
@@ -127,12 +125,16 @@ const Auth = struct {
pub fn lookupUser(ptr: *anyopaque, user_id: []const u8) !verse.auth.User {
log.debug("lookup user {s}", .{user_id});
const auth: *Auth = @ptrCast(@alignCast(ptr));
const user = Types.User.findMTLSFingerprint(auth.alloc, user_id) catch |err| {
const user: *Types.User = auth.alloc.create(Types.User) catch @panic("OOM");
user.* = Types.User.findMTLSFingerprint(user_id) catch |err| {
std.debug.print("mtls lookup error {}\n", .{err});
return error.UnknownUser;
};
 
return .{
.username = user.username,
.user_ptr = user,
.unique_id = auth.alloc.dupe(u8, user_id) catch @panic("OOM"),
.username = user.username.slice(),
};
}
};
 
src/srctree.zig added: 34, removed: 21, total 13
@@ -58,9 +58,15 @@ fn builder(fr: *Frame, call: BuildFn) void {
.nav_buttons = &btns,
} };
 
bh.nav.nav_auth = if (fr.user) |usr| n: {
break :n if (usr.username) |un| un else "Error No Username";
} else "Public";
if (fr.user) |usr| {
if (usr.username) |un| {
bh.nav.nav_auth = un;
} else {
bh.nav.nav_auth = "Error No Username";
}
} else {
bh.nav.nav_auth = "Public";
}
fr.response_data.add(bh) catch {};
return call(fr) catch |err| switch (err) {
error.InvalidURI => builder(fr, notFound), // TODO catch inline
 
src/types/user.zig added: 34, removed: 21, total 13
@@ -19,19 +19,21 @@ pub fn initType(stor: Types.Storage) !void {
mtls_fp: [40]u8 = .{0} ** 40,
not_before: i64,
not_after: i64,
username: []const u8,
username: UsernameArray,
 
pub fn findMTLSFingerprint(a: Allocator, fp: []const u8) !User {
pub const UsernameArray = std.BoundedArray(u8, 128);
 
pub fn findMTLSFingerprint(fp: []const u8) !User {
if (fp.len != 40) return error.InvalidFingerprint;
const file = try openFile(fp);
return readFile(a, file);
return readFile(file);
}
 
pub fn open(a: Allocator, username: []const u8) !User {
pub fn open(username: []const u8) !User {
for (username) |c| if (!std.ascii.isLower(c)) return error.InvalidUsername;
 
const ufile = try openFile(username);
return try readFile(a, ufile);
return try readFile(ufile);
}
 
pub fn commit(self: User) !User {
@@ -40,17 +42,20 @@ pub fn commit(self: User) !User {
try self.writeOut(w);
}
 
fn readVersioned(a: Allocator, file: std.fs.File) !User {
fn readVersioned(file: std.fs.File) !User {
var reader = file.reader();
const ver: usize = try reader.readInt(usize, endian);
switch (ver) {
0 => {
return User{
var u: User = .{
.mtls_fp = try reader.readBytesNoEof(40),
.not_before = std.math.minInt(i64),
.not_after = std.math.maxInt(i64),
.username = try reader.readUntilDelimiterAlloc(a, 0, 0xFFF),
.username = .{},
};
const slice = try reader.readUntilDelimiter(u.username.unusedCapacitySlice(), 0);
try u.username.resize(slice.len);
return u;
},
else => return error.UnsupportedVersion,
}
@@ -62,9 +67,9 @@ fn openFile(fp: []const u8) !std.fs.File {
return try datad.createFile(filename, .{ .read = true, .truncate = false });
}
 
fn readFile(a: Allocator, file: std.fs.File) !User {
fn readFile(file: std.fs.File) !User {
defer file.close();
return readVersioned(a, file);
return readVersioned(file);
}
 
pub fn raze(self: User, a: Allocator) void {