예제 #1
0
        public OctorunTask(CancellationToken token, IKeychain keychain, IEnvironment environment,
                           string arguments,
                           IOutputProcessor <OctorunResult> processor = null)
            : base(token, processor ?? new OctorunResultOutputProcessor())
        {
            this.clientId        = ApplicationInfo.ClientId;
            this.clientSecret    = ApplicationInfo.ClientSecret;
            this.pathToNodeJs    = environment.NodeJsExecutablePath;
            this.pathToOctorunJs = environment.OctorunScriptPath;
            this.arguments       = $"\"{pathToOctorunJs}\" {arguments}";

            var cloneUrl = environment.Repository?.CloneUrl;
            var host     = String.IsNullOrEmpty(cloneUrl)
                ? UriString.ToUriString(HostAddress.GitHubDotComHostAddress.WebUri)
                : new UriString(cloneUrl.ToRepositoryUri()
                                .GetComponents(UriComponents.SchemeAndServer, UriFormat.SafeUnescaped));

            var adapter = keychain.Connect(host);

            if (adapter.Credential?.Token != null)
            {
                userToken = adapter.Credential.Token;
            }
            else
            {
                // use a cached adapter if there is one filled out
                adapter = keychain.LoadFromSystem(host);
                if (adapter != null)
                {
                    userToken = adapter.Credential.Token;
                }
            }
        }
예제 #2
0
        private IKeychainAdapter GetValidatedKeychainAdapter(Connection keychainConnection)
        {
            var keychainAdapter = keychain.LoadFromSystem(keychainConnection.Host);

            if (keychainAdapter == null)
            {
                throw new KeychainEmptyException();
            }

            if (string.IsNullOrEmpty(keychainAdapter.Credential?.Username))
            {
                logger.Warning("LoadKeychainInternal: Username is empty");
                throw new TokenUsernameMismatchException(keychainConnection.Username);
            }

            if (keychainAdapter.Credential.Username != keychainConnection.Username)
            {
                logger.Warning("LoadKeychainInternal: Token username does not match");
            }

            return(keychainAdapter);
        }