1
1
use clap:: Command ;
2
2
use std:: io;
3
- use tokio;
4
3
5
4
use ratatui:: {
6
- backend:: CrosstermBackend ,
7
- layout:: { Constraint , Direction , Layout } ,
8
- Terminal ,
5
+ backend:: CrosstermBackend ,
6
+ layout:: { Constraint , Direction , Layout } ,
7
+ Terminal ,
9
8
} ;
10
9
11
10
use crossterm:: {
12
- event:: { self , Event , KeyCode } ,
13
- execute,
14
- terminal:: { disable_raw_mode, enable_raw_mode, EnterAlternateScreen , LeaveAlternateScreen } ,
11
+ event:: { self , Event , KeyCode } ,
12
+ execute,
13
+ terminal:: { disable_raw_mode, enable_raw_mode, EnterAlternateScreen , LeaveAlternateScreen } ,
15
14
} ;
16
15
17
16
use std:: io:: stdout;
@@ -24,116 +23,116 @@ use block::*;
24
23
25
24
#[ tokio:: main]
26
25
async fn main ( ) -> Result < ( ) , io:: Error > {
27
- check_version ( ) ;
28
- enable_raw_mode ( ) ?;
26
+ check_version ( ) ;
27
+ enable_raw_mode ( ) ?;
29
28
30
- let mut stdout = stdout ( ) ;
31
- execute ! ( stdout, EnterAlternateScreen ) ?;
32
- let backend = CrosstermBackend :: new ( stdout) ;
33
- let mut terminal = Terminal :: new ( backend) ?;
29
+ let mut stdout = stdout ( ) ;
30
+ execute ! ( stdout, EnterAlternateScreen ) ?;
31
+ let backend = CrosstermBackend :: new ( stdout) ;
32
+ let mut terminal = Terminal :: new ( backend) ?;
34
33
35
- let result = run_app ( & mut terminal) . await ;
34
+ let result = run_app ( & mut terminal) . await ;
36
35
37
- disable_raw_mode ( ) ?;
38
- execute ! ( terminal. backend_mut( ) , LeaveAlternateScreen ) ?;
39
- terminal. show_cursor ( ) ?;
36
+ disable_raw_mode ( ) ?;
37
+ execute ! ( terminal. backend_mut( ) , LeaveAlternateScreen ) ?;
38
+ terminal. show_cursor ( ) ?;
40
39
41
- if let Err ( err) = result {
42
- println ! ( "{:?}" , err) ;
43
- }
40
+ if let Err ( err) = result {
41
+ println ! ( "{:?}" , err) ;
42
+ }
44
43
45
- Ok ( ( ) )
44
+ Ok ( ( ) )
46
45
}
47
46
48
47
async fn run_app < B : ratatui:: backend:: Backend > ( terminal : & mut Terminal < B > ) -> io:: Result < ( ) > {
49
- let mut url = String :: new ( ) ;
50
- let mut payload_type = String :: new ( ) ;
51
- let mut result_text = String :: new ( ) ;
52
- let mut current_field = 0 ;
53
-
54
- loop {
55
- terminal. draw ( |f| {
56
- let chunks = Layout :: default ( )
57
- . direction ( Direction :: Vertical )
58
- . constraints (
59
- [
60
- Constraint :: Percentage ( 10 ) ,
61
- Constraint :: Percentage ( 10 ) ,
62
- Constraint :: Percentage ( 30 ) ,
63
- Constraint :: Percentage ( 10 ) ,
64
- Constraint :: Percentage ( 10 ) ,
65
- Constraint :: Percentage ( 10 ) ,
66
- ]
67
- . as_ref ( ) ,
68
- )
69
- . split ( f. area ( ) ) ;
70
-
71
- let info_text = add_info_text ( ) ;
72
- f. render_widget ( info_text, chunks[ 0 ] ) ;
73
-
74
- let url_block = add_url_block ( & url) ;
75
- f. render_widget ( url_block, chunks[ 1 ] ) ;
76
-
77
- let type_payload_text = add_type_payload_text ( ) ;
78
- f. render_widget ( type_payload_text, chunks[ 2 ] ) ;
79
-
80
- let payload_block = add_payload_block ( & payload_type) ;
81
- f. render_widget ( payload_block, chunks[ 3 ] ) ;
82
-
83
- let result_block = add_result_block ( & result_text) ;
84
- f. render_widget ( result_block, chunks[ 4 ] ) ;
85
-
86
- let help_text = add_help_text ( ) ;
87
- f. render_widget ( help_text, chunks[ 5 ] ) ;
88
- } ) ?;
89
-
90
- if let Event :: Key ( key) = event:: read ( ) ? {
91
- match key. code {
92
- KeyCode :: Char ( c) => {
93
- if current_field == 0 {
94
- url. push ( c) ;
95
- } else {
96
- payload_type. push ( c) ;
97
- }
98
- }
99
- KeyCode :: Backspace => {
100
- if current_field == 0 {
101
- url. pop ( ) ;
102
- } else {
103
- payload_type. pop ( ) ;
104
- }
105
- }
106
- KeyCode :: Tab => {
107
- current_field = ( current_field + 1 ) % 2 ;
108
- }
109
- KeyCode :: Enter => {
110
- result_text = show_result ( & url, & payload_type) . await ;
111
- }
112
- KeyCode :: Esc => return Ok ( ( ) ) ,
113
- _ => { }
114
- }
115
- }
116
- }
48
+ let mut url = String :: new ( ) ;
49
+ let mut payload_type = String :: new ( ) ;
50
+ let mut result_text = String :: new ( ) ;
51
+ let mut current_field = 0 ;
52
+
53
+ loop {
54
+ terminal. draw ( |f| {
55
+ let chunks = Layout :: default ( )
56
+ . direction ( Direction :: Vertical )
57
+ . constraints (
58
+ [
59
+ Constraint :: Percentage ( 10 ) ,
60
+ Constraint :: Percentage ( 10 ) ,
61
+ Constraint :: Percentage ( 30 ) ,
62
+ Constraint :: Percentage ( 10 ) ,
63
+ Constraint :: Percentage ( 10 ) ,
64
+ Constraint :: Percentage ( 10 ) ,
65
+ ]
66
+ . as_ref ( ) ,
67
+ )
68
+ . split ( f. area ( ) ) ;
69
+
70
+ let info_text = add_info_text ( ) ;
71
+ f. render_widget ( info_text, chunks[ 0 ] ) ;
72
+
73
+ let url_block = add_url_block ( & url) ;
74
+ f. render_widget ( url_block, chunks[ 1 ] ) ;
75
+
76
+ let type_payload_text = add_type_payload_text ( ) ;
77
+ f. render_widget ( type_payload_text, chunks[ 2 ] ) ;
78
+
79
+ let payload_block = add_payload_block ( & payload_type) ;
80
+ f. render_widget ( payload_block, chunks[ 3 ] ) ;
81
+
82
+ let result_block = add_result_block ( & result_text) ;
83
+ f. render_widget ( result_block, chunks[ 4 ] ) ;
84
+
85
+ let help_text = add_help_text ( ) ;
86
+ f. render_widget ( help_text, chunks[ 5 ] ) ;
87
+ } ) ?;
88
+
89
+ if let Event :: Key ( key) = event:: read ( ) ? {
90
+ match key. code {
91
+ KeyCode :: Char ( c) => {
92
+ if current_field == 0 {
93
+ url. push ( c) ;
94
+ } else {
95
+ payload_type. push ( c) ;
96
+ }
97
+ }
98
+ KeyCode :: Backspace => {
99
+ if current_field == 0 {
100
+ url. pop ( ) ;
101
+ } else {
102
+ payload_type. pop ( ) ;
103
+ }
104
+ }
105
+ KeyCode :: Tab => {
106
+ current_field = ( current_field + 1 ) % 2 ;
107
+ }
108
+ KeyCode :: Enter => {
109
+ result_text = show_result ( & url, & payload_type) . await ;
110
+ }
111
+ KeyCode :: Esc => return Ok ( ( ) ) ,
112
+ _ => { }
113
+ }
114
+ }
115
+ }
117
116
}
118
117
119
118
async fn show_result ( url : & str , payload_type : & str ) -> String {
120
119
if !url. is_empty ( ) && !payload_type. is_empty ( ) {
121
- match validation_exist_sql_injection ( & url, & payload_type) . await {
120
+ match validation_exist_sql_injection ( url, payload_type) . await {
122
121
Ok ( value) => {
123
- return format ! ( "{}" , value) ;
122
+ value. to_string ( )
124
123
}
125
124
Err ( error) => {
126
- return format ! ( "{}" , error) ;
125
+ format ! ( "{}" , error)
127
126
}
128
127
}
129
128
} else {
130
- return "Fields cannot be empty" . to_string ( ) ;
129
+ "Fields cannot be empty" . to_string ( )
131
130
}
132
131
}
133
132
134
133
fn check_version ( ) {
135
- let _app = Command :: new ( "injectsql" )
136
- . version ( "0.3.0" )
137
- . ignore_errors ( true )
138
- . get_matches ( ) ;
134
+ let _app = Command :: new ( "injectsql" )
135
+ . version ( "0.3.0" )
136
+ . ignore_errors ( true )
137
+ . get_matches ( ) ;
139
138
}
0 commit comments