mirror of https://github.com/bjdgyc/anylink.git
更新邮件内容的otp图片
This commit is contained in:
parent
1582b46bb9
commit
cff97d746c
|
@ -133,33 +133,44 @@ func UserDel(w http.ResponseWriter, r *http.Request) {
|
||||||
|
|
||||||
func UserOtpQr(w http.ResponseWriter, r *http.Request) {
|
func UserOtpQr(w http.ResponseWriter, r *http.Request) {
|
||||||
_ = r.ParseForm()
|
_ = r.ParseForm()
|
||||||
b64 := r.FormValue("b64")
|
b64S := r.FormValue("b64")
|
||||||
idS := r.FormValue("id")
|
idS := r.FormValue("id")
|
||||||
id, _ := strconv.Atoi(idS)
|
id, _ := strconv.Atoi(idS)
|
||||||
var user dbdata.User
|
|
||||||
err := dbdata.One("Id", id, &user)
|
var b64 bool
|
||||||
|
if b64S == "1" {
|
||||||
|
b64 = true
|
||||||
|
}
|
||||||
|
data, err := userOtpQr(id, b64)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
RespError(w, RespInternalErr, err)
|
base.Error(err)
|
||||||
return
|
}
|
||||||
|
io.WriteString(w, data)
|
||||||
|
}
|
||||||
|
|
||||||
|
func userOtpQr(uid int, b64 bool) (string, error) {
|
||||||
|
var user dbdata.User
|
||||||
|
err := dbdata.One("Id", uid, &user)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
}
|
}
|
||||||
|
|
||||||
issuer := url.QueryEscape(base.Cfg.Issuer)
|
issuer := url.QueryEscape(base.Cfg.Issuer)
|
||||||
qrstr := fmt.Sprintf("otpauth://totp/%s:%s?issuer=%s&secret=%s", issuer, user.Email, issuer, user.OtpSecret)
|
qrstr := fmt.Sprintf("otpauth://totp/%s:%s?issuer=%s&secret=%s", issuer, user.Email, issuer, user.OtpSecret)
|
||||||
qr, _ := qrcode.New(qrstr, qrcode.High)
|
qr, _ := qrcode.New(qrstr, qrcode.High)
|
||||||
|
|
||||||
if b64 == "1" {
|
if b64 {
|
||||||
data, _ := qr.PNG(300)
|
data, err := qr.PNG(300)
|
||||||
s := base64.StdEncoding.EncodeToString(data)
|
|
||||||
_, err = fmt.Fprint(w, s)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
base.Error(err)
|
return "", err
|
||||||
}
|
}
|
||||||
return
|
s := base64.StdEncoding.EncodeToString(data)
|
||||||
}
|
return s, nil
|
||||||
err = qr.Write(300, w)
|
|
||||||
if err != nil {
|
|
||||||
base.Error(err)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
buf := bytes.NewBuffer(nil)
|
||||||
|
err = qr.Write(300, buf)
|
||||||
|
return buf.String(), err
|
||||||
}
|
}
|
||||||
|
|
||||||
// 在线用户
|
// 在线用户
|
||||||
|
@ -190,12 +201,13 @@ func UserReline(w http.ResponseWriter, r *http.Request) {
|
||||||
}
|
}
|
||||||
|
|
||||||
type userAccountMailData struct {
|
type userAccountMailData struct {
|
||||||
Issuer string
|
Issuer string
|
||||||
LinkAddr string
|
LinkAddr string
|
||||||
Group string
|
Group string
|
||||||
Username string
|
Username string
|
||||||
PinCode string
|
PinCode string
|
||||||
OtpImg string
|
OtpImg string
|
||||||
|
OtpImgBase64 string
|
||||||
}
|
}
|
||||||
|
|
||||||
func userAccountMail(user *dbdata.User) error {
|
func userAccountMail(user *dbdata.User) error {
|
||||||
|
@ -236,12 +248,15 @@ func userAccountMail(user *dbdata.User) error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
otpData, _ := userOtpQr(user.Id, true)
|
||||||
|
|
||||||
data := userAccountMailData{
|
data := userAccountMailData{
|
||||||
LinkAddr: setting.LinkAddr,
|
LinkAddr: setting.LinkAddr,
|
||||||
Group: strings.Join(user.Groups, ","),
|
Group: strings.Join(user.Groups, ","),
|
||||||
Username: user.Username,
|
Username: user.Username,
|
||||||
PinCode: user.PinCode,
|
PinCode: user.PinCode,
|
||||||
OtpImg: fmt.Sprintf("https://%s/otp_qr?id=%d&jwt=%s", setting.LinkAddr, user.Id, tokenString),
|
OtpImg: fmt.Sprintf("https://%s/otp_qr?id=%d&jwt=%s", setting.LinkAddr, user.Id, tokenString),
|
||||||
|
OtpImgBase64: "data:image/png;base64," + otpData,
|
||||||
}
|
}
|
||||||
w := bytes.NewBufferString("")
|
w := bytes.NewBufferString("")
|
||||||
t, _ := template.New("auth_complete").Parse(htmlBody)
|
t, _ := template.New("auth_complete").Parse(htmlBody)
|
||||||
|
|
|
@ -149,8 +149,12 @@ const accountMail = `<p>您好:</p>
|
||||||
用户组: <b>{{.Group}}</b> <br/>
|
用户组: <b>{{.Group}}</b> <br/>
|
||||||
用户名: <b>{{.Username}}</b> <br/>
|
用户名: <b>{{.Username}}</b> <br/>
|
||||||
用户PIN码: <b>{{.PinCode}}</b> <br/>
|
用户PIN码: <b>{{.PinCode}}</b> <br/>
|
||||||
|
<!--
|
||||||
用户动态码(3天后失效):<br/>
|
用户动态码(3天后失效):<br/>
|
||||||
<img src="{{.OtpImg}}"/>
|
<img src="{{.OtpImg}}"/>
|
||||||
|
-->
|
||||||
|
用户动态码(请妥善保存):<br/>
|
||||||
|
<img src="{{.OtpImgBase64}}"/>
|
||||||
</p>
|
</p>
|
||||||
<div>
|
<div>
|
||||||
使用说明:
|
使用说明:
|
||||||
|
|
Loading…
Reference in New Issue