// Upload partial file private IEnumerable<FilesStatus> UploadPartialFile(string fileName, HttpContext context, IFileSystem fs, SelectionUtility selection) { if (context.Request.Files.Count != 1) throw new HttpRequestValidationException("Attempt to upload chunked file containing more than one fragment per request"); var fileUpload = context.Request.Files[0]; var inputStream = fileUpload.InputStream; var virtualPath = Url.Combine(selection.SelectedItem.Url, fileName); if (!IsFilenameTrusted(fileName)) { yield return new FilesStatus(virtualPath, 0) { error = "Unsafe filename" }; } else { using (var s = fs.OpenFile(virtualPath)) { var buffer = new byte[1024]; var l = inputStream.Read(buffer, 0, 1024); while (l > 0) { s.Write(buffer, 0, l); l = inputStream.Read(buffer, 0, 1024); } s.Flush(); s.Close(); } yield return new FilesStatus(virtualPath, fileUpload.ContentLength); } }
public object PostNotes(HttpContextBase context, Dictionary<string, object> body) { var item = new SelectionUtility(context, engine).SelectedItem; item["CollaborationNote"] = body["note"]; engine.Persister.Save(item); return new { Success = true }; }
public object Messages(HttpContextBase context) { var selectedItem = new SelectionUtility(context, engine).ParseSelectionFromRequest() ?? engine.Persister.Get(engine.Host.DefaultSite.RootItemID); var ctx = CollaborationContext.Create(DateTime.MinValue, selectedItem, context.User); return new { Messages = messages.GetMessages(ctx).ToList() }; }
public void ProcessRequest(HttpContext context) { var engine = N2.Context.Current; var selection = new SelectionUtility(context.Request, engine); engine.Resolve<Tracker>().UpdateReferencesTo(selection.SelectedItem); context.Response.ContentType = "application/json"; context.Response.Write(new { success = true }.ToJson()); }
public virtual ContextData GetInterfaceContextData(HttpContextBase context, SelectionUtility selection) { var item = selection.ParseSelectionFromRequest(); Url selectedUrl = context.Request["selectedUrl"]; if (item == null && selectedUrl != null) item = selection.ParseUrl(selectedUrl); var data = new ContextData(); if (item != null) { var adapter = engine.GetContentAdapter<NodeAdapter>(item); data.CurrentItem = adapter.GetTreeNode(item); data.ExtendedInfo = CreateExtendedContextData(item, resolveVersions: true); var l = adapter.GetLanguage(item); if (l != null) data.Language = new ContextLanguage { IconClass = "sprite " + (l.LanguageCode.Split('-').LastOrDefault() ?? string.Empty).ToLower(), LanguageCode = l.LanguageCode, LanguageTitle = l.LanguageTitle }; data.Flags = adapter.GetNodeFlags(item).ToList(); } else data.Flags = new List<string>(); var mangementUrl = "{ManagementUrl}".ResolveUrlTokens(); if (!selectedUrl.IsEmpty()) { data.ReturnUrl = HttpUtility.UrlDecode(selectedUrl["returnUrl"]); var isOrganizing = selectedUrl["edit"] == "drag"; if (selectedUrl.Path.StartsWith(mangementUrl, StringComparison.InvariantCultureIgnoreCase)) { data.Flags.Add("Management"); data.Flags.Add(selectedUrl.Path.Substring(mangementUrl.Length).ToUrl().PathWithoutExtension.Replace("/", "")); if (isOrganizing) data.Flags.Add("Organize"); } else if (isOrganizing) { data.Flags.Add("Management"); data.Flags.Add("Organize"); } } if (new[] { "MyselfRoot", "ContentEditRecursive", "ContentTemplatesDefault", "ContentWizardDefault", "UsersUsers" }.Intersect(data.Flags).Any() == false) data.Flags.Add("ContentPages"); data.Actions = CreateActions(context); var collaborationContext = CollaborationContext.Create(engine.Resolve<IProfileRepository>(), item, context); data.Messages = engine.Resolve<N2.Edit.Collaboration.ManagementMessageCollector>().GetMessages(collaborationContext).ToList(); data.Flags.AddRange(engine.Resolve<N2.Edit.Collaboration.ManagementFlagCollector>().GetFlags(collaborationContext)); if (ContextBuilt != null) ContextBuilt(this, new ContextBuiltEventArgs { Data = data }); return data; }
private void NotifyEditing(IEngine engine, HttpContextWrapper context) { var selection = new SelectionUtility(context, engine); if (Convert.ToBoolean(context.Request["changes"])) engine.AddActivity(new ManagementActivity { Operation = "Edit", PerformedBy = context.User.Identity.Name, ID = selection.SelectedItem.ID, Path = selection.SelectedItem.Path }); var activities = ManagementActivity.GetActivity(engine, selection.SelectedItem); context.Response.ContentType = "application/json"; context.Response.Write(ManagementActivity.ToJson(activities)); }
protected override void OnInit(EventArgs e) { Selection = Page.GetSelection(); base.OnInit(e); InitMaxFileSize(); Page.JQueryUi(); }
private void NotifyEditing(IEngine engine, HttpContextWrapper context) { var selection = new SelectionUtility(context, engine); if (Convert.ToBoolean(context.Request["changes"])) engine.AddActivity(new ManagementActivity { Operation = "Edit", PerformedBy = context.User.Identity.Name, ID = selection.SelectedItem.ID, Path = selection.SelectedItem.Path }); var activities = ManagementActivity.GetActivity(engine, selection.SelectedItem); var messages = engine.Resolve<N2.Edit.Collaboration.ManagementMessageCollector>() .GetMessages(CollaborationContext.Create(engine.Resolve<IProfileRepository>(), selection.SelectedItem, context)) .ToList(); context.Response.ContentType = "application/json"; context.Response.Write(ManagementActivity.ToJson(activities, messages)); }
private void NotifyViewing(IEngine engine, HttpContextWrapper context) { var selection = new SelectionUtility(context, engine); if (selection.SelectedItem != null) engine.AddActivity(new ManagementActivity { Operation = "View", PerformedBy = context.User.Identity.Name, ID = selection.SelectedItem.ID, Path = selection.SelectedItem.Path }); context.Response.WriteJson(new { Messages = engine.Resolve<ManagementMessageCollector>() .GetMessages(CollaborationContext.Create(engine.Resolve<IProfileRepository>(), selection.SelectedItem, context)) .ToList() }); }
public PluginContext(SelectionUtility selection, ContentItem startItem, ContentItem rootItem, ControlPanelState state, IEngine engine, HttpContextBase httpContext) { Selection = selection; State = state; Selected = selection.SelectedItem; Memorized = selection.MemorizedItem; Start = startItem; Root = rootItem; Engine = engine; HttpContext = httpContext; }
// Upload entire file private IEnumerable<FilesStatus> UploadWholeFile(HttpContext context, IFileSystem fs, SelectionUtility selection) { for (int i = 0; i < context.Request.Files.Count; i++) { var file = context.Request.Files[i]; var fileName = Path.GetFileName(file.FileName); var virtualPath = Url.Combine(((IFileSystemNode)selection.SelectedItem).LocalUrl, fileName); fs.WriteFile(virtualPath, file.InputStream); yield return new FilesStatus(virtualPath, file.ContentLength); } }
public static SelectionUtility GetSelection(this Page page) { if (page is Web.EditPage) { return((page as Web.EditPage).Selection); } var selection = page.Items["SelectionUtility"] as SelectionUtility; if (selection == null) { page.Items["SelectionUtility"] = selection = new SelectionUtility(page, N2.Context.Current); } return(selection); }
public void Handle(HttpContextBase context) { string tagName = context.Request["tagName"]; string term = context.Request["term"]; var selection = new SelectionUtility(context.Request, engine); var startPage = engine.Content.Traverse.ClosestStartPage(selection.SelectedItem); var allTags = engine.Resolve<CacheWrapper>() .GetOrCreate<IEnumerable<string>>("Tags" + startPage, () => tags.FindTags(startPage, tagName)); var json = allTags .Where(t => t.StartsWith(term, StringComparison.InvariantCultureIgnoreCase)) .Select(t => new { label = t }) .ToJson(); context.Response.ContentType = "application/json"; context.Response.Write(json); }
public object Notes(HttpContextBase context, int? skip, int? take) { var item = new SelectionUtility(context, engine).ParseSelectionFromRequest(); if (item != null) { return new { Notes = item["CollaborationNote"] != null ? new[] { item["CollaborationNote"] } : new object[0] }; } else { var items = engine.Persister.Repository.Find(Parameter.IsNotNull("CollaborationNote").Detail().Skip(skip ?? 0).Take(take ?? 1000)); return new { AnnotatedItems = items.Select(ci => new { ci.ID, ci.Title, ci.Url, ci.IconUrl, ci.IconClass, Notes = new [] { ci["CollaborationNote"] } }).ToList() }; } }
public void ProcessRequest(HttpContext context) { var request = context.Request; var ticket = FormsAuthentication.Decrypt(request["ticket"]); if (ticket.Expired) throw new N2.N2Exception("Upload ticket expired"); if(!ticket.Name.StartsWith("SecureUpload-")) throw new N2.N2Exception("Unknown ticket"); SelectionUtility selection = new SelectionUtility(request, N2.Context.Current); if (request.Files.Count > 0) { var fs = N2.Context.Current.Resolve<IFileSystem>(); foreach (string key in request.Files.Keys) { var file = request.Files[key]; fs.WriteFile(Url.Combine(selection.SelectedItem.Url, file.FileName), file.InputStream); } } }
public void ProcessRequest(HttpContext context) { context.Response.AddHeader("Pragma", "no-cache"); context.Response.AddHeader("Cache-Control", "private, no-cache"); ValidateTicket(context.Request["ticket"]); SelectionUtility selection = new SelectionUtility(context, N2.Context.Current); var fs = N2.Context.Current.Resolve<IFileSystem>(); List<FilesStatus> statuses; var headers = context.Request.Headers; if (string.IsNullOrEmpty(headers["X-File-Name"])) { statuses = UploadWholeFile(context, fs, selection).ToList(); } else { statuses = UploadPartialFile(headers["X-File-Name"], context, fs, selection).ToList(); } WriteJsonIframeSafe(context, statuses); }
public static SelectionUtility GetSelectionUtility(this HttpContextBase context, IEngine engine = null) { var selection = context.Items["CachedSelectionUtility"] as SelectionUtility; if (selection == null) context.Items["CachedSelectionUtility"] = selection = new SelectionUtility(context, engine ?? Context.Current); return selection; }
public static SelectionUtility GetSelection(this Page page) { if (page is Web.EditPage) return (page as Web.EditPage).Selection; var selection = page.Items["SelectionUtility"] as SelectionUtility; if(selection == null) page.Items["SelectionUtility"] = selection = new SelectionUtility(page, N2.Context.Current); return selection; }
public object GetMessages(HttpContextBase context, SelectionUtility selection) { var messageContext = new Edit.Collaboration.CollaborationContext { SelectedItem = selection.ParseSelectionFromRequest(), User = context.User } .ParseLastDismissed(context.Request["lastDismissed"]); return new { Messages = engine.Resolve<N2.Edit.Collaboration.ManagementMessageCollector>().GetMessages(messageContext).ToList() }; }
private void Organize(HttpContextBase context, SelectionUtility selection) { var navigator = engine.Resolve<Navigator>(); var persister = engine.Persister; var integrity = engine.IntegrityManager; var versions = engine.Resolve<IVersionManager>(); var versionRepository = engine.Resolve<ContentVersionRepository>(); string versionIndex = selection.RequestValueAccessor(PathData.VersionIndexQueryKey); string versionKey = selection.RequestValueAccessor(PathData.VersionKeyQueryKey); var path = PartsExtensions.EnsureDraft(versions, versionRepository, versionIndex, versionKey, selection.SelectedItem); ContentItem item = path.CurrentItem; ContentItem page = path.CurrentPage; item.ZoneName = selection.RequestValueAccessor("zone"); var beforeItem = PartsExtensions.GetBeforeItem(navigator, selection.RequestValueAccessor, page); ContentItem parent; if (beforeItem != null) { parent = beforeItem.Parent; int newIndex = parent.Children.IndexOf(beforeItem); ThrowUnlessNull(integrity.GetMoveException(item, parent)); Utility.Insert(item, parent, newIndex); } else { parent = PartsExtensions.GetBelowItem(navigator, selection.RequestValueAccessor, page); ThrowUnlessNull(integrity.GetMoveException(item, parent)); Utility.Insert(item, parent, parent.Children.Count); } Utility.UpdateSortOrder(parent.Children); versionRepository.Save(page); }
private void NotifyViewing(IEngine engine, HttpContextWrapper context) { var selection = new SelectionUtility(context, engine); if (selection.SelectedItem != null) engine.AddActivity(new ManagementActivity { Operation = "View", PerformedBy = context.User.Identity.Name, ID = selection.SelectedItem.ID, Path = selection.SelectedItem.Path }); }