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); }