public JObject registerUser(JObject request)
        {
            //Verify user details
            request.TryGetValue("username", out JToken usernameValue);
            request.TryGetValue("password", out JToken passwordValue);
            if (usernameValue == null || passwordValue == null || usernameValue.Type == JTokenType.Null || passwordValue.Type == JTokenType.Null)
            {
                return(Templates.MissingArguments("username, password"));
            }
            string username = usernameValue.ToString();
            string password = passwordValue.ToString();

            //Verify username
            if (!Misc.verifyUsernameLength(username) || !Misc.verifyUsernameRegex(username))
            {
                return(Templates.InvalidUsername);
            }


            //Check if password is a SHA-512 hash.
            //This checks whether the password string is the correct length for a SHA-512 hash, and if it is a proper hexadecimal number.
            //It's possible for people directly calling the API to create a user with a password that wasn't salted with their username (should we fix this?), but I doubt anyone would do that.
            //Also regex is weird and I do not like it.
            if (password.Length != 128 && !System.Text.RegularExpressions.Regex.IsMatch(password, @"\A\b[0-9a-fA-F]+\b\Z"))
            {
                return(Templates.InvalidPassword);
            }

            //Check if username already exists
            if (GetObject <User>(username, "Username") != null)
            {
                return(Templates.AlreadyExists(username));
            }

            //Create user
            long token = (long)DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1)).TotalSeconds;
            User user  = new User(username, password, token, UserPermission.User);

            user.Upload(Connection);

            //Create response object
            JObject response = new JObject()
            {
                { "reason", null },
                { "responseData", new JObject()
                  {
                      { "userToken", (long)DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1)).TotalSeconds },
                      { "permissionLevel", 0 }
                  } }
            };

            return(response);
        }
        public JObject updateProduct(JObject request)
        {
            //Validate arguments
            string productID;
            string newProductID = null;
            string categoryID   = null;
            string manufacturer = null;
            string extension    = null;

            byte[]  imageData    = null;
            JObject names        = null;
            JObject descriptions = null;
            JObject newImage     = null;

            request.TryGetValue("productID", out JToken idValue);
            request.TryGetValue("newProductID", out JToken newIDValue);
            request.TryGetValue("categoryID", out JToken categoryIDValue);
            request.TryGetValue("manufacturer", out JToken manufacturerValue);
            request.TryGetValue("name", out JToken nameValue);
            request.TryGetValue("description", out JToken descriptionValue);
            request.TryGetValue("image", out JToken imageValue);
            if (idValue == null || idValue.Type != JTokenType.String)
            {
                return(Templates.MissingArguments("productID"));
            }
            else
            {
                productID = idValue.ToObject <string>();
                if (productID == "default")
                {
                    return(Templates.InvalidArgument("categoryID"));
                }
            }
            if (newIDValue != null && newIDValue.Type == JTokenType.String)
            {
                newProductID = newIDValue.ToObject <string>();
            }
            if (categoryIDValue != null && categoryIDValue.Type == JTokenType.String)
            {
                categoryID = categoryIDValue.ToObject <string>();
            }
            if (manufacturerValue != null && manufacturerValue.Type == JTokenType.String)
            {
                manufacturer = manufacturerValue.ToObject <string>();
            }
            if (nameValue != null && nameValue.Type == JTokenType.Object)
            {
                names = nameValue.ToObject <JObject>();
            }
            if (descriptionValue != null && descriptionValue.Type == JTokenType.Object)
            {
                descriptions = descriptionValue.ToObject <JObject>();
            }
            if (imageValue != null && imageValue.Type == JTokenType.Object)
            {
                newImage = imageValue.ToObject <JObject>();
                newImage.TryGetValue("data", out JToken dataValue);
                newImage.TryGetValue("extension", out JToken extensionValue);
                if (extensionValue != null && extensionValue.Type == JTokenType.String)
                {
                    extension = extensionValue.ToObject <string>();
                    if (!Image.ImageFormats.Contains(extension))
                    {
                        return(Templates.InvalidArgument("extension"));
                    }
                }
                if (dataValue != null && dataValue.Type == JTokenType.String)
                {
                    imageData = (byte[])dataValue;
                }
            }

            //Get product, if it exists
            Product product = GetObject <Product>(productID);

            if (product == null)
            {
                return(Templates.NoSuchProduct(productID));
            }
            //If a new ID was given, check if it exists first.
            Product newProduct = GetObject <Product>(newProductID);

            if (newProduct != null)
            {
                return(Templates.AlreadyExists(productID));
            }

            ///////////////Image
            //Edit image if needed;
            Image image = product.GetImage(Connection);

            if (newImage != null)
            {
                string oldID = image.Id;
                if (image.Id == "default")
                {
                    image = new Image(product.Id + "_image", image.Data, image.Extension);
                }
                if (extension != null)
                {
                    image.Extension = extension;
                }
                if (imageData != null)
                {
                    image.Data = imageData;
                }

                if (oldID != image.Id)
                {
                    image.Upload(Connection);
                    product.UpdateTrace();
                    product.Image = image.Id;
                    product.Update(Connection);
                }
                else
                {
                    image.Update(Connection);
                }
            }

            ///////////////Name
            //Edit the LanguageItem if needed;
            LanguageItem name = product.GetName(Connection);

            if (names != null)
            {
                if (names.TryGetValue("en", out JToken enValue))
                {
                    if (enValue.Type == JTokenType.String)
                    {
                        name.en = enValue.ToObject <string>();
                    }
                }
                if (names.TryGetValue("nl", out JToken nlValue))
                {
                    if (nlValue.Type == JTokenType.String)
                    {
                        name.nl = nlValue.ToObject <string>();
                    }
                }
                if (names.TryGetValue("ar", out JToken arValue))
                {
                    if (arValue.Type == JTokenType.String)
                    {
                        name.ar = arValue.ToObject <string>();
                    }
                }
                name.Update(Connection);
            }

            ///////////////Description
            //Edit the LanguageItem if needed;
            LanguageItem description = product.GetDescription(Connection);

            if (descriptions != null)
            {
                if (descriptions.TryGetValue("en", out JToken enValue))
                {
                    if (enValue.Type == JTokenType.String)
                    {
                        description.en = enValue.ToObject <string>();
                    }
                }
                if (descriptions.TryGetValue("nl", out JToken nlValue))
                {
                    if (nlValue.Type == JTokenType.String)
                    {
                        description.nl = nlValue.ToObject <string>();
                    }
                }
                if (descriptions.TryGetValue("ar", out JToken arValue))
                {
                    if (arValue.Type == JTokenType.String)
                    {
                        description.ar = arValue.ToObject <string>();
                    }
                }
                description.Update(Connection);
            }

            //If a new ID was specified, change the product ID.
            if (newProductID != null)
            {
                image.Id = newProductID + "_image";
                image.Update(Connection);
                product.Image = image.Id;
                name.Id       = newProductID + "_name";
                name.Update(Connection);
                description.Id = newProductID + "_description";
                description.Update(Connection);
                product.Name = name.Id;
                product.UpdateTrace();
                product.Id = newProductID;
            }

            ///////////////Product
            //If a new category was specified, check if it exists. If it does, change the product category
            if (categoryID != null)
            {
                ProductCategory category = GetObject <ProductCategory>(categoryID);
                if (category == null)
                {
                    return(Templates.NoSuchProductCategory(categoryID));
                }
                else
                {
                    product.Category = categoryID;
                }
            }

            //If a new manufacturer was specified, change it.
            if (manufacturer != null)
            {
                product.Manufacturer = manufacturer;
            }

            product.Update(Connection);

            //Create response
            return(new JObject()
            {
                { "reason", null },
                { "success", true }
            });
        }
Exemple #3
0
        public JObject addProduct(JObject request)
        {
            //Get arguments
            string productID;
            string manufacturer;
            string categoryID;

            request.TryGetValue("productID", out JToken productIDValue);
            request.TryGetValue("categoryID", out JToken categoryIDValue);
            request.TryGetValue("manufacturer", out JToken manufacturerValue);
            request.TryGetValue("description", out JToken descriptionValue);
            request.TryGetValue("name", out JToken nameValue);

            // Verify presence of arguments
            List <string> failedVerifications = new List <string>();

            if (productIDValue == null)
            {
                failedVerifications.Add("productID");
            }
            if (categoryIDValue == null)
            {
                failedVerifications.Add("categoryID");
            }
            if (manufacturerValue == null)
            {
                failedVerifications.Add("manufacturer");
            }
            if (nameValue == null)
            {
                failedVerifications.Add("name");
            }

            if (failedVerifications.Any())
            {
                return(Templates.MissingArguments(failedVerifications.ToArray()));
            }

            // Verify arguments
            if (productIDValue.Type != JTokenType.String)
            {
                failedVerifications.Add("productID");
            }
            if (categoryIDValue.Type != JTokenType.String)
            {
                failedVerifications.Add("categoryID");
            }
            if (manufacturerValue.Type != JTokenType.String)
            {
                failedVerifications.Add("manufacturer");
            }
            if (nameValue.Type != JTokenType.Object)
            {
                failedVerifications.Add("name");
            }

            if (failedVerifications.Any())
            {
                return(Templates.InvalidArguments(failedVerifications.ToArray()));
            }

            // Prepare values
            productID    = productIDValue.ToObject <string>();
            manufacturer = manufacturerValue.ToObject <string>();
            categoryID   = categoryIDValue.ToObject <string>();

            // Get image
            request.TryGetValue("image", out JToken imageValue);
            string extension = null;

            byte[] imageData = null;
            if (imageValue != null && imageValue.Type == JTokenType.Object)
            {
                JObject image = imageValue.ToObject <JObject>();
                image.TryGetValue("data", out JToken dataValue);
                image.TryGetValue("extension", out JToken extensionValue);
                if (extensionValue != null && extensionValue.Type == JTokenType.String &&
                    dataValue != null && dataValue.Type == JTokenType.String)
                {
                    extension = extensionValue.ToObject <string>();
                    imageData = (byte[])dataValue;
                    if (!Image.ImageFormats.Contains(extension))
                    {
                        return(Templates.InvalidArgument("extension"));
                    }
                }
                else
                {
                    return(Templates.MissingArguments("data, extension"));
                }
            }

            // Get languages
            string  en;
            string  nl    = null;
            string  ar    = null;
            JObject names = nameValue.ToObject <JObject>();

            names.TryGetValue("en", out JToken nameEnValue);
            names.TryGetValue("nl", out JToken nameNlValue);
            names.TryGetValue("ar", out JToken nameArValue);
            if (nameEnValue != null && nameEnValue.Type == JTokenType.String)
            {
                en = names["en"].ToObject <string>();
            }
            else
            {
                return(Templates.MissingArguments("name: en"));
            }
            if (nameNlValue != null && nameNlValue.Type == JTokenType.String)
            {
                nl = names["nl"].ToObject <string>();
            }
            if (nameArValue != null && nameArValue.Type == JTokenType.String)
            {
                ar = names["ar"].ToObject <string>();
            }
            LanguageItem name = new LanguageItem(productID + "_name", en, nl, ar);

            LanguageItem description;

            if (descriptionValue != null && descriptionValue.Type == JTokenType.Object)
            {
                //Get description
                JObject desc = descriptionValue.ToObject <JObject>();
                desc.TryGetValue("en", out JToken descEnValue);
                desc.TryGetValue("nl", out JToken descNlValue);
                desc.TryGetValue("ar", out JToken descArValue);
                if (descEnValue != null && descEnValue.Type == JTokenType.String)
                {
                    en = desc["en"].ToObject <string>();
                }
                else
                {
                    return(Templates.MissingArguments("description: en"));
                }
                if (descNlValue != null && descNlValue.Type == JTokenType.String)
                {
                    nl = desc["nl"].ToObject <string>();
                }
                if (descArValue != null && descArValue.Type == JTokenType.String)
                {
                    ar = desc["ar"].ToObject <string>();
                }
                description = new LanguageItem(productID + "_description", en, nl, ar);
            }
            else
            {
                description = new LanguageItem(productID + "_description", null);
            }

            //Check if product already exists
            Product product = GetObject <Product>(productID);

            if (product != null)
            {
                return(Templates.AlreadyExists(productID));
            }

            //Check if category exists
            ProductCategory category = GetObject <ProductCategory>(categoryID);

            if (category == null)
            {
                return(Templates.NoSuchProductCategory(categoryID));
            }

            //Create product, languageItem, image
            name.Upload(Connection);
            description.Upload(Connection);
            if (imageData != null)
            {
                Image image = new Image(productID + "_image", imageData, extension);
                image.Upload(Connection);
                product = new Product(productID, manufacturer, categoryID, productID + "_name", productID + "_description", image.Id);
            }
            else
            {
                product = new Product(productID, manufacturer, categoryID, productID + "_name", productID + "_description");
            }
            product.Upload(Connection);

            //Create response
            return(new JObject()
            {
                { "reason", null },
            });
        }
Exemple #4
0
        public JObject addProductCategory(JObject request)
        {
            //Get arguments
            string categoryID;

            request.TryGetValue("categoryID", out JToken categoryIDValue);
            request.TryGetValue("name", out JToken nameValue);
            if (categoryIDValue == null || categoryIDValue.Type != JTokenType.String ||
                nameValue == null || nameValue.Type != JTokenType.Object
                )
            {
                return(Templates.MissingArguments("categoryID, name"));
            }
            else
            {
                categoryID = categoryIDValue.ToObject <string>();
                if (categoryID == "default" || categoryID == "uncategorized")
                {
                    return(Templates.InvalidArgument("categoryID"));
                }
            }

            //Get languages
            string  en;
            string  nl    = null;
            string  ar    = null;
            JObject names = nameValue.ToObject <JObject>();

            names.TryGetValue("en", out JToken enValue);
            names.TryGetValue("nl", out JToken nlValue);
            names.TryGetValue("ar", out JToken arValue);
            if (enValue != null && enValue.Type == JTokenType.String)
            {
                en = names["en"].ToObject <string>();
            }
            else
            {
                return(Templates.MissingArguments("en"));
            }
            if (nlValue != null && nlValue.Type == JTokenType.String)
            {
                nl = names["nl"].ToObject <string>();
            }
            if (arValue != null && arValue.Type == JTokenType.String)
            {
                ar = names["ar"].ToObject <string>();
            }


            //Check if category already exists
            ProductCategory category = GetObject <ProductCategory>(categoryID);

            if (category != null)
            {
                return(Templates.AlreadyExists(categoryID));
            }

            //Create category, languageitem
            LanguageItem item = new LanguageItem(categoryID + "_name", en, nl, ar);

            item.Upload(Connection);
            category = new ProductCategory(categoryID, item.Id);
            category.Upload(Connection);

            //Create response
            return(new JObject()
            {
                { "reason", null },
                { "success", true }
            });
        }
        public JObject updateProductCategory(JObject request)
        {
            //Validate arguments
            string  categoryID;
            string  newCategoryID = null;
            JObject names         = null;

            request.TryGetValue("categoryID", out JToken categoryIDValue);
            request.TryGetValue("newCategoryID", out JToken newCategoryIDValue);
            request.TryGetValue("name", out JToken nameValue);
            if (categoryIDValue == null || categoryIDValue.Type != JTokenType.String)
            {
                return(Templates.MissingArguments("categoryID"));
            }
            else
            {
                categoryID = categoryIDValue.ToObject <string>();
                if (categoryID == "default" || categoryID == "uncategorized")
                {
                    return(Templates.InvalidArgument("categoryID"));
                }
            }
            if (newCategoryIDValue != null && newCategoryIDValue.Type == JTokenType.String)
            {
                newCategoryID = newCategoryIDValue.ToObject <string>();
            }
            if (nameValue != null && nameValue.Type == JTokenType.Object)
            {
                names = nameValue.ToObject <JObject>();
            }

            //Get product, if it exists
            ProductCategory category = GetObject <ProductCategory>(categoryID);

            if (category == null)
            {
                return(Templates.NoSuchProductCategory(categoryID));
            }

            ///////////////LanguageItem
            //Edit the LanguageItem if needed;
            LanguageItem item = category.GetName(Connection);

            if (names != null)
            {
                if (names.TryGetValue("en", out JToken enValue))
                {
                    if (enValue.Type == JTokenType.String)
                    {
                        item.en = enValue.ToObject <string>();
                    }
                }
                if (names.TryGetValue("nl", out JToken nlValue))
                {
                    if (nlValue.Type == JTokenType.String)
                    {
                        item.nl = nlValue.ToObject <string>();
                    }
                }
                if (names.TryGetValue("ar", out JToken arValue))
                {
                    if (arValue.Type == JTokenType.String)
                    {
                        item.ar = arValue.ToObject <string>();
                    }
                }
                item.Update(Connection);
            }

            //If a new product ID was specified, check if it already exists. If it doesn't, change the product ID.
            if (newCategoryID != null)
            {
                ProductCategory newProduct = GetObject <ProductCategory>(newCategoryID);
                if (newProduct != null)
                {
                    return(Templates.AlreadyExists(categoryID));
                }
                else
                {
                    item.Id = newCategoryID + "_name";
                    item.Update(Connection);
                    category.Name = item.Id;
                    category.UpdateTrace();
                    category.Id = newCategoryID;
                }
            }

            category.Update(Connection);

            //Create response
            return(new JObject()
            {
                { "reason", null },
                { "success", true }
            });
        }