diff --git a/Octokit/Clients/OrganizationMembersClient.cs b/Octokit/Clients/OrganizationMembersClient.cs index b558ee7d..e5a4fe7e 100644 --- a/Octokit/Clients/OrganizationMembersClient.cs +++ b/Octokit/Clients/OrganizationMembersClient.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Net; using System.Text; using System.Threading.Tasks; @@ -35,7 +36,9 @@ namespace Octokit.Clients /// public Task> GetAll(string org) { - throw new NotImplementedException(); + Ensure.ArgumentNotNullOrEmptyString(org, "org"); + + return ApiConnection.GetAll("orgs/{0}/members".FormatUri(org)); } /// @@ -46,7 +49,9 @@ namespace Octokit.Clients /// public Task> GetPublic(string org) { - throw new NotImplementedException(); + Ensure.ArgumentNotNullOrEmptyString(org, "org"); + + return ApiConnection.GetAll("orgs/{0}/public_members".FormatUri(org)); } /// @@ -59,9 +64,27 @@ namespace Octokit.Clients /// /// /// - public Task CheckMember(string org, string user) + public async Task CheckMember(string org, string user) { - throw new NotImplementedException(); + Ensure.ArgumentNotNullOrEmptyString(org, "org"); + Ensure.ArgumentNotNullOrEmptyString(user, "user"); + + try + { + var response = await Connection.GetAsync(ApiUrls.CheckMember(org, user), null, null) + .ConfigureAwait(false); + if (response.StatusCode != HttpStatusCode.NotFound && response.StatusCode != HttpStatusCode.NoContent + && response.StatusCode != HttpStatusCode.Found) + { + throw new ApiException("Invalid Status Code returned. Expected a 204, a 302 or a 404", response.StatusCode); + } + return response.StatusCode == HttpStatusCode.NoContent; + } + catch (NotFoundException) + { + return false; + } + } /// @@ -74,9 +97,26 @@ namespace Octokit.Clients /// /// /// - public Task CheckMemberPublic(string org, string user) + public async Task CheckMemberPublic(string org, string user) { - throw new NotImplementedException(); + Ensure.ArgumentNotNullOrEmptyString(org, "org"); + Ensure.ArgumentNotNullOrEmptyString(user, "user"); + + try + { + var response = await Connection.GetAsync(ApiUrls.CheckMemberPublic(org, user), null, null) + .ConfigureAwait(false); + if (response.StatusCode != HttpStatusCode.NotFound && response.StatusCode != HttpStatusCode.NoContent) + { + throw new ApiException("Invalid Status Code returned. Expected a 204 or a 404", response.StatusCode); + } + return response.StatusCode == HttpStatusCode.NoContent; + } + catch (NotFoundException) + { + return false; + } + } /// @@ -93,7 +133,10 @@ namespace Octokit.Clients /// public Task Delete(string org, string user) { - throw new NotImplementedException(); + Ensure.ArgumentNotNullOrEmptyString(org, "org"); + Ensure.ArgumentNotNullOrEmptyString(user, "user"); + + return ApiConnection.Delete("orgs/{0}/members/{1}".FormatUri(org, user)); } /// @@ -107,9 +150,26 @@ namespace Octokit.Clients /// /// /// - public Task Publicize(string org, string user) + public async Task Publicize(string org, string user) { - throw new NotImplementedException(); + Ensure.ArgumentNotNullOrEmptyString(org, "org"); + Ensure.ArgumentNotNullOrEmptyString(user, "user"); + + try + { + var requestData = new { }; + var response = await Connection.PutAsync(ApiUrls.OrganizationMembership(org, user), requestData) + .ConfigureAwait(false); + if (response.StatusCode != HttpStatusCode.NoContent) + { + throw new ApiException("Invalid Status Code returned. Expected a 204", response.StatusCode); + } + return response.StatusCode == HttpStatusCode.NoContent; + } + catch (NotFoundException) + { + return false; + } } /// @@ -123,9 +183,26 @@ namespace Octokit.Clients /// /// /// - public Task Conceal(string org, string user) + public async Task Conceal(string org, string user) { - throw new NotImplementedException(); + Ensure.ArgumentNotNullOrEmptyString(org, "org"); + Ensure.ArgumentNotNullOrEmptyString(user, "user"); + + try + { + var requestData = new { }; + var response = await Connection.PutAsync(ApiUrls.OrganizationMembership(org, user), requestData) + .ConfigureAwait(false); + if (response.StatusCode != HttpStatusCode.NoContent) + { + throw new ApiException("Invalid Status Code returned. Expected a 204", response.StatusCode); + } + return response.StatusCode == HttpStatusCode.NoContent; + } + catch (NotFoundException) + { + return false; + } } } } diff --git a/Octokit/Helpers/ApiUrls.cs b/Octokit/Helpers/ApiUrls.cs index d097b409..e8d4e3cf 100644 --- a/Octokit/Helpers/ApiUrls.cs +++ b/Octokit/Helpers/ApiUrls.cs @@ -247,6 +247,21 @@ namespace Octokit return "repos/{0}/{1}/assignees/{2}".FormatUri(owner, name, login); } + public static Uri CheckMember(string org, string name) + { + return "orgs/{0}/members/{1}".FormatUri(org, name); + } + + public static Uri CheckMemberPublic(string org, string name) + { + return "orgs/{0}/public_members/{1}".FormatUri(org, name); + } + + public static Uri OrganizationMembership(string org, string name) + { + return "orgs/{0}/public_members/{1}".FormatUri(org, name); + } + /// /// Returns the that returns the issue/pull request event info for the specified issue. /// diff --git a/Octokit/Octokit.csproj b/Octokit/Octokit.csproj index 7ed41822..27f2b2dc 100644 --- a/Octokit/Octokit.csproj +++ b/Octokit/Octokit.csproj @@ -65,6 +65,7 @@ +