示例#1
0
        /// <summary>
        /// Get category list. See https://sign.visma.net/api/docs/v1/#get-categories
        /// </summary>
        /// <returns>Object with the following properties: String Body. Dictionary(string,string) Headers. int StatusCode</returns>
        public static async Task <object> CategoriesGet([PropertyTab] ConnectionOption options, CancellationToken cancellationToken)
        {
            var request = await WithAuthHeaders(new HttpRequestMessage(
                                                    HttpMethod.Get,
                                                    options.BaseAddress + "/api/v1/category/"),
                                                options);

            using (var client = new HttpClient())
            {
                var response = await client.SendAsync(request, cancellationToken);

                var returnResponse = new HttpResponseWithBody
                {
                    Body       = await response.Content.ReadAsStringAsync(),
                    StatusCode = (int)response.StatusCode,
                    Headers    = GetResponseHeaderDictionary(response.Headers, response.Content.Headers)
                };

                if (!response.IsSuccessStatusCode && options.ThrowExceptionOnErrorResponse)
                {
                    throw new WebException($"Request to '{request.RequestUri}' failed with status code {(int)response.StatusCode}. Response body: {returnResponse.Body}");
                }

                return(returnResponse);
            }
        }
示例#2
0
        /// <summary>
        /// Create document. See https://sign.visma.net/api/docs/v1/#action-document-create
        /// </summary>
        /// <returns>Object with the following properties: String Location. Dictionary(string,string) Headers. int StatusCode</returns>

        public static async Task <object> DocumentCreate([PropertyTab] DocumentCreateInput input, [PropertyTab] ConnectionOption options, CancellationToken cancellationToken)
        {
            var request = new HttpRequestMessage(
                HttpMethod.Post,
                options.BaseAddress + "/api/v1/document/"
                );

            request.Content = new StringContent(input.Body, System.Text.Encoding.UTF8, "application/json");
            request         = await WithAuthHeaders(request, options);

            using (var client = new HttpClient())
            {
                var response = await client.SendAsync(request, cancellationToken);

                if (!response.IsSuccessStatusCode && options.ThrowExceptionOnErrorResponse)
                {
                    throw new WebException($"Request to '{request.RequestUri}' failed with status code {(int)response.StatusCode}. Response body: {response.Content}");
                }

                var returnResponse = new HttpResponse
                {
                    Location   = response.Headers.Location?.ToString(),
                    StatusCode = (int)response.StatusCode,
                    Headers    = GetResponseHeaderDictionary(response.Headers, response.Content.Headers)
                };

                return(returnResponse);
            }
        }
示例#3
0
        private static async Task <HttpRequestMessage> WithAuthHeaders(HttpRequestMessage request, ConnectionOption options)
        {
            var macHash     = new HMACSHA512(Convert.FromBase64String(options.Secret));
            var contentHash = new MD5CryptoServiceProvider();

            if (request.Content != null)
            {
                request.Content.Headers.ContentMD5 = contentHash.ComputeHash(await request.Content.ReadAsByteArrayAsync());
            }

            request.Headers.Date = request.Headers.Date.GetValueOrDefault(DateTime.UtcNow);

            request.Headers.Authorization =
                new AuthenticationHeaderValue(
                    "Onnistuu",
                    options.Identifier + ":" +
                    Convert.ToBase64String(
                        macHash.ComputeHash(
                            System.Text.Encoding.UTF8.GetBytes(
                                String.Join(
                                    "\n",
                                    new string[] {
                request.Method.ToString(),
                Convert.ToBase64String(
                    request.Content != null ?
                    request.Content.Headers.ContentMD5 :
                    contentHash.ComputeHash(new byte[] {})
                    ),
                request.Content != null ? request.Content.Headers.ContentType.ToString() : "",
                request.Headers.Date.GetValueOrDefault(DateTime.UtcNow).ToString("r"),
                request.RequestUri.ToString().Replace(options.BaseAddress, "")
            }
                                    )
                                )
                            )
                        )
                    );

            return(request);
        }
示例#4
0
        /// <summary>
        /// Get document using uuid. Can be used with or without passphrase as parameter. See https://sign.visma.net/api/docs/v1/#action-document-get-file
        /// </summary>
        /// <returns>Object with the following properties: Byte[] Body. Dictionary(string,string) Headers. int StatusCode</returns>
        public static async Task <object> DocumentGet([PropertyTab] DocumentGetInput input, [PropertyTab] ConnectionOption options, CancellationToken cancellationToken)
        {
            var address = string.IsNullOrEmpty(input.Passphrase)
                ? options.BaseAddress + "/api/v1/document/" + input.DocumentUriId + "/files/0"
                : options.BaseAddress + "/api/v1/invitation/" + input.DocumentUriId + "/" + input.Passphrase + "/files/0";
            var request = await WithAuthHeaders(new HttpRequestMessage(
                                                    HttpMethod.Get,
                                                    address),
                                                options);

            using (var client = new HttpClient())
            {
                var response = await client.SendAsync(request, cancellationToken);

                var returnResponse = new HttpResponseWithByteArrayBody
                {
                    Body       = await response.Content.ReadAsByteArrayAsync(),
                    StatusCode = (int)response.StatusCode,
                    Headers    = GetResponseHeaderDictionary(response.Headers, response.Content.Headers)
                };

                if (!response.IsSuccessStatusCode && options.ThrowExceptionOnErrorResponse)
                {
                    throw new WebException($"Request to '{request.RequestUri}' failed with status code {(int)response.StatusCode}. Response body: {returnResponse.Body}");
                }

                return(returnResponse);
            }
        }
示例#5
0
        /// <summary>
        /// Add file. See https://sign.visma.net/api/docs/v1/#action-document-add-file
        /// </summary>
        /// <returns>Object with the following properties: String Body. Dictionary(string,string) Headers. int StatusCode</returns>

        public static async Task <object> DocumentAddFile([PropertyTab] DocumentAddFileInput input, [PropertyTab] ConnectionOption options, CancellationToken cancellationToken)
        {
            var request = new HttpRequestMessage(
                HttpMethod.Post,
                options.BaseAddress + "/api/v1/document/" + input.DocumentUriId + "/files" +
                (
                    input.FileName != null ? "?filename=" + HttpUtility.UrlEncode(input.FileName) : ""
                )
                );

            var requestContent = input.ReadFromFile ? new ByteArrayContent(File.ReadAllBytes(input.FileLocation)) : new ByteArrayContent(input.InputBytes);

            requestContent.Headers.ContentType = new MediaTypeHeaderValue("application/pdf");
            request.Content = requestContent;
            request         = await WithAuthHeaders(request, options);

            using (var client = new HttpClient())
            {
                var response = await client.SendAsync(request, cancellationToken);

                var returnResponse = new HttpResponseWithBody
                {
                    Body       = await response.Content.ReadAsStringAsync(),
                    StatusCode = (int)response.StatusCode,
                    Headers    = GetResponseHeaderDictionary(response.Headers, response.Content.Headers)
                };

                if (!response.IsSuccessStatusCode && options.ThrowExceptionOnErrorResponse)
                {
                    throw new WebException($"Request to '{request.RequestUri}' failed with status code {(int)response.StatusCode}. Response body: {returnResponse.Body}");
                }

                return(returnResponse);
            }
        }