diff --git a/README.md b/README.md index 17530467..9d372d91 100644 --- a/README.md +++ b/README.md @@ -16,30 +16,28 @@ Termimx Banner

-# Description -Termix is an open-source forever free self-hosted SSH (other protocols planned, see [Planned Features](#planned-features)) management panel inspired by [Nexterm](https://github.com/gnmyt/Nexterm). Its purpose is to provide an all-in-one docker-hosted web solution to manage your servers in one easy place. I'm using this project to help me learn [React](https://github.com/facebook/react), [Vite](https://github.com/vitejs/vite-plugin-react), and [Docker](https://www.docker.com) but also because I could never settle on a server management software that I enjoyed to use. +# Overview +Termix is an open-source forever free self-hosted SSH (other protocols planned, see [Planned Features](#planned-features)) server management panel inspired by [Nexterm](https://github.com/gnmyt/Nexterm). Its purpose is to provide an all-in-one docker-hosted web solution to manage your servers in one easy place. I'm using this project to help me learn [React](https://github.com/facebook/react), [Vite](https://github.com/vitejs/vite-plugin-react), and [Docker](https://www.docker.com) but also because I could never settle on a server management software that I enjoyed to use. > [!WARNING] -> This app is in the VERY early stages of development. Expect bugs, data loss, and possibly even security issues! +> This app is in the VERY early stages of development. Expect bugs, data loss, and unexplainable issues! For that reason, I recommend you securely tunnel your connection through a VPN. + +# Features +- SSH (password auth only) +- Split Screen (Up to 4) & Tab System # Planned Features -- [x] SSH -- [ ] VNC -- [ ] RDP -- [ ] SMTP (build in file transfer) -- [ ] Split Screen & Tabs -- [ ] ChatGPT/Ollama Integration (for commands) -- [ ] Login Screen - -# How Termix is Different -Before developing Termix, I faced the issue of a server management panel that did not have every feature I liked. [Guacamole](https://guacamole.apache.org/) had poor copy/paste abilities and a poor UI. [Shellngn](https://shellngn.com/) was too expensive and all other alternatives had one major problem with them. I plan to develop the management panel of my dreams with even an AI integration for those pesky commands I always forget the syntax of. +- Key Auth for SSH +- VNC +- RDP +- SFTP (build in file transfer) +- ChatGPT/Ollama Integration (for commands) +- Login Screen +- User Management +- Apps (like notes, AI, etc) # Installation -View the Termix [Wiki](https://github.com/LukeGus/Termix/wiki) for information on how to install Termix. You can also use these links to go directly to guide. [Docker](https://github.com/LukeGus/Termix/wiki/Docker) or [Manual](https://github.com/LukeGus/Termix/wiki/Manual). - -# Known Bugs -### Please create an [Issue](https://github.com/LukeGus/Termix/issues) if you find any problems! -Start session button stays connected even if SSH fails to connect. +Visit the Termix [Wiki](https://github.com/LukeGus/Termix/wiki) for information on how to install Termix. You can also use these links to go directly to guide. [Docker](https://github.com/LukeGus/Termix/wiki/Docker) or [Manual](https://github.com/LukeGus/Termix/wiki/Manual). # Show-off diff --git a/docker/Dockerfile b/docker/Dockerfile index aea15f32..f89529c1 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -33,7 +33,7 @@ RUN mkdir -p /var/log/nginx && \ # Expose ports EXPOSE 8080 8081 -# Use a start script to run both services +# Use a entrypoint script to run all services COPY docker/entrypoint.sh /entrypoint.sh RUN chmod +x /entrypoint.sh CMD ["/entrypoint.sh"] \ No newline at end of file diff --git a/repo-images/DemoImage1.png b/repo-images/DemoImage1.png index f1641293..68f6e262 100644 Binary files a/repo-images/DemoImage1.png and b/repo-images/DemoImage1.png differ diff --git a/src/App.jsx b/src/App.jsx index 11107ce1..079a07e9 100644 --- a/src/App.jsx +++ b/src/App.jsx @@ -38,6 +38,47 @@ function App() { }; }, []); + useEffect(() => { + terminals.forEach((terminal) => { + if ( + (terminal.id === activeTab || splitTabIds.includes(terminal.id)) && + terminal.terminalRef?.resizeTerminal + ) { + terminal.terminalRef.resizeTerminal(); + } + }); + }, [splitTabIds, activeTab, terminals]); + + useEffect(() => { + const handleResize = () => { + terminals.forEach((terminal) => { + if ( + (terminal.id === activeTab || splitTabIds.includes(terminal.id)) && + terminal.terminalRef?.resizeTerminal + ) { + terminal.terminalRef.resizeTerminal(); + } + }); + }; + + window.addEventListener("resize", handleResize); + + return () => { + window.removeEventListener("resize", handleResize); + }; + }, [splitTabIds, activeTab, terminals]); + + useEffect(() => { + terminals.forEach((terminal) => { + if ( + (terminal.id === activeTab || splitTabIds.includes(terminal.id)) && + terminal.terminalRef?.resizeTerminal + ) { + terminal.terminalRef.resizeTerminal(); + } + }); + }, [splitTabIds]); + const handleAddHost = () => { if (form.ip && form.user && form.password && form.port) { const newTerminal = { @@ -88,13 +129,10 @@ function App() { const getLayoutStyle = () => { if (splitTabIds.length === 1) { - // Horizontal split (2 tabs: left-right) return "flex flex-row h-full gap-4"; } else if (splitTabIds.length > 1) { - // 2x2 Grid layout (4 tabs max), with evenly spaced rows return "grid grid-cols-2 grid-rows-2 gap-4 h-full overflow-hidden"; } - // No split, main tab takes the entire screen return "flex flex-col h-full"; }; @@ -177,6 +215,7 @@ function App() { { if (ref && !terminal.terminalRef) { setTerminals((prev) => diff --git a/src/Launchpad.jsx b/src/Launchpad.jsx index 2b503ecb..a59d5595 100644 --- a/src/Launchpad.jsx +++ b/src/Launchpad.jsx @@ -56,7 +56,10 @@ function Launchpad({ onClose }) { >

Launchpad

-

W.I.P. Feature

+

A one-stop shop for adding hosts, apps (AI, notes, etc.), and all new features to come! Coming to you in a future update. Stay tuned!

+

+ Can also be opened using Ctrl + L +