Basic auth

This commit is contained in:
Xavier Henner
2019-08-17 00:16:57 +02:00
parent 9eff9ce803
commit 2eb4f9e4ea
5 changed files with 78 additions and 5 deletions

View File

@@ -11,17 +11,24 @@ import (
"github.com/pyke369/golang-support/rcache"
)
type OpenVpnPassword struct {
User string
Pass string
}
type OpenVpnSrv struct {
Remote string `json:"active-vpn"`
Status string `json:"status"`
Provider string `json:"provider"`
Identifier string `json:"identifier"`
chanHold chan bool
chanPass chan OpenVpnPassword
m sync.RWMutex
ret chan []string
buf *bufio.ReadWriter
mgt *OpenVpnMgt
hold bool
authCache *OpenVpnPassword
}
func (v *OpenVpnSrv) Lock() {
@@ -36,6 +43,7 @@ func NewOpenVpnSrv(conn net.Conn, mgt *OpenVpnMgt) *OpenVpnSrv {
return &OpenVpnSrv{
buf: bufio.NewReadWriter(bufio.NewReader(conn), bufio.NewWriter(conn)),
chanHold: make(chan bool),
chanPass: make(chan OpenVpnPassword),
ret: make(chan []string),
mgt: mgt,
hold: false,
@@ -122,7 +130,6 @@ func (v *OpenVpnSrv) GetEcho() {
v.Provider = match[2]
}
}
}
func (v *OpenVpnSrv) Response(response []string) {
@@ -168,6 +175,37 @@ func (v *OpenVpnSrv) SetRemote(server string) error {
return nil
}
func (v *OpenVpnSrv) NeedPassword(line string) {
v.mgt.Debug(line)
v.Status = "Need Password"
switch line {
case ">PASSWORD:Need 'Auth' username/password":
v.Status = "Need Password"
case ">PASSWORD:Verification Failed: 'Auth'":
v.authCache = nil
v.Status = "Auth Failed"
return
}
if v.authCache == nil {
ident := <-v.chanPass
v.authCache = &ident
}
switch line {
case ">PASSWORD:Need 'Auth' username/password":
v.sendCommand([]string{fmt.Sprintf("username \"Auth\" %s", v.authCache.User)})
v.sendCommand([]string{fmt.Sprintf("password \"Auth\" %s", v.authCache.Pass)})
}
}
func (v *OpenVpnSrv) AuthUserPass(user, pass string) {
auth := OpenVpnPassword{user, pass}
v.authCache = &auth
if v.Status == "Need Password" {
v.Status = "Authenticate"
v.chanPass <- auth
}
}
func (v *OpenVpnSrv) waitForRelase() {
v.Status = "Hold"
if v.hold {