Commit 297a5451 authored by ibuler's avatar ibuler

[Update] 修改一些字段

parent 43e6c50b
package auth package auth
import ( import (
gossh "golang.org/x/crypto/ssh" "strings"
"github.com/gliderlabs/ssh" "github.com/gliderlabs/ssh"
gossh "golang.org/x/crypto/ssh"
"cocogo/pkg/cctx"
"cocogo/pkg/common"
"cocogo/pkg/logger"
"cocogo/pkg/service"
) )
func checkAuth(ctx ssh.Context, password, publicKey string) (ok bool) {
username := ctx.User()
remoteAddr := strings.Split(ctx.RemoteAddr().String(), ":")[0]
user := service.Authenticate(username, password, publicKey, remoteAddr, "T")
authMethod := "publickey"
action := "Accepted"
if password != "" {
authMethod = "password"
}
if user == nil {
action = "Failed"
ok = false
} else {
ctx.SetValue(cctx.ContextKeyUser, user)
}
logger.Infof("%s %s for %s from %s", action, authMethod, username, remoteAddr)
return false
}
func CheckUserPassword(ctx ssh.Context, password string) bool { func CheckUserPassword(ctx ssh.Context, password string) bool {
return true ok := checkAuth(ctx, password, "")
return ok
} }
func CheckUserPublicKey(ctx ssh.Context, key ssh.PublicKey) bool { func CheckUserPublicKey(ctx ssh.Context, key ssh.PublicKey) bool {
//username := ctx.User() b := key.Marshal()
//b := key.Marshal() publicKey := common.Base64Encode(string(b))
//publicKeyBase64 := common.Base64Encode(string(b)) return checkAuth(ctx, "", publicKey)
//remoteAddr := ctx.RemoteAddr().String()
//authUser, err := service.CheckAuth(username, "", publicKeyBase64, remoteAddr, "T")
//if err != nil {
// return false
//}
//ctx.SetValue("LoginUser", authUser)
return true
} }
func CheckMFA(ctx ssh.Context, challenger gossh.KeyboardInteractiveChallenge) bool { func CheckMFA(ctx ssh.Context, challenger gossh.KeyboardInteractiveChallenge) bool {
return true return false
} }
package cctx
import (
"context"
"github.com/gliderlabs/ssh"
"cocogo/pkg/sdk"
)
type contextKey struct {
name string
}
var (
ContextKeyUser = &contextKey{"User"}
ContextKeyAsset = &contextKey{"asset"}
ContextKeySystemUser = &contextKey{"systemUser"}
ContextKeySSHSession = &contextKey{"sshSession"}
ContextKeyRemoteAddr = &contextKey{"remoteAddr"}
ContextKeyLocalAddr = &contextKey{"localAddr"}
ContextKeySSHCtx = &contextKey{"sshCtx"}
)
type Context interface {
context.Context
User() *sdk.User
Asset() *sdk.Asset
SystemUser() *sdk.SystemUser
SSHSession() *ssh.Session
SSHCtx() *ssh.Context
SetValue(key, value interface{})
}
type CocoContext struct {
context.Context
}
func (ctx *CocoContext) User() *sdk.User {
return ctx.Value(ContextKeyUser).(*sdk.User)
}
func (ctx *CocoContext) Asset() *sdk.Asset {
return ctx.Value(ContextKeyAsset).(*sdk.Asset)
}
func (ctx *CocoContext) SystemUser() *sdk.SystemUser {
return ctx.Value(ContextKeySystemUser).(*sdk.SystemUser)
}
func (ctx *CocoContext) SSHSession() *ssh.Session {
return ctx.Value(ContextKeySSHSession).(*ssh.Session)
}
func (ctx *CocoContext) SSHCtx() *ssh.Context {
return ctx.Value(ContextKeySSHCtx).(*ssh.Context)
}
func (ctx *CocoContext) SetValue(key, value interface{}) {
ctx.Context = context.WithValue(ctx.Context, key, value)
}
func applySessionMetadata(ctx *CocoContext, sess ssh.Session) {
ctx.SetValue(ContextKeySSHSession, &sess)
ctx.SetValue(ContextKeySSHCtx, sess.Context())
//ctx.SetValue(ContextKeyUser, &sdk.User{Username: sess.User()})
ctx.SetValue(ContextKeyLocalAddr, sess.LocalAddr())
}
func NewContext(sess ssh.Session) (*CocoContext, context.CancelFunc) {
sshCtx, cancel := context.WithCancel(sess.Context())
ctx := &CocoContext{sshCtx}
applySessionMetadata(ctx, sess)
return ctx, cancel
}
package context
import (
"context"
"github.com/gliderlabs/ssh"
"cocogo/pkg/model"
)
type UserContext struct {
context.Context
SessionCtx ssh.Context
User model.User
Asset sdk.Asset
SystemUser model.SystemUser
}
...@@ -29,18 +29,34 @@ func Debug(args ...interface{}) { ...@@ -29,18 +29,34 @@ func Debug(args ...interface{}) {
logger.Debug(args...) logger.Debug(args...)
} }
func Debugf(format string, args ...interface{}) {
logger.Debugf(format, args...)
}
func Info(args ...interface{}) { func Info(args ...interface{}) {
logger.Info(args...) logger.Info(args...)
} }
func Infof(format string, args ...interface{}) {
logger.Infof(format, args...)
}
func Warn(args ...interface{}) { func Warn(args ...interface{}) {
logger.Warn(args...) logger.Warn(args...)
} }
func Warnf(format string, args ...interface{}) {
logger.Warnf(format, args...)
}
func Error(args ...interface{}) { func Error(args ...interface{}) {
logger.Error(args...) logger.Error(args...)
} }
func Errorf(format string, args ...interface{}) {
logger.Errorf(format, args...)
}
func Panic(args ...interface{}) { func Panic(args ...interface{}) {
logrus.Panic(args...) logrus.Panic(args...)
} }
......
...@@ -57,14 +57,14 @@ func CheckAuth(username, password, publicKey, remoteAddr, loginType string) (use ...@@ -57,14 +57,14 @@ func CheckAuth(username, password, publicKey, remoteAddr, loginType string) (use
// return result.User, nil // return result.User, nil
//} //}
// //
//func (s *Service) CheckSSHPassword(ctx ssh.Value, password string) bool { //func (s *Service) CheckSSHPassword(cctx ssh.Value, password string) bool {
// //
// username := ctx.User() // username := cctx.User()
// remoteAddr := ctx.RemoteAddr().String() // remoteAddr := cctx.RemoteAddr().String()
// authUser, err := s.CheckAuth(username, password, "", remoteAddr, "T") // authUser, err := s.CheckAuth(username, password, "", remoteAddr, "T")
// if err != nil { // if err != nil {
// return false // return false
// } // }
// ctx.SetValue("LoginUser", authUser) // cctx.SetValue("LoginUser", authUser)
// return true // return true
//} //}
...@@ -20,8 +20,8 @@ package sdk ...@@ -20,8 +20,8 @@ package sdk
type User struct { type User struct {
Id string `json:"id"` Id string `json:"id"`
Username string `json:"username"`
Name string `json:"name"` Name string `json:"name"`
UserName string `json:"username"`
Email string `json:"email"` Email string `json:"email"`
Role string `json:"role"` Role string `json:"role"`
......
...@@ -2,10 +2,14 @@ package service ...@@ -2,10 +2,14 @@ package service
import "cocogo/pkg/sdk" import "cocogo/pkg/sdk"
func Authenticate(username, password, public_key, remote_addr, login_type string) { func Authenticate(username, password, publicKey, remoteAddr, loginType string) *sdk.User {
return return &sdk.User{Id: "1111111111", Username: "admin", Name: "广宏伟"}
} }
func GetUserProfile(userId string) (user sdk.User) { func GetUserProfile(userId string) (user sdk.User) {
return return
} }
func LoadUserByUsername(user *sdk.User) {
}
package handler package handler
import ( import (
"context"
//"context" //"context"
//"strconv" //"strconv"
"cocogo/pkg/model"
"cocogo/pkg/proxy"
"cocogo/pkg/sdk"
"cocogo/pkg/service"
"cocogo/pkg/userhome"
"context"
"fmt" "fmt"
"github.com/olekukonko/tablewriter"
"github.com/xlab/treeprint"
//"encoding/json" //"encoding/json"
//"fmt" //"fmt"
"io" "io"
"strconv" "strconv"
"strings" "strings"
//"strings" //"strings"
//"strconv" //"strconv"
//"strings"
"sync" "sync"
//"time" //"time"
...@@ -31,19 +19,46 @@ import ( ...@@ -31,19 +19,46 @@ import (
//"github.com/olekukonko/tablewriter" //"github.com/olekukonko/tablewriter"
//"github.com/satori/go.uuid" //"github.com/satori/go.uuid"
//"github.com/xlab/treeprint" //"github.com/xlab/treeprint"
"github.com/olekukonko/tablewriter"
"github.com/xlab/treeprint"
"golang.org/x/crypto/ssh/terminal" "golang.org/x/crypto/ssh/terminal"
"cocogo/pkg/cctx"
"cocogo/pkg/logger" "cocogo/pkg/logger"
"cocogo/pkg/model"
"cocogo/pkg/proxy"
"cocogo/pkg/sdk"
"cocogo/pkg/service"
"cocogo/pkg/userhome"
//"cocogo/pkg/proxy" //"cocogo/pkg/proxy"
//"cocogo/pkg/service"
//"cocogo/pkg/transport" //"cocogo/pkg/transport"
//"cocogo/pkg/userhome" //"cocogo/pkg/userhome"
) )
func SessionHandler(sess ssh.Session) {
_, _, ptyOk := sess.Pty()
if ptyOk {
ctx, cancel := cctx.NewContext(sess)
handler := &InteractiveHandler{
sess: sess,
user: ctx.User(),
term: terminal.NewTerminal(sess, "Opt> "),
}
logger.Infof("New connection from: %s %s", sess.User(), sess.RemoteAddr().String())
handler.Dispatch(ctx)
cancel()
} else {
_, err := io.WriteString(sess, "No PTY requested.\n")
if err != nil {
return
}
}
}
type InteractiveHandler struct { type InteractiveHandler struct {
sess ssh.Session sess ssh.Session
term *terminal.Terminal term *terminal.Terminal
user sdk.User user *sdk.User
assets model.AssetList assets model.AssetList
searchResult model.AssetList searchResult model.AssetList
nodes model.NodeList nodes model.NodeList
...@@ -69,7 +84,7 @@ func (i *InteractiveHandler) watchWinSizeChange(winCh <-chan ssh.Window) { ...@@ -69,7 +84,7 @@ func (i *InteractiveHandler) watchWinSizeChange(winCh <-chan ssh.Window) {
for { for {
select { select {
case <-ctx.Done(): case <-ctx.Done():
logger.Info("ctx done") logger.Info("Ctx done")
return return
case win, ok := <-winCh: case win, ok := <-winCh:
if !ok { if !ok {
...@@ -81,7 +96,7 @@ func (i *InteractiveHandler) watchWinSizeChange(winCh <-chan ssh.Window) { ...@@ -81,7 +96,7 @@ func (i *InteractiveHandler) watchWinSizeChange(winCh <-chan ssh.Window) {
} }
} }
func (i *InteractiveHandler) Dispatch() { func (i *InteractiveHandler) Dispatch(ctx cctx.Context) {
i.preDispatch() i.preDispatch()
_, winCh, _ := i.sess.Pty() _, winCh, _ := i.sess.Pty()
for { for {
...@@ -416,21 +431,3 @@ func ConstructAssetNodeTree(assetNodes []sdk.Node) treeprint.Tree { ...@@ -416,21 +431,3 @@ func ConstructAssetNodeTree(assetNodes []sdk.Node) treeprint.Tree {
} }
return tree return tree
} }
func SessionHandler(sess ssh.Session) {
_, _, ptyOk := sess.Pty()
if ptyOk {
handler := &InteractiveHandler{
sess: sess,
term: terminal.NewTerminal(sess, "Opt> "),
}
logger.Info("Accept one session")
handler.Dispatch()
} else {
_, err := io.WriteString(sess, "No PTY requested.\n")
if err != nil {
return
}
}
}
...@@ -64,7 +64,7 @@ func (r *userSessionHome) AddConnection(c Conn) { ...@@ -64,7 +64,7 @@ func (r *userSessionHome) AddConnection(c Conn) {
select { select {
case <-ctx.Done(): case <-ctx.Done():
log.Info(" user conn ctx done") log.Info(" user conn cctx done")
return return
default: default:
copyBuf := make([]byte, nr) copyBuf := make([]byte, nr)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment