From 61f6046659b4ad5f9258c4fda46440710dc32f4c Mon Sep 17 00:00:00 2001 From: Francois G Date: Fri, 10 Mar 2023 11:15:54 +0100 Subject: [PATCH] add badge route --- .../jeffcheasey88/peeratcode/model/Badge.java | 40 +++++++++++++++ .../repository/DatabaseRepository.java | 1 + .../peeratcode/routes/BadgeDetails.java | 51 +++++++++++++++++++ 3 files changed, 92 insertions(+) create mode 100644 src/be/jeffcheasey88/peeratcode/model/Badge.java create mode 100644 src/be/jeffcheasey88/peeratcode/routes/BadgeDetails.java diff --git a/src/be/jeffcheasey88/peeratcode/model/Badge.java b/src/be/jeffcheasey88/peeratcode/model/Badge.java new file mode 100644 index 0000000..a79945b --- /dev/null +++ b/src/be/jeffcheasey88/peeratcode/model/Badge.java @@ -0,0 +1,40 @@ +package be.jeffcheasey88.peeratcode.model; + +public class Badge { + private String name; + private byte[] logo; + private int level; + + public Badge(String name, byte[] logo, int level) { + super(); + this.name = name; + this.logo = logo; + this.level = level; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public byte[] getLogo() { + return logo; + } + + public void setLogo(byte[] logo) { + this.logo = logo; + } + + public int getLevel() { + return level; + } + + public void setLevel(int level) { + this.level = level; + } + + +} diff --git a/src/be/jeffcheasey88/peeratcode/repository/DatabaseRepository.java b/src/be/jeffcheasey88/peeratcode/repository/DatabaseRepository.java index 5df9d25..22eb9b0 100644 --- a/src/be/jeffcheasey88/peeratcode/repository/DatabaseRepository.java +++ b/src/be/jeffcheasey88/peeratcode/repository/DatabaseRepository.java @@ -16,6 +16,7 @@ import com.password4j.Hash; import com.password4j.Password; import be.jeffcheasey88.peeratcode.Configuration; +import be.jeffcheasey88.peeratcode.model.Badge; import be.jeffcheasey88.peeratcode.model.Chapter; import be.jeffcheasey88.peeratcode.model.Completion; import be.jeffcheasey88.peeratcode.model.Player; diff --git a/src/be/jeffcheasey88/peeratcode/routes/BadgeDetails.java b/src/be/jeffcheasey88/peeratcode/routes/BadgeDetails.java new file mode 100644 index 0000000..fd9a4b1 --- /dev/null +++ b/src/be/jeffcheasey88/peeratcode/routes/BadgeDetails.java @@ -0,0 +1,51 @@ +package be.jeffcheasey88.peeratcode.routes; + +import be.jeffcheasey88.peeratcode.model.Badge; +import be.jeffcheasey88.peeratcode.model.Player; +import be.jeffcheasey88.peeratcode.repository.DatabaseRepository; +import be.jeffcheasey88.peeratcode.webserver.HttpReader; +import be.jeffcheasey88.peeratcode.webserver.HttpUtil; +import be.jeffcheasey88.peeratcode.webserver.HttpWriter; +import be.jeffcheasey88.peeratcode.webserver.Response; +import be.jeffcheasey88.peeratcode.webserver.User; + +import org.json.simple.JSONArray; +import org.json.simple.JSONObject; + +import java.util.Base64; +import java.util.SortedSet; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class BadgeDetails implements Response { + + private final DatabaseRepository databaseRepo; + + public BadgeDetails(DatabaseRepository databaseRepo) { + this.databaseRepo = databaseRepo; + } + + @Override + public void exec(Matcher matcher, User user, HttpReader reader, HttpWriter writer) throws Exception { + HttpUtil.responseHeaders(writer, 200, "Access-Control-Allow-Origin: *"); + if (matcher.groupCount() > 0) { + int badgeId = Integer.parseInt(matcher.group(1)); + Badge badge = databaseRepo.getBadge(badgeId); + JSONObject badgeJSON = new JSONObject(); + if (badge != null) { + badgeJSON.put("name", badge.getName()); + if(badge.getLogo() != null) badgeJSON.put("logo", new String(Base64.getEncoder().encode(badge.getLogo()))); + badgeJSON.put("level", badge.getLevel()); + } + writer.write(badgeJSON.toJSONString()); + } + else { + HttpUtil.responseHeaders(writer, 400, "Access-Control-Allow-Origin: *"); + } + } + + @Override + public Pattern getPattern() { + return Pattern.compile("^\\/badge\\/([0-9]+)$"); + } +}