public static byte[] EncodeConfigurationToken_v1(this ConfigurationTokenService service, Model.ExtensionConfiguration configuration) { byte[] payload = service.SerializeConfigurationToken_v1(configuration); // Encrypt the token return(service.Encrypt(payload)); }
public static byte[] SerializeConfigurationToken_v1(this ConfigurationTokenService service, Model.ExtensionConfiguration configuration) { // Generate the Flatbuffer token payload var builder = new FlatBufferBuilder(512); var fbConfiguration = new TwitchAchievementTracker.Flatbuffer.v1.Configuration(); fbConfiguration.version = configuration.Version; var xConfig = configuration.XBoxLiveConfig as Model.XApiConfiguration; var steamConfig = configuration.SteamConfig as Model.SteamConfiguration; switch (configuration.ActiveConfig) { case Model.ActiveConfig.XBoxLive: var flatBufferXBoxConfig = new XApiConfiguration(); flatBufferXBoxConfig.xApiKey = xConfig.XApiKey; flatBufferXBoxConfig.streamerXuid = string.IsNullOrEmpty(xConfig.StreamerXuid) ? 0 : UInt64.Parse(xConfig.StreamerXuid); flatBufferXBoxConfig.titleId = string.IsNullOrEmpty(xConfig.TitleId) ? 0 : UInt32.Parse(xConfig.TitleId); flatBufferXBoxConfig.locale = xConfig.Locale ?? "en-US"; fbConfiguration.config = new FlatBufferUnion <XApiConfiguration, SteamConfiguration>(flatBufferXBoxConfig); break; case Model.ActiveConfig.Steam: var webKeyString = builder.CreateString(steamConfig.WebApiKey); var steamId = UInt64.Parse(steamConfig.SteamId); var appId = steamConfig.AppId; var steamLocale = builder.CreateString(steamConfig.Locale ?? "english"); var flatBufferSteamConfig = new SteamConfiguration(); flatBufferSteamConfig.webApiKey = steamConfig.WebApiKey; flatBufferSteamConfig.steamId = string.IsNullOrEmpty(steamConfig.SteamId) ? 0 : UInt64.Parse(steamConfig.SteamId); flatBufferSteamConfig.appId = string.IsNullOrEmpty(steamConfig.AppId) ? 0 : UInt32.Parse(steamConfig.AppId); fbConfiguration.config = new FlatBufferUnion <XApiConfiguration, SteamConfiguration>(flatBufferSteamConfig); break; default: throw new NotSupportedException("Unknown configuration platform"); } int maxBytesNeeded = FlatBufferSerializer.Default.GetMaxSize(fbConfiguration); byte[] outBuffer = new byte[maxBytesNeeded]; int bytesWritten = FlatBufferSerializer.Default.Serialize(fbConfiguration, outBuffer); return(new ArraySegment <byte>(outBuffer, 0, bytesWritten).ToArray()); }
public static Model.ExtensionConfiguration DeserializeConfigurationToken_v1(this ConfigurationTokenService service, byte[] decrypted) { var fbConfiguration = FlatBufferSerializer.Default.Parse <TwitchAchievementTracker.Flatbuffer.v1.Configuration>(decrypted); SteamConfiguration steamFbConfig = null; XApiConfiguration xApiFbConfig = null; Model.ActiveConfig activeConfig; if (fbConfiguration.config.TryGet(out steamFbConfig)) { activeConfig = Model.ActiveConfig.Steam; } else if (fbConfiguration.config.TryGet(out xApiFbConfig)) { activeConfig = Model.ActiveConfig.XBoxLive; } else { throw new NotSupportedException("Unknown configuration platform"); } return(new Model.ExtensionConfiguration { Version = fbConfiguration.version, ActiveConfig = activeConfig, SteamConfig = steamFbConfig == null ? null : new Model.SteamConfiguration { WebApiKey = steamFbConfig.webApiKey, SteamId = steamFbConfig.steamId == 0 ? null : steamFbConfig.steamId.ToString(), AppId = steamFbConfig.appId == 0 ? null : steamFbConfig.appId.ToString(), Locale = steamFbConfig.locale, }, XBoxLiveConfig = xApiFbConfig == null ? null : new Model.XApiConfiguration { XApiKey = xApiFbConfig.xApiKey, StreamerXuid = xApiFbConfig.streamerXuid == 0 ? null : xApiFbConfig.streamerXuid.ToString(), TitleId = xApiFbConfig.titleId == 0 ? null : xApiFbConfig.titleId.ToString(), Locale = xApiFbConfig.locale, } }); }
public void CheckLegacyTokenSerialization() { // Test deserialization from legacy encrypted token using known secret var encrypted = "X1Pmbd3v86Ck731UlGCnFfQ0zjhr0gNRe+fJARWIqtgk80IJfCm6HjmcGGifBndUr3AspJJldYnRHvOmsdj1UUWtjUw4ZK+AqVtIBz+YxbUipbKlcCypRCnsa0n1CLwBqFQd0Ci/9utTVFituJh1wl1VL52F8VWEqQEoNYTz+TKSj/ShJWKNodSkvK1US96F8RMpVHsJvz2M4OuisrRwTagSTW59U75Mz0KJ/hFkyu8="; var secret = "deadbeef1337deadbeef"; var options = new OptionsWrapper <ConfigurationTokenOptions>(new ConfigurationTokenOptions { EncryptionSecret = secret }); var loggerFactory = new LoggerFactory(); var tokenService = new ConfigurationTokenService(options, loggerFactory.CreateLogger <ConfigurationTokenService>()); var decryptedPayload = tokenService.Decrypt(Convert.FromBase64String(encrypted)); var configurationIn = tokenService.DeserializeConfigurationToken_v1(decryptedPayload); // Test serialization from current version ExtensionConfiguration type var configuration = new ExtensionConfiguration { Version = "0.0.1", ActiveConfig = ActiveConfig.XBoxLive, SteamConfig = null, XBoxLiveConfig = new XApiConfiguration { StreamerXuid = "2112233445566778", TitleId = "123456", XApiKey = "deadbeef1337551c773676461c1c1337deadbeef", Locale = "fr-FR", }, }; var configurationOut = tokenService.SerializeConfigurationToken_v1(configuration); Assert.Equal(configuration.Version, configurationIn.Version); Assert.Equal(configuration.SteamConfig, configurationIn.SteamConfig); Assert.Equal(configuration.XBoxLiveConfig.XApiKey, configurationIn.XBoxLiveConfig.XApiKey); Assert.Equal(configuration.XBoxLiveConfig.StreamerXuid, configurationIn.XBoxLiveConfig.StreamerXuid); Assert.Equal(configuration.XBoxLiveConfig.TitleId, configurationIn.XBoxLiveConfig.TitleId); Assert.Equal(configuration.XBoxLiveConfig.Locale, configurationIn.XBoxLiveConfig.Locale); }
public ConfigurationController(ConfigurationTokenService tokenService, ConfigurationService service) { _service = service; _tokenService = tokenService; }
public AchievementsController(XApiService xApiService, SteamApiService steamApiService, ConfigurationTokenService configurationService) { _xApiService = xApiService; _steamApiService = steamApiService; _configurationService = configurationService; }
// Legacy token decryption from published version v0.1.1 public static Model.ExtensionConfiguration DecodeConfigurationToken_v1(this ConfigurationTokenService service, byte[] payload) { // Decrypt the token byte[] decrypted = service.Decrypt(payload); return(service.DeserializeConfigurationToken_v1(decrypted)); }