コード例 #1
0
ファイル: ProwlProxy.cs プロジェクト: debbielobo1/Lidarr
        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);
            }
        }
コード例 #2
0
        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);
                }
            }
        }
コード例 #3
0
        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));
        }
コード例 #4
0
 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" }
     }));
 }
コード例 #5
0
        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);
        }
コード例 #6
0
        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()));
        }
コード例 #7
0
        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>());
            }
        }
コード例 #8
0
        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()));
        }
コード例 #9
0
        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()));
        }