diff --git a/src/main/java/tech/nevets/vcardgen/VCard.java b/src/main/java/tech/nevets/vcardgen/Card.java similarity index 97% rename from src/main/java/tech/nevets/vcardgen/VCard.java rename to src/main/java/tech/nevets/vcardgen/Card.java index cce001e..d81afd3 100644 --- a/src/main/java/tech/nevets/vcardgen/VCard.java +++ b/src/main/java/tech/nevets/vcardgen/Card.java @@ -13,7 +13,7 @@ import java.io.*; import java.util.HashMap; import java.util.Map; -public class VCard { +public class Card { private static final Color WHITE = new Color(255, 255, 255); private static final Color GREEN = new Color(101, 142, 61); @@ -36,7 +36,7 @@ public class VCard { private final BufferedImage background; private final int size; - public VCard(JsonObject json) { + public Card(JsonObject json) { this.data[0] = json.get("name").getAsString(); //name this.data[1] = json.get("title").getAsString(); //title this.data[2] = json.get("email").getAsString(); //email @@ -62,7 +62,7 @@ public class VCard { } } - public VCard(String name, String title, String email, String locationId, String extension, String directNumber, String cellNumber, int size) { + public Card(String name, String title, String email, String locationId, String extension, String directNumber, String cellNumber, int size) { this.data[0] = name; //name this.data[1] = title; //title this.data[2] = email; //email @@ -225,6 +225,9 @@ public class VCard { IIOMetadata metadata = reader.getImageMetadata(0); IIOMetadataNode root = (IIOMetadataNode) metadata.getAsTree("javax_imageio_png_1.0"); IIOMetadataNode text = (IIOMetadataNode) root.getElementsByTagName("tEXt").item(0); + if (text == null) { + return "$null"; + } int numTextEntries = text.getLength(); Map keyValueMap = new HashMap<>(); diff --git a/src/main/java/tech/nevets/vcardgen/EditRoute.java b/src/main/java/tech/nevets/vcardgen/EditRoute.java new file mode 100644 index 0000000..0a9e5f7 --- /dev/null +++ b/src/main/java/tech/nevets/vcardgen/EditRoute.java @@ -0,0 +1,45 @@ +package tech.nevets.vcardgen; + +import spark.Request; +import spark.Response; +import spark.Route; + +import javax.servlet.MultipartConfigElement; +import javax.servlet.http.Part; +import java.io.IOException; + +public class EditRoute implements Route { + @Override + public Object handle(Request req, Response res) { + req.attribute("org.eclipse.jetty.multipartConfig", new MultipartConfigElement("/temp")); + Part cardFile; + try { + cardFile = req.raw().getPart("card"); + } catch (Exception e) { + res.status(500); + return "Error processing file: " + e.getMessage(); + } + if (cardFile.getSize() > 1000000) { + res.status(413); + return "File too large"; + } + if (!cardFile.getContentType().equalsIgnoreCase("image/png")) { + res.status(415); + return "Content is not of type image/png"; + } + String cardData; + try { + cardData = Card.getDataFromVCard(cardFile.getInputStream()); + } catch (IOException e) { + res.status(500); + return "Error retrieving data from card" + e.getMessage(); + } + if (cardData.equals("$null")) { + res.status(422); + return "Card does not contain required metadata"; + } + res.type("application/json"); + res.status(200); + return cardData; + } +} diff --git a/src/main/java/tech/nevets/vcardgen/GenerateRoute.java b/src/main/java/tech/nevets/vcardgen/GenerateRoute.java new file mode 100644 index 0000000..77e3cd4 --- /dev/null +++ b/src/main/java/tech/nevets/vcardgen/GenerateRoute.java @@ -0,0 +1,27 @@ +package tech.nevets.vcardgen; + +import com.google.gson.Gson; +import com.google.gson.JsonObject; +import com.google.gson.JsonSyntaxException; +import spark.Request; +import spark.Response; +import spark.Route; + +public class GenerateRoute implements Route { + private Card card; + + @Override + public Object handle(Request req, Response res) { + JsonObject data; + try { + data = new Gson().fromJson(req.body(), JsonObject.class); + } catch (JsonSyntaxException e) { + res.status(422); + } + + res.type("image/png"); + res.header("Access-Control-Expose-Headers", "Id"); + card = new Card(data); + return new Card(data).toByteArray(); + } +} diff --git a/src/main/java/tech/nevets/vcardgen/Main.java b/src/main/java/tech/nevets/vcardgen/Main.java index f59ec0f..56b696c 100644 --- a/src/main/java/tech/nevets/vcardgen/Main.java +++ b/src/main/java/tech/nevets/vcardgen/Main.java @@ -3,7 +3,6 @@ package tech.nevets.vcardgen; import com.google.gson.Gson; import com.google.gson.JsonObject; -import javax.servlet.MultipartConfigElement; import java.io.*; import static spark.Spark.*; @@ -39,19 +38,9 @@ public class Main { return new FileInputStream("locations.json"); }); - post("/generate", (req, res) -> { - res.type("image/png"); - res.header("Access-Control-Expose-Headers", "Id"); - JsonObject data = new Gson().fromJson(req.body(), JsonObject.class); - return new VCard(data).toByteArray(); - }); + post("/generate", new GenerateRoute()); - post("/edit", (req, res) -> { - req.attribute("org.eclipse.jetty.multipartConfig", new MultipartConfigElement("/temp")); - res.status(200); - res.type("application/json"); - return VCard.getDataFromVCard(req.raw().getPart("card").getInputStream()); - }); + post("/edit", new EditRoute()); }); } } diff --git a/src/main/java/tech/nevets/vcardgen/TestMain.java b/src/main/java/tech/nevets/vcardgen/TestMain.java new file mode 100644 index 0000000..d58bbc2 --- /dev/null +++ b/src/main/java/tech/nevets/vcardgen/TestMain.java @@ -0,0 +1,6 @@ +package tech.nevets.vcardgen; + +public class TestMain { + public static void main(String[] args) { + } +}