| package auth | |
| import ( | |
| "net" | |
| "os/exec" | |
| "strconv" | |
| "strings" | |
| "github.com/apernet/hysteria/core/v2/server" | |
| ) | |
| var _ server.Authenticator = &CommandAuthenticator{} | |
| type CommandAuthenticator struct { | |
| Cmd string | |
| } | |
| func (a *CommandAuthenticator) Authenticate(addr net.Addr, auth string, tx uint64) (ok bool, id string) { | |
| cmd := exec.Command(a.Cmd, addr.String(), auth, strconv.Itoa(int(tx))) | |
| out, err := cmd.Output() | |
| if err != nil { | |
| // This includes failing to execute the command, | |
| // or the command exiting with a non-zero exit code. | |
| return false, "" | |
| } else { | |
| return true, strings.TrimSpace(string(out)) | |
| } | |
| } | |