Ejemplo n.º 1
0
        public static byte[] Serialize <T>(T Model)
        {
            var type = typeof(T);
            var ser  = new IndexedDB.Serializer.Simple.SimpleConverter(type);

            return(ser.ToBytes(Model));
        }
Ejemplo n.º 2
0
        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() : "");
        }
Ejemplo n.º 3
0
        public static byte[] Serialize(object Model)
        {
            var type = Model.GetType();
            var ser  = new IndexedDB.Serializer.Simple.SimpleConverter(type);

            return(ser.ToBytes(Model));
        }
Ejemplo n.º 4
0
        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));
        }
Ejemplo n.º 5
0
        // 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);
        }
Ejemplo n.º 6
0
        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"));
            }
        }
Ejemplo n.º 7
0
        //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);
        }
Ejemplo n.º 8
0
        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));
            }
        }
Ejemplo n.º 9
0
        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));
        }
Ejemplo n.º 10
0
        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));
        }
Ejemplo n.º 11
0
        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);
        }
Ejemplo n.º 12
0
        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);
        }
Ejemplo n.º 13
0
        public static object Deserialize(byte[] bytes, Type ObjectType)
        {
            var ser = new IndexedDB.Serializer.Simple.SimpleConverter(ObjectType);

            return(ser.FromBytes(bytes));
        }
Ejemplo n.º 14
0
        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));
            }
        }