diff --git a/.gitignore b/.gitignore index 94c0cbd..b986000 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,4 @@ logging/ -compiled-builds/ *.iml .idea/ target/** @@ -10,7 +9,6 @@ src/test/ target/ config.ini *.txt -*.jar *.log *.zip .DS_Store diff --git a/Plugins/Javascript-Plugin/compiled/Javascript-Plugin-1.0-SNAPSHOT.jar b/Plugins/Javascript-Plugin/compiled/Javascript-Plugin-1.0-SNAPSHOT.jar deleted file mode 100644 index 32259b2..0000000 Binary files a/Plugins/Javascript-Plugin/compiled/Javascript-Plugin-1.0-SNAPSHOT.jar and /dev/null differ diff --git a/Plugins/Javascript-Plugin/pom.xml b/Plugins/Javascript-Plugin/pom.xml index f697bf8..2fd7c0e 100644 --- a/Plugins/Javascript-Plugin/pom.xml +++ b/Plugins/Javascript-Plugin/pom.xml @@ -6,7 +6,7 @@ com.skeletor Javascript-Plugin - 1.0-SNAPSHOT + 1.1-SNAPSHOT @@ -24,8 +24,16 @@ com.eu.habbo Habbo - 3.0.0 + 3.5.1 + + + com.googlecode.owasp-java-html-sanitizer + owasp-java-html-sanitizer + 20240325.1 + compile + + \ No newline at end of file diff --git a/Plugins/Javascript-Plugin/src/main/java/com/skeletor/plugin/javascript/audio/RoomPlaylist.java b/Plugins/Javascript-Plugin/src/main/java/com/skeletor/plugin/javascript/audio/RoomPlaylist.java index d5b3b59..0756106 100644 --- a/Plugins/Javascript-Plugin/src/main/java/com/skeletor/plugin/javascript/audio/RoomPlaylist.java +++ b/Plugins/Javascript-Plugin/src/main/java/com/skeletor/plugin/javascript/audio/RoomPlaylist.java @@ -5,6 +5,8 @@ import com.eu.habbo.messages.outgoing.generic.alerts.BubbleAlertComposer; import gnu.trove.map.hash.THashMap; import java.util.ArrayList; +import static com.skeletor.plugin.javascript.utils.RegexUtility.sanitize; + public class RoomPlaylist { private ArrayList playlist = new ArrayList<>(); @@ -38,19 +40,20 @@ public class RoomPlaylist { public void addSong(YoutubeVideo song) { this.playlist.add(song); } - + public YoutubeVideo removeSong(int index) { YoutubeVideo res = null; - if (this.playlist.size() - 1 >= index) - res = this.playlist.remove(index); - if (this.playlist.size() == 0) - setPlaying(false); - if (index == getCurrentIndex()) { - if (index > this.playlist.size() - 1 && this.playlist.size() > 0) - this.current = this.playlist.size() - 1; - } else if (index < getCurrentIndex() && getCurrentIndex() > 0) { + if(playlist.size() - 1 >= index) + res = this.playlist.remove(index); + if(playlist.isEmpty()) this.setPlaying(false); + if(index == this.getCurrentIndex()) { + if(index > this.playlist.size() - 1 && !this.playlist.isEmpty()) { + this.current = this.playlist.size() - 1; + } + } + else if(index < this.getCurrentIndex() && this.getCurrentIndex() > 0) { this.current--; - } + } return res; } @@ -79,12 +82,12 @@ public class RoomPlaylist { this.channel = channel; } } - + public MessageComposer getNowPlayingBubbleAlert() { - THashMap keys = new THashMap(); + final THashMap keys = new THashMap<>(); keys.put("display", "BUBBLE"); - keys.put("image", "${image.library.url}notifications/music.png"); - keys.put("message", "Now playing " + (getCurrentSong()).name); - return (MessageComposer)new BubbleAlertComposer("", keys); + keys.put("image", ("${image.library.url}notifications/music.png")); + keys.put("message", "Now playing " + sanitize(this.getCurrentSong().name)); + return new BubbleAlertComposer("", keys); } } diff --git a/Plugins/Javascript-Plugin/src/main/java/com/skeletor/plugin/javascript/utils/RegexUtility.java b/Plugins/Javascript-Plugin/src/main/java/com/skeletor/plugin/javascript/utils/RegexUtility.java index 29bd810..9fb748d 100644 --- a/Plugins/Javascript-Plugin/src/main/java/com/skeletor/plugin/javascript/utils/RegexUtility.java +++ b/Plugins/Javascript-Plugin/src/main/java/com/skeletor/plugin/javascript/utils/RegexUtility.java @@ -1,15 +1,30 @@ package com.skeletor.plugin.javascript.utils; - +import org.owasp.html.HtmlPolicyBuilder; +import org.owasp.html.PolicyFactory; import java.util.regex.Matcher; import java.util.regex.Pattern; public class RegexUtility { - public static String getYouTubeId(String youTubeUrl) { + + public static String getYouTubeId (String youTubeUrl) { String pattern = "(?<=youtu.be/|watch\\?v=|/videos/|embed\\/)[^#\\&\\?]*"; Pattern compiledPattern = Pattern.compile(pattern); Matcher matcher = compiledPattern.matcher(youTubeUrl); - if (matcher.find()) - return matcher.group(); - return ""; + if(matcher.find()){ + return matcher.group(); + } else { + return ""; + } } -} + + /** + * Sanitizes a string by removing any potentially harmful HTML elements. + * + * @param str The string to be sanitized. + * @return The sanitized string. + */ + public static String sanitize(String str) { + PolicyFactory policy = new HtmlPolicyBuilder().toFactory(); + return policy.sanitize(str); + } +} \ No newline at end of file