1
1
pub mod utils;
2
- use futures:: { lock:: Mutex , stream , StreamExt } ;
2
+ use futures:: lock:: Mutex ;
3
3
use log:: { debug, error, info, warn} ;
4
4
use mlua:: Lua ;
5
5
use thirtyfour:: prelude:: * ;
6
+ use url:: Url ;
6
7
7
8
use utils:: files:: filename_to_string;
8
9
use utils:: html:: { css_selector, html_parse, html_search} ;
9
10
use utils:: http as http_sender;
10
11
use utils:: is_match;
11
- use utils:: report:: report_script;
12
- use utils:: url:: { change_urlquery, set_urlvalue, urljoin} ;
12
+ use utils:: lua_report:: report_script;
13
+ use utils:: report:: { AllReports , OutReport } ;
14
+ use utils:: url:: HttpMessage ;
13
15
14
- use std:: collections:: HashMap ;
15
16
use std:: fs:: File ;
16
17
use std:: fs:: OpenOptions ;
17
18
use std:: io:: Read ;
@@ -159,16 +160,6 @@ impl<'a> LuaLoader<'a> {
159
160
}
160
161
161
162
fn get_httpfunc ( & self , lua : & Lua ) {
162
- lua. globals ( )
163
- . set (
164
- "set_urlvalue" ,
165
- lua. create_function ( |_, ( url, param, payload) : ( String , String , String ) | {
166
- Ok ( set_urlvalue ( & url, & param, & payload) )
167
- } )
168
- . unwrap ( ) ,
169
- )
170
- . unwrap ( ) ;
171
-
172
163
lua. globals ( )
173
164
. set (
174
165
"sleep" ,
@@ -179,30 +170,6 @@ impl<'a> LuaLoader<'a> {
179
170
. unwrap ( ) ,
180
171
)
181
172
. unwrap ( ) ;
182
- // Set Functions
183
- let set_urlvalue =
184
- lua. create_function ( |_, ( url, param, payload) : ( String , String , String ) | {
185
- Ok ( set_urlvalue ( & url, & param, & payload) )
186
- } ) ;
187
- let change_url = lua
188
- . create_function (
189
- |_, ( url, payload, remove_content) : ( String , String , bool ) | {
190
- Ok ( change_urlquery ( url, payload, remove_content) )
191
- } ,
192
- )
193
- . unwrap ( ) ;
194
- lua. globals ( ) . set ( "change_urlquery" , change_url) . unwrap ( ) ;
195
- lua. globals ( )
196
- . set ( "set_urlvalue" , set_urlvalue. unwrap ( ) )
197
- . unwrap ( ) ;
198
-
199
- lua. globals ( )
200
- . set (
201
- "urljoin" ,
202
- lua. create_function ( |_, ( url, path) : ( String , String ) | Ok ( urljoin ( url, path) ) )
203
- . unwrap ( ) ,
204
- )
205
- . unwrap ( ) ;
206
173
}
207
174
208
175
/// Start All Lua Scripts
@@ -218,7 +185,20 @@ impl<'a> LuaLoader<'a> {
218
185
self . get_httpfunc ( & lua) ;
219
186
self . get_utilsfunc ( & lua) ;
220
187
self . get_matching_func ( & lua) ;
221
- lua. globals ( ) . set ( "TARGET_URL" , target_url) . unwrap ( ) ;
188
+ lua. globals ( )
189
+ . set (
190
+ "HttpMessage" ,
191
+ HttpMessage {
192
+ url : Url :: parse ( target_url) . unwrap ( ) ,
193
+ } ,
194
+ )
195
+ . unwrap ( ) ;
196
+ lua. globals ( )
197
+ . set ( "Reports" , AllReports {
198
+ reports : Vec :: new ( )
199
+ } ) . unwrap ( ) ;
200
+ lua. globals ( )
201
+ . set ( "NewReport" , OutReport :: init ( ) ) . unwrap ( ) ;
222
202
match driver {
223
203
None => { }
224
204
_ => {
@@ -242,24 +222,7 @@ impl<'a> LuaLoader<'a> {
242
222
lua. globals ( ) . set ( "SCRIPT_PATH" , script_dir) . unwrap ( ) ;
243
223
244
224
lua. load ( script_code) . exec_async ( ) . await . unwrap ( ) ;
245
- let payloads_func = lua
246
- . globals ( )
247
- . get :: < _ , mlua:: Function > ( "payloads_gen" )
248
- . unwrap ( ) ;
249
- let payloads = payloads_func
250
- . call_async :: < _ , mlua:: Table > ( target_url)
251
- . await
252
- . unwrap ( ) ;
253
- let payloads = {
254
- let mut all_payloads = Vec :: new ( ) ;
255
- payloads
256
- . pairs :: < mlua:: Value , mlua:: Value > ( )
257
- . into_iter ( )
258
- . for_each ( |item| {
259
- all_payloads. push ( item. unwrap ( ) ) ;
260
- } ) ;
261
- all_payloads
262
- } ;
225
+
263
226
// HTTP Sender
264
227
lua. globals ( )
265
228
. set (
@@ -273,36 +236,25 @@ impl<'a> LuaLoader<'a> {
273
236
. unwrap ( ) ;
274
237
275
238
let main_func = lua. globals ( ) . get :: < _ , mlua:: Function > ( "main" ) . unwrap ( ) ;
276
- let script_threads = lua. globals ( ) . get :: < _ , usize > ( "THREADS" ) . unwrap_or ( 5 ) ;
277
- stream:: iter ( payloads. into_iter ( ) )
278
- . map ( move |payload| {
279
- let main_func = main_func. clone ( ) ;
280
- async move {
281
- main_func
282
- . call_async :: < _ , mlua:: Table > ( payload)
283
- . await
284
- . unwrap ( ) ;
285
- }
286
- } )
287
- . buffer_unordered ( script_threads)
288
- . collect :: < Vec < _ > > ( )
289
- . await ;
239
+ debug ! ( "MAIN FUNC STARTED" ) ;
240
+ main_func. call_async :: < _ , mlua:: Value > ( target_url) . await . unwrap ( ) ;
241
+ debug ! ( "MAIN FUNC DONE" ) ;
242
+
290
243
if report_code. len ( ) > 0 {
244
+ // Still under development (not ready yet)
291
245
report_script ( filename_to_string ( report_code) . unwrap ( ) . as_str ( ) ) ;
292
246
} else {
293
- let out_table = lua. globals ( ) . get :: < _ , bool > ( "VALID" . to_owned ( ) ) . unwrap ( ) ;
294
- if out_table {
295
- let mut test_report: HashMap < String , mlua:: Value > = HashMap :: new ( ) ;
296
- lua. globals ( )
297
- . get :: < _ , mlua:: Table > ( "REPORT" )
298
- . unwrap ( )
299
- . pairs :: < String , mlua:: Value > ( )
300
- . for_each ( |out_report| {
301
- let current_out = out_report. clone ( ) ;
302
- test_report. insert ( current_out. unwrap ( ) . 0 , out_report. unwrap ( ) . 1 ) ;
303
- } ) ;
304
- let results = serde_json:: to_string ( & test_report) . unwrap ( ) ;
305
- self . write_report ( & results) ;
247
+ let final_report = lua. globals ( ) . get :: < _ , AllReports > ( "Reports" ) ;
248
+ match final_report {
249
+ Ok ( the_report) => {
250
+ if the_report. clone ( ) . reports . len ( ) > 0 {
251
+ let results = serde_json:: to_string ( & the_report. reports ) . unwrap ( ) ;
252
+ self . write_report ( & results) ;
253
+ }
254
+ }
255
+ Err ( err) => {
256
+ error ! ( "Report Error: {}" , err) ;
257
+ }
306
258
}
307
259
}
308
260
self . bar . inc ( 1 ) ;
0 commit comments