예제 #1
0
        public void TestDummyRequest()
        {
            HttpRequest req = new HttpRequest();

            req.BaseUrl("http://ws.audioscrobbler.com/2.0");
            req.AddParameter("format", "json");
            req.AddParameter("api_key", LastFmAPI.API_KEY);

            /*
             * Search for band Muse
             */
            DtoSearch dto = (DtoSearch)req.Get(
                "?method=artist.search&artist=muse",
                typeof(DtoSearch));

            Assert.AreEqual("Muse", dto.Results.ArtistMatches.Artist[0].Name);
            Assert.AreEqual("Mouse on Mars", dto.Results.ArtistMatches.Artist[3].Name);

            /*
             * Get top tracks from Australia
             */
            DtoGeoTopTracks aus = (DtoGeoTopTracks)req.Get(
                "?method=geo.gettoptracks&country=australia",
                typeof(DtoGeoTopTracks));
            List <Track> tracks = aus.Tracks.Track;

            Assert.AreEqual("The Less I Know the Better", tracks[0].Name);
            Assert.AreEqual("Mr. Brightside", tracks[1].Name);
            Assert.AreEqual("The Killers", tracks[1].Artist.Name);
        }
예제 #2
0
        internal Task <string> Login(User user)
        {
            var req = new HttpRequest("login");

            req.AddParameter("username", user.UserName);
            req.AddParameter("password", user.Password);
            return(HttpWorker.RunWorker <string>(req));
        }
예제 #3
0
        internal Task <List <ChatObject> > GetHistory(string receiver)
        {
            var req = new HttpRequest("GetHistory");

            req.AddParameter("username", AppService.CurrentUser);
            req.AddParameter("receivername", receiver);
            return(HttpWorker.RunWorker <List <ChatObject> >(req));
        }
예제 #4
0
        internal Task <string> Register(User user)
        {
            var req = new HttpRequest("register");

            req.AddParameter("username", user.UserName);
            req.AddParameter("firstname", user.FirstName);
            req.AddParameter("lastname", user.LastName);
            req.AddParameter("password", user.Password);
            return(HttpWorker.RunWorker <string>(req));
        }
예제 #5
0
        public void AddParameter_Body_GetParameters_Query_ReturnsNone()
        {
            var request = new HttpRequest(HttpMethod.Post, "v1/sweet");

            request.AddParameter("query1", "hello1", RequestParameterType.Body);
            request.AddParameter("query2", "hello2", RequestParameterType.Body);

            var queryParams = request.GetParameters(RequestParameterType.Query);

            Assert.Empty(queryParams);
        }
예제 #6
0
        public void AddParameter_GetParameters_QueryOrBody()
        {
            var request = new HttpRequest(HttpMethod.Get, "v1/sweet");

            request.AddParameter("query1", "hello1");
            request.AddParameter("query2", "hello2");

            var queryParams = request.GetParameters(RequestParameterType.QueryOrBody).ToList();

            Assert.Equal(2, queryParams.Count);
        }
예제 #7
0
        /// <summary>
        /// Deletes the file or folder from dropbox with the given path
        /// </summary>
        /// <param name="path">The Path of the file or folder to delete.</param>
        /// <returns></returns>
        public async Task <MetaData> Delete(string path)
        {
            var requestUrl = MakeRequestString("1/fileops/delete", ApiType.Base);

            var request = new HttpRequest(HttpMethod.Get, requestUrl);

            request.AddParameter("path", path);
            request.AddParameter("root", Root);

            var response = await SendAsync <MetaData>(request);

            return(response);
        }
예제 #8
0
        /// <summary>
        /// Created a new folder with the given path
        /// </summary>
        /// <param name="path"></param>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        public async Task <Metadata> CreateFolder(string path, CancellationToken cancellationToken)
        {
            var requestUrl = MakeRequestString("1/fileops/create_folder", ApiType.Base);

            var request = new HttpRequest(HttpMethod.Get, requestUrl);

            request.AddParameter("path", path);
            request.AddParameter("root", Root);

            var response = await SendAsync <Metadata>(request, cancellationToken);

            return(response);
        }
예제 #9
0
        /// <summary>
        /// Moves a file or folder on Dropbox
        /// </summary>
        /// <param name="fromPath"></param>
        /// <param name="toPath"></param>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        public async Task <Metadata> Move(string fromPath, string toPath, CancellationToken cancellationToken)
        {
            var requestUrl = MakeRequestString("1/fileops/move", ApiType.Base);

            var request = new HttpRequest(HttpMethod.Get, requestUrl);

            request.AddParameter("from_path", fromPath);
            request.AddParameter("to_path", toPath);
            request.AddParameter("root", Root);

            var response = await SendAsync <Metadata>(request, cancellationToken);

            return(response);
        }
예제 #10
0
        /// <summary>
        /// Copies a file or folder on Dropbox
        /// </summary>
        /// <param name="fromPath"></param>
        /// <param name="toPath"></param>
        /// <returns></returns>
        public async Task <MetaData> Copy(string fromPath, string toPath)
        {
            var requestUrl = MakeRequestString("1/fileops/copy", ApiType.Base);

            var request = new HttpRequest(HttpMethod.Get, requestUrl);

            request.AddParameter("from_path", fromPath);
            request.AddParameter("to_path", toPath);
            request.AddParameter("root", Root);

            var response = await SendAsync <MetaData>(request);

            return(response);
        }
예제 #11
0
        /// <summary>
        /// Gets the deltas for a user's folders and files.
        /// </summary>
        /// <param name="cursor">The value returned from the prior call to GetDelta or an empty string</param>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        public async Task <DeltaPage> GetDelta(string cursor, CancellationToken cancellationToken)
        {
            var requestUrl = MakeRequestString("1/delta", ApiType.Base);

            var request = new HttpRequest(HttpMethod.Post, requestUrl);

            request.AddParameter("cursor", cursor);

            var deltaResponse = await SendAsync <DeltaPageInternal>(request, cancellationToken);

            var deltaPage = new DeltaPage
            {
                Cursor   = deltaResponse.Cursor,
                Has_More = deltaResponse.Has_More,
                Reset    = deltaResponse.Reset,
                Entries  = new List <DeltaEntry>()
            };

            foreach (var stringList in deltaResponse.Entries)
            {
                deltaPage.Entries.Add(JRawListToDeltaEntry(stringList));
            }

            return(deltaPage);
        }
예제 #12
0
        /// <summary>
        /// Gets the deltas for a user's folders and files.
        /// </summary>
        /// <param name="cursor">The value returned from the prior call to GetDelta or an empty string</param>
        /// <returns></returns>
        public async Task <DeltaPage> GetDelta(string cursor)
        {
            var requestUrl = MakeRequestString("1/delta", ApiType.Base);

            var request = new HttpRequest(HttpMethod.Post, requestUrl);

            request.AddParameter("cursor", cursor);

            _oauthHandler.Authenticate(request);

            var response = await _httpClient.SendAsync(request);

            //TODO - Error Handling

            string responseBody = await response.Content.ReadAsStringAsync();

            var deltaResponse = JsonConvert.DeserializeObject <DeltaPageInternal>(responseBody);

            var deltaPage = new DeltaPage
            {
                Cursor   = deltaResponse.Cursor,
                Has_More = deltaResponse.Has_More,
                Reset    = deltaResponse.Reset,
                Entries  = new List <DeltaEntry>()
            };

            foreach (var stringList in deltaResponse.Entries)
            {
                deltaPage.Entries.Add(StringListToDeltaEntry(stringList));
            }

            return(deltaPage);
        }
예제 #13
0
        private HttpRequest MakeChunkedUploadPutRequest(long offset, string uploadId = null)
        {
            var requestUrl = MakeRequestString(string.Format("1/chunked_upload"), ApiType.Content);

            var request = new HttpRequest(HttpMethod.Put, requestUrl);

            if (!String.IsNullOrEmpty(uploadId))
            {
                request.AddParameter("upload_id", uploadId);
            }

            request.AddParameter("offset", offset);

            _oauthHandler.Authenticate(request);

            return(request);
        }
예제 #14
0
        public static string Post(this HttpClient client, string url, Dictionary <string, string> param, Dictionary <string, string> header)
        {
            var request = new HttpRequest(url, RestSharp.Method.POST);

            foreach (var key in param.Keys)
            {
                request.AddParameter(key, param[key]);
            }
            foreach (var key in header.Keys)
            {
                request.AddParameter(key, header[key]);
            }
            var response = client.Execute(request);
            var content  = response.Content;

            return(content);
        }
예제 #15
0
        private HttpRequest MakeChunkedUploadCommitRequest(string path, string filename, string parentRevision, string uploadId)
        {
            var requestUrl = MakeRequestString(string.Format("1/commit_chunked_upload/auto/{0}{2}{1}", path.CleanPath(), filename, path.CleanPath().Length > 0 ? "/" : ""), ApiType.Content);

            var request = new HttpRequest(HttpMethod.Post, requestUrl);

            request.AddParameter("upload_id", uploadId);

            if (!string.IsNullOrEmpty(parentRevision))
            {
                request.AddParameter("parent_rev", parentRevision);
            }

            _oauthHandler.Authenticate(request);

            return(request);
        }
예제 #16
0
        /// <summary>
        /// A long-poll endpoint to wait for changes on an account. In conjunction with /delta, this call gives you a low-latency way to monitor an account for file changes.
        /// </summary>
        /// <param name="cursor">The value returned from the prior call to GetDelta.</param>
        /// <param name="cancellationToken"></param>
        /// <param name="timeout">An optional integer indicating a timeout, in seconds.
        ///  The default value is 30 seconds, which is also the minimum allowed value. The maximum is 480 seconds.</param>
        /// <returns></returns>
        public async Task <LongpollDeltaResult> GetLongpollDelta(string cursor, CancellationToken cancellationToken, int timeout = 30)
        {
            var requestUrl = MakeRequestString("1/longpoll_delta", ApiType.Notify);

            var request = new HttpRequest(HttpMethod.Get, requestUrl);

            request.AddParameter("cursor", cursor);

            if (timeout < 30)
            {
                timeout = 30;
            }
            if (timeout > 480)
            {
                timeout = 480;
            }
            request.AddParameter("timeout", timeout);

            return(await SendAsync <LongpollDeltaResult>(request, cancellationToken));
        }
예제 #17
0
        private HttpRequest MakeThumbnailRequest(string path, ThumbnailSize size)
        {
            var requestUrl = MakeRequestString(string.Format("1/thumbnails/{0}/{1}", Root, path.CleanPath()), ApiType.Content);

            var request = new HttpRequest(HttpMethod.Get, requestUrl);

            request.AddParameter("size", ThumbnailSizeString(size));

            _oauthHandler.Authenticate(request);

            return(request);
        }
예제 #18
0
        public void AddParameter_GetParameters_Query_DuplicateKeys_ReturnsAll()
        {
            var request = new HttpRequest(HttpMethod.Get, "v1/sweet");

            request.AddParameter("query1", "hello1");
            request.AddParameter("query1", "hello2");
            request.AddParameter("query1", "hello3");

            var queryParams = request.GetParameters(RequestParameterType.Query).ToList();

            Assert.Equal(3, queryParams.Count);

            Assert.Equal("query1", queryParams[0].Key);
            Assert.Equal("query1", queryParams[1].Key);
            Assert.Equal("query1", queryParams[2].Key);


            Assert.Equal("hello1", queryParams[0].Value);
            Assert.Equal("hello2", queryParams[1].Value);
            Assert.Equal("hello3", queryParams[2].Value);
        }
예제 #19
0
 private void ProcessParameters(HttpRequest req)
 {
     try
     {
         String[] parameters = req.Content.Split('&').Where(str => str != "").ToArray();
         foreach (var parameter in parameters)
         {
             String[] pair = parameter.Split('=');
             req.AddParameter(pair[0], WebUtility.UrlDecode(pair[1]));
         }
     }
     catch { }
 }
예제 #20
0
        private HttpRequest MakeUploadPutRequest(string path, string filename, string parentRevision)
        {
            var requestUrl = MakeRequestString(string.Format("1/files_put/{0}/{1}/{2}", Root, path.CleanPath(), filename), ApiType.Content);

            var request = new HttpRequest(HttpMethod.Put, requestUrl);

            _oauthHandler.Authenticate(request);

            if (!string.IsNullOrEmpty(parentRevision))
            {
                request.AddParameter("parent_rev", parentRevision);
            }

            return(request);
        }
예제 #21
0
        /// <summary>
        /// Gets the thumbnail of an image given its path
        /// </summary>
        /// <param name="path"></param>
        /// <param name="size"></param>
        /// <returns></returns>
        public async Task <byte[]> GetThumbnail(string path, ThumbnailSize size)
        {
            var requestUrl = MakeRequestString(string.Format("1/thumbnails/{0}/{1}", Root, path.CleanPath()), ApiType.Content);

            var request = new HttpRequest(HttpMethod.Get, requestUrl);

            request.AddParameter("size", ThumbnailSizeString(size));

            _oauthHandler.Authenticate(request);

            var response = await _httpClient.SendAsync(request);

            //TODO - Error Handling

            return(await response.Content.ReadAsByteArrayAsync());
        }
예제 #22
0
        /// <summary>
        /// Builds up the oauth parameters and updated the request Uri
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        public HttpRequest Authenticate(HttpRequest request)
        {
            request.AddParameter("oauth_version", "1.0");
            request.AddParameter("oauth_nonce", GenerateNonce());
            request.AddParameter("oauth_timestamp", GenerateTimeStamp());
            request.AddParameter("oauth_signature_method", SignatureMethod);
            request.AddParameter("oauth_consumer_key", ApiKey);
            if (!string.IsNullOrEmpty(UserToken))
            {
                request.AddParameter("oauth_token", UserToken);
            }
            request.Parameters.Sort(new QueryParameterComparer());
            request.AddParameter("oauth_signature", GenerateSignature(request));

            //Now build the real Url
            var data = EncodeParameters(request);
            var url  = string.Format("{0}?{1}", request.RequestUri, data);

            request.RequestUri = new Uri(url);

            //Does it need to do this?
            return(request);
        }
예제 #23
0
        public void AddParameter_Body_HttpMethodGet_ThrowsArgumentException()
        {
            var request = new HttpRequest(HttpMethod.Get, "v1/sweet");

            Assert.Throws <ArgumentException>(() => request.AddParameter("query1", "hello1", RequestParameterType.Body));
        }