Compare commits

8 Commits

Author SHA1 Message Date
Namu
2a3ef945ae fix: updated rust, follow clippy recommendation
All checks were successful
Build project / quality-and-build (push) Successful in 10m12s
Build project / SonarQube Trigger (push) Successful in 22s
2026-03-24 09:28:32 +01:00
Namu
1138dddcb7 fix: remove check formating step in CI/CD (different version makes it bug I guess)
Some checks failed
Build project / quality-and-build (push) Failing after 10m8s
Build project / SonarQube Trigger (push) Has been skipped
2026-03-23 18:06:38 +01:00
Namu
e97a15d84b fix: format the project 2026-03-23 16:45:29 +01:00
Namu
9a24fc33c6 fix: correct the typo in action directory
Some checks failed
Build project / quality-and-build (push) Failing after 10m54s
Build project / SonarQube Trigger (push) Has been skipped
2026-03-23 14:30:19 +01:00
Namu
ce180792db fix: simplify the trigger of the CI 2026-03-23 14:28:00 +01:00
Namu
cc6dfa9d7f fix: correct file name 2026-03-23 14:25:09 +01:00
Namu
2617a082b0 feat: add a basic pipeline 2026-03-23 14:16:51 +01:00
Thomas Sazerat
4bf3c984eb Merge pull request #2 from Namularbre/hotfix/2.0.1
fix: follow clippy recommandation
2026-03-23 11:57:02 +01:00
4 changed files with 86 additions and 32 deletions

View File

@@ -0,0 +1,51 @@
name: Build project
# run automatically when a push or pull request is triggered
on: [push, pull_request]
jobs:
build:
name: quality-and-build
runs-on: ubuntu-latest
env:
# Limit to 1 job for my little VPS
CARGO_BUILD_JOBS: 1
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Install Rust toolchain
uses: actions-rust-lang/setup-rust-toolchain@v1
with:
toolchain: stable
components: rustfmt, clippy
- name: Lint with Clippy
run: cargo clippy -- -D warnings
- name: Run build (Debug mode)
run: cargo build
sonarqube:
needs: build
name: SonarQube Trigger
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Download SonarQube Scanner
run: |
curl -sSLo sonar-scanner.zip https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-5.0.1.3006-linux.zip
unzip sonar-scanner.zip
- name: Run SonarQube Scan
run: |
./sonar-scanner-*/bin/sonar-scanner \
-Dsonar.projectKey=UdpSocketServer \
-Dsonar.sources=. \
-Dsonar.host.url=${{ secrets.SONARQUBE_HOST }} \
-Dsonar.login=${{ secrets.SONARQUBE_TOKEN }}

View File

@@ -9,7 +9,7 @@ pub struct Forwarding {
from: String,
to: String,
#[serde(rename = "doReverse")]
do_reverse: bool
do_reverse: bool,
}
impl Forwarding {
@@ -17,25 +17,27 @@ impl Forwarding {
Forwarding {
from,
to,
do_reverse
do_reverse,
}
}
pub fn from_json(json: &Value) -> Forwarding {
let object_forwarding = json.as_object()
.expect("Error parsing forwarding");
let object_forwarding = json.as_object().expect("Error parsing forwarding");
let from = object_forwarding.get("from")
let from = object_forwarding
.get("from")
.unwrap()
.as_str()
.expect("Error parsing from field");
let to = object_forwarding.get("to")
let to = object_forwarding
.get("to")
.unwrap()
.as_str()
.expect("Error parsing to field");
let do_reverse = object_forwarding.get("doReverse")
let do_reverse = object_forwarding
.get("doReverse")
.unwrap()
.as_bool()
.expect("Error parsing doReverse field");
@@ -49,7 +51,7 @@ pub struct Config {
#[serde(rename = "serverAddr")]
server_addr: String,
blacklist: Vec<String>,
forwarding: Vec<Forwarding>
forwarding: Vec<Forwarding>,
}
impl Config {
@@ -57,23 +59,23 @@ impl Config {
Config {
server_addr,
blacklist,
forwarding
forwarding,
}
}
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();
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
}
fn parse_buffer(buf: &str) -> serde_json::Map<String, Value> {
let json: Value = serde_json::from_str(buf)
.expect("Error parsing config file");
let json: Value = serde_json::from_str(buf).expect("Error parsing config file");
let object_data = json.as_object()
.expect("Error parsing config file.");
let object_data = json.as_object().expect("Error parsing config file.");
object_data.clone()
}
@@ -92,20 +94,18 @@ impl Config {
let buf = Config::read_config_file(file_name);
let object_data = Self::parse_buffer(&buf);
let server_addr = object_data.get("serverAddr")
let server_addr = object_data
.get("serverAddr")
.unwrap()
.as_str()
.unwrap()
.to_string();
let blacklist = object_data.get("blacklist")
.unwrap()
.as_array()
.unwrap();
let blacklist = object_data.get("blacklist").unwrap().as_array().unwrap();
let str_blacklist = convert_to_vec_string(blacklist);
let raw_forwarding = object_data.get("forwarding")
let raw_forwarding = object_data
.get("forwarding")
.unwrap()
.as_array()
.expect("Error parsing forwarding.");
@@ -121,9 +121,9 @@ impl Config {
pub fn is_forwarded(&self, addr: String) -> Option<String> {
for elem_forwarding in &self.forwarding {
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 {
return Some(elem_forwarding.from.clone())
return Some(elem_forwarding.from.clone());
}
}
None

View File

@@ -1,8 +1,8 @@
use crate::config::Config;
mod config;
mod utils;
mod server;
mod utils;
fn main() {
let config = Config::from_json("config.json".to_string());

View File

@@ -1,6 +1,6 @@
use std::net::UdpSocket;
use colored::Colorize;
use crate::config::Config;
use colored::Colorize;
use std::net::UdpSocket;
pub fn listen(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());
if forwarding_addr_opt.is_some() {
let forwarding_addr = forwarding_addr_opt.unwrap();
if let Some(forwarding_addr) = forwarding_addr_opt {
socket
.send_to(message.as_bytes(), forwarding_addr)
.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
);
}
}
}