diff --git a/oauth2.zig b/oauth2.zig index 520284d651cdd1ce9a493543f776d07158f51294..cde71345630369082bd7601696d3b27f58130e9b 100644 --- a/oauth2.zig +++ b/oauth2.zig @@ -188,6 +188,11 @@ pub fn providerById(alloc: std.mem.Allocator, name: string) !?Provider { return p; } } + inline for (comptime std.meta.globalOption("oauth2_providers", []const Provider) orelse &.{}) |p| { + if (std.mem.eql(u8, p.id, name)) { + return p; + } + } const c_ind = std.mem.indexOfScalar(u8, name, ',') orelse return null; const p_id = name[0..c_ind]; const domain = name[c_ind + 1 ..]; @@ -209,6 +214,22 @@ pub fn providerById(alloc: std.mem.Allocator, name: string) !?Provider { }; } } + inline for (comptime std.meta.globalOption("oauth2_dynamic_providers", []const Provider) orelse &.{}) |didp| { + if (std.mem.eql(u8, didp.id, p_id)) { + return Provider{ + .id = name, + .authorize_url = try std.fmt.allocPrint(alloc, didp.authorize_url, args), + .token_url = try std.fmt.allocPrint(alloc, didp.token_url, args), + .me_url = try std.fmt.allocPrint(alloc, didp.me_url, args), + .scope = didp.scope, + .name_prop = didp.name_prop, + .name_prefix = didp.name_prefix, + .id_prop = didp.id_prop, + .logo = didp.logo, + .color = didp.color, + }; + } + } return null; }