Esempio n. 1
0
        /// <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);
        }
Esempio n. 2
0
        /// <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;
            }
        }