diff --git a/src/main/java/net/Broken/DB/Entity/GuildPreferenceEntity.java b/src/main/java/net/Broken/DB/Entity/GuildPreferenceEntity.java index 0a599a1..6e9edfd 100644 --- a/src/main/java/net/Broken/DB/Entity/GuildPreferenceEntity.java +++ b/src/main/java/net/Broken/DB/Entity/GuildPreferenceEntity.java @@ -29,9 +29,6 @@ public class GuildPreferenceEntity { private boolean dailyMadame; - @ElementCollection - private List visibleVoiceChanel; - private boolean autoVoice; private String autoVoiceChannelID; private String autoVoiceChannelTitle; @@ -45,7 +42,6 @@ public class GuildPreferenceEntity { boolean defaultRole, String defaultRoleId, boolean dailyMadame, - ArrayList visibleVoiceChanel, boolean autoVoice, String autoVoiceChannelID, String autoVoiceChannelTitle) { @@ -57,7 +53,6 @@ public class GuildPreferenceEntity { this.defaultRole = defaultRole; this.defaultRoleId = defaultRoleId; this.dailyMadame = dailyMadame; - this.visibleVoiceChanel = visibleVoiceChanel; this.autoVoice = autoVoice; this.autoVoiceChannelID = autoVoiceChannelID; this.autoVoiceChannelTitle = autoVoiceChannelTitle; @@ -68,12 +63,8 @@ public class GuildPreferenceEntity { public static GuildPreferenceEntity getDefault(Guild guild) { - ArrayList voice = new ArrayList<>(); - for (VoiceChannel voiceChannel : guild.getVoiceChannels()) { - voice.add(voiceChannel.getId()); - } - return new GuildPreferenceEntity(guild.getId(), false, false, "Welcome to this awesome server @name! ", " ", false, " ", true, voice, false, " ", " "); + return new GuildPreferenceEntity(guild.getId(), false, false, "Welcome to this awesome server @name! ", " ", false, " ", true, false, " ", " "); } public Integer getId() { @@ -148,14 +139,6 @@ public class GuildPreferenceEntity { this.dailyMadame = dailyMadame; } - public List getVisibleVoiceChanel() { - return visibleVoiceChanel; - } - - public void setVisibleVoiceChanel(List visibleVoiceChanel) { - this.visibleVoiceChanel = visibleVoiceChanel; - } - public boolean isAutoVoice() { return autoVoice; } diff --git a/src/main/java/net/Broken/RestApi/MusicWebAPIController.java b/src/main/java/net/Broken/RestApi/MusicWebAPIController.java index 4658576..250758b 100644 --- a/src/main/java/net/Broken/RestApi/MusicWebAPIController.java +++ b/src/main/java/net/Broken/RestApi/MusicWebAPIController.java @@ -7,6 +7,7 @@ import net.Broken.DB.Entity.UserEntity; import net.Broken.DB.Repository.UserRepository; import net.Broken.MainBot; import net.Broken.RestApi.Data.*; +import net.Broken.Tools.CacheTools; import net.Broken.Tools.UserManager.Exceptions.UnknownTokenException; import net.Broken.Tools.UserManager.Stats.UserStatsUtils; import net.Broken.Tools.UserManager.UserUtils; @@ -14,8 +15,8 @@ import net.Broken.audio.AudioM; import net.Broken.audio.GetVoiceChanels; import net.Broken.audio.Youtube.SearchResult; import net.Broken.audio.Youtube.YoutubeSearchRework; -import net.Broken.audio.Youtube.YoutubeTools; import net.dv8tion.jda.api.entities.Guild; +import net.dv8tion.jda.api.entities.Member; import net.dv8tion.jda.api.entities.VoiceChannel; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -36,10 +37,9 @@ import java.util.List; @RestController @RequestMapping("/api/music/") public class MusicWebAPIController { - Logger logger = LogManager.getLogger(); private final UserRepository userRepository; - + Logger logger = LogManager.getLogger(); UserUtils userUtils = UserUtils.getInstance(); @Autowired @@ -173,19 +173,39 @@ public class MusicWebAPIController { } @RequestMapping(value = "/getChanel", method = RequestMethod.GET) - public ResponseEntity> getChanel(@RequestParam(value = "guild") String guildId) { //TODO security issue ???!!! - Guild guild = MainBot.jda.getGuildById(guildId); - if (guild == null) { - logger.warn("Request whit no guild!"); - return new ResponseEntity<>(HttpStatus.BAD_REQUEST); + public ResponseEntity> getChanel(@CookieValue(name = "token", defaultValue = "") String token, @RequestParam(value = "guild") String guildId) { + if (token != null && !token.isEmpty()) { + try { + UserEntity user = userUtils.getUserWithApiToken(userRepository, token); + Guild guild = MainBot.jda.getGuildById(guildId); + if (guild == null) { + logger.warn("Request whit no guild!"); + return new ResponseEntity<>(HttpStatus.BAD_REQUEST); + } + Member member = guild.getMember(CacheTools.getJdaUser(user)); + if (member == null) { + member = guild.retrieveMember(CacheTools.getJdaUser(user)).complete(); + if (member == null) { + logger.warn("Can't find member " + user.getName() + " for guild " + guild.getName() + ", User not in guild ?"); + return new ResponseEntity<>(HttpStatus.UNAUTHORIZED); + } + } + logger.trace("getPlaylist for " + guild.getName()); + List temp = new ArrayList<>(); + for (VoiceChannel aChanel : GetVoiceChanels.find(guild, member)) { + temp.add(new ChanelData(aChanel.getName(), aChanel.getId(), aChanel.getPosition())); + } + return new ResponseEntity<>(temp, HttpStatus.OK); + } catch (UnknownTokenException e) { + logger.warn("Get Chanel without token!"); + return new ResponseEntity<>(HttpStatus.UNAUTHORIZED); + } + } else { - logger.trace("getPlaylist for " + guild.getName()); + logger.warn("Get Chanel without token!"); + return new ResponseEntity<>(HttpStatus.UNAUTHORIZED); } - List temp = new ArrayList<>(); - for (VoiceChannel aChanel : GetVoiceChanels.find(guild)) { - temp.add(new ChanelData(aChanel.getName(), aChanel.getId(), aChanel.getPosition())); - } - return new ResponseEntity<>(temp, HttpStatus.OK); + } @RequestMapping(value = "/search", method = RequestMethod.GET) @@ -211,7 +231,6 @@ public class MusicWebAPIController { } else { logger.warn("Search without token!"); return new ResponseEntity<>(HttpStatus.UNAUTHORIZED); - } } diff --git a/src/main/java/net/Broken/audio/GetVoiceChanels.java b/src/main/java/net/Broken/audio/GetVoiceChanels.java index 588192a..4979550 100644 --- a/src/main/java/net/Broken/audio/GetVoiceChanels.java +++ b/src/main/java/net/Broken/audio/GetVoiceChanels.java @@ -2,8 +2,10 @@ package net.Broken.audio; import net.Broken.DB.Entity.GuildPreferenceEntity; import net.Broken.Tools.SettingsUtils; +import net.dv8tion.jda.api.Permission; import net.dv8tion.jda.api.entities.Guild; import net.dv8tion.jda.api.entities.GuildChannel; +import net.dv8tion.jda.api.entities.Member; import net.dv8tion.jda.api.entities.VoiceChannel; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -16,38 +18,24 @@ import java.util.List; * Used to find general voice channels */ public class GetVoiceChanels { - private static Logger logger = LogManager.getLogger(); + private static final Logger logger = LogManager.getLogger(); /** - * Search for 🤖 char on category name, if this category can't be find, auto create it + * Search for all voice channel where the user can connect + * * @param guild Current guild * @return General Category */ - public static List find(Guild guild){ - SettingsUtils settingsUtils = SettingsUtils.getInstance(); - GuildPreferenceEntity pref = settingsUtils.getPreference(guild); + public static List find(Guild guild, Member member) { ArrayList list = new ArrayList<>(); - List chanels = pref.getVisibleVoiceChanel(); - - if(chanels == null || chanels.size() == 0){ - pref = settingsUtils.setDefaultVoiceChannels(guild, pref); - chanels = pref.getVisibleVoiceChanel(); - } - - boolean needClean = false; - for(String prefChan : chanels){ - VoiceChannel voice = guild.getVoiceChannelById(prefChan); - if(voice != null) - list.add(voice); - else - needClean = true; - } - - if(needClean){ - logger.debug("Need Clean."); - settingsUtils.cleanVisibleVoicePref(guild, pref); - + VoiceChannel afk = guild.getAfkChannel(); + GuildPreferenceEntity pref = SettingsUtils.getInstance().getPreference(guild); + String autoVoice = pref.getAutoVoiceChannelID(); + for (VoiceChannel channel : guild.getVoiceChannels()) { + if (channel != afk && !channel.getId().equals(autoVoice) && member.getPermissions(channel).contains(Permission.VOICE_CONNECT)) { + list.add(channel); + } } list.sort(Comparator.comparingInt(GuildChannel::getPositionRaw));