using KdanCommon.CMSCollection.Data; using KdanCommon.GoogleCloud.Data.Vision; using KdanCommon.Helpers; using KdanCommon.Mixpanel.Data; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Linq; using System.Net.Http; using System.Security.Cryptography; using System.Text; using System.Threading.Tasks; using System.Xml.Linq; using Windows.ApplicationModel.Email.DataProvider; using Windows.Data.Json; using Windows.Media.Protection.PlayReady; namespace KdanCommon.Mixpanel { public class Mixpanel { private static string MixpanelDomain = "https://api.mixpanel.com"; private HttpClient _httpClient = null; private string _projectToken = null; private Uri _importUri = null; private Uri _setProfileUri = null; private Uri _createAlias = null; public Mixpanel(string userName, string userSecret, string projectId, string projectToken) { _projectToken = projectToken; _httpClient = new HttpClient(); string authValue = Convert.ToBase64String(Encoding.UTF8.GetBytes(userName + ":" + userSecret)); _httpClient.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Basic", authValue); _importUri = new Uri($"{MixpanelDomain}/import?strict=1&project_id={projectId}"); _setProfileUri = new Uri($"{MixpanelDomain}/engage?verbose=1#profile-set"); _createAlias = new Uri($"{MixpanelDomain}/import?project_id={projectId}#identity-create-alias"); } ~Mixpanel() { _httpClient.Dispose(); } public async Task ImportEvents(string distinctId, string eventName, Dictionary customProperties) { var events = new EventData[] { new EventData(eventName, distinctId, customProperties) }; var eventsJsonStr = JsonConvert.SerializeObject(events); var content = new StringContent(eventsJsonStr, System.Text.Encoding.UTF8, "application/json"); var res = await _httpClient.PostAsync(_importUri, content); if(res.StatusCode == System.Net.HttpStatusCode.OK) { if (res.Content != null) { var jsonString = await res.Content.ReadAsStringAsync(); var response = JsonTool.DeserializeJSON(jsonString); if (response.Code == 200) return true; } } return false; } public async Task SetProfile(string distinctId, Dictionary customProperties) { var profiles = new ProfileData[] { new ProfileData(_projectToken, distinctId, customProperties) }; var profilesJsonStr = JsonConvert.SerializeObject(profiles); var content = new StringContent(profilesJsonStr, System.Text.Encoding.UTF8, "application/json"); var res = await _httpClient.PostAsync(_setProfileUri, content); if(res.StatusCode == System.Net.HttpStatusCode.OK) { if (res.Content != null) { var jsonString = await res.Content.ReadAsStringAsync(); var response = JsonTool.DeserializeJSON(jsonString); if (response.Error == null) return true; } } return false; } public async Task CreateAlias(string distinctId, string aliasTo) { var alias = new AliasData() { Event = "$create_alias", Properties = new Properties() { DistinctId = distinctId, Alias = aliasTo, Token = _projectToken } }; var aliasJsonStr = JsonConvert.SerializeObject(alias); var formData = new FormUrlEncodedContent(new[] { new KeyValuePair("data", aliasJsonStr), new KeyValuePair("strict", "1"), }); var res = await _httpClient.PostAsync(_createAlias, formData); if (res.StatusCode == System.Net.HttpStatusCode.OK) return true; return false; } } }