authorgravatar for hello@nektro.netMeghan Denny <hello@nektro.net> 2023-06-28 23:12:35 -07:00
committergravatar for hello@nektro.netMeghan Denny <hello@nektro.net> 2023-06-28 23:12:35 -07:00
log9f8e86ea0b573c27befaaf849760c211a891e58d
treea71c55225fdcf4f594c637d2497fc4b87608cb43
parent63795e0f74f5f7d0c884e42dcceae93ae5827f30

handle bad token and userinfo responses in callback


1 files changed, 4 insertions(+), 2 deletions(-)

src/lib.zig+4-2
......@@ -262,10 +262,11 @@ pub fn Handlers(comptime T: type) type {
262262 try headers.appendValue("Authorization", try std.fmt.allocPrint(alloc, "Basic {s}", .{try extras.base64EncodeAlloc(alloc, try std.mem.join(alloc, ":", &.{ client.id, client.secret }))}));
263263 try headers.appendValue("Accept", "application/json");
264264
265 // TODO print error message to response if this fails
266265 try req.do(.POST, headers, try params.encode());
267266 const r = req.reader();
268267 const body_content = try r.readAllAlloc(alloc, 1024 * 1024 * 5);
268 if (req.status != .ok) std.log.scoped(.oauth).debug("{s}", .{body_content});
269 if (req.status != .ok) return error.OauthBadToken;
269270 const val = try extras.parse_json(alloc, body_content);
270271
271272 const at = val.root.object.get("access_token") orelse return try fail(response, body_writer, "Identity Provider Login Error!\n{s}", .{body_content});
......@@ -275,10 +276,11 @@ pub fn Handlers(comptime T: type) type {
275276 try headers2.appendValue("Authorization", try std.fmt.allocPrint(alloc, "Bearer {s}", .{at.string}));
276277 try headers2.appendValue("Accept", "application/json");
277278
278 // TODO print error message if this fails
279279 try req2.do(.GET, headers2, null);
280280 const r2 = req2.reader();
281281 const body_content2 = try r2.readAllAlloc(alloc, 1024 * 1024 * 5);
282 if (req2.status != .ok) std.log.scoped(.oauth).debug("{s}", .{body_content2});
283 if (req2.status != .ok) return error.OauthBadUserinfo;
282284 const val2 = try extras.parse_json(alloc, body_content2);
283285
284286 const id = try fixId(alloc, val2.root.object.get(client.provider.id_prop).?);