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

Commit 6a96354

Browse files
Completing ApiClient implementation
1 parent 879e869 commit 6a96354

File tree

10 files changed

+166
-80
lines changed

10 files changed

+166
-80
lines changed

octorun/src/api.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,10 @@ ApiWrapper.prototype.getOrgs = function (callback) {
4646
}
4747
else {
4848
var organizationLogins = organizations.map(function (item) {
49-
return item.login;
49+
return {
50+
name: item.name || "",
51+
login: item.login
52+
};
5053
});
5154

5255
callback(null, organizationLogins);

octorun/src/authentication.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ var octokitWrapper = require("./octokit");
55
var scopes = ["user", "repo", "gist", "write:public_key"];
66

77
var lockedRegex = new RegExp("number of login attempts exceeded", "gi");
8-
var twoFactorRegex = new RegExp("must specify two-factor authentication OTP code", "gi");
8+
var twoFactorRegex = new RegExp("must specify two-factor authentication otp code", "gi");
99
var badCredentialsRegex = new RegExp("bad credentials", "gi");
1010

1111
var handleBasicAuthentication = function (username, password, onSuccess, onRequiresTwoFa, onFailure) {

octorun/src/bin/app-login.js

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,15 @@ var encoding = 'utf-8';
1313
if (commander.twoFactor) {
1414
var handleTwoFactorAuthentication = function (username, password, token) {
1515
authentication.handleTwoFactorAuthentication(username, password, token, function (token) {
16-
process.stdout.write("Success");
16+
process.stdout.write("success");
1717
process.stdout.write(endOfLine);
1818
process.stdout.write(token);
1919
process.stdout.write(endOfLine);
2020
process.exit();
2121
}, function (error) {
22-
process.stdout.write("Error");
22+
process.stdout.write("error");
23+
process.stdout.write(endOfLine);
24+
process.stdout.write("");
2325
process.stdout.write(endOfLine);
2426

2527
if (error) {
@@ -66,19 +68,21 @@ else {
6668
var handleBasicAuthentication = function (username, password) {
6769
authentication.handleBasicAuthentication(username, password,
6870
function (token) {
69-
process.stdout.write("Success");
71+
process.stdout.write("success");
7072
process.stdout.write(endOfLine);
7173
process.stdout.write(token);
7274
process.stdout.write(endOfLine);
7375
process.exit();
7476
}, function () {
75-
process.stdout.write("Error");
77+
process.stdout.write("2fa");
7678
process.stdout.write(endOfLine);
77-
process.stdout.write("Must specify two-factor authentication OTP code.");
79+
process.stdout.write(password);
7880
process.stdout.write(endOfLine);
7981
process.exit();
8082
}, function (error) {
81-
process.stdout.write("Error");
83+
process.stdout.write("error");
84+
process.stdout.write(endOfLine);
85+
process.stdout.write("");
8286
process.stdout.write(endOfLine);
8387

8488
if (error) {

octorun/src/bin/app-organizations.js

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ try {
1212
var apiWrapper = new ApiWrapper();
1313
apiWrapper.getOrgs(function (error, result) {
1414
if (error) {
15-
process.stdout.write("Error");
15+
process.stdout.write("error");
1616
process.stdout.write(endOfLine);
1717

1818
if (error) {
@@ -23,11 +23,13 @@ try {
2323
process.exit();
2424
}
2525
else {
26-
process.stdout.write("Success");
26+
process.stdout.write("success");
2727
process.stdout.write(endOfLine);
2828

2929
for (var i = 0; i < result.length; i++) {
30-
process.stdout.write(result[i]);
30+
process.stdout.write(result[i].name);
31+
process.stdout.write(endOfLine);
32+
process.stdout.write(result[i].login);
3133
process.stdout.write(endOfLine);
3234
}
3335

octorun/src/bin/app-publish.js

Lines changed: 49 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -24,19 +24,53 @@ var private = false;
2424
if (commander.private) {
2525
private = true;
2626
}
27+
28+
try {
29+
var apiWrapper = new ApiWrapper();
2730

28-
var apiWrapper = new ApiWrapper();
29-
30-
apiWrapper.publish(commander.repository, commander.description, private, commander.organization,
31-
function (error, result) {
32-
if (error) {
33-
process.stdout.write(error);
34-
process.stdout.write(endOfLine);
35-
process.exit(-1);
36-
}
37-
else {
38-
process.stdout.write(result);
39-
process.stdout.write(endOfLine);
40-
process.exit();
41-
}
42-
});
31+
apiWrapper.publish(commander.repository, commander.description, private, commander.organization,
32+
function (error, result) {
33+
if (error) {
34+
process.stdout.write("error");
35+
process.stdout.write(endOfLine);
36+
37+
process.stdout.write("");
38+
process.stdout.write(endOfLine);
39+
40+
process.stdout.write("");
41+
process.stdout.write(endOfLine);
42+
43+
if (error) {
44+
process.stdout.write(error.toString());
45+
process.stdout.write(endOfLine);
46+
}
47+
48+
process.exit();
49+
}
50+
else {
51+
process.stdout.write("success");
52+
process.stdout.write(endOfLine);
53+
54+
process.stdout.write(commander.repository);
55+
process.stdout.write(endOfLine);
56+
57+
process.stdout.write(result);
58+
process.stdout.write(endOfLine);
59+
process.exit();
60+
}
61+
});
62+
}
63+
catch (error) {
64+
process.stdout.write("error");
65+
process.stdout.write(endOfLine);
66+
67+
process.stdout.write("");
68+
process.stdout.write(endOfLine);
69+
70+
if (error) {
71+
process.stdout.write(error.toString());
72+
process.stdout.write(endOfLine);
73+
}
74+
75+
process.exit();
76+
}

octorun/src/bin/app-usage.js

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,14 +50,18 @@ if (fileContents && host) {
5050

5151
res.on('data', function (d) {
5252
if (success) {
53-
process.stdout.write("Success");
53+
process.stdout.write("success");
5454
process.stdout.write(endOfLine);
5555
process.stdout.write(d);
5656
process.stdout.write(endOfLine);
5757
}
5858
else {
59-
process.stdout.write("Error");
59+
process.stdout.write("error");
6060
process.stdout.write(endOfLine);
61+
62+
process.stdout.write("");
63+
process.stdout.write(endOfLine);
64+
6165
process.stdout.write(d);
6266
process.stdout.write(endOfLine);
6367
}

octorun/src/bin/app-validate.js

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,11 @@ try {
1212

1313
apiWrapper.verifyUser(function (error, result) {
1414
if (error) {
15-
process.stdout.write("Error");
15+
process.stdout.write("error");
16+
process.stdout.write(endOfLine);
17+
process.stdout.write("");
18+
process.stdout.write(endOfLine);
19+
process.stdout.write("");
1620
process.stdout.write(endOfLine);
1721

1822
if (error) {
@@ -23,7 +27,7 @@ try {
2327
process.exit();
2428
}
2529
else {
26-
process.stdout.write("Success");
30+
process.stdout.write("success");
2731
process.stdout.write(endOfLine);
2832
process.stdout.write(result.name);
2933
process.stdout.write(endOfLine);

script

src/GitHub.Api/Application/ApiClient.cs

Lines changed: 68 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
using Octokit;
66
using GitHub.Logging;
77
using System.Runtime.Serialization;
8+
using System.Text;
89

910
namespace GitHub.Unity
1011
{
@@ -209,24 +210,55 @@ private async Task<GitHubRepository> CreateRepositoryInternal(NewRepository newR
209210
await ValidateKeychain();
210211
await ValidateCurrentUserInternal();
211212

212-
GitHubRepository repository;
213+
var uriString = keychain.Connections.First().Host;
214+
var keychainAdapter = await keychain.Load(uriString);
215+
216+
var command = new StringBuilder("publish -r ");
217+
command.Append(newRepository.Name);
218+
219+
if (!string.IsNullOrEmpty(newRepository.Description))
220+
{
221+
command.Append(" -d ");
222+
command.Append(newRepository.Description);
223+
}
224+
213225
if (!string.IsNullOrEmpty(organization))
214226
{
215-
logger.Trace("Creating repository for organization");
227+
command.Append(" -o ");
228+
command.Append(organization);
229+
}
216230

217-
//repository = (await githubClient.Repository.Create(organization, newRepository)).ToGitHubRepository();
231+
if (newRepository.Private ?? false)
232+
{
233+
command.Append(" -p");
218234
}
219-
else
235+
236+
var octorunTask = new OctorunTask(taskManager.Token, nodeJsExecutablePath, octorunScriptPath, command.ToString(),
237+
user: keychainAdapter.Credential.Username, userToken: keychainAdapter.Credential.Token)
238+
.Configure(processManager);
239+
240+
var ret = await octorunTask.StartAwait();
241+
242+
if (ret.Count == 0)
220243
{
221-
logger.Trace("Creating repository for user");
244+
throw new ApiClientException("Publish failed");
245+
}
222246

223-
//repository = (await githubClient.Repository.Create(newRepository)).ToGitHubRepository();
247+
if (ret[0] == "success")
248+
{
249+
return new GitHubRepository()
250+
{
251+
Name = ret[1],
252+
CloneUrl = ret[2],
253+
};
224254
}
225255

226-
throw new NotImplementedException();
256+
if (ret.Count > 3)
257+
{
258+
throw new ApiClientException(ret[3]);
259+
}
227260

228-
//logger.Trace("Created Repository");
229-
//return repository;
261+
throw new ApiClientException("Publish failed");
230262
}
231263
catch (Exception ex)
232264
{
@@ -255,20 +287,28 @@ private async Task GetOrganizationInternal(Action<Organization[]> onSuccess, Act
255287

256288
logger.Trace("Return: {0}", string.Join(";", ret.ToArray()));
257289

258-
throw new NotImplementedException();
259-
260-
// var organizations = await githubClient.Organization.GetAllForCurrent();
261-
//
262-
// logger.Trace("Obtained {0} Organizations", organizations?.Count.ToString() ?? "NULL");
263-
//
264-
// if (organizations != null)
265-
// {
266-
// var array = organizations.Select(organization => new Organization() {
267-
// Name = organization.Name,
268-
// Login = organization.Login
269-
// }).ToArray();
270-
// onSuccess(array);
271-
// }
290+
if (ret.Count == 0)
291+
{
292+
throw new ApiClientException("Error getting organizations");
293+
}
294+
295+
if (ret[0] == "success")
296+
{
297+
var organizations = new List<Organization>();
298+
for (var i = 1; i < ret.Count; i = i + 2)
299+
{
300+
organizations.Add(new Organization
301+
{
302+
Name = ret[i],
303+
Login = ret[i + 1]
304+
});
305+
}
306+
307+
onSuccess(organizations.ToArray());
308+
return;
309+
}
310+
311+
throw new ApiClientException("Error getting organizations");
272312
}
273313
catch (Exception ex)
274314
{
@@ -287,13 +327,17 @@ private async Task<GitHubUser> GetCurrentUserInternal()
287327
var uriString = keychain.Connections.First().Host;
288328
var keychainAdapter = await keychain.Load(uriString);
289329

330+
logger.Trace("Username: {0} Token: {1}", keychainAdapter.Credential.Username, keychainAdapter.Credential.Token);
331+
290332
var octorunTask = new OctorunTask(taskManager.Token, nodeJsExecutablePath, octorunScriptPath, "validate",
291333
user: keychainAdapter.Credential.Username, userToken: keychainAdapter.Credential.Token)
292334
.Configure(processManager);
293335

294336
var ret = await octorunTask.StartAsAsync();
295337

296-
if (ret.Count == 3 && ret[0] == "Success")
338+
logger.Trace("Return: {0}", string.Join(";", ret.ToArray()));
339+
340+
if (ret[0] == "success")
297341
{
298342
return new GitHubUser {
299343
Name = ret[1],

0 commit comments

Comments
 (0)