/* * * (c) Copyright Ascensio System SIA 2020 * * The MIT License (MIT) * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in all * copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. * */ using System; using System.Collections; using System.Collections.Generic; using System.IO; using System.Web; using System.Web.Mvc; using System.Web.Script.Serialization; using OnlineEditorsExampleMVC.Helpers; namespace OnlineEditorsExampleMVC.Models { public class FileModel { public string Mode { get; set; } public string Type { get; set; } public string FileUri { get { return DocManagerHelper.GetFileUri(FileName); } } public string FileName { get; set; } public string DocumentType { get { return FileUtility.GetFileType(FileName).ToString().ToLower(); } } public string Key { get { return ServiceConverter.GenerateRevisionId(DocManagerHelper.CurUserHostAddress() + "/" + FileName + "/" + File.GetLastWriteTime(DocManagerHelper.StoragePath(FileName, null)).GetHashCode()); } } public string CallbackUrl { get { return DocManagerHelper.GetCallback(FileName); } } public string GetDocConfig(HttpRequest request, UrlHelper url) { var ext = Path.GetExtension(FileName); var editorsMode = Mode ?? "edit"; var canEdit = DocManagerHelper.EditedExts.Contains(ext); var mode = canEdit && editorsMode != "view" ? "edit" : "view"; var config = new Dictionary { { "type", Type ?? "desktop" }, { "documentType", DocumentType }, { "document", new Dictionary { { "title", FileName }, { "url", FileUri }, { "fileType", ext.Trim('.') }, { "key", Key }, { "info", new Dictionary { { "author", "Me" }, { "created", DateTime.Now.ToShortDateString() } } }, { "permissions", new Dictionary { { "comment", editorsMode != "view" && editorsMode != "fillForms" && editorsMode != "embedded" && editorsMode != "blockcontent" }, { "download", true }, { "edit", canEdit && (editorsMode == "edit" || editorsMode == "filter") || editorsMode == "blockcontent" }, { "fillForms", editorsMode != "view" && editorsMode != "comment" && editorsMode != "embedded" && editorsMode != "blockcontent" }, { "modifyFilter", editorsMode != "filter" }, { "modifyContentControl", editorsMode != "blockcontent" }, { "review", editorsMode == "edit" || editorsMode == "review" } } } } }, { "editorConfig", new Dictionary { { "mode", mode }, { "lang", request.Cookies.GetOrDefault("ulang", "en") }, { "callbackUrl", CallbackUrl }, { "user", new Dictionary { { "id", request.Cookies.GetOrDefault("uid", "uid-1") }, { "name", request.Cookies.GetOrDefault("uname", "John Smith") } } }, { "embedded", new Dictionary { { "saveUrl", FileUri }, { "embedUrl", FileUri }, { "shareUrl", FileUri }, { "toolbarDocked", "top" } } }, { "customization", new Dictionary { { "about", true }, { "feedback", true }, { "goback", new Dictionary { { "url", url.Action("Index", "Home") } } } } } } } }; if (JwtManager.Enabled) { var token = JwtManager.Encode(config); config.Add("token", token); } return new JavaScriptSerializer().Serialize(config); } public void GetHistory(out string history, out string historyData) { var jss = new JavaScriptSerializer(); var histDir = DocManagerHelper.HistoryDir(DocManagerHelper.StoragePath(FileName, null)); history = null; historyData = null; if (DocManagerHelper.GetFileVersion(histDir) > 0) { var currentVersion = DocManagerHelper.GetFileVersion(histDir); var hist = new List>(); var histData = new Dictionary(); for (var i = 0; i <= currentVersion; i++) { var obj = new Dictionary(); var dataObj = new Dictionary(); var verDir = DocManagerHelper.VersionDir(histDir, i + 1); var key = i == currentVersion ? Key : File.ReadAllText(Path.Combine(verDir, "key.txt")); obj.Add("key", key); obj.Add("version", i); if (i == 0) { var infoPath = Path.Combine(histDir, "createdInfo.json"); if (File.Exists(infoPath)) { var info = jss.Deserialize>(File.ReadAllText(infoPath)); obj.Add("created", info["created"]); obj.Add("user", new Dictionary() { { "id", info["id"] }, { "name", info["name"] }, }); } } dataObj.Add("key", key); dataObj.Add("url", i == currentVersion ? FileUri : DocManagerHelper.GetPathUri(Directory.GetFiles(verDir, "prev.*")[0].Substring(HttpRuntime.AppDomainAppPath.Length))); dataObj.Add("version", i); if (i > 0) { var changes = jss.Deserialize>(File.ReadAllText(Path.Combine(DocManagerHelper.VersionDir(histDir, i), "changes.json"))); var change = ((Dictionary)((ArrayList)changes["changes"])[0]); obj.Add("changes", changes["changes"]); obj.Add("serverVersion", changes["serverVersion"]); obj.Add("created", change["created"]); obj.Add("user", change["user"]); var prev = (Dictionary)histData[(i - 1).ToString()]; dataObj.Add("previous", new Dictionary() { { "key", prev["key"] }, { "url", prev["url"] }, }); dataObj.Add("changesUrl", DocManagerHelper.GetPathUri(Path.Combine(DocManagerHelper.VersionDir(histDir, i), "diff.zip").Substring(HttpRuntime.AppDomainAppPath.Length))); } hist.Add(obj); histData.Add(i.ToString(), dataObj); } history = jss.Serialize(new Dictionary() { { "currentVersion", currentVersion }, { "history", hist } }); historyData = jss.Serialize(histData); } } } }