This commit is contained in:
Steven Tracey 2023-06-01 16:13:36 -04:00
parent bd797a5619
commit 4bdc25964b
5 changed files with 86 additions and 16 deletions

View File

@ -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<String, String> keyValueMap = new HashMap<>();

View File

@ -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;
}
}

View File

@ -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();
}
}

View File

@ -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());
});
}
}

View File

@ -0,0 +1,6 @@
package tech.nevets.vcardgen;
public class TestMain {
public static void main(String[] args) {
}
}