Skip to content

Commit 6b76dd8

Browse files
authored
Merge pull request #43 from heroesofcode/feature/add-mise-and-renovate
Fix lint warning and add renovate
2 parents 85f695d + 1badf24 commit 6b76dd8

File tree

6 files changed

+144
-142
lines changed

6 files changed

+144
-142
lines changed

.mise.toml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
[tasks]
2+
lint = "cargo clippy --all-targets --all-features"
3+
build = "cargo build --release"
4+
dev = "cargo build"
5+
run = "cargo run"

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
</p>
1414

1515

16-
🛢️🖥️ Command Line Tools to check for SQL Injection vulnerability. This tool is to help pentest in their daily lives quickly.
16+
🛢️ 🖥️ Command Line Tools to check for SQL Injection vulnerability. This tool is to help pentest in their daily lives quickly.
1717

1818
## Installing
1919

renovate.json

Whitespace-only changes.

src/block.rs

Lines changed: 41 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -1,72 +1,72 @@
11
use ratatui::{
22
layout::Alignment,
33
style::{Color, Style},
4-
widgets::{Block, Borders, Paragraph, Wrap}
4+
widgets::{Block, Borders, Paragraph, Wrap},
55
};
66

77
pub fn add_info_text() -> Paragraph<'static> {
8-
let text = "🌐 🛢️ Command Line Tools to check for SQL Injection vulnerability.\n👨‍💻 https://github.com/heroesofcode/inject-sql";
8+
let text = "🌐 🛢️ Command Line Tools to check for SQL Injection vulnerability.\n👨‍💻 https://github.com/heroesofcode/inject-sql";
99

10-
let info_text = Paragraph::new(text)
11-
.block(Block::default().borders(Borders::ALL))
12-
.style(Style::default().fg(Color::Green));
10+
let info_text = Paragraph::new(text)
11+
.block(Block::default().borders(Borders::ALL))
12+
.style(Style::default().fg(Color::Green));
1313

14-
return info_text;
14+
info_text
1515
}
1616

1717
pub fn add_url_block(url: &str) -> Paragraph<'_> {
18-
let url_block = Paragraph::new(&url[..])
19-
.block(
20-
Block::default()
21-
.title("Enter the URL")
22-
.borders(Borders::ALL),
23-
)
24-
.style(Style::default().fg(Color::White))
25-
.wrap(Wrap { trim: true });
18+
let url_block = Paragraph::new(url)
19+
.block(
20+
Block::default()
21+
.title("Enter the URL")
22+
.borders(Borders::ALL),
23+
)
24+
.style(Style::default().fg(Color::White))
25+
.wrap(Wrap { trim: true });
2626

27-
return url_block;
27+
url_block
2828
}
2929

3030
pub fn add_type_payload_text() -> Paragraph<'static> {
31-
let text = "\n1 - classical 1\n2 - classical 2\n3 - time-based\n4 - blind 1\n5 - blind 2\n6 - boolean 1\n7 - boolean 2\n8 - Get Database\n";
31+
let text = "\n1 - classical 1\n2 - classical 2\n3 - time-based\n4 - blind 1\n5 - blind 2\n6 - boolean 1\n7 - boolean 2\n8 - Get Database\n";
3232

33-
let type_payload_text = Paragraph::new(text).style(Style::default().fg(Color::Green));
33+
let type_payload_text = Paragraph::new(text).style(Style::default().fg(Color::Green));
3434

35-
return type_payload_text;
35+
type_payload_text
3636
}
3737

3838
pub fn add_payload_block(payload_type: &str) -> Paragraph<'_> {
39-
let payload_block = Paragraph::new(&payload_type[..])
40-
.block(
41-
Block::default()
42-
.title("Enter the payload type")
43-
.borders(Borders::all()),
44-
)
45-
.style(Style::default().fg(Color::White))
46-
.wrap(Wrap { trim: true });
39+
let payload_block = Paragraph::new(payload_type)
40+
.block(
41+
Block::default()
42+
.title("Enter the payload type")
43+
.borders(Borders::all()),
44+
)
45+
.style(Style::default().fg(Color::White))
46+
.wrap(Wrap { trim: true });
4747

48-
return payload_block;
48+
payload_block
4949
}
5050

5151
pub fn add_result_block(result_text: &str) -> Paragraph<'_> {
52-
let result_block = Paragraph::new(&result_text[..])
53-
.alignment(Alignment::Center)
54-
.block(
55-
Block::default()
56-
.title("Result")
57-
.borders(Borders::TOP)
58-
.style(Style::default().fg(Color::Yellow)),
59-
)
60-
.wrap(Wrap { trim: true });
52+
let result_block = Paragraph::new(result_text)
53+
.alignment(Alignment::Center)
54+
.block(
55+
Block::default()
56+
.title("Result")
57+
.borders(Borders::TOP)
58+
.style(Style::default().fg(Color::Yellow)),
59+
)
60+
.wrap(Wrap { trim: true });
6161

62-
return result_block;
62+
result_block
6363
}
6464

6565
pub fn add_help_text() -> Paragraph<'static> {
66-
let text = "Use TAB to switch between fields. Press ENTER to validate.";
66+
let text = "Use TAB to switch between fields. Press ENTER to validate.";
6767

68-
let help_text = Paragraph::new(text)
69-
.style(Style::default().fg(Color::White));
68+
let help_text = Paragraph::new(text)
69+
.style(Style::default().fg(Color::White));
7070

71-
return help_text;
71+
help_text
7272
}

src/main.rs

Lines changed: 96 additions & 97 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,16 @@
11
use clap::Command;
22
use std::io;
3-
use tokio;
43

54
use ratatui::{
6-
backend::CrosstermBackend,
7-
layout::{Constraint, Direction, Layout},
8-
Terminal,
5+
backend::CrosstermBackend,
6+
layout::{Constraint, Direction, Layout},
7+
Terminal,
98
};
109

1110
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},
1514
};
1615

1716
use std::io::stdout;
@@ -24,116 +23,116 @@ use block::*;
2423

2524
#[tokio::main]
2625
async fn main() -> Result<(), io::Error> {
27-
check_version();
28-
enable_raw_mode()?;
26+
check_version();
27+
enable_raw_mode()?;
2928

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)?;
3433

35-
let result = run_app(&mut terminal).await;
34+
let result = run_app(&mut terminal).await;
3635

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()?;
4039

41-
if let Err(err) = result {
42-
println!("{:?}", err);
43-
}
40+
if let Err(err) = result {
41+
println!("{:?}", err);
42+
}
4443

45-
Ok(())
44+
Ok(())
4645
}
4746

4847
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+
}
117116
}
118117

119118
async fn show_result(url: &str, payload_type: &str) -> String {
120119
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 {
122121
Ok(value) => {
123-
return format!("{}", value);
122+
value.to_string()
124123
}
125124
Err(error) => {
126-
return format!("{}", error);
125+
format!("{}", error)
127126
}
128127
}
129128
} else {
130-
return "Fields cannot be empty".to_string();
129+
"Fields cannot be empty".to_string()
131130
}
132131
}
133132

134133
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();
139138
}

src/response.rs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ use scraper::{Html, Selector};
55
pub async fn validation_exist_sql_injection(
66
url: &str,
77
payload: &str) -> Result<String, reqwest::Error> {
8-
98
let client = Client::new();
109
let set_payload = match payload {
1110
"1" => "' OR '1'='1",
@@ -27,7 +26,6 @@ async fn response(
2726
url: &str,
2827
payload: &str,
2928
show_body: bool) -> Result<String, reqwest::Error> {
30-
3129
let test_url = format!("{}{}", url, payload);
3230

3331
let response = client.get(&test_url).send().await?;
@@ -47,7 +45,7 @@ async fn response(
4745
}
4846
}
4947
} else {
50-
Err(reqwest::Error::from(response.error_for_status().unwrap_err()))
48+
Err(response.error_for_status().unwrap_err())
5149
}
5250
}
5351

0 commit comments

Comments
 (0)