From 78485523e376abf3158c86128574fa665f011e74 Mon Sep 17 00:00:00 2001 From: megoRU Date: Wed, 29 Dec 2021 17:05:46 +0300 Subject: [PATCH] 1. Add Lombok 2. Now update key when 1 day reimagining 3. New logic code 4. Some fix P. S. This update not tested --- README.md | 8 +- pom.xml | 10 ++- src/main/java/Main.java | 108 ++--------------------- src/main/java/db/ConnectionsData.java | 19 ++++ src/main/java/db/DataBase.java | 104 ++++++++++++++++++++++ src/main/java/model/Plesk.java | 12 +++ src/main/java/threads/ThreadGetDate.java | 99 +++++++++++++++++++++ 7 files changed, 251 insertions(+), 109 deletions(-) create mode 100644 src/main/java/db/ConnectionsData.java create mode 100644 src/main/java/db/DataBase.java create mode 100644 src/main/java/model/Plesk.java create mode 100644 src/main/java/threads/ThreadGetDate.java diff --git a/README.md b/README.md index 8ad34a2..b307121 100644 --- a/README.md +++ b/README.md @@ -13,16 +13,16 @@ Plesk trial key auto update ``` CREATE TABLE `Plesk` ( - `id` int(6) NOT NULL, + `id` int(6) NOT NULL AUTO_INCREMENT, `text` varchar(255) NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `text` (`text`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; ``` ``` -INSERT INTO Plesk (id, text) values (0, "Your Key"); -INSERT INTO Plesk (id, text) values (1, "Your Key2"); -INSERT INTO Plesk (id, text) values (2, "Your Key3"); +INSERT INTO Plesk (text) values ("Your Key"); +INSERT INTO Plesk (text) values ("Your Key2"); +INSERT INTO Plesk (text) values ("Your Key3"); ``` ## Run on Windows: diff --git a/pom.xml b/pom.xml index 99f2ae1..365d37d 100644 --- a/pom.xml +++ b/pom.xml @@ -49,7 +49,7 @@ mysql mysql-connector-java - 8.0.26 + 8.0.27 @@ -62,7 +62,13 @@ com.google.guava guava - 30.1.1-jre + 31.0.1-jre + + + org.projectlombok + lombok + 1.18.22 + provided diff --git a/src/main/java/Main.java b/src/main/java/Main.java index 76195de..177e81e 100644 --- a/src/main/java/Main.java +++ b/src/main/java/Main.java @@ -1,114 +1,16 @@ -import com.jcraft.jsch.Channel; -import com.jcraft.jsch.ChannelExec; -import com.jcraft.jsch.JSch; -import com.jcraft.jsch.Session; - -import java.io.InputStream; -import java.sql.*; -import java.util.HashMap; +import db.ConnectionsData; +import threads.ThreadGetDate; public class Main { - private static final HashMap keys = new HashMap<>(); - public static void main(String[] args) throws Exception { if (args.length != 7) { throw new Exception("Wrong number of arguments"); } - final String con = args[0]; - final String user = args[1]; - final String pass = args[2]; - final String sshHost = args[3]; - final String sshLogin = args[4]; - final String sshPass = args[5]; - final String databaseName = args[6]; - - try { - for (; ; ) { - - String query = "SELECT id, text FROM Plesk WHERE id = 0"; - String delete = "DELETE FROM Plesk WHERE id = ?"; - String update = "UPDATE Plesk SET id = id - 1 WHERE id >= ?"; - Connection conn = DriverManager.getConnection( - "jdbc:mysql://" + con + ":3306/" + databaseName - + "?useSSL=false&serverTimezone=UTC&characterEncoding=utf8", user, pass); - Statement statement = conn.createStatement(); - ResultSet rs = statement.executeQuery(query); - while (rs.next()) { - String id = rs.getString("id"); - String text = rs.getString("text"); - keys.put(Integer.parseInt(id), text); - } - String command = "cd /; usr/sbin/plesk bin license -i " + keys.get(0).trim(); - System.out.println(keys.get(0)); - runCommand(command, sshPass, sshLogin, sshHost); - - //remove from DB and HashMap and close connections - keys.remove(0); - PreparedStatement preparedStmt = conn.prepareStatement(delete); - PreparedStatement preparedStmt2 = conn.prepareStatement(update); - preparedStmt.setInt(1, 0); - preparedStmt2.setInt(1, 0); - preparedStmt.executeUpdate(); - preparedStmt2.executeUpdate(); - rs.close(); - statement.close(); - preparedStmt.close(); - preparedStmt2.close(); - conn.close(); - //sleep 14 days - Thread.sleep(1209600000L); - } - } catch (Exception ex) { - Thread.currentThread().interrupt(); - ex.printStackTrace(); - } - } - - protected static void runCommand(String command, String pass, String login, String host) { - java.util.Properties config = new java.util.Properties(); - config.put("StrictHostKeyChecking", "no"); - JSch jsch = new JSch(); - try { - Session session = jsch.getSession(login, host, 22); - session.setPassword(pass); - session.setConfig(config); - session.connect(); - System.out.println("Connected"); - - Channel channel = session.openChannel("exec"); - ((ChannelExec) channel).setCommand(command); - channel.setInputStream(null); - ((ChannelExec) channel).setErrStream(System.err); - - InputStream in = channel.getInputStream(); - channel.connect(); - byte[] tmp = new byte[1024]; - while (true) { - while (in.available() > 0) { - int i = in.read(tmp, 0, 1024); - if (i < 0) { - break; - } - System.out.print(new String(tmp, 0, i)); - } - if (channel.isClosed()) { - System.out.println("exit-status: " + channel.getExitStatus()); - break; - } - try { - Thread.sleep(1000); - } catch (Exception ignored) { - Thread.currentThread().interrupt(); - } - } - channel.disconnect(); - session.disconnect(); - System.out.println("DONE"); - } catch (Exception exx) { - exx.printStackTrace(); - } + final ConnectionsData connectionsData = new ConnectionsData(args[0], args[1], args[2], args[3], args[4], args[5], args[6]); + Thread thread = new ThreadGetDate(connectionsData); + thread.start(); } } \ No newline at end of file diff --git a/src/main/java/db/ConnectionsData.java b/src/main/java/db/ConnectionsData.java new file mode 100644 index 0000000..0f1fd09 --- /dev/null +++ b/src/main/java/db/ConnectionsData.java @@ -0,0 +1,19 @@ +package db; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.ToString; + +@Getter +@ToString +@AllArgsConstructor +public class ConnectionsData { + + private final String con; + private final String user; + private final String pass; + private final String sshHost; + private final String sshLogin; + private final String sshPass; + private final String databaseName; +} \ No newline at end of file diff --git a/src/main/java/db/DataBase.java b/src/main/java/db/DataBase.java new file mode 100644 index 0000000..a78df2c --- /dev/null +++ b/src/main/java/db/DataBase.java @@ -0,0 +1,104 @@ +package db; + +import com.jcraft.jsch.Channel; +import com.jcraft.jsch.ChannelExec; +import com.jcraft.jsch.JSch; +import com.jcraft.jsch.Session; +import lombok.AllArgsConstructor; +import model.Plesk; + +import java.io.InputStream; +import java.sql.*; +import java.util.ArrayList; +import java.util.List; + +@AllArgsConstructor +public class DataBase { + + private final ConnectionsData connectionsData; + private static final List keys = new ArrayList<>(); + + public void getRowsInTable() { + try { + final String query = "SELECT id, text FROM Plesk"; + final String delete = "DELETE FROM Plesk WHERE id = "; + + Connection conn = DriverManager.getConnection( + "jdbc:mysql://" + connectionsData.getCon() + ":3306/" + connectionsData.getDatabaseName() + + "?useSSL=false&serverTimezone=UTC&characterEncoding=utf8", connectionsData.getUser(), connectionsData.getPass()); + + Statement statement = conn.createStatement(); + + ResultSet rs = statement.executeQuery(query); + + while (rs.next()) { + String id = rs.getString("id"); + String text = rs.getString("text"); + keys.add(new Plesk(id, text)); + } + + String command = "cd /; usr/sbin/plesk bin license -i " + keys.get(0).getText().trim(); + + System.out.println(keys.get(0).getText()); + + runCommand(command, connectionsData.getSshHost(), connectionsData.getSshLogin(), connectionsData.getSshPass()); + + PreparedStatement preparedStmt = conn.prepareStatement(delete + keys.get(0).getId()); + preparedStmt.executeQuery(); + + //Close con + preparedStmt.close(); + rs.close(); + statement.close(); + keys.clear(); + + } catch (Exception e) { + e.printStackTrace(); + } + } + + private void runCommand(String command, String pass, String login, String host) { + java.util.Properties config = new java.util.Properties(); + config.put("StrictHostKeyChecking", "no"); + JSch jsch = new JSch(); + try { + Session session = jsch.getSession(login, host, 22); + session.setPassword(pass); + session.setConfig(config); + session.connect(); + System.out.println("Connected"); + + Channel channel = session.openChannel("exec"); + ((ChannelExec) channel).setCommand(command); + channel.setInputStream(null); + ((ChannelExec) channel).setErrStream(System.err); + + InputStream in = channel.getInputStream(); + channel.connect(); + byte[] tmp = new byte[1024]; + while (true) { + while (in.available() > 0) { + int i = in.read(tmp, 0, 1024); + if (i < 0) { + break; + } + System.out.print(new String(tmp, 0, i)); + } + if (channel.isClosed()) { + System.out.println("exit-status: " + channel.getExitStatus()); + break; + } + try { + Thread.sleep(1000); + } catch (Exception ignored) { + Thread.currentThread().interrupt(); + } + } + channel.disconnect(); + session.disconnect(); + System.out.println("DONE"); + } catch (Exception exx) { + exx.printStackTrace(); + } + } +} diff --git a/src/main/java/model/Plesk.java b/src/main/java/model/Plesk.java new file mode 100644 index 0000000..091780e --- /dev/null +++ b/src/main/java/model/Plesk.java @@ -0,0 +1,12 @@ +package model; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public class Plesk { + + private final String id; + private final String text; +} diff --git a/src/main/java/threads/ThreadGetDate.java b/src/main/java/threads/ThreadGetDate.java new file mode 100644 index 0000000..7c8e222 --- /dev/null +++ b/src/main/java/threads/ThreadGetDate.java @@ -0,0 +1,99 @@ +package threads; + +import com.jcraft.jsch.Channel; +import com.jcraft.jsch.ChannelExec; +import com.jcraft.jsch.JSch; +import com.jcraft.jsch.Session; +import db.ConnectionsData; +import db.DataBase; +import lombok.AllArgsConstructor; + +import java.io.InputStream; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@AllArgsConstructor +public class ThreadGetDate extends Thread { + + private final ConnectionsData connectionsData; + private static final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy.MM.dd HH:mm"); + + @Override + public void run() { + while (true) { + try { + String[] commandFromSHH = runCommand("plesk bin keyinfo -l", connectionsData.getSshPass(), connectionsData.getSshLogin(), connectionsData.getSshHost()); + + if (commandFromSHH != null && commandFromSHH.length > 5) { + StringBuffer stringBuffer = new StringBuffer(commandFromSHH[3].replaceAll("lim_date: ", "").trim()); + stringBuffer.insert(4, ".").insert(7, ".").append(" 00:00"); + + LocalDateTime nowDate = LocalDateTime.now(); + LocalDateTime dateTime = LocalDateTime.parse(stringBuffer, formatter); + String formattedDateTime = dateTime.format(formatter); + + System.out.println("nowDate " + nowDate.format(formatter)); + System.out.println("dateTime " + formattedDateTime); + + if (nowDate.plusDays(1L).isAfter(dateTime)) { + System.out.println("We here"); + DataBase dataBase = new DataBase(connectionsData); + dataBase.getRowsInTable(); + } + } + Thread.sleep(3600000L); + } catch (Exception e) { + e.printStackTrace(); + Thread.currentThread().interrupt(); + } + + } + } + + private String[] runCommand(String command, String pass, String login, String host) { + java.util.Properties config = new java.util.Properties(); + config.put("StrictHostKeyChecking", "no"); + JSch jsch = new JSch(); + try { + Session session = jsch.getSession(login, host, 22); + session.setPassword(pass); + session.setConfig(config); + session.connect(); + System.out.println("Connected"); + + Channel channel = session.openChannel("exec"); + ((ChannelExec) channel).setCommand(command); + channel.setInputStream(null); + ((ChannelExec) channel).setErrStream(System.err); + + InputStream in = channel.getInputStream(); + channel.connect(); + byte[] tmp = new byte[1024]; + while (true) { + while (in.available() > 0) { + int i = in.read(tmp, 0, 1024); + if (i < 0) { + break; + } +// System.out.print(new String(tmp, 0, i)); + return new String(tmp, 0, i).split("\n"); + } + if (channel.isClosed()) { + System.out.println("exit-status: " + channel.getExitStatus()); + break; + } + try { + Thread.sleep(1000); + } catch (Exception ignored) { + Thread.currentThread().interrupt(); + } + } + channel.disconnect(); + session.disconnect(); + System.out.println("DONE"); + } catch (Exception exx) { + exx.printStackTrace(); + } + return null; + } +}