struct basic_authorization [src]

Members

Source

pub const basic_authorization = struct { pub const max_user_len = 255; pub const max_password_len = 255; pub const max_value_len = valueLength(max_user_len, max_password_len); const prefix = "Basic "; pub fn valueLength(user_len: usize, password_len: usize) usize { return prefix.len + std.base64.standard.Encoder.calcSize(user_len + 1 + password_len); } pub fn valueLengthFromUri(uri: Uri) usize { var stream = std.io.countingWriter(std.io.null_writer); try stream.writer().print("{user}", .{uri.user orelse Uri.Component.empty}); const user_len = stream.bytes_written; stream.bytes_written = 0; try stream.writer().print("{password}", .{uri.password orelse Uri.Component.empty}); const password_len = stream.bytes_written; return valueLength(@intCast(user_len), @intCast(password_len)); } pub fn value(uri: Uri, out: []u8) []u8 { var buf: [max_user_len + ":".len + max_password_len]u8 = undefined; var stream = std.io.fixedBufferStream(&buf); stream.writer().print("{user}", .{uri.user orelse Uri.Component.empty}) catch unreachable; assert(stream.pos <= max_user_len); stream.writer().print(":{password}", .{uri.password orelse Uri.Component.empty}) catch unreachable; @memcpy(out[0..prefix.len], prefix); const base64 = std.base64.standard.Encoder.encode(out[prefix.len..], stream.getWritten()); return out[0 .. prefix.len + base64.len]; } }