/// <summary> /// git pullするためのURLを取得する。 /// </summary> public GitEndpointModel GetPullUrl(long gitId, string repositoryName, string owner) { if (string.IsNullOrEmpty(repositoryName) || string.IsNullOrEmpty(owner)) { return(null); } UserTenantGitMap map = GetCurrentGitMap(gitId); string url = $"{map.Git.RepositoryUrl}/{owner}/{repositoryName}.git"; var result = new GitEndpointModel() { Url = url, Token = map.GitToken }; if (string.IsNullOrEmpty(map.GitToken)) { result.FullUrl = url; } else { // http の場合、以下のようなフォーマットで git clone できる // http://kqi:${token}@${host}/${owner}/${repositoryName}.git // ユーザ名がkqiになっているのは、空文字以外の任意文字列を入れないと認証失敗になる問題が発見されたため。 UriBuilder builder = new UriBuilder(url); builder.UserName = "******"; builder.Password = map.GitToken; result.FullUrl = builder.Uri.ToString(); } return(result); }
/// <summary> /// git pullするためのURLを取得する。 /// </summary> /// <param name="gitId">Git ID</param> /// <param name="repositoryName">リポジトリ名</param> /// <param name="owner">オーナー名</param> /// <returns>git pullするためのURL</returns> public async Task <Result <GitEndpointModel, string> > GetPullUrlAsync(long gitId, string repositoryName, string owner, string extraToken) { if (string.IsNullOrEmpty(repositoryName) || string.IsNullOrEmpty(owner)) { return(Result <GitEndpointModel, string> .CreateResult(null)); } UserTenantGitMap map = GetCurrentGitMap(gitId); string gitUrl = map.Git.RepositoryUrl.TrimEnd('/'); string url = $"{gitUrl}/{owner}/{repositoryName}.git"; var orgToken = map.GitToken; try { if (extraToken != null) { map.GitToken = extraToken; } var result = new GitEndpointModel() { Url = url, Token = map.GitToken }; if (string.IsNullOrEmpty(map.GitToken)) { result.FullUrl = url; } else { // http の場合、以下のようなフォーマットで git clone できる // http://${user}:${token}@${host}/${owner}/${repositoryName}.git IGitService gitService = GetGitService(map?.Git); var userNameResult = await gitService.GetUserNameByTokenAsync(map); if (!userNameResult.IsSuccess) { return(Result <GitEndpointModel, string> .CreateErrorResult(userNameResult.Error)); } if (userNameResult.Value == null) { return(Result <GitEndpointModel, string> .CreateErrorResult("invalid git service response")); } UriBuilder builder = new UriBuilder(url); builder.UserName = userNameResult.Value; builder.Password = map.GitToken; result.FullUrl = builder.Uri.ToString(); } return(Result <GitEndpointModel, string> .CreateResult(result)); } finally { map.GitToken = orgToken; } }