mirror of https://github.com/bjdgyc/anylink.git
60 lines
1.3 KiB
Go
60 lines
1.3 KiB
Go
package dbdata
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"github.com/spf13/viper"
|
|
"io"
|
|
"log"
|
|
"net/http"
|
|
)
|
|
|
|
type OtpAuthResult struct {
|
|
User string `json:"user"`
|
|
TokenValid bool `json:"token_valid"`
|
|
}
|
|
|
|
func ValidateUserOtp(name string, otp int) (bool, error) {
|
|
|
|
v := viper.New()
|
|
v.SetConfigFile("./conf/server.toml")
|
|
if err := v.ReadInConfig(); err != nil {
|
|
panic("config file err:" + err.Error())
|
|
|
|
}
|
|
|
|
// 验证动态口令
|
|
otpServ := v.Get("otp_server")
|
|
otpAuthUrl := fmt.Sprintf("%s/%s/token/%d", otpServ, name, otp)
|
|
fmt.Println("otpAuthUrl: ", otpAuthUrl)
|
|
resp, err := http.Get(otpAuthUrl)
|
|
|
|
if err != nil || resp.StatusCode != 200 {
|
|
log.Fatalf("otp server auth err, user=[%s], token=[%d], httpcode=[%d], err=[%v]", name, otp, resp.StatusCode, err)
|
|
return false, err
|
|
}
|
|
|
|
defer func(Body io.ReadCloser) {
|
|
err := Body.Close()
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
}(resp.Body)
|
|
|
|
b, err := io.ReadAll(resp.Body)
|
|
if err != nil {
|
|
log.Fatalf("io.ReadAll read http response body failed, err=[%v]", err)
|
|
return false, err
|
|
}
|
|
|
|
var optAuthResult OtpAuthResult
|
|
err = json.Unmarshal(b, &optAuthResult)
|
|
|
|
if err != nil {
|
|
log.Fatalf("unmarshalotp retmsg failed, user=[%s], token=[%d], httpcode=[%d], err=[%v]", name, otp, resp.StatusCode, err)
|
|
return false, err
|
|
}
|
|
|
|
return optAuthResult.TokenValid, nil
|
|
}
|