diff --git a/lib/fonts/easy/font1.ttf b/lib/fonts/easy/font1.ttf new file mode 100644 index 0000000..4e4d0bb Binary files /dev/null and b/lib/fonts/easy/font1.ttf differ diff --git a/lib/fonts/easy/font10.ttf b/lib/fonts/easy/font10.ttf new file mode 100644 index 0000000..f73338f Binary files /dev/null and b/lib/fonts/easy/font10.ttf differ diff --git a/lib/fonts/easy/font11.ttf b/lib/fonts/easy/font11.ttf new file mode 100644 index 0000000..57d3261 Binary files /dev/null and b/lib/fonts/easy/font11.ttf differ diff --git a/lib/fonts/easy/font12.ttf b/lib/fonts/easy/font12.ttf new file mode 100644 index 0000000..9fd7db6 Binary files /dev/null and b/lib/fonts/easy/font12.ttf differ diff --git a/lib/fonts/easy/font13.ttf b/lib/fonts/easy/font13.ttf new file mode 100644 index 0000000..7034910 Binary files /dev/null and b/lib/fonts/easy/font13.ttf differ diff --git a/lib/fonts/easy/font2.ttf b/lib/fonts/easy/font2.ttf new file mode 100644 index 0000000..4223d87 Binary files /dev/null and b/lib/fonts/easy/font2.ttf differ diff --git a/lib/fonts/easy/font3.ttf b/lib/fonts/easy/font3.ttf new file mode 100644 index 0000000..04b6343 Binary files /dev/null and b/lib/fonts/easy/font3.ttf differ diff --git a/lib/fonts/easy/font4.ttf b/lib/fonts/easy/font4.ttf new file mode 100644 index 0000000..9e83eb2 Binary files /dev/null and b/lib/fonts/easy/font4.ttf differ diff --git a/lib/fonts/easy/font5.ttf b/lib/fonts/easy/font5.ttf new file mode 100644 index 0000000..582207e Binary files /dev/null and b/lib/fonts/easy/font5.ttf differ diff --git a/lib/fonts/easy/font6.ttf b/lib/fonts/easy/font6.ttf new file mode 100644 index 0000000..713fd93 Binary files /dev/null and b/lib/fonts/easy/font6.ttf differ diff --git a/lib/fonts/easy/font7.ttf b/lib/fonts/easy/font7.ttf new file mode 100644 index 0000000..917b80d Binary files /dev/null and b/lib/fonts/easy/font7.ttf differ diff --git a/lib/fonts/easy/font8.ttf b/lib/fonts/easy/font8.ttf new file mode 100644 index 0000000..c57ce67 Binary files /dev/null and b/lib/fonts/easy/font8.ttf differ diff --git a/lib/fonts/easy/font9.ttf b/lib/fonts/easy/font9.ttf new file mode 100644 index 0000000..47129b1 Binary files /dev/null and b/lib/fonts/easy/font9.ttf differ diff --git a/lib/fonts/hard/font1.ttf b/lib/fonts/hard/font1.ttf new file mode 100644 index 0000000..acbece3 Binary files /dev/null and b/lib/fonts/hard/font1.ttf differ diff --git a/lib/fonts/hard/font2.ttf b/lib/fonts/hard/font2.ttf new file mode 100644 index 0000000..d683481 Binary files /dev/null and b/lib/fonts/hard/font2.ttf differ diff --git a/lib/fonts/hard/font3.ttf b/lib/fonts/hard/font3.ttf new file mode 100644 index 0000000..8c804c3 Binary files /dev/null and b/lib/fonts/hard/font3.ttf differ diff --git a/lib/fonts/hard/font4.ttf b/lib/fonts/hard/font4.ttf new file mode 100644 index 0000000..acd8f5d Binary files /dev/null and b/lib/fonts/hard/font4.ttf differ diff --git a/lib/fonts/hard/font5.ttf b/lib/fonts/hard/font5.ttf new file mode 100644 index 0000000..e68b709 Binary files /dev/null and b/lib/fonts/hard/font5.ttf differ diff --git a/lib/fonts/medium/font1.ttf b/lib/fonts/medium/font1.ttf new file mode 100644 index 0000000..8fdfed2 Binary files /dev/null and b/lib/fonts/medium/font1.ttf differ diff --git a/lib/fonts/medium/font10.ttf b/lib/fonts/medium/font10.ttf new file mode 100644 index 0000000..c223040 Binary files /dev/null and b/lib/fonts/medium/font10.ttf differ diff --git a/lib/fonts/medium/font11.ttf b/lib/fonts/medium/font11.ttf new file mode 100644 index 0000000..8fdfed2 Binary files /dev/null and b/lib/fonts/medium/font11.ttf differ diff --git a/lib/fonts/medium/font12.ttf b/lib/fonts/medium/font12.ttf new file mode 100644 index 0000000..2e3b6a3 Binary files /dev/null and b/lib/fonts/medium/font12.ttf differ diff --git a/lib/fonts/medium/font13.ttf b/lib/fonts/medium/font13.ttf new file mode 100644 index 0000000..8fdfed2 Binary files /dev/null and b/lib/fonts/medium/font13.ttf differ diff --git a/lib/fonts/medium/font14.ttf b/lib/fonts/medium/font14.ttf new file mode 100644 index 0000000..70d9250 Binary files /dev/null and b/lib/fonts/medium/font14.ttf differ diff --git a/lib/fonts/medium/font2.ttf b/lib/fonts/medium/font2.ttf new file mode 100644 index 0000000..ff3533a Binary files /dev/null and b/lib/fonts/medium/font2.ttf differ diff --git a/lib/fonts/medium/font3.ttf b/lib/fonts/medium/font3.ttf new file mode 100644 index 0000000..8ab0b0e Binary files /dev/null and b/lib/fonts/medium/font3.ttf differ diff --git a/lib/fonts/medium/font4.ttf b/lib/fonts/medium/font4.ttf new file mode 100644 index 0000000..8838073 Binary files /dev/null and b/lib/fonts/medium/font4.ttf differ diff --git a/lib/fonts/medium/font5.ttf b/lib/fonts/medium/font5.ttf new file mode 100644 index 0000000..46fcc85 Binary files /dev/null and b/lib/fonts/medium/font5.ttf differ diff --git a/lib/fonts/medium/font6.ttf b/lib/fonts/medium/font6.ttf new file mode 100644 index 0000000..96c9a52 Binary files /dev/null and b/lib/fonts/medium/font6.ttf differ diff --git a/lib/fonts/medium/font7.ttf b/lib/fonts/medium/font7.ttf new file mode 100644 index 0000000..8fdfed2 Binary files /dev/null and b/lib/fonts/medium/font7.ttf differ diff --git a/lib/fonts/medium/font8.ttf b/lib/fonts/medium/font8.ttf new file mode 100644 index 0000000..ce7937e Binary files /dev/null and b/lib/fonts/medium/font8.ttf differ diff --git a/lib/fonts/medium/font9.ttf b/lib/fonts/medium/font9.ttf new file mode 100644 index 0000000..e9f3881 Binary files /dev/null and b/lib/fonts/medium/font9.ttf differ diff --git a/src/main/java/lc/FontFunCaptcha.java b/src/main/java/lc/FontFunCaptcha.java index 8952613..c29df79 100644 --- a/src/main/java/lc/FontFunCaptcha.java +++ b/src/main/java/lc/FontFunCaptcha.java @@ -4,7 +4,11 @@ import javax.imageio.ImageIO; import java.awt.*; import java.awt.image.BufferedImage; import java.io.ByteArrayOutputStream; -import java.util.Random; +import java.io.File; +import java.nio.file.Paths; +import java.nio.file.Path; +import java.nio.file.Files; +import java.util.stream.Stream; public class FontFunCaptcha implements ChallengeProvider{ @@ -12,19 +16,46 @@ public class FontFunCaptcha implements ChallengeProvider{ return "FontFunCaptcha"; } - private byte[] fontFun(String captchaText){ - String[] fonts = {"Captcha Code","Mom'sTypewriter","Annifont","SF Intoxicated Blues", - "BeachType","Batmos","Barbecue","Bad Seed","Aswell","Alien Marksman"}; + private int noOfFiles(String path,String level){ + try(Stream files = Files.list(Paths.get(path+level))){ + return (short)files.count()-1; + } catch (Exception e){ + e.printStackTrace(); + } + return 0; + } + + private Font loadCustomFont(String level,String path){ + String fontName = path+level+"/font"+HelperFunctions.randomNumber(1,noOfFiles(path,level))+".ttf"; + try{ + Font font = Font.createFont(Font.TRUETYPE_FONT, new File(fontName)); + font = font.deriveFont(Font.PLAIN, 48f); + return font; + } catch (Exception e){ + e.printStackTrace(); + } + return null; + } + + private Font getFont(String level, String path){ + switch (level.toLowerCase()){ + case "easy": return loadCustomFont(level, path); + case "medium": return loadCustomFont(level, path); + case "hard": return loadCustomFont(level, path); + default: return null; + } + } + + private byte[] fontFun(String captchaText, String level, String path){ String[] colors = {"#f68787","#f8a978","#f1eb9a","#a4f6a5"}; BufferedImage img = new BufferedImage(350, 100, BufferedImage.TYPE_INT_RGB); Graphics2D graphics2D = img.createGraphics(); - Random rand = new Random(); for(int i=0; i< captchaText.length(); i++) { - Font font = new Font(fonts[rand.nextInt(10)], Font.ROMAN_BASELINE, 48); + Font font = getFont(level,path); graphics2D.setFont(font); FontMetrics fontMetrics = graphics2D.getFontMetrics(); HelperFunctions.setRenderingHints(graphics2D); - graphics2D.setColor(Color.decode(colors[rand.nextInt(4)])); + graphics2D.setColor(Color.decode(colors[HelperFunctions.randomNumber(0,3)])); graphics2D.drawString(String.valueOf(captchaText.charAt(i)), (i * 48), fontMetrics.getAscent()); } graphics2D.dispose(); @@ -39,7 +70,8 @@ public class FontFunCaptcha implements ChallengeProvider{ public Challenge returnChallenge() { String secret = HelperFunctions.randomString(7); - return new Challenge(fontFun(secret),"png",secret.toLowerCase()); + String path = "./lib/fonts/"; + return new Challenge(fontFun(secret,"medium",path),"png",secret.toLowerCase()); } public boolean checkAnswer(String secret, String answer){ diff --git a/src/main/java/lc/HelperFunctions.java b/src/main/java/lc/HelperFunctions.java index c1f0b2a..e3882ca 100644 --- a/src/main/java/lc/HelperFunctions.java +++ b/src/main/java/lc/HelperFunctions.java @@ -20,4 +20,8 @@ public class HelperFunctions { } return stringBuilder.toString(); } + + public static int randomNumber(int min,int max){ + return (int)(Math.random() * ((max - min) +1)) + min; + } } diff --git a/src/main/scala/lc/Main.scala b/src/main/scala/lc/Main.scala index e8edf89..51ecf63 100644 --- a/src/main/scala/lc/Main.scala +++ b/src/main/scala/lc/Main.scala @@ -45,7 +45,7 @@ class Captcha { def getChallenge(param: Parameters): Id = { //TODO: eval params to choose a provider - val providerMap = "GifCaptcha" + val providerMap = "FontFunCaptcha" val provider = filters(providerMap) val challenge = provider.returnChallenge() val blob = new ByteArrayInputStream(challenge.content)