mirror of
https://github.com/apernet/hysteria.git
synced 2025-04-03 04:27:39 +03:00
59 lines
1.4 KiB
Go
59 lines
1.4 KiB
Go
package auth
|
|
|
|
import (
|
|
"errors"
|
|
"net"
|
|
"net/http"
|
|
"time"
|
|
|
|
"github.com/apernet/hysteria/core/cs"
|
|
"github.com/yosuke-furukawa/json5/encoding/json5"
|
|
)
|
|
|
|
func PasswordAuthFunc(rawMsg json5.RawMessage) (cs.ConnectFunc, error) {
|
|
var pwds []string
|
|
err := json5.Unmarshal(rawMsg, &pwds)
|
|
if err != nil {
|
|
// not a string list, legacy format?
|
|
var pwdConfig map[string]string
|
|
err = json5.Unmarshal(rawMsg, &pwdConfig)
|
|
if err != nil || len(pwdConfig["password"]) == 0 {
|
|
// still no, invalid config
|
|
return nil, errors.New("invalid config")
|
|
}
|
|
// yes it is
|
|
pwds = []string{pwdConfig["password"]}
|
|
}
|
|
return func(addr net.Addr, auth []byte, sSend uint64, sRecv uint64) (bool, string) {
|
|
for _, pwd := range pwds {
|
|
if string(auth) == pwd {
|
|
return true, "Welcome"
|
|
}
|
|
}
|
|
return false, "Wrong password"
|
|
}, nil
|
|
}
|
|
|
|
func ExternalAuthFunc(rawMsg json5.RawMessage) (cs.ConnectFunc, error) {
|
|
var extConfig map[string]string
|
|
err := json5.Unmarshal(rawMsg, &extConfig)
|
|
if err != nil {
|
|
return nil, errors.New("invalid config")
|
|
}
|
|
if len(extConfig["http"]) != 0 {
|
|
hp := &HTTPAuthProvider{
|
|
Client: &http.Client{
|
|
Timeout: 10 * time.Second,
|
|
},
|
|
URL: extConfig["http"],
|
|
}
|
|
return hp.Auth, nil
|
|
} else if len(extConfig["cmd"]) != 0 {
|
|
cp := &CmdAuthProvider{
|
|
Cmd: extConfig["cmd"],
|
|
}
|
|
return cp.Auth, nil
|
|
} else {
|
|
return nil, errors.New("invalid config")
|
|
}
|
|
}
|