Как проверить поставщика учетных данных - PullRequest
0 голосов
/ 07 мая 2020

Учитывая комбинацию пользователя и пароля, я хочу определить, что это приведет к действительному UsernamePasswordCredentials для известного удаленного git сервера.

В идеале я хотел бы иметь возможность делать это независимо от произошла ли локальная проверка.

Я пробовал вот что. У меня есть класс со следующими методами

    private CredentialsHandler UserPassCredentialsProvider
    {
        get
        {
            if (_gitPass == null)
                throw new System.Exception("No git Credentials have been supplied");

            var credentials = new UsernamePasswordCredentials()
            {
                Username = _gitUser,
                Password = _gitPass
            };

            return (_url, _usr, _cred) => credentials;
        }
    } 


    public bool CheckCredentials()
    {
        try
        {  
            using (var repo = new Repository(Path.Combine(WorkingCopyRoot, "MyRepo")))
            {
                IEnumerable<Reference> refs = Repository.ListRemoteReferences(Path.Combine(WorkingCopyRoot, "MyRepo"), UserPassCredentialsProvider);

                return refs != null;
            }
        }
        catch(Exception ex)
        {
            return false;
        }
    }

Это всего лишь код, который у меня есть на момент написания - я уже некоторое время занимаюсь этим, однако, ListRemoteReferences(), похоже, работает в равной степени с действующим паролем или без него.

Непросто добиться того, чего я хочу - есть ли какие-нибудь предложения?

1 Ответ

0 голосов
/ 07 мая 2020

Я был довольно близок. Переключив путь с локального на удаленный, я смог заставить его работать так, как я хотел. В приведенном ниже коде RepoRoot - это URL.

public bool CheckCredentials()
{
    try
    {
        IEnumerable<Reference> refs = Repository.ListRemoteReferences(Path.Combine(RepoRoot, "MyRepo"), UserPassCredentialsProvider);

        return refs != null;
    }
    catch (Exception ex)
    {
        return false;
    }
}
...