feat: add ssh_expose_lan configuration and localization support
This commit is contained in:
parent
dcbced25c8
commit
6e0fdf1c92
|
|
@ -1400,7 +1400,7 @@ checksum = "a4ae5f15dda3c708c0ade84bfee31ccab44a3da4f88015ed22f63732abe300c8"
|
|||
|
||||
[[package]]
|
||||
name = "dbx"
|
||||
version = "0.3.2"
|
||||
version = "0.3.3"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"chrono",
|
||||
|
|
|
|||
|
|
@ -166,6 +166,7 @@ impl AppState {
|
|||
&config.ssh_key_path,
|
||||
&config.host,
|
||||
config.port,
|
||||
config.ssh_expose_lan,
|
||||
)
|
||||
.await?;
|
||||
|
||||
|
|
|
|||
|
|
@ -160,6 +160,7 @@ impl TunnelManager {
|
|||
ssh_key_path: &str,
|
||||
remote_host: &str,
|
||||
remote_port: u16,
|
||||
expose_to_lan: bool,
|
||||
) -> Result<u16, String> {
|
||||
let local_port = portpicker::pick_unused_port().ok_or("No available port")?;
|
||||
|
||||
|
|
@ -167,7 +168,8 @@ impl TunnelManager {
|
|||
connect_and_authenticate(ssh_host, ssh_port, ssh_user, ssh_password, ssh_key_path)
|
||||
.await?;
|
||||
|
||||
let listener = TcpListener::bind(("127.0.0.1", local_port))
|
||||
let bind_addr = if expose_to_lan { "0.0.0.0" } else { "127.0.0.1" };
|
||||
let listener = TcpListener::bind((bind_addr, local_port))
|
||||
.await
|
||||
.map_err(|e| format!("Failed to bind local port: {e}"))?;
|
||||
|
||||
|
|
|
|||
|
|
@ -32,6 +32,8 @@ pub struct ConnectionConfig {
|
|||
#[serde(default)]
|
||||
pub ssh_key_path: String,
|
||||
#[serde(default)]
|
||||
pub ssh_expose_lan: bool,
|
||||
#[serde(default)]
|
||||
pub ssl: bool,
|
||||
#[serde(default)]
|
||||
pub connection_string: Option<String>,
|
||||
|
|
|
|||
|
|
@ -54,6 +54,7 @@ const defaultForm = (): Omit<ConnectionConfig, "id"> => ({
|
|||
ssh_user: "",
|
||||
ssh_password: "",
|
||||
ssh_key_path: "",
|
||||
ssh_expose_lan: false,
|
||||
ssl: false,
|
||||
connection_string: undefined,
|
||||
});
|
||||
|
|
@ -155,6 +156,7 @@ watch(() => props.editConfig, (config) => {
|
|||
ssh_user: config.ssh_user || "",
|
||||
ssh_password: config.ssh_password || "",
|
||||
ssh_key_path: config.ssh_key_path || "",
|
||||
ssh_expose_lan: config.ssh_expose_lan || false,
|
||||
ssl: config.ssl || false,
|
||||
connection_string: config.connection_string,
|
||||
};
|
||||
|
|
@ -514,6 +516,13 @@ watch([() => editingId.value, () => open.value], () => {
|
|||
<Label class="text-right text-xs">{{ t('connection.sshKeyPath') }}</Label>
|
||||
<Input v-model="form.ssh_key_path" class="col-span-3" placeholder="~/.ssh/id_rsa" />
|
||||
</div>
|
||||
<div class="grid grid-cols-4 items-center gap-4">
|
||||
<span />
|
||||
<label class="col-span-3 flex items-center gap-2 cursor-pointer">
|
||||
<input type="checkbox" v-model="form.ssh_expose_lan" class="mr-0" />
|
||||
<span class="text-xs text-muted-foreground">{{ t('connection.sshExposeLan') }}</span>
|
||||
</label>
|
||||
</div>
|
||||
</template>
|
||||
</template>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -58,6 +58,7 @@ export default {
|
|||
sshPassword: "SSH Password",
|
||||
sshPasswordPlaceholder: "Leave empty to use key",
|
||||
sshKeyPath: "Key Path",
|
||||
sshExposeLan: "Expose tunnel to LAN",
|
||||
compatible: "Compatible",
|
||||
mainstream: "Popular",
|
||||
color: "Color",
|
||||
|
|
|
|||
|
|
@ -60,6 +60,7 @@ export default {
|
|||
sshPassword: "SSH 密码",
|
||||
sshPasswordPlaceholder: "留空则使用密钥",
|
||||
sshKeyPath: "密钥路径",
|
||||
sshExposeLan: "允许局域网访问隧道",
|
||||
compatible: "兼容",
|
||||
mainstream: "主流",
|
||||
color: "颜色",
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@ export interface ConnectionConfig {
|
|||
ssh_user?: string;
|
||||
ssh_password?: string;
|
||||
ssh_key_path?: string;
|
||||
ssh_expose_lan?: boolean;
|
||||
ssl?: boolean;
|
||||
connection_string?: string;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue