diff options
author | Joe <rbo@gmx.us> | 2024-01-23 20:20:20 +0100 |
---|---|---|
committer | Joe <rbo@gmx.us> | 2024-01-23 20:20:20 +0100 |
commit | 730bbd15c64cf8324267176dc6ced128559ad4cd (patch) | |
tree | 8aac0527cf3616f04624ebf14e552d07396ae080 /src/c_exec.go | |
parent | go (diff) | |
download | hardflip-730bbd15c64cf8324267176dc6ced128559ad4cd.tar.gz hardflip-730bbd15c64cf8324267176dc6ced128559ad4cd.tar.bz2 hardflip-730bbd15c64cf8324267176dc6ced128559ad4cd.tar.xz hardflip-730bbd15c64cf8324267176dc6ced128559ad4cd.tar.zst hardflip-730bbd15c64cf8324267176dc6ced128559ad4cd.zip |
better org
Diffstat (limited to 'src/c_exec.go')
-rw-r--r-- | src/c_exec.go | 164 |
1 files changed, 164 insertions, 0 deletions
diff --git a/src/c_exec.go b/src/c_exec.go new file mode 100644 index 0000000..5c13f72 --- /dev/null +++ b/src/c_exec.go @@ -0,0 +1,164 @@ +/* + * ======================== + * ===== =============== + * ====== ================ + * ====== ================ + * ====== ==== ==== == + * ====== === == = = + * ====== === = == = + * = === === = == ==== + * = === === = == = = + * == ===== ==== == + * ======================== + * + * SPDX-License-Identifier: BSD-3-Clause + * + * Copyright (c) 2023-2024, Joe + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. Neither the name of the organization nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + * hardflip: src/c_exec.go + * Thu Jan 18 18:57:42 2024 + * Joe + * + * exec the command at some point + */ + +package main + +import ( + "os" + "os/exec" + "strconv" +) + +func c_exec_cmd(cmd_fmt []string) { + cmd := exec.Command(cmd_fmt[0], cmd_fmt[1:]...) + + cmd.Stdin = os.Stdin + cmd.Stdout = os.Stdout + cmd.Stderr = os.Stderr + cmd.Run() +} + +func c_format_ssh_jump(host *HostNode) string { + jump_fmt := "-oProxyCommand=ssh" + if len(host.JumpPriv) > 0 { + jump_fmt += " -i " + host.JumpPriv + } + if host.JumpPort != 0 { + jump_fmt += " -p " + strconv.Itoa(int(host.JumpPort)) + } + if len(host.JumpUser) == 0 { + jump_fmt += " root" + } else { + jump_fmt += " " + host.JumpUser + } + jump_fmt += "@" + host.Jump + " -W %h:%p" + return jump_fmt +} + +func c_format_ssh(host *HostNode) []string { + cmd_fmt := []string{"ssh"} + + if len(host.Priv) > 0 { + cmd_fmt = append(cmd_fmt, "-i", host.Priv) + } + if len(host.Jump) > 0 { + cmd_fmt = append(cmd_fmt, c_format_ssh_jump(host)) + } + if host.Port != 0 { + cmd_fmt = append(cmd_fmt, "-p", strconv.Itoa(int(host.Port))) + } + cmd_fmt = append(cmd_fmt, host.User + "@" + host.Host) + return cmd_fmt +} + +func c_format_rdp(host *HostNode) []string { + cmd_fmt := []string{"xfreerdp"} + + cmd_fmt = append(cmd_fmt, + "/v:" + host.Host, + "/u:" + host.User) + if len(host.Domain) > 0 { + cmd_fmt = append(cmd_fmt, "/d:" + host.Domain) + } + if len(host.Pass) > 0 { + cmd_fmt = append(cmd_fmt, "/p:" + host.Pass) + } + if host.Port != 0 { + cmd_fmt = append(cmd_fmt, "/port:" + strconv.Itoa(int(host.Port))) + } + if host.Dynamic == true { + cmd_fmt = append(cmd_fmt, "/dynamic-resolution") + } + if host.Quality == 0 { + cmd_fmt = append(cmd_fmt, + "-aero", "-menu-anims", "-window-drag", "-wallpaper", + "-decorations", "-fonts", "-themes", + "/bpp:8", "/compression-level:2") + } else if host.Quality == 1 { + } else { + cmd_fmt = append(cmd_fmt, + "+aero", "+menu-anims", "+window-drag", + "+decorations", "+fonts", "+themes", "/gfx:RFX", "/rfx", "/gdi:hw", + "/bpp:32") + } + cmd_fmt = append(cmd_fmt, + "/size:" + strconv.Itoa(int(host.Width)) + + "x" + strconv.Itoa(int(host.Height))) + return cmd_fmt +} + +func c_format_cmd(host *HostNode, term string) { + var cmd_fmt []string + + switch host.Protocol { + case 0: + cmd_fmt = c_format_ssh(host) + case 1: + cmd_fmt = c_format_rdp(host) + default: + c_die("type not found", nil) + } + if len(term) > 0 { + // TODO: setsid + if term == "$TERMINAL" { + term = os.Getenv("TERMINAL") + } + cmd_fmt = append([]string{"setsid", term, "-e"}, cmd_fmt...) + } + c_exec_cmd(cmd_fmt) +} + +func c_exec(host *HostNode, term string) { + if host == nil { + return + } + c_format_cmd(host, term) +} |