forked from Limework/RediSkript
		
	Add AES-128 encryption
This commit is contained in:
		
							parent
							
								
									46978fc170
								
							
						
					
					
						commit
						acdd2c2fdc
					
				
							
								
								
									
										9
									
								
								.idea/discord.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								.idea/discord.xml
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,9 @@ | |||||||
|  | <?xml version="1.0" encoding="UTF-8"?> | ||||||
|  | <project version="4"> | ||||||
|  |   <component name="DiscordProjectSettings"> | ||||||
|  |     <option name="show" value="true" /> | ||||||
|  |   </component> | ||||||
|  |   <component name="ProjectNotificationSettings"> | ||||||
|  |     <option name="askShowProject" value="false" /> | ||||||
|  |   </component> | ||||||
|  | </project> | ||||||
| @ -7,11 +7,13 @@ | |||||||
|   </component> |   </component> | ||||||
|   <component name="ChangeListManager"> |   <component name="ChangeListManager"> | ||||||
|     <list default="true" id="61139119-6327-48a6-9183-0df6346ed8d8" name="Default Changelist" comment=""> |     <list default="true" id="61139119-6327-48a6-9183-0df6346ed8d8" name="Default Changelist" comment=""> | ||||||
|  |       <change afterPath="$PROJECT_DIR$/.idea/discord.xml" afterDir="false" /> | ||||||
|       <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" /> |       <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" /> | ||||||
|       <change beforePath="$PROJECT_DIR$/src/main/java/net/limework/skLimework/AddonPlugin.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/net/limework/skLimework/AddonPlugin.java" afterDir="false" /> |       <change beforePath="$PROJECT_DIR$/src/main/java/net/limework/skLimework/AddonPlugin.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/net/limework/skLimework/AddonPlugin.java" afterDir="false" /> | ||||||
|       <change beforePath="$PROJECT_DIR$/src/main/java/net/limework/skLimework/Events/RedisSub.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/net/limework/skLimework/Events/RedisSub.java" afterDir="false" /> |       <change beforePath="$PROJECT_DIR$/src/main/java/net/limework/skLimework/Events/onRedisMessage.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/net/limework/skLimework/Events/onRedisMessage.java" afterDir="false" /> | ||||||
|  |       <change beforePath="$PROJECT_DIR$/src/main/java/net/limework/skLimework/elements/EffSendMessage.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/net/limework/skLimework/elements/EffSendMessage.java" afterDir="false" /> | ||||||
|  |       <change beforePath="$PROJECT_DIR$/src/main/resources/config.yml" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/resources/config.yml" afterDir="false" /> | ||||||
|     </list> |     </list> | ||||||
|     <option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" /> |  | ||||||
|     <option name="SHOW_DIALOG" value="false" /> |     <option name="SHOW_DIALOG" value="false" /> | ||||||
|     <option name="HIGHLIGHT_CONFLICTS" value="true" /> |     <option name="HIGHLIGHT_CONFLICTS" value="true" /> | ||||||
|     <option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" /> |     <option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" /> | ||||||
| @ -35,6 +37,10 @@ | |||||||
|     </option> |     </option> | ||||||
|   </component> |   </component> | ||||||
|   <component name="ProjectId" id="1ZwZbhHZiGU2Gkz7zWjyRIlJngw" /> |   <component name="ProjectId" id="1ZwZbhHZiGU2Gkz7zWjyRIlJngw" /> | ||||||
|  |   <component name="ProjectViewState"> | ||||||
|  |     <option name="showExcludedFiles" value="true" /> | ||||||
|  |     <option name="showLibraryContents" value="true" /> | ||||||
|  |   </component> | ||||||
|   <component name="PropertiesComponent"> |   <component name="PropertiesComponent"> | ||||||
|     <property name="GenerateAntBuildDialog.backupFiles" value="true" /> |     <property name="GenerateAntBuildDialog.backupFiles" value="true" /> | ||||||
|     <property name="GenerateAntBuildDialog.enableUiFormCompile" value="true" /> |     <property name="GenerateAntBuildDialog.enableUiFormCompile" value="true" /> | ||||||
| @ -52,18 +58,6 @@ | |||||||
|       <recent name="net.limework.skLimework.elements" /> |       <recent name="net.limework.skLimework.elements" /> | ||||||
|     </key> |     </key> | ||||||
|   </component> |   </component> | ||||||
|   <component name="RunDashboard"> |  | ||||||
|     <option name="ruleStates"> |  | ||||||
|       <list> |  | ||||||
|         <RuleState> |  | ||||||
|           <option name="name" value="ConfigurationTypeDashboardGroupingRule" /> |  | ||||||
|         </RuleState> |  | ||||||
|         <RuleState> |  | ||||||
|           <option name="name" value="StatusDashboardGroupingRule" /> |  | ||||||
|         </RuleState> |  | ||||||
|       </list> |  | ||||||
|     </option> |  | ||||||
|   </component> |  | ||||||
|   <component name="RunManager"> |   <component name="RunManager"> | ||||||
|     <configuration name="Tester" type="Application" factoryName="Application" temporary="true" nameIsGenerated="true"> |     <configuration name="Tester" type="Application" factoryName="Application" temporary="true" nameIsGenerated="true"> | ||||||
|       <option name="MAIN_CLASS_NAME" value="net.limework.skLimework.DoNotUse.Tester" /> |       <option name="MAIN_CLASS_NAME" value="net.limework.skLimework.DoNotUse.Tester" /> | ||||||
| @ -84,6 +78,9 @@ | |||||||
|       </list> |       </list> | ||||||
|     </recent_temporary> |     </recent_temporary> | ||||||
|   </component> |   </component> | ||||||
|  |   <component name="SQLPlugin.ProjectConfiguration"> | ||||||
|  |     <queries /> | ||||||
|  |   </component> | ||||||
|   <component name="SvnConfiguration"> |   <component name="SvnConfiguration"> | ||||||
|     <configuration /> |     <configuration /> | ||||||
|   </component> |   </component> | ||||||
|  | |||||||
| @ -11,12 +11,25 @@ import net.limework.skLimework.elements.EvtRedis; | |||||||
| import net.limework.skLimework.elements.ExprChannel; | import net.limework.skLimework.elements.ExprChannel; | ||||||
| import net.limework.skLimework.elements.ExprMessage; | import net.limework.skLimework.elements.ExprMessage; | ||||||
| import org.bukkit.Bukkit; | import org.bukkit.Bukkit; | ||||||
|  | import org.bukkit.configuration.file.FileConfiguration; | ||||||
| import org.bukkit.plugin.java.JavaPlugin; | import org.bukkit.plugin.java.JavaPlugin; | ||||||
| import redis.clients.jedis.JedisPool; | import redis.clients.jedis.JedisPool; | ||||||
| import redis.clients.jedis.JedisPoolConfig; | import redis.clients.jedis.JedisPoolConfig; | ||||||
| 
 | 
 | ||||||
|  | import javax.crypto.BadPaddingException; | ||||||
|  | import javax.crypto.Cipher; | ||||||
|  | import javax.crypto.IllegalBlockSizeException; | ||||||
|  | import javax.crypto.NoSuchPaddingException; | ||||||
|  | import javax.crypto.spec.SecretKeySpec; | ||||||
| import java.beans.Expression; | import java.beans.Expression; | ||||||
| import java.io.IOException; | import java.io.IOException; | ||||||
|  | import java.io.UnsupportedEncodingException; | ||||||
|  | import java.nio.charset.StandardCharsets; | ||||||
|  | import java.security.InvalidKeyException; | ||||||
|  | import java.security.MessageDigest; | ||||||
|  | import java.security.NoSuchAlgorithmException; | ||||||
|  | import java.util.Arrays; | ||||||
|  | import java.util.Base64; | ||||||
| import java.util.concurrent.ExecutorService; | import java.util.concurrent.ExecutorService; | ||||||
| import java.util.concurrent.Executors; | import java.util.concurrent.Executors; | ||||||
| import java.util.concurrent.TimeUnit; | import java.util.concurrent.TimeUnit; | ||||||
| @ -27,12 +40,43 @@ public class AddonPlugin extends JavaPlugin { | |||||||
|     private JedisPool jedisPool; |     private JedisPool jedisPool; | ||||||
|     private RedisSub redisSub; |     private RedisSub redisSub; | ||||||
|     private ExecutorService service; |     private ExecutorService service; | ||||||
| 
 |     private Cipher cipher; | ||||||
|  |     private boolean encryptionEnabled; | ||||||
| 
 | 
 | ||||||
|     @Override |     @Override | ||||||
|     public void onEnable(){ |     public void onEnable(){ | ||||||
|         instance = this; |         instance = this; | ||||||
|         this.saveDefaultConfig(); |         this.saveDefaultConfig(); | ||||||
|  |         FileConfiguration config = this.getConfig(); | ||||||
|  |         encryptionEnabled = config.getBoolean("Redis.EncryptMessages"); | ||||||
|  |         if (encryptionEnabled) { | ||||||
|  |             // AES-128 encryption | ||||||
|  |             String configKey = config.getString("Redis.EncryptionKey"); | ||||||
|  |             byte[] key = null; | ||||||
|  |             assert configKey != null; | ||||||
|  |             key = configKey.getBytes(StandardCharsets.UTF_8); | ||||||
|  |             MessageDigest sha = null; | ||||||
|  |             try { | ||||||
|  |                 sha = MessageDigest.getInstance("SHA-1"); | ||||||
|  |             } catch (NoSuchAlgorithmException e) { | ||||||
|  |                 e.printStackTrace(); | ||||||
|  |             } | ||||||
|  |             key = Arrays.copyOf(key, 16); | ||||||
|  |             SecretKeySpec encryptionKey = new SecretKeySpec(key, "AES"); | ||||||
|  | 
 | ||||||
|  |             cipher = null; | ||||||
|  |             try { | ||||||
|  |                 cipher = Cipher.getInstance("AES/ECB/PKCS5Padding"); | ||||||
|  |             } catch (NoSuchAlgorithmException | NoSuchPaddingException e) { | ||||||
|  |                 e.printStackTrace(); | ||||||
|  |             } | ||||||
|  |             try { | ||||||
|  |                 cipher.init(Cipher.ENCRYPT_MODE, encryptionKey); | ||||||
|  |             } catch (InvalidKeyException e) { | ||||||
|  |                 e.printStackTrace(); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |          | ||||||
|         addon = Skript.registerAddon(this); |         addon = Skript.registerAddon(this); | ||||||
|         try { addon.loadClasses("net.limework.skLimework", "elements"); |         try { addon.loadClasses("net.limework.skLimework", "elements"); | ||||||
|             Skript.registerEvent("redis message", EvtRedis.class, onRedisMessage.class, "redis message"); |             Skript.registerEvent("redis message", EvtRedis.class, onRedisMessage.class, "redis message"); | ||||||
| @ -53,7 +97,6 @@ public class AddonPlugin extends JavaPlugin { | |||||||
| 
 | 
 | ||||||
|              |              | ||||||
| 
 | 
 | ||||||
| 
 |  | ||||||
|         } catch (IOException e) { e.printStackTrace(); } |         } catch (IOException e) { e.printStackTrace(); } | ||||||
|         JedisPoolConfig jconfig = new JedisPoolConfig(); |         JedisPoolConfig jconfig = new JedisPoolConfig(); | ||||||
|         jconfig.setMaxTotal(this.getConfig().getInt("Redis.MaxConnections")); |         jconfig.setMaxTotal(this.getConfig().getInt("Redis.MaxConnections")); | ||||||
| @ -94,4 +137,26 @@ public class AddonPlugin extends JavaPlugin { | |||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     public JedisPool getJedisPool() { return jedisPool; } |     public JedisPool getJedisPool() { return jedisPool; } | ||||||
|  | 
 | ||||||
|  |     public boolean isEncryptionEnabled() { return encryptionEnabled; } | ||||||
|  | 
 | ||||||
|  |     public String encrypt(String message) { | ||||||
|  |         String encrypted = null; | ||||||
|  |         try { | ||||||
|  |             encrypted = Base64.getEncoder().encodeToString(cipher.doFinal(message.getBytes(StandardCharsets.UTF_8))); | ||||||
|  |         } catch (IllegalBlockSizeException | BadPaddingException e) { | ||||||
|  |             e.printStackTrace(); | ||||||
|  |         } | ||||||
|  |         return encrypted; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public String decrypt(String message) { | ||||||
|  |         String decrypted = null; | ||||||
|  |         try { | ||||||
|  |             decrypted = new String(cipher.doFinal(Base64.getDecoder().decode(message)), StandardCharsets.UTF_8); | ||||||
|  |         } catch (IllegalBlockSizeException | BadPaddingException e) { | ||||||
|  |             e.printStackTrace(); | ||||||
|  |         } | ||||||
|  |         return decrypted; | ||||||
|  |     } | ||||||
| } | } | ||||||
|  | |||||||
| @ -1,5 +1,7 @@ | |||||||
| package net.limework.skLimework.Events; | package net.limework.skLimework.Events; | ||||||
| 
 | 
 | ||||||
|  | import net.limework.skLimework.AddonPlugin; | ||||||
|  | import org.bukkit.Bukkit; | ||||||
| import org.bukkit.event.Event; | import org.bukkit.event.Event; | ||||||
| import org.bukkit.event.HandlerList; | import org.bukkit.event.HandlerList; | ||||||
| 
 | 
 | ||||||
| @ -13,8 +15,14 @@ public class onRedisMessage extends Event { | |||||||
|     onRedisMessage(String channelName , String message) { |     onRedisMessage(String channelName , String message) { | ||||||
|         super(true); |         super(true); | ||||||
|         this.channelName = channelName; |         this.channelName = channelName; | ||||||
|  |         AddonPlugin instance = (AddonPlugin) Bukkit.getPluginManager().getPlugin("SKLimework"); | ||||||
|  |         assert instance != null; | ||||||
|  |         if (instance.isEncryptionEnabled()) { | ||||||
|  |             this.message = instance.decrypt(message); | ||||||
|  |         } else { | ||||||
|             this.message = message; |             this.message = message; | ||||||
|         } |         } | ||||||
|  |     } | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|     @Override |     @Override | ||||||
|  | |||||||
| @ -34,11 +34,16 @@ public class EffSendMessage extends Effect { | |||||||
|             Bukkit.getLogger().warning(ChatColor.translateAlternateColorCodes('&', "&2[&aGBot&a] &cMessage Was empty Please check your code.")); |             Bukkit.getLogger().warning(ChatColor.translateAlternateColorCodes('&', "&2[&aGBot&a] &cMessage Was empty Please check your code.")); | ||||||
|             return; |             return; | ||||||
|         } |         } | ||||||
|  |         assert plugin != null; | ||||||
|         plugin.getJedisExecutionService().execute(() -> { |         plugin.getJedisExecutionService().execute(() -> { | ||||||
|             Jedis j = plugin.getJedisPool().getResource(); |             Jedis j = plugin.getJedisPool().getResource(); | ||||||
|             JSONObject json = new JSONObject(); |             JSONObject json = new JSONObject(); | ||||||
|             try { |             try { | ||||||
|  |                 if (plugin.isEncryptionEnabled()) { | ||||||
|  |                     json.put("Message", plugin.encrypt(message)); | ||||||
|  |                 } else { | ||||||
|                     json.put("Message", message); |                     json.put("Message", message); | ||||||
|  |                 } | ||||||
|                 json.put("Type", "Skript"); |                 json.put("Type", "Skript"); | ||||||
|                 j.publish(channel, json.toString()); |                 j.publish(channel, json.toString()); | ||||||
|                 //System.out.println("SkriptSide sent MESSAGE: ["+ message + "] to channel: " + channel + " and json: \n" + json.toString()); |                 //System.out.println("SkriptSide sent MESSAGE: ["+ message + "] to channel: " + channel + " and json: \n" + json.toString()); | ||||||
|  | |||||||
| @ -6,6 +6,9 @@ Redis: | |||||||
|   Port: 6379 |   Port: 6379 | ||||||
|   TimeOut: 40000 |   TimeOut: 40000 | ||||||
|   useSSL: true |   useSSL: true | ||||||
|  |   #useful if SSL is disabled | ||||||
|  |   EncryptMessages: false | ||||||
|  |   EncryptionKey: "16CHARACTERS KEY" | ||||||
| 
 | 
 | ||||||
| Channels: | Channels: | ||||||
|   - "Channel1" |   - "Channel1" | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Govindass
						Govindass