mirror of
https://github.com/weloe/token-go.git
synced 2025-09-27 03:46:01 +08:00
feat: add QRCode example
This commit is contained in:
101
examples/qrcode/qrcode-server.go
Normal file
101
examples/qrcode/qrcode-server.go
Normal file
@@ -0,0 +1,101 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
tokenGo "github.com/weloe/token-go"
|
||||
"github.com/weloe/token-go/model"
|
||||
"log"
|
||||
"net/http"
|
||||
)
|
||||
|
||||
var enforcer *tokenGo.Enforcer
|
||||
|
||||
func main() {
|
||||
var err error
|
||||
// use default adapter
|
||||
adapter := tokenGo.NewDefaultAdapter()
|
||||
enforcer, err = tokenGo.NewEnforcer(adapter)
|
||||
// enable logger
|
||||
enforcer.EnableLog()
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
http.HandleFunc("/qrcode/create", create)
|
||||
http.HandleFunc("/qrcode/scanned", scanned)
|
||||
http.HandleFunc("/qrcode/confirmAuth", confirmAuth)
|
||||
http.HandleFunc("/qrcode/cancelAuth", cancelAuth)
|
||||
http.HandleFunc("/qrcode/getState", getState)
|
||||
|
||||
log.Fatal(http.ListenAndServe(":8081", nil))
|
||||
}
|
||||
|
||||
func create(w http.ResponseWriter, request *http.Request) {
|
||||
// you should implement generate QR code method, returns QRCodeId to CreateQRCodeState
|
||||
// called generate QR code, returns QRCodeId to CreateQRCodeState
|
||||
//
|
||||
QRCodeId := "generatedQRCodeId"
|
||||
err := enforcer.CreateQRCodeState(QRCodeId, 50000)
|
||||
if err != nil {
|
||||
fmt.Fprintf(w, "CreateQRCodeState() failed: %v", err)
|
||||
return
|
||||
}
|
||||
fmt.Fprintf(w, "QRCodeId = %v", QRCodeId)
|
||||
}
|
||||
|
||||
func scanned(w http.ResponseWriter, req *http.Request) {
|
||||
loginId, err := enforcer.GetLoginId(tokenGo.NewHttpContext(req, w))
|
||||
if err != nil {
|
||||
fmt.Fprintf(w, "GetLoginId() failed: %v", err)
|
||||
return
|
||||
}
|
||||
QRCodeId := req.URL.Query().Get("QRCodeId")
|
||||
tempToken, err := enforcer.Scanned(QRCodeId, loginId)
|
||||
if err != nil {
|
||||
fmt.Fprintf(w, "Scanned() failed: %v", err)
|
||||
return
|
||||
}
|
||||
fmt.Fprintf(w, "tempToken = %v", tempToken)
|
||||
}
|
||||
func getState(w http.ResponseWriter, req *http.Request) {
|
||||
QRCodeId := req.URL.Query().Get("QRCodeId")
|
||||
state := enforcer.GetQRCodeState(QRCodeId)
|
||||
if state == model.ConfirmAuth {
|
||||
qrCode := enforcer.GetQRCode(QRCodeId)
|
||||
if qrCode == nil {
|
||||
fmt.Fprintf(w, "login error. state = %v, code is nil", state)
|
||||
return
|
||||
}
|
||||
loginId := qrCode.LoginId
|
||||
token, err := enforcer.LoginById(loginId)
|
||||
if err != nil {
|
||||
fmt.Fprintf(w, "Login error: %s\n", err)
|
||||
}
|
||||
fmt.Fprintf(w, "%v login success. state = %v, token = %v", loginId, state, token)
|
||||
return
|
||||
} else if state == model.CancelAuth {
|
||||
fmt.Fprintf(w, "QRCodeId be cancelled: %v", QRCodeId)
|
||||
return
|
||||
}
|
||||
fmt.Fprintf(w, "state = %v", state)
|
||||
}
|
||||
|
||||
func cancelAuth(w http.ResponseWriter, req *http.Request) {
|
||||
tempToken := req.URL.Query().Get("tempToken")
|
||||
err := enforcer.CancelAuth(tempToken)
|
||||
if err != nil {
|
||||
fmt.Fprintf(w, "CancelAuth() failed: %v", err)
|
||||
return
|
||||
}
|
||||
fmt.Fprint(w, "ConfirmAuth() success")
|
||||
}
|
||||
|
||||
func confirmAuth(w http.ResponseWriter, req *http.Request) {
|
||||
tempToken := req.URL.Query().Get("tempToken")
|
||||
err := enforcer.ConfirmAuth(tempToken)
|
||||
if err != nil {
|
||||
fmt.Fprintf(w, "ConfirmAuth() failed: %v", err)
|
||||
return
|
||||
}
|
||||
fmt.Fprint(w, "ConfirmAuth() success")
|
||||
}
|
Reference in New Issue
Block a user