From d3dd7498e680d4ac899933e1264f8a3948edc727 Mon Sep 17 00:00:00 2001 From: Jonathan Bennett Date: Wed, 27 Nov 2019 11:20:43 -0500 Subject: [PATCH] generate the secret property automatically --- Shared/Secrets.swift.gyb | 27 ++++++++++++++++++++------- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/Shared/Secrets.swift.gyb b/Shared/Secrets.swift.gyb index e65f74297..8157424a2 100644 --- a/Shared/Secrets.swift.gyb +++ b/Shared/Secrets.swift.gyb @@ -1,27 +1,39 @@ -// Secrets.swift.gyb +// Generated by Secrets.swift.gyb %{ import os +secrets = ['FEED_WRANGLER_KEY'] + def chunks(seq, size): - return (seq[i:(i + size)] for i in range(0, len(seq), size)) + return (seq[i:(i + size)] for i in range(0, len(seq), size)) def encode(string, salt): - bytes = string.encode("UTF-8") - return [ord(bytes[i]) ^ salt[i % len(salt)] for i in range(0, len(bytes))] + bytes = string.encode("UTF-8") + return [ord(bytes[i]) ^ salt[i % len(salt)] for i in range(0, len(bytes))] + +def snake_to_camel(snake_str): + components = snake_str.split('_') + return components[0].lower() + ''.join(x.title() for x in components[1:]) salt = [ord(byte) for byte in os.urandom(64)] }% enum Secrets { - static var FeedWranglerClientKey: String { - let encoded: [UInt8] = [ - % for chunk in chunks(encode(os.environ.get('FEED_WRANGLER_KEY'), salt), 8): + % for secret in secrets: + static var ${snake_to_camel(secret)}: String { + let encoded: [UInt8] = [ + % for chunk in chunks(encode(os.environ.get(secret), salt), 8): ${"".join(["0x%02x, " % byte for byte in chunk])} % end ] return decode(encoded, salt: salt) } + % end + +} + +private extension Secrets { private static let salt: [UInt8] = [ % for chunk in chunks(salt, 8): @@ -34,4 +46,5 @@ enum Secrets { element ^ salt[offset % salt.count] }, as: UTF8.self) } + } \ No newline at end of file