From 87c62d786df095abcfff8764fb349eded4dd2967 Mon Sep 17 00:00:00 2001 From: Philippe Miossec Date: Mon, 22 Jun 2015 20:08:29 +0200 Subject: [PATCH] Implement the authentication in the good classes ;) --- GitTfs.Vs2010/GitTfs.Vs2010.csproj | 4 +-- GitTfs.Vs2010/TfsHelper.Vs2010.cs | 21 ++++++++++++ GitTfs.VsCommon/TfsHelper.Common.cs | 45 ++++--------------------- GitTfs.VsCommon/TfsHelper.Vs2012Base.cs | 22 +++++++++++- 4 files changed, 50 insertions(+), 42 deletions(-) diff --git a/GitTfs.Vs2010/GitTfs.Vs2010.csproj b/GitTfs.Vs2010/GitTfs.Vs2010.csproj index 1cfbeece..6c8a210b 100644 --- a/GitTfs.Vs2010/GitTfs.Vs2010.csproj +++ b/GitTfs.Vs2010/GitTfs.Vs2010.csproj @@ -38,7 +38,7 @@ true bin\Debug\ - TRACE;DEBUG;VS2010 + DEBUG;TRACE full AnyCPU prompt @@ -47,7 +47,7 @@ bin\Release\ - TRACE;VS2010 + TRACE true pdbonly AnyCPU diff --git a/GitTfs.Vs2010/TfsHelper.Vs2010.cs b/GitTfs.Vs2010/TfsHelper.Vs2010.cs index 0dbe10d2..e29441f3 100644 --- a/GitTfs.Vs2010/TfsHelper.Vs2010.cs +++ b/GitTfs.Vs2010/TfsHelper.Vs2010.cs @@ -1,6 +1,10 @@ +using System; using System.IO; +using Microsoft.TeamFoundation.Client; +using Microsoft.TeamFoundation.Server; using Sep.Git.Tfs.VsCommon; using StructureMap; +using Sep.Git.Tfs.Core.TfsInterop; namespace Sep.Git.Tfs.Vs2010 { @@ -20,5 +24,22 @@ namespace Sep.Git.Tfs.Vs2010 } return vsInstallDir; } + + private IGroupSecurityService GroupSecurityService + { + get { return GetService(); } + } + + public override IIdentity GetIdentity(string username) + { + return _bridge.Wrap(Retry.Do(() => GroupSecurityService.ReadIdentity(SearchFactor.AccountName, username, QueryMembership.None))); + } + + protected override TfsTeamProjectCollection GetTfsCredential(Uri uri) + { + return HasCredentials ? + new TfsTeamProjectCollection(uri, GetCredential(), new UICredentialsProvider()) : + new TfsTeamProjectCollection(uri, new UICredentialsProvider()); + } } } diff --git a/GitTfs.VsCommon/TfsHelper.Common.cs b/GitTfs.VsCommon/TfsHelper.Common.cs index 1811334a..f9f40559 100644 --- a/GitTfs.VsCommon/TfsHelper.Common.cs +++ b/GitTfs.VsCommon/TfsHelper.Common.cs @@ -7,9 +7,6 @@ using System.Net; using System.Reflection; using Microsoft.TeamFoundation; using Microsoft.TeamFoundation.Client; -using Microsoft.TeamFoundation.Framework.Client; -using Microsoft.TeamFoundation.Framework.Common; -using Microsoft.TeamFoundation.Server; using Microsoft.TeamFoundation.VersionControl.Client; using Microsoft.TeamFoundation.WorkItemTracking.Client; using Microsoft.Win32; @@ -28,7 +25,7 @@ namespace Sep.Git.Tfs.VsCommon public abstract class TfsHelperBase : ITfsHelper { protected readonly TextWriter _stdout; - private readonly TfsApiBridge _bridge; + protected readonly TfsApiBridge _bridge; private readonly IContainer _container; protected TfsTeamProjectCollection _server; private static bool _resolverInstalled; @@ -88,25 +85,16 @@ namespace Sep.Git.Tfs.VsCommon uri = new Uri(Url); } -#if VS2010 - _server = HasCredentials ? - new TfsTeamProjectCollection(uri, GetCredential(), new UICredentialsProvider()) : - new TfsTeamProjectCollection(uri, new UICredentialsProvider()); -#else - _server = new TfsTeamProjectCollection(uri, GetTfsCredential()); -#endif + _server = GetTfsCredential(uri); _server.EnsureAuthenticated(); } } -#if !VS2010 - protected TfsClientCredentials GetTfsCredential() - { - var basicAuthCredential = new BasicAuthCredential(GetCredential()); - return new TfsClientCredentials(basicAuthCredential) {AllowInteractive = !HasCredentials}; - } -#endif + protected abstract TfsTeamProjectCollection GetTfsCredential(Uri uri); + + public abstract IIdentity GetIdentity(string username); + protected NetworkCredential GetCredential() { if (!HasCredentials) @@ -165,18 +153,6 @@ namespace Sep.Git.Tfs.VsCommon Trace.WriteLine("get [C" + e.Version + "]" + e.ServerItem); } -#if VS2010 - private IGroupSecurityService GroupSecurityService - { - get { return GetService(); } - } -#else - private IIdentityManagementService GroupSecurityService - { - get { return GetService(); } - } -#endif - private ILinking _linking; private ILinking Linking { @@ -1078,15 +1054,6 @@ namespace Sep.Git.Tfs.VsCommon return _bridge.Wrap(shelveset); } - public IIdentity GetIdentity(string username) - { -#if VS2010 - return _bridge.Wrap(Retry.Do(() => GroupSecurityService.ReadIdentity(SearchFactor.AccountName, username, QueryMembership.None))); -#else - return _bridge.Wrap(Retry.Do(() => GroupSecurityService.ReadIdentity(IdentitySearchFactor.AccountName, username, MembershipQuery.None, ReadIdentityOptions.None))); -#endif - } - public Changeset GetLatestChangeset(IGitTfsRemote remote, bool includeChanges) { var history = VersionControl.QueryHistory(remote.TfsRepositoryPath, VersionSpec.Latest, 0, diff --git a/GitTfs.VsCommon/TfsHelper.Vs2012Base.cs b/GitTfs.VsCommon/TfsHelper.Vs2012Base.cs index 2687f287..5e2c9999 100644 --- a/GitTfs.VsCommon/TfsHelper.Vs2012Base.cs +++ b/GitTfs.VsCommon/TfsHelper.Vs2012Base.cs @@ -1,7 +1,11 @@ +using System; using System.IO; +using Microsoft.TeamFoundation.Client; +using Microsoft.TeamFoundation.Framework.Client; +using Microsoft.TeamFoundation.Framework.Common; using Microsoft.TeamFoundation.VersionControl.Client; -using Sep.Git.Tfs.Core; using StructureMap; +using Sep.Git.Tfs.Core.TfsInterop; namespace Sep.Git.Tfs.VsCommon { @@ -28,5 +32,21 @@ namespace Sep.Git.Tfs.VsCommon } return vsInstallDir; } + + private IIdentityManagementService GroupSecurityService + { + get { return GetService(); } + } + + public override IIdentity GetIdentity(string username) + { + return _bridge.Wrap(Retry.Do(() => GroupSecurityService.ReadIdentity(IdentitySearchFactor.AccountName, username, MembershipQuery.None, ReadIdentityOptions.None))); + } + + protected override TfsTeamProjectCollection GetTfsCredential(Uri uri) + { + var basicAuthCredential = new BasicAuthCredential(GetCredential()); + return new TfsTeamProjectCollection(uri, new TfsClientCredentials(basicAuthCredential) { AllowInteractive = !HasCredentials }); + } } }