private void PopulateUser(PageSubscriptionUser userInfo, XDoc userDoc)
        {
            var email = userDoc["email"].AsText;

            if (string.IsNullOrEmpty(email))
            {
                throw new UserException("no email for user");
            }
            userInfo.Email    = email;
            userInfo.Username = userDoc["fullname"].AsText.IfNullOrEmpty(userDoc["username"].AsText);
            var language = userDoc["language"].AsText;

            if (!string.IsNullOrEmpty(language))
            {
                userInfo.Culture = CultureUtil.GetNonNeutralCulture(language);
            }
            var timezone = userDoc["timezone"].AsText;

            if (!string.IsNullOrEmpty(timezone))
            {
                // only update timezone if the user has it defined
                userInfo.Timezone = timezone;
            }
            var perms = (userDoc["permissions.effective/operations"].AsText ?? "").Split(',');

            userInfo.IsAdmin = false;
            foreach (var perm in perms)
            {
                if ("ADMIN".EqualsInvariantIgnoreCase(perm.Trim()))
                {
                    userInfo.IsAdmin = true;
                }
            }
        }
        private Yield GetUser(uint userId, string wikiId, Result <PageSubscriptionUser> result)
        {
            XDoc userDoc = null;

            yield return(_deki.At("users", userId.ToString()).WithHeader("X-Deki-Site", "id=" + wikiId)
                         .Get(new Result <XDoc>()).Set(x => userDoc = x));

            var instance = GetInstanceInfo(wikiId);
            PageSubscriptionUser userInfo = instance.GetUserInfo(userId);

            PopulateUser(userInfo, userDoc);
            result.Return(userInfo);
        }