Example #1
0
        private async Task<bool> LoadKeychainInternal()
        {
            if (keychain.HasKeys)
            {
                if (!keychain.NeedsLoad)
                {
                    logger.Trace("LoadKeychainInternal: Previously Loaded");
                    return true;
                }

                logger.Trace("LoadKeychainInternal: Loading");

                //TODO: ONE_USER_LOGIN This assumes only ever one user can login
                var uriString = keychain.Connections.First().Host;
                var keychainAdapter = await keychain.Load(uriString);

                logger.Trace("LoadKeychainInternal: Loaded");

                return keychainAdapter.OctokitCredentials != Credentials.Anonymous;
            }

            logger.Trace("LoadKeychainInternal: No keys to load");

            return false;
        }
Example #2
0
        private async Task <IKeychainAdapter> GetValidatedKeychainAdapter(Connection keychainConnection)
        {
            var keychainAdapter = await keychain.Load(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);
        }
Example #3
0
        /// <summary>
        /// This is a callback from libgit2
        /// </summary>
        /// <returns></returns>
        public Credentials HandleCredentials(string url, string username, SupportedCredentialTypes types)
        {
            if (url == null)
            {
                return(null); // wondering if we should return DefaultCredentials instead
            }
            var host = HostAddress.Create(url);

            try
            {
                var credentials = JoinableTaskContext.Factory.Run(async() => await keychain.Load(host));
                return(new UsernamePasswordCredentials
                {
                    Username = credentials.Item1,
                    Password = credentials.Item2,
                });
            }
            catch (Exception e)
            {
                log.Error(e, "Error loading credentials in GitHubCredentialProvider");
                return(null);
            }
        }
Example #4
0
        private async Task <bool> EnsureKeychainLoaded()
        {
            logger.Trace("EnsureKeychainLoaded");

            if (keychain.HasKeys)
            {
                if (!keychain.NeedsLoad)
                {
                    logger.Trace("EnsureKeychainLoaded: Has keys does not need load");
                    return(true);
                }

                logger.Trace("EnsureKeychainLoaded: Loading");

                var uriString       = keychain.Connections.First().Host;
                var keychainAdapter = await keychain.Load(uriString);

                return(keychainAdapter.OctokitCredentials != Credentials.Anonymous);
            }

            logger.Trace("EnsureKeychainLoaded: No keys to load");

            return(false);
        }
        public async Task <string> GetCredentials()
        {
            var userPass = await keychain.Load(address).ConfigureAwait(false);

            return(userPass?.Item2);
        }
Example #6
0
        private async Task <GitHubRepository> CreateRepositoryInternal(string repositoryName, string organization, string description, bool isPrivate)
        {
            try
            {
                logger.Trace("Creating repository");

                await ValidateKeychain();
                await ValidateCurrentUserInternal();

                var uriString       = keychain.Connections.First().Host;
                var keychainAdapter = await keychain.Load(uriString);

                var command = new StringBuilder("publish -r \"");
                command.Append(repositoryName);
                command.Append("\"");

                if (!string.IsNullOrEmpty(description))
                {
                    command.Append(" -d \"");
                    command.Append(description);
                    command.Append("\"");
                }

                if (!string.IsNullOrEmpty(organization))
                {
                    command.Append(" -o \"");
                    command.Append(organization);
                    command.Append("\"");
                }

                if (isPrivate)
                {
                    command.Append(" -p");
                }

                var octorunTask = new OctorunTask(taskManager.Token, nodeJsExecutablePath, octorunScriptPath, command.ToString(),
                                                  user: keychainAdapter.Credential.Username, userToken: keychainAdapter.Credential.Token)
                                  .Configure(processManager);

                var ret = await octorunTask.StartAwait();

                if (ret.IsSuccess && ret.Output.Length == 2)
                {
                    return(new GitHubRepository
                    {
                        Name = ret.Output[0],
                        CloneUrl = ret.Output[1]
                    });
                }

                if (ret.Output.Any())
                {
                    throw new ApiClientException(string.Join(Environment.NewLine, ret.Output));
                }

                throw new ApiClientException("Publish failed");
            }
            catch (Exception ex)
            {
                logger.Error(ex, "Error Creating Repository");
                throw;
            }
        }
        public async Task <string> GetCredentials(CancellationToken cancellationToken = default)
        {
            var userPass = await keychain.Load(address).ConfigureAwait(false);

            return(userPass?.Item2);
        }
Example #8
0
        public async Task <Credentials> GetCredentials()
        {
            var userPass = await keychain.Load(address).ConfigureAwait(false);

            return(userPass != null ? new Credentials(userPass.Item1, userPass.Item2) : Credentials.Anonymous);
        }