public void SendNotification(string title, string message, string apiKey, ProwlPriority priority = ProwlPriority.Normal, string url = null) { try { var requestBuilder = new HttpRequestBuilder(PUSH_URL); var request = requestBuilder.Post() .AddFormParameter("apikey", apiKey) .AddFormParameter("application", BuildInfo.AppName) .AddFormParameter("event", title) .AddFormParameter("description", message) .AddFormParameter("priority", priority) .AddFormParameter("url", url) .Build(); _httpClient.Post(request); } catch (HttpException ex) { if (ex.Response.StatusCode == HttpStatusCode.Unauthorized) { _logger.Error(ex, "Apikey is invalid: {0}", apiKey); throw new ProwlException("Apikey is invalid", ex); } throw new ProwlException("Unable to send text message: " + ex.Message, ex); } catch (WebException ex) { throw new ProwlException("Failed to connect to prowl, please check your settings.", ex); } }
public async Task SendRequestWithCorrelateInfo_SetsCorrelationInfo_ResponseWithUpdatedCorrelationInfo() { // Arrange var correlationInfo = new CorrelationInfo($"operation-{Guid.NewGuid()}", $"transaction-{Guid.NewGuid()}"); var options = new TestApiServerOptions() .ConfigureServices(services => services.AddHttpCorrelation()) .PreConfigure(app => app.UseHttpCorrelation()); await using (var server = await TestApiServer.StartNewAsync(options, _logger)) { var request = HttpRequestBuilder.Post(CorrelationController.SetCorrelationRoute) .WithHeader(DefaultOperationId, correlationInfo.OperationId) .WithHeader(DefaultTransactionId, correlationInfo.TransactionId); // Act using (HttpResponseMessage response = await server.SendAsync(request)) { // Assert Assert.Equal(HttpStatusCode.OK, response.StatusCode); string actualOperationId = GetResponseHeader(response, DefaultOperationId); string actualTransactionId = GetResponseHeader(response, DefaultTransactionId); Assert.Equal(correlationInfo.OperationId, actualOperationId); Assert.Equal(correlationInfo.TransactionId, actualTransactionId); } } }
public async Task <T> Post <T>(object data, IDictionary <string, string> headers = null) { var request = HttpRequestBuilder <T> .Post(_baseUrl).QueryParameters(_parameters).Content(data).Headers(headers).Build(); var response = await Execute(request).ConfigureAwait(false); return(GetContent(response)); }
private HttpRequestBuilder AuthRequest(string email, string password) { return(HttpRequestBuilder .Post(LiveMeUrls.Login) .WithBody( $"--3i2ndDfv2rTHiSisAbouNdArYfORhtTPEefj3q2f\r\nContent-Disposition: form-data; name=\"cmversion\"\r\n\r\n38551987\r\n--3i2ndDfv2rTHiSisAbouNdArYfORhtTPEefj3q2f\r\nContent-Disposition: form-data; name=\"code\"\r\n\r\n\r\n--3i2ndDfv2rTHiSisAbouNdArYfORhtTPEefj3q2f\r\nContent-Disposition: form-data; name=\"name\"\r\n\r\n{email}\r\n--3i2ndDfv2rTHiSisAbouNdArYfORhtTPEefj3q2f\r\nContent-Disposition: form-data; name=\"extra\"\r\n\r\nuserinfo\r\n--3i2ndDfv2rTHiSisAbouNdArYfORhtTPEefj3q2f\r\nContent-Disposition: form-data; name=\"password\"\r\n\r\n{password}\r\n--3i2ndDfv2rTHiSisAbouNdArYfORhtTPEefj3q2f") .ReplaceContentHeaders(new Dictionary <string, string> { { "sig", "fp1bO-aJwHKoRB0jnsW4hQ6nor8" }, { "sid", "9469C0239535A9E579F8D20E5A4D5C3C" }, { "appid", "135301" }, { "ver", "3.8.55" }, { "content-type", "multipart/form-data; boundary=3i2ndDfv2rTHiSisAbouNdArYfORhtTPEefj3q2f" } })); }
public async Task Login() { var foundInDb = _dataAccess.FindAuthToken(); if (foundInDb != null) { double secondsSinceLastLogin = DateTime.UtcNow.ToUnixTimestamp() - foundInDb.LoginTimestamp; if (secondsSinceLastLogin < TimeSpan.FromMinutes(30).TotalSeconds) { return; } } if (_settings.Email == null || _settings.Password == null) { throw new ArgumentException("Either email or password was not provided"); } var request = AuthRequest(_settings.Email, _settings.Password); var res = await _client.Fetch(request, CancellationToken.None); dynamic json = JsonConvert.DeserializeObject(res); var authentication = new LivemeAuthentication { Sid = json.data.sid, SsoToken = json.data.sso_token }; var loginRequest = HttpRequestBuilder .Post(LiveMeUrls.AppLogin) .WithFormData( new { sso_token = authentication.SsoToken }); var loginResponse = await _client.Fetch(loginRequest, CancellationToken.None); dynamic loginData = JsonConvert.DeserializeObject(loginResponse); authentication.Tuid = loginData.data.user.user_info.uid; authentication.Token = loginData.data.token; authentication.LoginTimestamp = DateTime.UtcNow.ToUnixTimestamp(); _dataAccess.StoreAuthToken(authentication); }
public async Task <LiveMeUser> GetUserInfo(string uid, CancellationToken ctsToken) { _logger.LogInformation($"Get UserInfo: {uid}"); var request = HttpRequestBuilder .Post(LiveMeUrls.UserInfo) .WithFormData(new { userid = uid }); var raw = await _client.Fetch(request, ctsToken); dynamic json = JsonConvert.DeserializeObject(raw); var userInfo = json.data.user; return(JsonConvert.DeserializeObject <LiveMeUser>(userInfo.ToString())); }
public async Task <List <ReplayFromLiveme> > GetUsersReplays(string uid, CancellationToken token, int pageIndex = 1, int pageSize = 10) { _logger.LogStatus( $"Fetching User Replays for {uid}. Page {pageIndex} (page size: {pageIndex + pageSize})."); await _auth.Login(); var authentications = _dataAccess.FindAuthToken(); var request = HttpRequestBuilder .Post(LiveMeUrls.ReplayVideos) .WithFormData(new { userid = uid, page_index = pageIndex, page_size = pageSize, androidid = NewGuid, tuid = authentications.Tuid, token = authentications.Token, sso_token = authentications.SsoToken }); var res = await _client.Fetch(request, token); try { dynamic json = JsonConvert.DeserializeObject(res); var vidinfo = json.data.video_info; var replays = JsonConvert.DeserializeObject <List <ReplayFromLiveme> >(vidinfo.ToString()); _logger.LogStatus($"Found {replays.Count} Replays for {uid}."); _cache.StoreUserReplays(uid, replays); return(replays); } catch (Exception ex) { _logger.LogError($"Failed to get user replays. Response was: {res}. Exception: {ex.Message}"); return(new List <ReplayFromLiveme>()); } }
public async Task <List <UserInfo> > GetFans(string uid, CancellationToken token, int pageIndex = 1, int pageSize = 10) { _logger.LogInformation($"Get Fans: {uid}, {pageIndex}, {pageSize}"); var request = HttpRequestBuilder .Post(LiveMeUrls.Fans) .WithFormData(new { access_token = uid, // strange but that's the way it is. page_index = pageIndex, page_size = pageSize }); var raw = await _client.Fetch(request, token); dynamic json = JsonConvert.DeserializeObject(raw); var users = json.data; return(JsonConvert.DeserializeObject <List <UserInfo> >(users.ToString())); }
public async Task <ReplayFromLiveme> GetVideoInfo(string vid, CancellationToken token) { await _auth.Login(); var authentications = _dataAccess.FindAuthToken(); var request = HttpRequestBuilder .Post(LiveMeUrls.VideoInfo) .WithFormData(new { videoid = vid, userid = 0, tuid = authentications.Tuid, token = authentications.Token }); var raw = await _client.Fetch(request, token); dynamic json = JsonConvert.DeserializeObject(raw); var videoInfo = json.data.video_info; return(JsonConvert.DeserializeObject <ReplayFromLiveme>(videoInfo.ToString())); }