Skip to content

Commit 57b3229

Browse files
authored
Merge pull request #4 from TNK-Studio/dev
[ADD] add edit server menu
2 parents ffe548a + 83b8f17 commit 57b3229

File tree

10 files changed

+515
-190
lines changed

10 files changed

+515
-190
lines changed

README.md

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
# gortal
2-
A SSH Portal written by Go, use to manage & jump to any servers.
2+
3+
A lightweight jumpserver written by Go, use to manage & jump to any servers.

config/config.go

+14-16
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66
"log"
77
"os"
88

9+
"github.com/TNK-Studio/gortal/utils/logger"
910
"gopkg.in/yaml.v2"
1011
)
1112

@@ -56,24 +57,24 @@ type SSHUser struct {
5657
func (c *Config) ReadFrom(path string) error {
5758
configFile, err := ioutil.ReadFile(path)
5859
if err != nil {
59-
fmt.Printf("Error reading YAML file: %s\n", err)
60+
logger.Logger.Infof("Error reading YAML file: %s\n", err)
6061
return err
6162
}
6263

6364
err = yaml.Unmarshal([]byte(configFile), c)
6465
if err != nil {
65-
fmt.Printf("Error parsing YAML file: %s\n", err)
66+
logger.Logger.Infof("Error parsing YAML file: %s\n", err)
6667
return err
6768
}
6869
return nil
6970
}
7071

7172
// SaveTo save config
7273
func (c *Config) SaveTo(path string) error {
73-
fmt.Printf("Save config to '%s'\n", path)
74+
logger.Logger.Infof("Save config to '%s'\n", path)
7475
bytes, err := yaml.Marshal(c)
7576
if err != nil {
76-
fmt.Printf("Error parsing YAML obj: %s\n", err)
77+
logger.Logger.Infof("Error parsing YAML obj: %s\n", err)
7778
return err
7879
}
7980
ioutil.WriteFile(path, bytes, 0644)
@@ -151,9 +152,9 @@ func (c *Config) GetUserByUsername(username string) *User {
151152
// }
152153

153154
// GetUserServers get user servers list
154-
func (c *Config) GetUserServers(user *User) []*Server {
155-
servers := make([]*Server, 0)
156-
for _, server := range *c.Servers {
155+
func (c *Config) GetUserServers(user *User) map[string]*Server {
156+
servers := make(map[string]*Server, 0)
157+
for serverKey, server := range *c.Servers {
157158
loop:
158159
for _, sshUser := range *server.SSHUsers {
159160
if sshUser.AllowUsers == nil {
@@ -166,26 +167,23 @@ func (c *Config) GetUserServers(user *User) []*Server {
166167
}
167168
}
168169
}
169-
servers = append(
170-
servers,
171-
server,
172-
)
170+
servers[serverKey] = server
173171
}
174172
return servers
175173
}
176174

177175
// GetServerSSHUsers get all allow server' s ssh users
178-
func (c *Config) GetServerSSHUsers(user *User, server *Server) []*SSHUser {
179-
sshUsers := make([]*SSHUser, 0)
180-
for _, sshUser := range *server.SSHUsers {
176+
func (c *Config) GetServerSSHUsers(user *User, server *Server) map[string]*SSHUser {
177+
sshUsers := make(map[string]*SSHUser, 0)
178+
for sshUserKey, sshUser := range *server.SSHUsers {
181179
if sshUser.AllowUsers == nil {
182-
sshUsers = append(sshUsers, sshUser)
180+
sshUsers[sshUserKey] = sshUser
183181
continue
184182
}
185183

186184
for _, username := range *sshUser.AllowUsers {
187185
if user.Username == username {
188-
sshUsers = append(sshUsers, sshUser)
186+
sshUsers[sshUserKey] = sshUser
189187
}
190188
}
191189
}

core/jump/g.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ func (jps *JumpService) Run(s *ssh.Session) {
3838
}
3939

4040
func setupConfig() error {
41-
fmt.Println("Config file not found. Setup config.", *config.ConfPath)
41+
logger.Logger.Info("Config file not found. Setup config.", *config.ConfPath)
4242
_, _, err := pui.CreateUser(false, true, nil)
4343
if err != nil {
4444
return err
@@ -73,7 +73,7 @@ func Configurate() error {
7373
if *config.ConfPath == "" {
7474
return errors.New("Please specify a config file. ")
7575
}
76-
fmt.Println("Read config file", *config.ConfPath)
76+
logger.Logger.Info("Read config file", *config.ConfPath)
7777
if !config.ConfigFileExisted(*config.ConfPath) {
7878
err := setupConfig()
7979
return err

core/pui/g.go

+21-13
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package pui
22

33
import (
4-
"fmt"
4+
"errors"
55

66
"github.com/TNK-Studio/gortal/core/sshd"
77
"github.com/TNK-Studio/gortal/utils/logger"
@@ -20,17 +20,17 @@ func (ui *PUI) SetSession(s *ssh.Session) {
2020
}
2121

2222
// ShowMenu show menu
23-
func (ui *PUI) ShowMenu(label string, menu *[]MenuItem, BackOptionLabel string) {
23+
func (ui *PUI) ShowMenu(label string, menu *[]*MenuItem, BackOptionLabel string, selectedChain []*MenuItem) {
2424
for {
2525
menuLabels := make([]string, 0)
26-
menuItems := make([]MenuItem, 0)
26+
menuItems := make([]*MenuItem, 0)
2727

2828
if menu == nil {
29-
return
29+
break
3030
}
3131

3232
for index, menuItem := range *menu {
33-
if menuItem.IsShow == nil || menuItem.IsShow(index, &menuItem, ui.sess) {
33+
if menuItem.IsShow == nil || menuItem.IsShow(index, menuItem, ui.sess, selectedChain) {
3434
menuLabels = append(menuLabels, menuItem.Label)
3535
menuItems = append(menuItems, menuItem)
3636
}
@@ -50,21 +50,22 @@ func (ui *PUI) ShowMenu(label string, menu *[]MenuItem, BackOptionLabel string)
5050

5151
logger.Logger.Debugf("Selected index: %d subMenuLabel: %+v err: %s", index, subMenuLabel, err)
5252
if err != nil {
53-
fmt.Printf("Select menu error %s\n", err)
54-
return
53+
logger.Logger.Infof("Select menu error %s\n", err)
54+
break
5555
}
5656

5757
if index == backIndex {
5858
break
5959
}
60-
selected := &(menuItems[index])
60+
61+
selected := menuItems[index]
6162

6263
logger.Logger.Debugf("Selected: %+v", selected)
6364

6465
if selected.GetSubMenu != nil {
6566

6667
getSubMenu := selected.GetSubMenu
67-
subMenu := getSubMenu(index, selected, ui.sess)
68+
subMenu := getSubMenu(index, selected, ui.sess, selectedChain)
6869

6970
if subMenu != nil && len(*subMenu) > 0 {
7071
back := "back"
@@ -75,26 +76,33 @@ func (ui *PUI) ShowMenu(label string, menu *[]MenuItem, BackOptionLabel string)
7576
if selected.SubMenuTitle != "" {
7677
subMenuLabel = selected.SubMenuTitle
7778
}
78-
ui.ShowMenu(subMenuLabel, subMenu, back)
79+
ui.ShowMenu(subMenuLabel, subMenu, back, append(selectedChain, selected))
80+
} else {
81+
noSubMenuInfo := "No options under this menu ... "
82+
if selected.NoSubMenuInfo != "" {
83+
noSubMenuInfo = selected.NoSubMenuInfo
84+
}
85+
sshd.ErrorInfo(errors.New(noSubMenuInfo), ui.sess)
7986
}
8087
}
8188

8289
if selected.SelectedFunc != nil {
8390
selectedFunc := selected.SelectedFunc
8491
logger.Logger.Debugf("Run selectFunc %+v", selectedFunc)
85-
err := selectedFunc(index, selected, ui.sess)
92+
err := selectedFunc(index, selected, ui.sess, selectedChain)
8693
if err != nil {
8794
logger.Logger.Errorf("Run selected func err: %s", err)
8895
sshd.ErrorInfo(err, ui.sess)
8996
}
9097
if selected.BackAfterSelected == true {
91-
return
98+
break
9299
}
93100
}
94101
}
95102
}
96103

97104
// ShowMainMenu show main menu
98105
func (ui *PUI) ShowMainMenu() {
99-
ui.ShowMenu("Please select the function you need", MainMenu, "Quit")
106+
selectedChain := make([]*MenuItem, 0)
107+
ui.ShowMenu("Please select the function you need", MainMenu, "Quit", selectedChain)
100108
}

0 commit comments

Comments
 (0)