|
|
|
|
@ -1,7 +1,10 @@
|
|
|
|
|
using System;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using System.IO;
|
|
|
|
|
using System.Linq;
|
|
|
|
|
using System.Net;
|
|
|
|
|
using System.Net.Http;
|
|
|
|
|
using System.Net.Sockets;
|
|
|
|
|
using System.Threading.Tasks;
|
|
|
|
|
using Microsoft.Extensions.Logging;
|
|
|
|
|
using Octokit;
|
|
|
|
|
@ -15,9 +18,12 @@ namespace Volo.Docs.Documents
|
|
|
|
|
{
|
|
|
|
|
public const string Type = "Github"; //TODO: Convert to "github"
|
|
|
|
|
|
|
|
|
|
private const bool IsOffline = true; //use it when you don't want to get from GitHub (eg: I have no internet)
|
|
|
|
|
|
|
|
|
|
public async Task<Document> FindDocumentByNameAsync(Project project, string documentName, string version)
|
|
|
|
|
{
|
|
|
|
|
var rootUrl = project.ExtraProperties["GithubRootUrl"].ToString().Replace("_version_/", version + "/").Replace("www.", "");
|
|
|
|
|
var rootUrl = project.ExtraProperties["GithubRootUrl"].ToString().Replace("_version_/", version + "/")
|
|
|
|
|
.Replace("www.", "");
|
|
|
|
|
var token = project.ExtraProperties["GithubAccessToken"]?.ToString();
|
|
|
|
|
|
|
|
|
|
var rawRootUrl = rootUrl.Replace("github.com", token + "raw.githubusercontent.com").Replace("/tree/", "/");
|
|
|
|
|
@ -29,7 +35,8 @@ namespace Volo.Docs.Documents
|
|
|
|
|
if (documentName.Contains("/"))
|
|
|
|
|
{
|
|
|
|
|
localDirectory = documentName.Substring(0, documentName.LastIndexOf('/'));
|
|
|
|
|
fileName = documentName.Substring(documentName.LastIndexOf('/') + 1, documentName.Length - documentName.LastIndexOf('/') - 1);
|
|
|
|
|
fileName = documentName.Substring(documentName.LastIndexOf('/') + 1,
|
|
|
|
|
documentName.Length - documentName.LastIndexOf('/') - 1);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var content = DownloadWebContent(documentName, rawUrl);
|
|
|
|
|
@ -69,6 +76,17 @@ namespace Volo.Docs.Documents
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//todo: remove it when filedocumentstore is implemented
|
|
|
|
|
else if (ex.InnerException is HttpRequestException &&
|
|
|
|
|
ex.InnerException.InnerException != null &&
|
|
|
|
|
ex.InnerException.InnerException is SocketException exception &&
|
|
|
|
|
exception.SocketErrorCode == SocketError.HostNotFound)
|
|
|
|
|
{
|
|
|
|
|
if (IsOffline)
|
|
|
|
|
{
|
|
|
|
|
return File.ReadAllText(Path.Combine(@"D:\Github\abp\docs\", documentName));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return "An error occured while getting the document " + documentName;
|
|
|
|
|
}
|
|
|
|
|
@ -82,18 +100,28 @@ namespace Volo.Docs.Documents
|
|
|
|
|
|
|
|
|
|
public async Task<List<string>> GetVersions(Project project, string documentName)
|
|
|
|
|
{
|
|
|
|
|
var gitHubClient = new GitHubClient(new ProductHeaderValue("AbpWebSite"));
|
|
|
|
|
var url = project.ExtraProperties["GithubRootUrl"].ToString();
|
|
|
|
|
var releases = await gitHubClient.Repository.Release.GetAll(GetGithubOrganizationNameFromUrl(url), GetGithubRepositoryNameFromUrl(url));
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
var gitHubClient = new GitHubClient(new ProductHeaderValue("AbpWebSite"));
|
|
|
|
|
var url = project.ExtraProperties["GithubRootUrl"].ToString();
|
|
|
|
|
var releases = await gitHubClient.Repository.Release.GetAll(GetGithubOrganizationNameFromUrl(url),
|
|
|
|
|
GetGithubRepositoryNameFromUrl(url));
|
|
|
|
|
|
|
|
|
|
return releases.OrderByDescending(r => r.PublishedAt).Select(r => r.TagName).ToList();
|
|
|
|
|
return releases.OrderByDescending(r => r.PublishedAt).Select(r => r.TagName).ToList();
|
|
|
|
|
}
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
{
|
|
|
|
|
Logger.LogError(ex.Message, ex);
|
|
|
|
|
return new List<string>();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static string GetGithubOrganizationNameFromUrl(string url)
|
|
|
|
|
{
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
var urlStartingAfterFirstSlash = url.Substring(url.IndexOf("github.com/", StringComparison.Ordinal) + "github.com/".Length);
|
|
|
|
|
var urlStartingAfterFirstSlash =
|
|
|
|
|
url.Substring(url.IndexOf("github.com/", StringComparison.Ordinal) + "github.com/".Length);
|
|
|
|
|
return urlStartingAfterFirstSlash.Substring(0, urlStartingAfterFirstSlash.IndexOf('/'));
|
|
|
|
|
}
|
|
|
|
|
catch (Exception)
|
|
|
|
|
@ -106,8 +134,10 @@ namespace Volo.Docs.Documents
|
|
|
|
|
{
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
var urlStartingAfterFirstSlash = url.Substring(url.IndexOf("github.com/", StringComparison.Ordinal) + "github.com/".Length);
|
|
|
|
|
var urlStartingAfterSecondSlash = urlStartingAfterFirstSlash.Substring(urlStartingAfterFirstSlash.IndexOf('/') + 1);
|
|
|
|
|
var urlStartingAfterFirstSlash =
|
|
|
|
|
url.Substring(url.IndexOf("github.com/", StringComparison.Ordinal) + "github.com/".Length);
|
|
|
|
|
var urlStartingAfterSecondSlash =
|
|
|
|
|
urlStartingAfterFirstSlash.Substring(urlStartingAfterFirstSlash.IndexOf('/') + 1);
|
|
|
|
|
return urlStartingAfterSecondSlash.Substring(0, urlStartingAfterSecondSlash.IndexOf('/'));
|
|
|
|
|
}
|
|
|
|
|
catch (Exception)
|
|
|
|
|
@ -115,6 +145,5 @@ namespace Volo.Docs.Documents
|
|
|
|
|
throw new Exception($"Github url is not valid: {url}");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|