/Atlassian.Jira/Remote/JiraGroupService.cs

https://bitbucket.org/farmas/atlassian.net-sdk · C# · 82 lines · 67 code · 15 blank · 0 comment · 2 complexity · 653b01b838651861a6f24eba2be69202 MD5 · raw file

  1. using System;
  2. using System.Linq;
  3. using System.Threading;
  4. using System.Threading.Tasks;
  5. using Newtonsoft.Json;
  6. using Newtonsoft.Json.Linq;
  7. using RestSharp;
  8. namespace Atlassian.Jira.Remote
  9. {
  10. internal class JiraGroupService : IJiraGroupService
  11. {
  12. private readonly Jira _jira;
  13. public JiraGroupService(Jira jira)
  14. {
  15. _jira = jira;
  16. }
  17. public Task AddUserAsync(string groupname, string username, CancellationToken token = default(CancellationToken))
  18. {
  19. var resource = String.Format("rest/api/2/group/user?groupname={0}", Uri.EscapeUriString(groupname));
  20. object body = new { name = username };
  21. if (_jira.RestClient.Settings.EnableUserPrivacyMode)
  22. {
  23. body = new { accountId = username };
  24. }
  25. var requestBody = JToken.FromObject(body);
  26. return _jira.RestClient.ExecuteRequestAsync(Method.POST, resource, requestBody, token);
  27. }
  28. public Task CreateGroupAsync(string groupName, CancellationToken token = default(CancellationToken))
  29. {
  30. var resource = "rest/api/2/group";
  31. var requestBody = JToken.FromObject(new { name = groupName });
  32. return _jira.RestClient.ExecuteRequestAsync(Method.POST, resource, requestBody, token);
  33. }
  34. public Task DeleteGroupAsync(string groupName, string swapGroupName = null, CancellationToken token = default(CancellationToken))
  35. {
  36. var resource = String.Format("rest/api/2/group?groupname={0}", Uri.EscapeUriString(groupName));
  37. if (!String.IsNullOrEmpty(swapGroupName))
  38. {
  39. resource += String.Format("&swapGroup={0}", Uri.EscapeUriString(swapGroupName));
  40. }
  41. return _jira.RestClient.ExecuteRequestAsync(Method.DELETE, resource, null, token);
  42. }
  43. public async Task<IPagedQueryResult<JiraUser>> GetUsersAsync(string groupname, bool includeInactiveUsers = false, int maxResults = 50, int startAt = 0, CancellationToken token = default(CancellationToken))
  44. {
  45. var resource = String.Format(
  46. "rest/api/2/group/member?groupname={0}&includeInactiveUsers={1}&startAt={2}&maxResults={3}",
  47. Uri.EscapeUriString(groupname),
  48. includeInactiveUsers,
  49. startAt,
  50. maxResults);
  51. var response = await _jira.RestClient.ExecuteRequestAsync(Method.GET, resource, null, token).ConfigureAwait(false);
  52. var serializerSetting = _jira.RestClient.Settings.JsonSerializerSettings;
  53. var users = response["values"]
  54. .Cast<JObject>()
  55. .Select(valuesJson => JsonConvert.DeserializeObject<JiraUser>(valuesJson.ToString(), serializerSetting));
  56. return PagedQueryResult<JiraUser>.FromJson((JObject)response, users);
  57. }
  58. public Task RemoveUserAsync(string groupname, string username, CancellationToken token = default(CancellationToken))
  59. {
  60. var resource = String.Format("rest/api/2/group/user?groupname={0}&{1}={2}",
  61. Uri.EscapeUriString(groupname),
  62. _jira.RestClient.Settings.EnableUserPrivacyMode ? "accountId" : "username",
  63. Uri.EscapeUriString(username));
  64. return _jira.RestClient.ExecuteRequestAsync(Method.DELETE, resource, null, token);
  65. }
  66. }
  67. }