private async Task <byte[]> DownloadSourceCodeContentAsync(SourceCodeDownloadInputDto input)
        {
            var url = $"{CliUrls.WwwRocketIo}api/download/{input.Type}/";

            try {
                using (var client = new CliHttpClient(TimeSpan.FromMinutes(10))) {
                    HttpResponseMessage responseMessage;

                    if (input.TemplateSource.IsNullOrWhiteSpace())
                    {
                        responseMessage = await client.PostAsync(
                            url,
                            new StringContent (JsonSerializer.Serialize(input), Encoding.UTF8, MimeTypes.Application.Json),
                            CancellationTokenProvider.Token
                            );
                    }
                    else
                    {
                        responseMessage = await client.GetAsync(input.TemplateSource, CancellationTokenProvider.Token);
                    }

                    await RemoteServiceExceptionHandler.EnsureSuccessfulHttpResponseAsync(responseMessage);

                    return(await responseMessage.Content.ReadAsByteArrayAsync());
                }
            } catch (Exception ex) {
                Console.WriteLine("Error occured while downloading source-code from {0} : {1}", url, ex.Message);
                throw;
            }
        }
        private async Task <string> GetTemplateNugetVersionAsync(string name, string type, string version)
        {
            var url = $"{CliUrls.WwwRocketIo}api/download/{type}/get-nuget-version/";

            try {
                using (var client = new CliHttpClient(TimeSpan.FromMinutes(10))) {
                    var response = await client.PostAsync(
                        url,
                        new StringContent (
                            JsonSerializer.Serialize(
                                new GetTemplateNugetVersionDto {
                        Name = name, Version = version
                    }
                                ),
                            Encoding.UTF8,
                            MimeTypes.Application.Json
                            ),
                        CancellationTokenProvider.Token
                        );

                    await RemoteServiceExceptionHandler.EnsureSuccessfulHttpResponseAsync(response);

                    var result = await response.Content.ReadAsStringAsync();

                    return(JsonSerializer.Deserialize <GetVersionResultDto> (result).Version);
                }
            } catch (Exception ex) {
                Console.WriteLine("Error occured while getting the template nuget version from {0} : {1}", url, ex.Message);
                return(null);
            }
        }