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 } }); }
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 }, }); }
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 } }); }