private static BanBE ReadBanXml(XDoc doc) { BanBE b = new BanBE(); b.BanAddresses = new List <string>(); b.BanUserIds = new List <uint>(); try { b.Reason = doc["description"].AsText; b.RevokeMask = PermissionsBL.MaskFromPermissionList(PermissionsBL.PermissionListFromString(doc["permissions.revoked/operations"].AsText ?? string.Empty)); b.LastEdit = DateTime.UtcNow; b.Expires = doc["date.expires"].AsDate; b.ByUserId = DekiContext.Current.User.ID; foreach (XDoc val in doc["ban.addresses/address"]) { if (!val.IsEmpty) { b.BanAddresses.Add(val.AsText); } } foreach (XDoc val in doc["ban.users/user"]) { uint?id = val["@id"].AsUInt; if (id != null) { b.BanUserIds.Add(id ?? 0); } } } catch (ResourcedMindTouchException) { throw; } catch (Exception x) { throw new MindTouchInvalidOperationException(x.Message, x); } return(b); }
public Yield PostUsersAllowed(DreamContext context, DreamMessage request, Result <DreamMessage> response) { var permissionMask = context.GetParam <ulong>("mask", 0); var operationList = context.GetParam("operations", ""); var user = GetUserFromUrlMustExist(); var verbose = context.GetParam("verbose", true); var invert = context.GetParam("invert", false); // Use comma separated permission list or permissionmask from request. var permissions = Permissions.NONE; if (permissionMask != 0) { permissions = (Permissions)permissionMask; } // Convert operation list to mask combined with provided mask if (!string.IsNullOrEmpty(operationList)) { try { permissions |= (Permissions)PermissionsBL.MaskFromPermissionList(PermissionsBL.PermissionListFromString(operationList)); } catch { throw new UserOperationListInvalidArgumentException(); } } IEnumerable <ulong> pageIds; var textOutput = false; if (request.HasDocument) { if (!request.ToDocument().HasName("pages")) { throw new UserExpectedRootNodePagesInvalidDocumentException(); } pageIds = from pageIdXml in request.ToDocument()["page/@id"] let pageId = pageIdXml.AsULong where pageId.HasValue select pageId.Value; } else if (verbose) { throw new UserPageFilterVerboseNotAllowedException(); } else if (!request.ContentType.Match(MimeType.TEXT)) { throw new UserPageFilterInvalidInputException(); } else { textOutput = true; pageIds = request.ToText().CommaDelimitedToULong(); } IEnumerable <ulong> filtered; var allowedPages = PermissionsBL.FilterDisallowed(user, pageIds, false, out filtered, permissions); if (textOutput) { var output = invert ? filtered.ToCommaDelimitedString() : allowedPages.ToCommaDelimitedString(); response.Return(DreamMessage.Ok(MimeType.TEXT, output ?? string.Empty)); } else { var responseDoc = new XDoc("pages"); if (invert) { foreach (var pageId in filtered) { responseDoc.Start("page").Attr("id", pageId).End(); } } else if (allowedPages.Any()) { if (verbose) { foreach (var page in PageBL.GetPagesByIdsPreserveOrder(allowedPages)) { responseDoc.Add(PageBL.GetPageXml(page, null)); } } else { foreach (var pageId in allowedPages) { responseDoc.Start("page").Attr("id", pageId).End(); } } } response.Return(DreamMessage.Ok(responseDoc)); } yield break; }