Skip to content

Commit eadc2fa

Browse files
committed
Fix address setting detect
1 parent fb63855 commit eadc2fa

File tree

3 files changed

+38
-18
lines changed

3 files changed

+38
-18
lines changed

Cargo.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dev/dev.sql

Lines changed: 3 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,6 @@ CREATE TYPE node_status AS ENUM ('online', 'offline');
33
CREATE TYPE conn_status AS ENUM ('active', 'expired');
44
CREATE TYPE proto AS ENUM ('vless_grpc', 'vless_xtls', 'vmess', 'shadowsocks');
55

6-
CREATE TABLE users (
7-
id UUID PRIMARY KEY,
8-
username TEXT UNIQUE,
9-
created_at TIMESTAMP DEFAULT NOW(),
10-
modified_at TIMESTAMP DEFAULT NOW()
11-
);
12-
136
CREATE TABLE connections (
147
id UUID PRIMARY KEY,
158
user_id UUID REFERENCES users(id) ON DELETE CASCADE,
@@ -85,9 +78,9 @@ ALTER TYPE proto ADD VALUE 'wireguard';
8578

8679
ALTER TABLE connections
8780
ADD COLUMN wg_privkey TEXT,
88-
ADD COLUMN wg_pubkey TEXT
89-
ADD COLUMN wg_address TEXT
90-
ADD COLUMN node_id UUID
81+
ADD COLUMN wg_pubkey TEXT,
82+
ADD COLUMN wg_address TEXT,
83+
ADD COLUMN node_id UUID;
9184

9285
ALTER TABLE nodes DROP COLUMN inbounds;
9386

@@ -104,15 +97,9 @@ ALTER TABLE inbounds ADD COLUMN modified_at TIMESTAMP WITH TIME ZONE DEFAULT NOW
10497
CREATE UNIQUE INDEX inbounds_node_id_tag_key
10598
ON inbounds (node_id, tag);
10699

107-
ALTER TABLE users
108-
ALTER COLUMN daily_limit_mb DROP NOT NULL;
109-
110-
111100
ALTER TABLE nodes ADD COLUMN cores INTEGER NOT NULL DEFAULT 1;
112101
ALTER TABLE nodes ADD COLUMN max_bandwidth_bps BIGINT NOT NULL DEFAULT 100000000;
113102

114-
DROP TABLE users;
115-
116103
ALTER TABLE connections
117104
DROP COLUMN is_trial,
118105
DROP COLUMN daily_limit_mb,

src/config/settings.rs

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -244,7 +244,39 @@ impl NodeConfig {
244244
raw.hostname.unwrap()
245245
};
246246

247-
let (address, interface) = if let Some(ref interface_name) = raw.default_interface {
247+
// Если указан адрес - используем его
248+
let (address, interface) = if let Some(user_address) = raw.address {
249+
// Пользователь указал адрес (скорее всего внешний/публичный)
250+
251+
// Для интерфейса используем либо указанный, либо дефолтный
252+
let interface = if let Some(ref interface_name) = raw.default_interface {
253+
// Проверяем существование интерфейса
254+
let interfaces = get_interfaces();
255+
if let Some(_interface) = interfaces.iter().find(|i| &i.name == interface_name) {
256+
interface_name.clone()
257+
} else {
258+
return Err(PonyError::Custom(
259+
format!("Validation error: Interface {} not found", interface_name).into(),
260+
));
261+
}
262+
} else {
263+
// Используем дефолтный интерфейс
264+
match get_default_interface() {
265+
Ok(interface) => interface.name,
266+
Err(e) => {
267+
// Если не можем получить дефолтный интерфейс, используем placeholder
268+
eprintln!(
269+
"Warning: Cannot get default interface: {}. Using 'default'.",
270+
e
271+
);
272+
"default".to_string()
273+
}
274+
}
275+
};
276+
277+
(user_address, interface)
278+
} else if let Some(ref interface_name) = raw.default_interface {
279+
// Пользователь указал только интерфейс, адрес берем с интерфейса
248280
let interfaces = get_interfaces();
249281
if let Some(interface) = interfaces.iter().find(|i| &i.name == interface_name) {
250282
match interface.ipv4.first() {
@@ -262,6 +294,7 @@ impl NodeConfig {
262294
));
263295
}
264296
} else {
297+
// Ни адрес, ни интерфейс не указаны - используем дефолтный интерфейс
265298
match get_default_interface() {
266299
Ok(interface) => {
267300
if interface.ipv4.is_empty() {

0 commit comments

Comments
 (0)