1 package com.jsql.view.subscriber;
2
3 import com.jsql.model.bean.database.AbstractElementDatabase;
4 import com.jsql.model.bean.database.Column;
5 import com.jsql.model.bean.database.Database;
6 import com.jsql.model.bean.database.Table;
7 import com.jsql.model.injection.strategy.AbstractStrategy;
8 import com.jsql.model.injection.strategy.blind.callable.AbstractCallableBit;
9 import com.jsql.model.injection.engine.model.Engine;
10 import org.apache.logging.log4j.util.Strings;
11
12 import java.util.*;
13 import java.util.function.BiConsumer;
14
15 public sealed interface Seal permits
16 Seal.AddColumns,
17 Seal.AddDatabases,
18 Seal.AddTables,
19 Seal.CreateValuesTab,
20
21 Seal.MarkEngineFound,
22 Seal.ActivateEngine,
23
24 Seal.MarkStrategyInvulnerable,
25 Seal.MarkStrategyVulnerable,
26 Seal.ActivateStrategy,
27
28 Seal.MarkFileSystemInvulnerable,
29 Seal.MarkFileSystemVulnerable,
30
31 Seal.MessageBinary,
32 Seal.MessageChunk,
33 Seal.MessageHeader,
34
35 Seal.AddTabExploitSql,
36 Seal.AddTabExploitUdf,
37 Seal.AddTabExploitWeb,
38 Seal.GetTerminalResult,
39
40 Seal.CreateAdminPageTab,
41 Seal.CreateAnalysisReport,
42 Seal.CreateFileTab,
43
44 Seal.EndIndeterminateProgress,
45 Seal.EndPreparation,
46 Seal.EndProgress,
47 Seal.StartIndeterminateProgress,
48 Seal.StartProgress,
49 Seal.UpdateProgress {
50
51 record AddColumns(List<Column> columns) implements Seal {}
52 record AddDatabases(List<Database> databases) implements Seal {}
53 record AddTables(List<Table> tables) implements Seal {}
54 record CreateValuesTab(String[] columns, String[][] table, Table tableBean) implements Seal {
55
56 @Override
57 public boolean equals(Object o) {
58 if (o == null || this.getClass() != o.getClass()) return false;
59 CreateValuesTab that = (CreateValuesTab) o;
60 return Objects.equals(this.tableBean, that.tableBean) && Objects.deepEquals(this.columns, that.columns) && Objects.deepEquals(this.table, that.table);
61 }
62
63 @Override
64 public int hashCode() {
65 return Objects.hash(Arrays.hashCode(this.columns), Arrays.deepHashCode(this.table), this.tableBean);
66 }
67
68 @Override
69 public String toString() {
70 return "CreateValuesTab{" +
71 "columns=" + Arrays.toString(columns) +
72 ", table=" + Arrays.toString(table) +
73 ", tableBean=" + tableBean +
74 '}';
75 }
76 }
77
78
79 record MarkEngineFound(Engine engine) implements Seal {}
80 record ActivateEngine(Engine engine) implements Seal {}
81
82 record MarkStrategyInvulnerable(int indexError, AbstractStrategy strategy) implements Seal {
83 public MarkStrategyInvulnerable(AbstractStrategy strategy) {
84 this(-1, strategy);
85 }
86 }
87 record MarkStrategyVulnerable(int indexError, AbstractStrategy strategy) implements Seal {
88 public MarkStrategyVulnerable(AbstractStrategy strategy) {
89 this(-1, strategy);
90 }
91 }
92 record ActivateStrategy(AbstractStrategy strategy) implements Seal {}
93
94 record MarkFileSystemInvulnerable() implements Seal {}
95 record MarkFileSystemVulnerable() implements Seal {}
96
97 record MessageChunk(String message) implements Seal {}
98 record MessageBinary(String message) implements Seal {}
99 record MessageHeader(
100 String url,
101 String post,
102 Map<String, String> header,
103 Map<String, String> response,
104 String source,
105 String size,
106 String metadataStrategy,
107 String metadataProcess,
108 AbstractCallableBit<?> metadataBoolean
109 ) implements Seal {
110 public MessageHeader(
111 String url,
112 String post,
113 Map<String, String> header,
114 Map<String, String> response,
115 String source,
116 String size,
117 String metadataStrategy,
118 String metadataProcess,
119 AbstractCallableBit<?> metadataBoolean
120 ) {
121 this.url = url == null ? Strings.EMPTY : url;
122 this.post = post == null ? Strings.EMPTY : post;
123 this.header = header == null ? Collections.emptyMap() : header;
124 this.response = response == null ? Collections.emptyMap() : response;
125 this.source = source == null ? Strings.EMPTY : source;
126 this.size = size == null ? Strings.EMPTY : size;
127 this.metadataStrategy = metadataStrategy == null ? Strings.EMPTY : metadataStrategy;
128 this.metadataProcess = metadataProcess == null ? Strings.EMPTY : metadataProcess;
129 this.metadataBoolean = metadataBoolean;
130 }
131 }
132
133 record AddTabExploitSql(String urlSuccess, String username, String password) implements Seal {}
134 record AddTabExploitUdf(BiConsumer<String, UUID> biConsumerRunCmd) implements Seal {}
135 record AddTabExploitWeb(String urlSuccess) implements Seal {}
136 record GetTerminalResult(UUID uuidShell, String result) implements Seal {}
137
138 record CreateAdminPageTab(String urlSuccess) implements Seal {}
139 record CreateAnalysisReport(String content) implements Seal {}
140 record CreateFileTab(String name, String content, String path) implements Seal {}
141
142 record EndIndeterminateProgress(Table table) implements Seal {}
143 record EndPreparation() implements Seal {}
144 record EndProgress(AbstractElementDatabase elementDatabase) implements Seal {}
145 record StartIndeterminateProgress(Table table) implements Seal {}
146 record StartProgress(AbstractElementDatabase elementDatabase) implements Seal {}
147 record UpdateProgress(AbstractElementDatabase elementDatabase, int countProgress) implements Seal {}
148 }