public static byte[] Serialize <T>(T Model) { var type = typeof(T); var ser = new IndexedDB.Serializer.Simple.SimpleConverter(type); return(ser.ToBytes(Model)); }
public string GetTemplateId(byte[] postData) { IndexedDB.Serializer.Simple.SimpleConverter <TemplateUpdateModel> converter = new IndexedDB.Serializer.Simple.SimpleConverter <TemplateUpdateModel>(); var model = converter.FromBytes(postData); return(model != null?model.Id.ToString() : ""); }
public static byte[] Serialize(object Model) { var type = Model.GetType(); var ser = new IndexedDB.Serializer.Simple.SimpleConverter(type); return(ser.ToBytes(Model)); }
public T Clone <T>() where T : SiteObject { IndexedDB.Serializer.Simple.SimpleConverter <T> converter = new IndexedDB.Serializer.Simple.SimpleConverter <T>(); var bytes = converter.ToBytes((T)this); return(converter.FromBytes(bytes)); }
// receive the site object... public bool Receive(Guid SiteId, ApiCall call) { var converter = new IndexedDB.Serializer.Simple.SimpleConverter <SyncObject>(); SyncObject sync = converter.FromBytes(call.Context.Request.PostData); //must do the user validation here... var website = Kooboo.Data.GlobalDb.WebSites.Get(SiteId); if (website == null) { website = InitWebSite(call.Context.Request.IP, SiteId, sync.SenderPort); } var sitedb = website.SiteDb(); var manager = sitedb.ClusterManager; if (manager != null) { var node = sitedb.SiteCluster.GetByIp(call.Context.Request.IP); if (node == null) { return(false); } manager.Receive(sync, node); } return(true); }
public void Push(ApiCall call) { //must do the user validation here... Guid SiteId = call.GetGuidValue("SiteId"); Guid Hash = call.GetGuidValue("hash"); if (Hash != default(Guid)) { var hashback = Kooboo.Lib.Security.Hash.ComputeGuid(call.Context.Request.PostData); if (hashback != Hash) { throw new Exception(Data.Language.Hardcoded.GetValue("Hash validation failed", call.Context)); } } if (SiteId != default(Guid)) { var website = Kooboo.Data.GlobalDb.WebSites.Get(SiteId); var sitedb = website.SiteDb(); var converter = new IndexedDB.Serializer.Simple.SimpleConverter <SyncObject>(); SyncObject sync = converter.FromBytes(call.Context.Request.PostData); SyncService.Receive(sitedb, sync); } else { throw new Exception(Data.Language.Hardcoded.GetValue("Website not found")); } }
//item push by remote client... public void Push(Guid SiteId, ApiCall call) { Guid Hash = call.GetValue <Guid>("hash"); Guid userid = default(Guid); if (call.Context.User != null) { userid = call.Context.User.Id; } if (Hash != default(Guid)) { var hashback = Kooboo.Lib.Security.Hash.ComputeGuid(call.Context.Request.PostData); if (hashback != Hash) { throw new Exception(Data.Language.Hardcoded.GetValue("Hash validation failed", call.Context)); } } var website = Kooboo.Data.GlobalDb.WebSites.Get(SiteId); var sitedb = website.SiteDb(); var converter = new IndexedDB.Serializer.Simple.SimpleConverter <SyncObject>(); SyncObject sync = converter.FromBytes(call.Context.Request.PostData); SyncService.Receive(sitedb, sync, null, userid); }
public virtual void ShareBatch(ApiCall call) { SiteDb siteDb = call.WebSite != null?call.WebSite.SiteDb() : null; var formreader = Kooboo.Lib.NETMultiplePart.FormReader.ReadForm(call.Context.Request.PostData); if (siteDb == null) { Guid siteId; if (!Guid.TryParse(formreader.FormData["SiteId"], out siteId)) { return; } var website = Kooboo.Data.GlobalDb.WebSites.Get(siteId); siteDb = website.SiteDb(); } if (siteDb == null) { return; } var tempFolder = Kooboo.Data.AppSettings.TempDataPath; var exportfile = ImportExport.ExportInter(siteDb); if (!File.Exists(exportfile)) { return; } var postdata = InitData(formreader, call); var zipbytes = IOHelper.ReadAllBytes(exportfile); postdata.Bytes = zipbytes; if (zipbytes.Length > AppSettings.MaxTemplateSize) { throw new Exception(Data.Language.Hardcoded.GetValue("Exceed max template size", call.Context)); } postdata.ByteHash = Kooboo.Lib.Security.Hash.ComputeGuid(zipbytes); Kooboo.IndexedDB.Serializer.Simple.SimpleConverter <TemplateDataModel> converter = new IndexedDB.Serializer.Simple.SimpleConverter <TemplateDataModel>(); var postbytes = converter.ToBytes(postdata); string url = UrlHelper.Combine(AppSettings.ThemeUrl, "/_api/receiver/template"); var response = HttpHelper.PostData(url, new Dictionary <string, string>(), postbytes); if (!response) { throw new Exception(Data.Language.Hardcoded.GetValue("Share template failed", call.Context)); } }
public static T Deserialize <T>(byte[] bytes) { var type = typeof(T); var ser = new IndexedDB.Serializer.Simple.SimpleConverter(type); var value = ser.FromBytes(bytes); if (value != null) { return((T)value); } return(default(T)); }
public bool Execute(SiteDb SiteDb, string JsonModel) { var item = Lib.Helper.JsonHelper.Deserialize <PostSyncObject>(JsonModel); //var stringcontent = Newtonsoft.Json.JsonConvert.SerializeObject(item.SyncObject); var converter = new IndexedDB.Serializer.Simple.SimpleConverter <SyncObject>(); var bytes = converter.ToBytes(item.SyncObject); Guid websiteid = item.RemoteSiteId; var hash = Lib.Security.Hash.ComputeGuid(bytes); string fullurl = item.RemoteUrl + "?" + DataConstants.SiteId + "=" + item.RemoteSiteId.ToString() + "&hash=" + hash.ToString(); return(Kooboo.Lib.Helper.HttpHelper.PostData(fullurl, null, bytes, item.UserName, item.Password)); }
public Dictionary <string, object> UpdateTemplate(string domain, byte[] postData, DynamicTableObject obj) { var oldTemplate = obj.Values; IndexedDB.Serializer.Simple.SimpleConverter <TemplateUpdateModel> converter = new IndexedDB.Serializer.Simple.SimpleConverter <TemplateUpdateModel>(); var model = converter.FromBytes(postData); var hash = Lib.Security.Hash.ComputeGuid(model.Bytes); var userId = oldTemplate["userId"]; if (hash != model.ByteHash || model.UserId.ToString() != userId.ToString()) { return(null); } oldTemplate["link"] = model.Link; oldTemplate["description"] = model.Description; oldTemplate["tags"] = model.Tags; oldTemplate["lastModified"] = DateTime.UtcNow; oldTemplate["lastModifiedTimeStamp"] = DateTime.UtcNow.Ticks; var existImages = new List <string>(); if (oldTemplate["images"] != null && !string.IsNullOrEmpty(oldTemplate["images"].ToString())) { var oldlist = Kooboo.Lib.Helper.JsonHelper.Deserialize <List <string> >(oldTemplate["images"].ToString()); var newlist = JsonHelper.Deserialize <List <string> >(model.Images); existImages = clearImagePath(oldlist, newlist); } var images = new List <ScreenshotImage>(); if (model.Bytes != null && model.Bytes.Length > 0) { Guid oldsiteid = model.Id; // there is a change of zip. File.WriteAllBytes(GetFilePath(model.Id.ToString()), model.Bytes); oldTemplate["size"] = model.Bytes.Length; // update to preview sites. var siteDb = ImportBinary(domain, model.Bytes, oldTemplate); if (model.NewImages.Count == 0 && existImages.Count() == 0) { images = GetScreenshotImages(siteDb); } // remove the old site. Sites.Service.WebSiteService.Delete(oldsiteid); } foreach (var image in model.NewImages) { images.Add(new ScreenshotImage { Base64 = image.Base64, FileName = Guid.NewGuid().ToString().Replace("-", "") + Kooboo.Lib.Helper.UrlHelper.FileExtension(image.FileName) }); } var imagelist = new List <string>(); foreach (var image in images) { string relativeurl = image.FileName; var filepath = GetImagePath(relativeurl); File.WriteAllBytes(filepath, image.Bytes); imagelist.Add(relativeurl); } existImages.AddRange(imagelist); oldTemplate["images"] = existImages.ToArray(); oldTemplate["thumbNail"] = existImages.Count > 0 ? existImages[0] : ""; return(oldTemplate); }
public Dictionary <string, object> UploadOldFormat(string domain, byte[] postData) { IndexedDB.Serializer.Simple.SimpleConverter <TemplateDataModel> converter = new IndexedDB.Serializer.Simple.SimpleConverter <TemplateDataModel>(); var model = converter.FromBytes(postData); var hash = Lib.Security.Hash.ComputeGuid(model.Bytes); if (hash != model.ByteHash || model.UserId == default(Guid) || model.Bytes.Length == 0) { return(null); } var dic = new Dictionary <string, object>(); dic["name"] = model.Name; dic["link"] = model.Link; dic["description"] = model.Description; dic["tags"] = model.Tags; dic["userId"] = model.UserId; var user = Data.GlobalDb.Users.Get(model.UserId); if (user != null) { dic["userName"] = user.FullName; } dic["lastModified"] = DateTime.UtcNow; dic["lastModifiedTimeStamp"] = DateTime.UtcNow.Ticks; dic["downloadCount"] = 0; dic["score"] = 0; dic["id"] = Guid.NewGuid().ToString(); var filePath = GetFilePath(dic["id"].ToString()); File.WriteAllBytes(filePath, model.Bytes); dic["size"] = model.Bytes.Length; var siteDb = ImportBinary(domain, model.Bytes, dic); Lib.Helper.IOHelper.EnsureDirectoryExists(ImagePath); var images = new List <ScreenshotImage>(); if (model.Images.Count() == 0) { images = GetScreenshotImages(siteDb); } else { foreach (var image in model.Images) { images.Add(new ScreenshotImage { Base64 = image.Base64, FileName = Guid.NewGuid().ToString().Replace("-", "") + Kooboo.Lib.Helper.UrlHelper.FileExtension(image.FileName) }); } } var imagelist = new List <string>(); foreach (var image in images) { string relativeurl = image.FileName; var filepath = GetImagePath(relativeurl); File.WriteAllBytes(filepath, image.Bytes); imagelist.Add(relativeurl); } dic["images"] = imagelist.ToArray(); dic["thumbNail"] = imagelist.Count > 0 ? imagelist[0] : ""; return(dic); }
public static object Deserialize(byte[] bytes, Type ObjectType) { var ser = new IndexedDB.Serializer.Simple.SimpleConverter(ObjectType); return(ser.FromBytes(bytes)); }
public void Update(ApiCall call) { var formResult = Kooboo.Lib.NETMultiplePart.FormReader.ReadForm(call.Context.Request.PostData); TemplateUpdateModel update = new TemplateUpdateModel(); update.UserId = call.Context.User.Id; if (formResult.FormData.ContainsKey("id")) { string strid = formResult.FormData["id"]; Guid id; if (System.Guid.TryParse(strid, out id)) { update.Id = id; } else { throw new Exception(Data.Language.Hardcoded.GetValue("Invalid package id", call.Context)); } } else { throw new Exception(Data.Language.Hardcoded.GetValue("Missing package id", call.Context)); } if (formResult.FormData.ContainsKey("category")) { update.Category = formResult.FormData["category"]; } if (formResult.FormData.ContainsKey("link")) { update.Link = formResult.FormData["link"]; } if (formResult.FormData.ContainsKey("description")) { update.Description = formResult.FormData["description"]; } if (formResult.FormData.ContainsKey("tags")) { update.Tags = formResult.FormData["tags"]; } if (formResult.FormData.ContainsKey("Images")) { update.Images = formResult.FormData["Images"]; } if (formResult.FormData.ContainsKey("IsPrivate")) { string strisprivae = formResult.FormData["IsPrivate"]; bool isprivate = false; bool.TryParse(strisprivae, out isprivate); if (isprivate) { update.OrganizationId = call.Context.User.CurrentOrgId; } else { update.OrganizationId = default(Guid); } } foreach (var item in formResult.Files) { string contenttype = item.ContentType; if (contenttype == null) { contenttype = "image"; } else { contenttype = contenttype.ToLower(); } if (contenttype.Contains("image")) { TemplateUserImages image = new TemplateUserImages(); image.FileName = item.FileName; image.Base64 = Convert.ToBase64String(item.Bytes); update.NewImages.Add(image); } else if (contenttype.Contains("zip")) { update.Bytes = item.Bytes; } } if (formResult.FormData.ContainsKey("defaultimg")) { string defaultimage = formResult.FormData["defaultimg"]; update.NewDefault = defaultimage; } if (formResult.FormData.ContainsKey("thumbnail")) { string defaultimage = formResult.FormData["thumbnail"]; update.NewDefault = defaultimage; } if (update.NewImages.Count() > 0) { if (formResult.FormData.ContainsKey("defaultfile")) { string defaultimg = formResult.FormData["defaultfile"]; int index = 0; if (int.TryParse(defaultimg, out index)) { if (update.NewImages.Count() > index) { update.NewImages[index].IsDefault = true; } } } } IndexedDB.Serializer.Simple.SimpleConverter <TemplateUpdateModel> converter = new IndexedDB.Serializer.Simple.SimpleConverter <TemplateUpdateModel>(); var allbytes = converter.ToBytes(update); string Url = Kooboo.Lib.Helper.UrlHelper.Combine(Kooboo.Data.AppSettings.ThemeUrl, "/_api/receiver/updatetemplate"); var response = HttpHelper.PostData(Url, null, allbytes); if (!response) { throw new Exception(Data.Language.Hardcoded.GetValue("Update template failed", call.Context)); } }