Skip to content
This repository was archived by the owner on Dec 5, 2024. It is now read-only.

Commit e160b6f

Browse files
Progress
1 parent 1789e9d commit e160b6f

File tree

16 files changed

+216
-85
lines changed

16 files changed

+216
-85
lines changed

octorun/version

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
902910f46
1+
902910f47

src/GitHub.Api/Application/ApiClient.cs

Lines changed: 30 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -16,27 +16,27 @@ class ApiClient : IApiClient
1616
private static readonly Regex httpStatusErrorRegex = new Regex("(?<=[a-z])([A-Z])", RegexOptions.Compiled);
1717

1818
public HostAddress HostAddress { get; }
19-
public UriString OriginalUrl { get; }
2019

2120
private readonly IKeychain keychain;
2221
private readonly IProcessManager processManager;
2322
private readonly ITaskManager taskManager;
2423
private readonly ILoginManager loginManager;
2524
private readonly IEnvironment environment;
2625

27-
public ApiClient(UriString hostUrl, IKeychain keychain, IProcessManager processManager, ITaskManager taskManager, IEnvironment environment)
26+
public ApiClient(IKeychain keychain, IProcessManager processManager, ITaskManager taskManager, IEnvironment environment):
27+
this(UriString.ToUriString(HostAddress.GitHubDotComHostAddress.WebUri), keychain, processManager, taskManager, environment)
2828
{
29-
Guard.ArgumentNotNull(keychain, nameof(keychain));
29+
}
3030

31-
var host = String.IsNullOrEmpty(hostUrl)
32-
? UriString.ToUriString(HostAddress.GitHubDotComHostAddress.WebUri)
33-
: new UriString(hostUrl.ToRepositoryUri()
34-
.GetComponents(UriComponents.SchemeAndServer, UriFormat.SafeUnescaped));
31+
public ApiClient(UriString host, IKeychain keychain, IProcessManager processManager, ITaskManager taskManager, IEnvironment environment)
32+
{
33+
Guard.ArgumentNotNull(host, nameof(host));
34+
Guard.ArgumentNotNull(keychain, nameof(keychain));
3535

36+
host = new UriString(host.ToRepositoryUri().GetComponents(UriComponents.SchemeAndServer, UriFormat.SafeUnescaped));
3637
HostAddress = HostAddress.Create(host);
37-
OriginalUrl = host;
3838

39-
logger.Trace("OriginalUrl: {1}", HostAddress.ToString(), OriginalUrl.ToString());
39+
logger.Trace("OriginalUrl: {0}", HostAddress.ApiUri.Host);
4040

4141
this.keychain = keychain;
4242
this.processManager = processManager;
@@ -60,8 +60,13 @@ public void CreateRepository(string name, string description, bool isPrivate,
6060
// this validates the user, again
6161
GetCurrentUser();
6262

63-
var command = new StringBuilder("publish -h ");
64-
command.Append(OriginalUrl.Host);
63+
var command = new StringBuilder("publish");
64+
65+
if (!HostAddress.IsGitHubDotCom())
66+
{
67+
command.Append(" -h ");
68+
command.Append(HostAddress.ApiUri.Host);
69+
}
6570

6671
command.Append(" -r \"");
6772
command.Append(name);
@@ -86,7 +91,7 @@ public void CreateRepository(string name, string description, bool isPrivate,
8691
command.Append(" -p");
8792
}
8893

89-
var adapter = keychain.Connect(OriginalUrl);
94+
var adapter = keychain.Connect(HostAddress.ApiUri.Host);
9095
if (adapter.Credential == null)
9196
{
9297
throw new ApiClientException("No Credentials found");
@@ -120,20 +125,20 @@ public void CreateRepository(string name, string description, bool isPrivate,
120125
.Start();
121126
}
122127

123-
public void GetServerMeta(Action<GitHubHostMeta> onSuccess, Action<Exception> onError = null)
128+
public void GetEnterpriseServerMeta(Action<GitHubHostMeta> onSuccess, Action<Exception> onError = null)
124129
{
125130
Guard.ArgumentNotNull(onSuccess, nameof(onSuccess));
126131
new FuncTask<GitHubHostMeta>(taskManager.Token, () =>
127132
{
128-
var octorunTask = new OctorunTask(taskManager.Token, environment, "meta -h " + OriginalUrl.Host)
133+
var octorunTask = new OctorunTask(taskManager.Token, environment, "meta -h " + HostAddress.ApiUri.Host)
129134
.Configure(processManager);
130135

131136
var ret = octorunTask.RunSynchronously();
132137
if (ret.IsSuccess)
133138
{
134139
var deserializeObject = SimpleJson.DeserializeObject<Dictionary<string, object>>(ret.Output[0]);
135140

136-
return new GitHubHostMeta()
141+
return new GitHubHostMeta
137142
{
138143
InstalledVersion = (string)deserializeObject["installed_version"],
139144
GithubServicesSha = (string)deserializeObject["github_services_sha"],
@@ -194,14 +199,15 @@ public void GetOrganizations(Action<Organization[]> onSuccess, Action<Exception>
194199
Guard.ArgumentNotNull(onSuccess, nameof(onSuccess));
195200
new FuncTask<Organization[]>(taskManager.Token, () =>
196201
{
197-
var adapter = keychain.Connect(OriginalUrl);
202+
var adapter = keychain.Connect(HostAddress.ApiUri.Host);
198203
if (adapter.Credential == null)
199204
{
200205
throw new ApiClientException("No Credentials found");
201206
}
202207

208+
var command = HostAddress.IsGitHubDotCom() ? "organizations" : "organizations -h " + HostAddress.ApiUri.Host;
203209
var octorunTask = new OctorunTask(taskManager.Token, environment,
204-
"organizations -h " + OriginalUrl.Host, adapter.Credential.Token)
210+
command, adapter.Credential.Token)
205211
.Configure(processManager);
206212

207213
var ret = octorunTask.RunSynchronously();
@@ -254,7 +260,7 @@ public void LoginWithToken(string token, Action<bool> result)
254260
Guard.ArgumentNotNull(result, "result");
255261

256262
new FuncTask<bool>(taskManager.Token,
257-
() => loginManager.LoginWithToken(OriginalUrl, token))
263+
() => loginManager.LoginWithToken(HostAddress.ApiUri.Host, token))
258264
.FinallyInUI((success, ex, res) =>
259265
{
260266
if (!success)
@@ -275,7 +281,7 @@ public void Login(string username, string password, Action<LoginResult> need2faC
275281
Guard.ArgumentNotNull(result, "result");
276282

277283
new FuncTask<LoginResultData>(taskManager.Token,
278-
() => loginManager.Login(OriginalUrl, username, password))
284+
() => loginManager.Login(HostAddress.ApiUri.Host, username, password))
279285
.FinallyInUI((success, ex, res) =>
280286
{
281287
if (!success)
@@ -320,7 +326,7 @@ public void ContinueLogin(LoginResult loginResult, string code)
320326

321327
public GitHubUser GetCurrentUser()
322328
{
323-
var keychainConnection = keychain.Connections.FirstOrDefault(x => x.Host == OriginalUrl);
329+
var keychainConnection = keychain.Connections.FirstOrDefault(x => x.Host == (UriString)HostAddress.ApiUri.Host);
324330
if (keychainConnection == null)
325331
throw new KeychainEmptyException();
326332

@@ -365,7 +371,10 @@ private GitHubUser GetValidatedGitHubUser(Connection keychainConnection, IKeycha
365371
throw new ApiClientException("No Credentials found");
366372
}
367373

368-
var octorunTask = new OctorunTask(taskManager.Token, environment, "validate -h " + OriginalUrl.Host, keychainAdapter.Credential.Token)
374+
logger.Trace("GetValidatedGitHubUser with GitHub Token: {0} {1}", keychainAdapter.Credential.Host, keychainAdapter.Credential.Token);
375+
376+
var command = HostAddress.IsGitHubDotCom() ? "validate" : "validate -h " + HostAddress.ApiUri.Host;
377+
var octorunTask = new OctorunTask(taskManager.Token, environment, command, keychainAdapter.Credential.Token)
369378
.Configure(processManager);
370379

371380
var ret = octorunTask.RunSynchronously();

src/GitHub.Api/Application/ApplicationManagerBase.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -210,6 +210,8 @@ public void SetupGit(GitInstaller.GitInstallationState state)
210210
return true;
211211
}).RunSynchronously();
212212

213+
Logger.Trace("Credential Helper: {0}", credentialHelper);
214+
213215
if (string.IsNullOrEmpty(credentialHelper))
214216
{
215217
Logger.Warning("No Windows CredentialHelper found: Setting to wincred");

src/GitHub.Api/Application/IApiClient.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ namespace GitHub.Unity
55
interface IApiClient
66
{
77
HostAddress HostAddress { get; }
8-
UriString OriginalUrl { get; }
98
void CreateRepository(string name, string description, bool isPrivate,
109
Action<GitHubRepository, Exception> callback, string organization = null);
1110
void GetOrganizations(Action<Organization[]> onSuccess, Action<Exception> onError = null);
@@ -14,6 +13,6 @@ void CreateRepository(string name, string description, bool isPrivate,
1413
void LoginWithToken(string token, Action<bool> result);
1514
ITask Logout(UriString host);
1615
void GetCurrentUser(Action<GitHubUser> onSuccess, Action<Exception> onError = null);
17-
void GetServerMeta(Action<GitHubHostMeta> onSuccess, Action<Exception> onError = null);
16+
void GetEnterpriseServerMeta(Action<GitHubHostMeta> onSuccess, Action<Exception> onError = null);
1817
}
1918
}

src/GitHub.Api/Authentication/LoginManager.cs

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System;
2+
using System.Text;
23
using GitHub.Logging;
34

45
namespace GitHub.Unity
@@ -174,9 +175,20 @@ private LoginResultData TryLogin(
174175
{
175176
var hasTwoFactorCode = code != null;
176177

177-
var arguments = (hasTwoFactorCode ? "login --twoFactor -h " : "login -h ") + host.Host;
178-
179-
var loginTask = new OctorunTask(taskManager.Token, environment, arguments);
178+
var command = new StringBuilder("login");
179+
180+
if (hasTwoFactorCode)
181+
{
182+
command.Append(" --twoFactor");
183+
}
184+
185+
if (!HostAddress.IsGitHubDotCom(host))
186+
{
187+
command.Append(" -h ");
188+
command.Append(host.Host);
189+
}
190+
191+
var loginTask = new OctorunTask(taskManager.Token, environment, command.ToString());
180192
loginTask.Configure(processManager, withInput: true);
181193
loginTask.OnStartProcess += proc =>
182194
{
@@ -214,7 +226,8 @@ private string RetrieveUsername(string token, UriString host, string username =
214226
return username;
215227
}
216228

217-
var octorunTask = new OctorunTask(taskManager.Token, environment, "validate -h " + host.Host, token)
229+
var command = HostAddress.IsGitHubDotCom(host) ? "validate" : "validate -h " + host.Host;
230+
var octorunTask = new OctorunTask(taskManager.Token, environment, command, token)
218231
.Configure(processManager);
219232

220233
var validateResult = octorunTask.RunSynchronously();

src/GitHub.Api/Installer/OctorunInstaller.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ public class OctorunInstallDetails
8686
public const string DefaultZipMd5Url = "http://github-vs.s3.amazonaws.com/unity/octorun/octorun.zip.md5";
8787
public const string DefaultZipUrl = "http://github-vs.s3.amazonaws.com/unity/octorun/octorun.zip";
8888

89-
public const string PackageVersion = "902910f45";
89+
public const string PackageVersion = "902910f47";
9090
private const string PackageName = "octorun";
9191
private const string zipFile = "octorun.zip";
9292

src/GitHub.Api/Metrics/UsageTracker.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -401,7 +401,7 @@ protected override string GetUsername()
401401
{
402402
string username = "";
403403
try {
404-
var apiClient = new ApiClient("", Keychain, ProcessManager, TaskManager, Environment);
404+
var apiClient = new ApiClient(Keychain, ProcessManager, TaskManager, Environment);
405405
var user = apiClient.GetCurrentUser();
406406
username = user.Login;
407407
} catch {

src/GitHub.Api/Primitives/HostAddress.cs

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -75,14 +75,21 @@ public static bool IsGitHubDotCom(Uri hostUri)
7575
|| hostUri.IsSameHost(gistUri);
7676
}
7777

78-
public static bool IsGitHubDotCom(string url)
78+
public static bool IsGitHubDotCom(UriString hostUri)
7979
{
80-
if (String.IsNullOrEmpty(url))
81-
return false;
82-
Uri uri = null;
83-
if (!Uri.TryCreate(url, UriKind.Absolute, out uri))
80+
return hostUri.Host == GitHubDotComHostAddress.WebUri.Host
81+
|| hostUri.Host == GitHubDotComHostAddress.ApiUri.Host
82+
|| hostUri.Host == gistUri.Host;
83+
}
84+
85+
public static bool IsGitHubDotCom(Connection connection)
86+
{
87+
if (connection == null || String.IsNullOrEmpty(connection.Host))
8488
return false;
85-
return IsGitHubDotCom(uri);
89+
90+
return connection.Host == GitHubDotComHostAddress.WebUri.Host
91+
|| connection.Host == GitHubDotComHostAddress.ApiUri.Host
92+
|| connection.Host == gistUri.Host;
8693
}
8794

8895
public bool IsGitHubDotCom()

src/GitHub.Api/Resources/octorun.zip

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
version https://git-lfs.github.com/spec/v1
2-
oid sha256:ffc11593937b7a03f3ef5450ec07699a0ae2f23d0785eb11fb827c1eccc82b20
3-
size 220342
2+
oid sha256:38edc11e8332150a2f642a7058980735477e8afd93e3b37faceee9f1fd00cf12
3+
size 220347
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
0e2d411bfe82bc5b579703f5604ceed0
1+
977df0fef82ae85e55419b042b4078d7

0 commit comments

Comments
 (0)