Compare commits
3 Commits
9a24fc33c6
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2a3ef945ae | ||
|
|
1138dddcb7 | ||
|
|
e97a15d84b |
@@ -20,9 +20,6 @@ jobs:
|
|||||||
toolchain: stable
|
toolchain: stable
|
||||||
components: rustfmt, clippy
|
components: rustfmt, clippy
|
||||||
|
|
||||||
- name: Check formatting
|
|
||||||
run: cargo fmt --all -- --check
|
|
||||||
|
|
||||||
- name: Lint with Clippy
|
- name: Lint with Clippy
|
||||||
run: cargo clippy -- -D warnings
|
run: cargo clippy -- -D warnings
|
||||||
|
|
||||||
|
|||||||
@@ -9,33 +9,35 @@ pub struct Forwarding {
|
|||||||
from: String,
|
from: String,
|
||||||
to: String,
|
to: String,
|
||||||
#[serde(rename = "doReverse")]
|
#[serde(rename = "doReverse")]
|
||||||
do_reverse: bool
|
do_reverse: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Forwarding {
|
impl Forwarding {
|
||||||
pub fn new(from: String, to: String, do_reverse: bool) -> Forwarding {
|
pub fn new(from: String, to: String, do_reverse: bool) -> Forwarding {
|
||||||
Forwarding{
|
Forwarding {
|
||||||
from,
|
from,
|
||||||
to,
|
to,
|
||||||
do_reverse
|
do_reverse,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn from_json(json: &Value) -> Forwarding {
|
pub fn from_json(json: &Value) -> Forwarding {
|
||||||
let object_forwarding = json.as_object()
|
let object_forwarding = json.as_object().expect("Error parsing forwarding");
|
||||||
.expect("Error parsing forwarding");
|
|
||||||
|
|
||||||
let from = object_forwarding.get("from")
|
let from = object_forwarding
|
||||||
|
.get("from")
|
||||||
.unwrap()
|
.unwrap()
|
||||||
.as_str()
|
.as_str()
|
||||||
.expect("Error parsing from field");
|
.expect("Error parsing from field");
|
||||||
|
|
||||||
let to = object_forwarding.get("to")
|
let to = object_forwarding
|
||||||
|
.get("to")
|
||||||
.unwrap()
|
.unwrap()
|
||||||
.as_str()
|
.as_str()
|
||||||
.expect("Error parsing to field");
|
.expect("Error parsing to field");
|
||||||
|
|
||||||
let do_reverse = object_forwarding.get("doReverse")
|
let do_reverse = object_forwarding
|
||||||
|
.get("doReverse")
|
||||||
.unwrap()
|
.unwrap()
|
||||||
.as_bool()
|
.as_bool()
|
||||||
.expect("Error parsing doReverse field");
|
.expect("Error parsing doReverse field");
|
||||||
@@ -49,7 +51,7 @@ pub struct Config {
|
|||||||
#[serde(rename = "serverAddr")]
|
#[serde(rename = "serverAddr")]
|
||||||
server_addr: String,
|
server_addr: String,
|
||||||
blacklist: Vec<String>,
|
blacklist: Vec<String>,
|
||||||
forwarding: Vec<Forwarding>
|
forwarding: Vec<Forwarding>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Config {
|
impl Config {
|
||||||
@@ -57,23 +59,23 @@ impl Config {
|
|||||||
Config {
|
Config {
|
||||||
server_addr,
|
server_addr,
|
||||||
blacklist,
|
blacklist,
|
||||||
forwarding
|
forwarding,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn read_config_file(file_name: String) -> String {
|
fn read_config_file(file_name: String) -> String {
|
||||||
let mut file = File::open(file_name).expect("Error opening config.json file. Go to the readme file and paste the example.");
|
let mut file = File::open(file_name)
|
||||||
|
.expect("Error opening config.json file. Go to the readme file and paste the example.");
|
||||||
let mut buf = String::new();
|
let mut buf = String::new();
|
||||||
file.read_to_string(&mut buf).expect("Error reading config file content.");
|
file.read_to_string(&mut buf)
|
||||||
|
.expect("Error reading config file content.");
|
||||||
buf
|
buf
|
||||||
}
|
}
|
||||||
|
|
||||||
fn parse_buffer(buf: &str) -> serde_json::Map<String, Value> {
|
fn parse_buffer(buf: &str) -> serde_json::Map<String, Value> {
|
||||||
let json: Value = serde_json::from_str(buf)
|
let json: Value = serde_json::from_str(buf).expect("Error parsing config file");
|
||||||
.expect("Error parsing config file");
|
|
||||||
|
|
||||||
let object_data = json.as_object()
|
let object_data = json.as_object().expect("Error parsing config file.");
|
||||||
.expect("Error parsing config file.");
|
|
||||||
|
|
||||||
object_data.clone()
|
object_data.clone()
|
||||||
}
|
}
|
||||||
@@ -92,20 +94,18 @@ impl Config {
|
|||||||
let buf = Config::read_config_file(file_name);
|
let buf = Config::read_config_file(file_name);
|
||||||
let object_data = Self::parse_buffer(&buf);
|
let object_data = Self::parse_buffer(&buf);
|
||||||
|
|
||||||
|
let server_addr = object_data
|
||||||
let server_addr = object_data.get("serverAddr")
|
.get("serverAddr")
|
||||||
.unwrap()
|
.unwrap()
|
||||||
.as_str()
|
.as_str()
|
||||||
.unwrap()
|
.unwrap()
|
||||||
.to_string();
|
.to_string();
|
||||||
|
|
||||||
let blacklist = object_data.get("blacklist")
|
let blacklist = object_data.get("blacklist").unwrap().as_array().unwrap();
|
||||||
.unwrap()
|
|
||||||
.as_array()
|
|
||||||
.unwrap();
|
|
||||||
let str_blacklist = convert_to_vec_string(blacklist);
|
let str_blacklist = convert_to_vec_string(blacklist);
|
||||||
|
|
||||||
let raw_forwarding = object_data.get("forwarding")
|
let raw_forwarding = object_data
|
||||||
|
.get("forwarding")
|
||||||
.unwrap()
|
.unwrap()
|
||||||
.as_array()
|
.as_array()
|
||||||
.expect("Error parsing forwarding.");
|
.expect("Error parsing forwarding.");
|
||||||
@@ -121,9 +121,9 @@ impl Config {
|
|||||||
pub fn is_forwarded(&self, addr: String) -> Option<String> {
|
pub fn is_forwarded(&self, addr: String) -> Option<String> {
|
||||||
for elem_forwarding in &self.forwarding {
|
for elem_forwarding in &self.forwarding {
|
||||||
if elem_forwarding.from == addr {
|
if elem_forwarding.from == addr {
|
||||||
return Some(elem_forwarding.to.clone())
|
return Some(elem_forwarding.to.clone());
|
||||||
} else if elem_forwarding.do_reverse && elem_forwarding.to == addr {
|
} else if elem_forwarding.do_reverse && elem_forwarding.to == addr {
|
||||||
return Some(elem_forwarding.from.clone())
|
return Some(elem_forwarding.from.clone());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
None
|
None
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
use crate::config::Config;
|
use crate::config::Config;
|
||||||
|
|
||||||
mod config;
|
mod config;
|
||||||
mod utils;
|
|
||||||
mod server;
|
mod server;
|
||||||
|
mod utils;
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
let config = Config::from_json("config.json".to_string());
|
let config = Config::from_json("config.json".to_string());
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
use std::net::UdpSocket;
|
|
||||||
use colored::Colorize;
|
|
||||||
use crate::config::Config;
|
use crate::config::Config;
|
||||||
|
use colored::Colorize;
|
||||||
|
use std::net::UdpSocket;
|
||||||
|
|
||||||
pub fn listen(config: &Config) {
|
pub fn listen(config: &Config) {
|
||||||
let serv_config = config;
|
let serv_config = config;
|
||||||
@@ -29,15 +29,18 @@ pub fn listen(config: &Config) {
|
|||||||
|
|
||||||
let forwarding_addr_opt = serv_config.is_forwarded(src_addr.to_string());
|
let forwarding_addr_opt = serv_config.is_forwarded(src_addr.to_string());
|
||||||
|
|
||||||
if forwarding_addr_opt.is_some() {
|
if let Some(forwarding_addr) = forwarding_addr_opt {
|
||||||
let forwarding_addr = forwarding_addr_opt.unwrap();
|
|
||||||
|
|
||||||
socket
|
socket
|
||||||
.send_to(message.as_bytes(), forwarding_addr)
|
.send_to(message.as_bytes(), forwarding_addr)
|
||||||
.expect("Error forwarding message to another ip.");
|
.expect("Error forwarding message to another ip.");
|
||||||
}
|
}
|
||||||
|
|
||||||
println!("{}-{}: {}", src_addr.to_string().green(), chrono::Local::now(), message);
|
println!(
|
||||||
|
"{}-{}: {}",
|
||||||
|
src_addr.to_string().green(),
|
||||||
|
chrono::Local::now(),
|
||||||
|
message
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user