Exemple #1
0
        /// <summary>
        /// Helper method to generate the URL needed to contact Confluence.
        /// The display way might be nicer.
        /// </summary>
        /// <param name="confluenceClient">IUserDomain</param>
        /// <param name="isCloudServer">boll with some information</param>
        /// <param name="userIdentifier">IUserDomain</param>
        /// <param name="segments">params with strings</param>
        /// <returns>Uri</returns>
        private static Uri CreateUserWatchUri(this IUserDomain confluenceClient, bool isCloudServer, IUserIdentifier userIdentifier, params object[] segments)
        {
            var userWatchContentUri = confluenceClient.ConfluenceApiUri
                                      .AppendSegments("user", "watch")
                                      .AppendSegments(segments);

            // If there is no specified accountId, the current user is used
            if (userIdentifier == null)
            {
                return(userWatchContentUri);
            }

            if (isCloudServer)
            {
                // Check the account id value.
                if (string.IsNullOrEmpty(userIdentifier.AccountId))
                {
                    throw new ArgumentNullException(nameof(userIdentifier), "It seems that there is no account ID supplied.");
                }
                userWatchContentUri = userWatchContentUri.ExtendQuery("accountId", userIdentifier.AccountId);
            }
            else
            {
                // Check the username value.
                if (string.IsNullOrEmpty(userIdentifier.Username))
                {
                    throw new ArgumentNullException(nameof(userIdentifier), "It seems that there is no username supplied.");
                }

                userWatchContentUri = userWatchContentUri.ExtendQuery("username", userIdentifier.Username);
            }

            return(userWatchContentUri);
        }
Exemple #2
0
 public static void  ToUserDomain(User user, IUserDomain userDomain)
 {
     userDomain.Id       = user.Id;
     userDomain.Address  = user.Address?.Trim();
     userDomain.LastName = user.LastName?.Trim();
     userDomain.Name     = user.Name?.Trim();
 }
        /// <summary>
        ///     Initiate controller with injectors.
        /// </summary>
        /// <param name="unitOfWork"></param>
        /// <param name="mapper"></param>
        /// <param name="baseTimeService"></param>
        /// <param name="relationalDbService"></param>
        /// <param name="encryptionService"></param>
        /// <param name="profileService"></param>
        /// <param name="systemBaseTimeService"></param>
        /// <param name="externalAuthenticationService"></param>
        /// <param name="sendMailService"></param>
        /// <param name="emailCacheService"></param>
        /// <param name="jwtConfigurationOptions"></param>
        /// <param name="applicationSettings"></param>
        /// <param name="logger"></param>
        /// <param name="vgyService"></param>
        /// <param name="profileCacheService"></param>
        /// <param name="captchaService"></param>
        /// <param name="realTimeService"></param>
        /// <param name="userDomain"></param>
        public UserController(
            IAppUnitOfWork unitOfWork,
            IMapper mapper,
            IBaseTimeService baseTimeService,
            IBaseRelationalDbService relationalDbService,
            IBaseEncryptionService encryptionService,
            IAppProfileService profileService,
            IBaseTimeService systemBaseTimeService,
            IExternalAuthenticationService externalAuthenticationService,
            ISendMailService sendMailService,
            IEmailCacheService emailCacheService,
            IOptions <AppJwtModel> jwtConfigurationOptions,
            IOptions <ApplicationSetting> applicationSettings,
            ILogger <UserController> logger,
            IVgyService vgyService,
            IBaseKeyValueCacheService <int, User> profileCacheService,
            ICaptchaService captchaService,

            IUserDomain userDomain) : base(
                unitOfWork, mapper, baseTimeService,
                relationalDbService, profileService)
        {
            _logger            = logger;
            _profileService    = profileService;
            _sendMailService   = sendMailService;
            _emailCacheService = emailCacheService;
            _captchaService    = captchaService;

            _userDomain = userDomain;
        }
Exemple #4
0
        /// <summary>
        ///     Returns a list of users that match the search string.
        ///     This resource cannot be accessed anonymously.
        ///     See: https://docs.atlassian.com/jira/REST/latest/#api/2/user-findUsers
        /// </summary>
        /// <param name="jiraClient">IWorkDomain to bind the extension method to</param>
        /// <param name="query">A query string used to search username, name or e-mail address</param>
        /// <param name="startAt"></param>
        /// <param name="maxResults">Maximum number of results returned, default is 20</param>
        /// <param name="includeActive">If true, then active users are included in the results (default true)</param>
        /// <param name="includeInactive">If true, then inactive users are included in the results (default false)</param>
        /// <param name="cancellationToken">CancellationToken</param>
        /// <returns>SearchResults</returns>
        public static async Task <IList <User> > SearchAsync(this IUserDomain jiraClient, string query, bool includeActive = true, bool includeInactive = false, int startAt = 0,
                                                             int maxResults = 20, CancellationToken cancellationToken = default)
        {
            if (query == null)
            {
                throw new ArgumentNullException(nameof(query));
            }
            Log.Debug().WriteLine("Search user {0}", query);

            jiraClient.Behaviour.MakeCurrent();
            var searchUri = jiraClient.JiraRestUri.AppendSegments("user", "search").ExtendQuery(new Dictionary <string, object>
            {
                {
                    "username", query
                },
                {
                    "includeActive", includeActive
                },
                {
                    "includeInactive", includeInactive
                },
                {
                    "startAt", startAt
                },
                {
                    "maxResults", maxResults
                }
            });

            var response = await searchUri.GetAsAsync <HttpResponse <IList <User>, Error> >(cancellationToken).ConfigureAwait(false);

            return(response.HandleErrors());
        }
Exemple #5
0
        /// <summary>
        ///     Get user information, introduced with 6.6
        ///     See: https://docs.atlassian.com/confluence/REST/latest/#user-getUser
        /// </summary>
        /// <param name="confluenceClient">IUserDomain to bind the extension method to</param>
        /// <param name="userIdentifier">IUserIdentifier</param>
        /// <param name="cancellationToken">CancellationToken</param>
        /// <returns>User</returns>
        public static async Task <User> GetUserAsync(this IUserDomain confluenceClient, IUserIdentifier userIdentifier, CancellationToken cancellationToken = default)
        {
            if (userIdentifier == null)
            {
                throw new ArgumentNullException(nameof(userIdentifier));
            }

            var userUri = confluenceClient.ConfluenceApiUri
                          .AppendSegments("user");
            bool isCloudServer = await confluenceClient.IsCloudServer(cancellationToken);

            if (isCloudServer)
            {
                if (string.IsNullOrEmpty(userIdentifier.AccountId))
                {
                    throw new ArgumentNullException(nameof(userIdentifier));
                }
                userUri = userUri.ExtendQuery("accountId", userIdentifier.AccountId);
            }
            else
            {
                if (string.IsNullOrEmpty(userIdentifier.Username))
                {
                    throw new ArgumentNullException(nameof(userIdentifier));
                }
                userUri = userUri.ExtendQuery("username", userIdentifier.Username);
            }

            confluenceClient.Behaviour.MakeCurrent();
            var response = await userUri.GetAsAsync <HttpResponse <User, Error> >(cancellationToken).ConfigureAwait(false);

            return(response.HandleErrors());
        }
Exemple #6
0
        /// <summary>
        ///  Add the user to the list of users watching the specified space
        ///     See: https://developer.atlassian.com/cloud/confluence/rest/#api-api-user-watch-space-spaceKey-get
        /// </summary>
        /// <param name="confluenceClient">IUserDomain to bind the extension method to</param>
        /// <param name="spaceKey">string with the space key</param>
        /// <param name="userIdentifier">IUserIdentifier for the user (account id), null for the current user</param>
        /// <param name="cancellationToken">CancellationToken</param>
        public static async Task AddSpaceWatcher(this IUserDomain confluenceClient, string spaceKey, IUserIdentifier userIdentifier = null, CancellationToken cancellationToken = default)
        {
            if (string.IsNullOrEmpty(spaceKey))
            {
                throw new ArgumentNullException(nameof(spaceKey));
            }

            bool isCloudServer = await confluenceClient.IsCloudServer(cancellationToken);

            var userWatchSpaceUri = CreateUserWatchUri(confluenceClient, isCloudServer, userIdentifier, "space", spaceKey);

            confluenceClient.Behaviour.MakeCurrent();
            var response = await userWatchSpaceUri.PostAsync <HttpResponseWithError <Error> >(null, cancellationToken : cancellationToken).ConfigureAwait(false);

            if (isCloudServer)
            {
                // Expect a 204, which is NoContent for the Cloud Server
                response.HandleStatusCode(HttpStatusCode.NoContent);
            }
            else
            {
                // Expect a 200 for Confluence server
                response.HandleStatusCode(HttpStatusCode.OK);
            }
        }
Exemple #7
0
        /// <summary>
        /// Retrieves the settings for the specified user
        /// </summary>
        /// <param name="bitbucketClient">IUserDomain to pin the extension method to</param>
        /// <param name="userSlug">Slug from the User object</param>
        /// <param name="cancellationToken">CancellationToken</param>
        /// <returns>IDictionary with name value pairs</returns>
        public static async Task <IDictionary <string, object> > GetSettingsAsync(this IUserDomain bitbucketClient, string userSlug, CancellationToken cancellationToken = new CancellationToken())
        {
            bitbucketClient.Behaviour.MakeCurrent();
            var settingsUri = bitbucketClient.BitbucketUri.AppendSegments("users", userSlug, "settings");

            return(await settingsUri.GetAsAsync <IDictionary <string, object> >(cancellationToken).ConfigureAwait(false));
        }
Exemple #8
0
 /// <summary>
 ///     Initiate controller with injectors.
 /// </summary>
 /// <param name="captchaService"></param>
 /// <param name="profileCacheService"></param>
 /// <param name="userDomain"></param>
 public UserController(
     ICaptchaService captchaService,
     IBaseKeyValueCacheService <int, User> profileCacheService,
     IUserDomain userDomain)
 {
     _captchaService = captchaService;
     _userDomain     = userDomain;
 }
Exemple #9
0
 public GiphyController(IUserDomain userDomain,
                        IGiphyService giphyService,
                        IImageDomain imageDomain)
 {
     _userDomain   = userDomain;
     _giphyService = giphyService;
     _imageDomain  = imageDomain;
 }
Exemple #10
0
 public Users(XatarisContext context, IUserDomain userDomain, IEmailSender emailSender, IUserSettings userSettings, IProcedureService procedureService)
 {
     _context          = context;
     _userDomain       = userDomain;
     this.emailSender  = emailSender;
     _userSettings     = userSettings;
     _procedureService = procedureService;
 }
Exemple #11
0
        public void UpdateElement(IUserDomain element)
        {
            var user = UserAdapter.MapUser(element);

            userRepository.UpdateElement(user);

            //throw new NotImplementedException();
        }
Exemple #12
0
        /// <summary>
        /// Retrieve the assignable users for the specified project or issue
        /// See <a href="https://docs.atlassian.com/jira/REST/cloud/#api/2/user-findAssignableUsers">here</a>
        /// </summary>
        /// <param name="jiraClient">IProjectDomain</param>
        /// <param name="username">optional string with a pattern</param>
        /// <param name="projectKey">optional string with the key of the project</param>
        /// <param name="issueKey">optional string with the key of the issue</param>
        /// <param name="startAt">optional int where to start returning the results</param>
        /// <param name="maxResults">optional int with the max of the result</param>
        /// <param name="actionDescriptorId">optional int, not documented what this does</param>
        /// <param name="cancellationToken">CancellationToken</param>
        /// <returns>IEnumerable with User</returns>
        public static async Task <IEnumerable <User> > GetAssignableUsersAsync(this IUserDomain jiraClient, string username = null, string projectKey = null, string issueKey = null, int?startAt = null, int?maxResults = null, int?actionDescriptorId = null, CancellationToken cancellationToken = default)
        {
            var usersSearchUri = jiraClient.JiraRestUri
                                 .AppendSegments("user", "assignable", "search");

            if (projectKey != null)
            {
                usersSearchUri = usersSearchUri.ExtendQuery(new Dictionary <string, object>
                {
                    { "project", projectKey }
                });
            }

            if (issueKey != null)
            {
                usersSearchUri = usersSearchUri.ExtendQuery(new Dictionary <string, object>
                {
                    { "issueKey", issueKey }
                });
            }

            if (username != null)
            {
                usersSearchUri = usersSearchUri.ExtendQuery(new Dictionary <string, object>
                {
                    { "username", username }
                });
            }

            if (startAt.HasValue)
            {
                usersSearchUri = usersSearchUri.ExtendQuery(new Dictionary <string, object>
                {
                    { "startAt", startAt.Value }
                });
            }

            if (maxResults.HasValue)
            {
                usersSearchUri = usersSearchUri.ExtendQuery(new Dictionary <string, object>
                {
                    { "maxResults", maxResults.Value }
                });
            }

            if (actionDescriptorId.HasValue)
            {
                usersSearchUri = usersSearchUri.ExtendQuery(new Dictionary <string, object>
                {
                    { "actionDescriptorId", actionDescriptorId.Value }
                });
            }

            jiraClient.Behaviour.MakeCurrent();
            var response = await usersSearchUri.GetAsAsync <HttpResponse <IEnumerable <User>, Error> >(cancellationToken).ConfigureAwait(false);

            return(response.HandleErrors());
        }
        /// <summary>
        ///     Get the groups for a user
        /// </summary>
        /// <param name="confluenceClient">IUserDomain to bind the extension method to</param>
        /// <param name="username">string with username</param>
        /// <param name="cancellationToken">CancellationToken</param>
        /// <returns>List with Groups</returns>
        public static async Task <IList <Group> > GetGroupsAsync(this IUserDomain confluenceClient, string username, CancellationToken cancellationToken = default)
        {
            var groupUri = confluenceClient.ConfluenceApiUri.AppendSegments("user", "memberof").ExtendQuery("username", username);

            confluenceClient.Behaviour.MakeCurrent();
            var response = await groupUri.GetAsAsync <HttpResponse <Result <Group>, Error> >(cancellationToken).ConfigureAwait(false);

            return(response.HandleErrors()?.Results);
        }
        /// <summary>
        ///     Get currrent user information, introduced with 6.6
        ///     See: https://docs.atlassian.com/confluence/REST/latest/#user-getCurrent
        /// </summary>
        /// <param name="confluenceClient">IUserDomain to bind the extension method to</param>
        /// <param name="cancellationToken">CancellationToken</param>
        /// <returns>User</returns>
        public static async Task <User> GetCurrentUserAsync(this IUserDomain confluenceClient, CancellationToken cancellationToken = default)
        {
            confluenceClient.Behaviour.MakeCurrent();
            var myselfUri = confluenceClient.ConfluenceApiUri.AppendSegments("user", "current");

            var response = await myselfUri.GetAsAsync <HttpResponse <User, Error> >(cancellationToken).ConfigureAwait(false);

            return(response.HandleErrors());
        }
        /// <summary>
        ///     Get user information, introduced with 6.6
        ///     See: https://docs.atlassian.com/confluence/REST/latest/#user-getUser
        /// </summary>
        /// <param name="confluenceClient">IUserDomain to bind the extension method to</param>
        /// <param name="username">string with username</param>
        /// <param name="cancellationToken">CancellationToken</param>
        /// <returns>user information</returns>
        public static async Task <User> GetUserAsync(this IUserDomain confluenceClient, string username, CancellationToken cancellationToken = default)
        {
            var userUri = confluenceClient.ConfluenceApiUri.AppendSegments("user").ExtendQuery("username", username);

            confluenceClient.Behaviour.MakeCurrent();
            var response = await userUri.GetAsAsync <HttpResponse <User, Error> >(cancellationToken).ConfigureAwait(false);

            return(response.HandleErrors());
        }
Exemple #16
0
        /// <summary>
        ///     Get user information
        /// </summary>
        /// <param name="bitbucketClient">IUserDomain to pin the extension method to</param>
        /// <param name="userSlug">string with userSlug (this might not be the username)</param>
        /// <param name="cancellationToken">CancellationToken</param>
        /// <returns>User</returns>
        public static async Task <User> GetAsync(this IUserDomain bitbucketClient, string userSlug, CancellationToken cancellationToken = new CancellationToken())
        {
            var userUri = bitbucketClient.BitbucketApiUri.AppendSegments("users", userSlug);

            bitbucketClient.Behaviour.MakeCurrent();
            var response = await userUri.GetAsAsync <HttpResponse <User, ErrorList> >(cancellationToken).ConfigureAwait(false);

            return(response.HandleErrors());
        }
Exemple #17
0
        /// <summary>
        ///     Get all users
        /// </summary>
        /// <param name="bitbucketClient">IUserDomain to pin the extension method to</param>
        /// <param name="pagingInfo">PagingInfo to get the next page, this should simply be the results object</param>
        /// <param name="cancellationToken">CancellationToken</param>
        /// <returns>Results with User instances</returns>
        public static async Task <Results <User> > GetAllAsync(this IUserDomain bitbucketClient, PagingInfo pagingInfo = null, CancellationToken cancellationToken = new CancellationToken())
        {
            var usersUri = bitbucketClient.BitbucketApiUri.AppendSegments("users");

            bitbucketClient.Behaviour.MakeCurrent();
            var response = await usersUri.GetAsAsync <HttpResponse <Results <User>, ErrorList> >(cancellationToken).ConfigureAwait(false);

            return(response.HandleErrors());
        }
Exemple #18
0
 public DomainLayerFacade(IUserDomain userDomain, DomainLayerFacadeVerifier verifier
                          , ILogger <DomainLayerFacade> logger, IExternalServicesManager externalServicesManager
                          , IUnitOfWork unitOfWork)
 {
     _userDomain = userDomain;
     _verifier   = verifier;
     _externalServicesManager = externalServicesManager;
     _logger     = logger;
     _unitOfWork = unitOfWork;
 }
 public GalaryController(IUserDomain userDomain,
                         IGiphyService giphyService,
                         IImageDomain imageDomain,
                         ICategoryDomain categoryDomain)
 {
     _userDomain     = userDomain;
     _giphyService   = giphyService;
     _imageDomain    = imageDomain;
     _categoryDomain = categoryDomain;
 }
Exemple #20
0
        /// <summary>
        ///     Get currrent user information
        ///     See: https://docs.atlassian.com/jira/REST/latest/#d2e4253
        /// </summary>
        /// <param name="jiraClient">IWorkDomain to bind the extension method to</param>
        /// <param name="cancellationToken">CancellationToken</param>
        /// <returns>User</returns>
        public static async Task <User> GetMyselfAsync(this IUserDomain jiraClient, CancellationToken cancellationToken = default)
        {
            Log.Debug().WriteLine("Retieving who I am");

            var myselfUri = jiraClient.JiraRestUri.AppendSegments("myself");

            jiraClient.Behaviour.MakeCurrent();
            var response = await myselfUri.GetAsAsync <HttpResponse <User, Error> >(cancellationToken).ConfigureAwait(false);

            return(response.HandleErrors());
        }
Exemple #21
0
 /// <summary>
 ///     Get user information
 ///     See: https://docs.atlassian.com/jira/REST/latest/#d2e5339
 /// </summary>
 /// <param name="jiraClient">IUserDomain to bind the extension method to</param>
 /// <param name="userIdentifier">IUserIdentifier</param>
 /// <param name="cancellationToken">CancellationToken</param>
 /// <returns>User</returns>
 public static Task <User> GetAsync(this IUserDomain jiraClient, IUserIdentifier userIdentifier, CancellationToken cancellationToken = default)
 {
     if (userIdentifier?.AccountId != null)
     {
         return(GetByAccountIdAsync(jiraClient, userIdentifier.AccountId, cancellationToken));
     }
     if (userIdentifier?.Name != null)
     {
         return(GetByUsernameAsync(jiraClient, userIdentifier.Name, cancellationToken));
     }
     throw new ArgumentNullException(nameof(userIdentifier), "no users identifier specified");
 }
Exemple #22
0
 public static IUser MapUser(IUserDomain user)
 {
     return(new User
     {
         Id = user.Id,
         Address = user.Address,
         CreateDate = user.CreateDate,
         LastName = user.LastName,
         Name = user.Name,
         UpdateDate = user.UpdateDate
     });
 }
Exemple #23
0
        /// <summary>
        ///     Get avatar for the user
        /// </summary>
        /// <param name="bitbucketClient">IUserDomain to pin the extension method to</param>
        /// <param name="userslug">string with userSlug (this might not be the username)</param>
        /// <param name="size">optional size</param>
        /// <param name="cancellationToken">CancellationToken</param>
        /// <returns>Bitmap or ImageSource</returns>
        public static async Task <TBitmap> GetAvatarAsync <TBitmap>(this IUserDomain bitbucketClient, string userslug, int?size = null, CancellationToken cancellationToken = new CancellationToken())
            where TBitmap : class
        {
            // This doesn't use the API itself!
            var avatarUri = bitbucketClient.BitbucketUri.AppendSegments("users", userslug, "avatar.png");

            if (size.HasValue)
            {
                avatarUri = avatarUri.ExtendQuery("s", size.Value);
            }
            bitbucketClient.Behaviour.MakeCurrent();
            return(await avatarUri.GetAsAsync <TBitmap>(cancellationToken).ConfigureAwait(false));
        }
Exemple #24
0
 public static User ToUser(IUserDomain user)
 {
     if (user == null)
     {
         return(null);
     }
     return(new User
     {
         Id = user.Id,
         Address = user.Address?.Trim() ?? string.Empty,
         LastName = user.LastName?.Trim() ?? string.Empty,
         Name = user.Name?.Trim() ?? string.Empty
     });
 }
Exemple #25
0
        /// <summary>
        ///  Check if the user is watching the specified space
        ///     See: https://developer.atlassian.com/cloud/confluence/rest/#api-api-user-watch-content-contentId-get
        /// </summary>
        /// <param name="confluenceClient">IUserDomain to bind the extension method to</param>
        /// <param name="spaceKey">string with the space key</param>
        /// <param name="userIdentifier">IUserIdentifier for the user (account id), null for the current user</param>
        /// <param name="cancellationToken">CancellationToken</param>
        /// <returns>bool</returns>
        public static async Task <bool> IsSpaceWatcher(this IUserDomain confluenceClient, string spaceKey, IUserIdentifier userIdentifier = null, CancellationToken cancellationToken = default)
        {
            if (string.IsNullOrEmpty(spaceKey))
            {
                throw new ArgumentNullException(nameof(spaceKey));
            }

            bool isCloudServer = await confluenceClient.IsCloudServer(cancellationToken);

            var userWatchSpaceUri = CreateUserWatchUri(confluenceClient, isCloudServer, userIdentifier, "space", spaceKey);

            confluenceClient.Behaviour.MakeCurrent();
            var response = await userWatchSpaceUri.GetAsAsync <HttpResponse <UserWatch> >(cancellationToken).ConfigureAwait(false);

            return(response.HandleErrors().IsWatching);
        }
Exemple #26
0
        /// <summary>
        ///     Get user information
        ///     See: https://docs.atlassian.com/jira/REST/latest/#d2e5339
        /// </summary>
        /// <param name="jiraClient">IWorkDomain to bind the extension method to</param>
        /// <param name="username"></param>
        /// <param name="cancellationToken">CancellationToken</param>
        /// <returns>User</returns>
        public static async Task <User> GetAsync(this IUserDomain jiraClient, string username, CancellationToken cancellationToken = default)
        {
            if (username == null)
            {
                throw new ArgumentNullException(nameof(username));
            }
            Log.Debug().WriteLine("Retrieving user {0}", username);

            var userUri = jiraClient.JiraRestUri.AppendSegments("user").ExtendQuery("username", username);

            jiraClient.Behaviour.MakeCurrent();

            var response = await userUri.GetAsAsync <HttpResponse <User, Error> >(cancellationToken).ConfigureAwait(false);

            return(response.HandleErrors());
        }
Exemple #27
0
 public static UserDTO ToUserDTO(IUserDomain user)
 {
     if (user == null)
     {
         return(null);
     }
     return(new UserDTO
     {
         Address = user.Address?.Trim() ?? string.Empty,
         LastName = user.LastName?.Trim() ?? string.Empty,
         Name = user.Name?.Trim() ?? string.Empty,
         CreateDate = user.CreateDate,
         UpdateDate = user.UpdateDate,
         Id = user.Id
     });
 }
Exemple #28
0
        /// <summary>
        ///  Check if the user is watching the specified content
        ///     See: https://developer.atlassian.com/cloud/confluence/rest/#api-api-user-watch-content-contentId-get
        /// </summary>
        /// <param name="confluenceClient">IUserDomain to bind the extension method to</param>
        /// <param name="contentId">long with the ID for the content</param>
        /// <param name="userIdentifier">IUserIdentifier for the user (account id), null for the current user</param>
        /// <param name="cancellationToken">CancellationToken</param>
        /// <returns>bool</returns>
        public static async Task <bool> IsContentWatcher(this IUserDomain confluenceClient, long contentId, IUserIdentifier userIdentifier = null, CancellationToken cancellationToken = default)
        {
            if (contentId == 0)
            {
                throw new ArgumentNullException(nameof(contentId));
            }

            bool isCloudServer = await confluenceClient.IsCloudServer(cancellationToken);

            var userWatchContentUri = CreateUserWatchUri(confluenceClient, isCloudServer, userIdentifier, "content", contentId);

            confluenceClient.Behaviour.MakeCurrent();
            var response = await userWatchContentUri.GetAsAsync <HttpResponse <UserWatch> >(cancellationToken).ConfigureAwait(false);

            return(response.HandleErrors().IsWatching);
        }
Exemple #29
0
        /// <summary>
        ///  Remove the user from the list of users watching the specified content
        ///     See: https://developer.atlassian.com/cloud/confluence/rest/#api-api-user-watch-content-contentId-delete
        /// </summary>
        /// <param name="confluenceClient">IUserDomain to bind the extension method to</param>
        /// <param name="contentId">long with the ID for the content</param>
        /// <param name="userIdentifier">IUserIdentifier for the user (account id), null for the current user</param>
        /// <param name="cancellationToken">CancellationToken</param>
        public static async Task RemoveContentWatcher(this IUserDomain confluenceClient, long contentId, IUserIdentifier userIdentifier = null, CancellationToken cancellationToken = default)
        {
            if (contentId == 0)
            {
                throw new ArgumentNullException(nameof(contentId));
            }

            bool isCloudServer = await confluenceClient.IsCloudServer(cancellationToken);

            var userWatchContentUri = CreateUserWatchUri(confluenceClient, isCloudServer, userIdentifier, "content", contentId);

            confluenceClient.Behaviour.MakeCurrent();
            var response = await userWatchContentUri.DeleteAsync <HttpResponseWithError <Error> >(cancellationToken).ConfigureAwait(false);

            // Expect a 204, which is NoContent
            response.HandleStatusCode(HttpStatusCode.NoContent);
        }
Exemple #30
0
        /// <summary>
        ///  Get groups for the specified user, introduced with 6.6
        ///     See: https://developer.atlassian.com/cloud/confluence/rest/#api-api-user-memberof-get
        /// </summary>
        /// <param name="confluenceClient">IUserDomain to bind the extension method to</param>
        /// <param name="userIdentifier">IUserIdentifier</param>
        /// <param name="pagingInformation">PagingInformation</param>
        /// <param name="cancellationToken">CancellationToken</param>
        /// <returns>List with Groups</returns>
        public static async Task <IList <Group> > GetGroupMembershipsAsync(this IUserDomain confluenceClient, IUserIdentifier userIdentifier, PagingInformation pagingInformation = null, CancellationToken cancellationToken = default)
        {
            if (userIdentifier == null)
            {
                throw new ArgumentNullException(nameof(userIdentifier));
            }

            pagingInformation ??= new PagingInformation
            {
                Limit = 200,
                Start = 0
            };

            var groupUri = confluenceClient.ConfluenceApiUri
                           .AppendSegments("user", "memberof")
                           .ExtendQuery(new Dictionary <string, object> {
                {
                    "start", pagingInformation.Start
                },
                {
                    "limit", pagingInformation.Limit
                }
            });
            bool isCloudServer = await confluenceClient.IsCloudServer(cancellationToken);

            if (isCloudServer)
            {
                if (string.IsNullOrEmpty(userIdentifier.AccountId))
                {
                    throw new ArgumentNullException(nameof(userIdentifier));
                }
                groupUri = groupUri.ExtendQuery("accountId", userIdentifier.AccountId);
            }
            else
            {
                if (string.IsNullOrEmpty(userIdentifier.Username))
                {
                    throw new ArgumentNullException(nameof(userIdentifier));
                }
                groupUri = groupUri.ExtendQuery("username", userIdentifier.Username);
            }
            confluenceClient.Behaviour.MakeCurrent();
            var response = await groupUri.GetAsAsync <HttpResponse <Result <Group>, Error> >(cancellationToken).ConfigureAwait(false);

            return(response.HandleErrors()?.Results);
        }