mirror of
				https://github.com/bjdgyc/anylink.git
				synced 2025-10-31 08:29:33 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			80 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			80 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package admin
 | |
| 
 | |
| import (
 | |
| 	"fmt"
 | |
| 	"net/http"
 | |
| 	"time"
 | |
| 
 | |
| 	"github.com/bjdgyc/anylink/base"
 | |
| 	"github.com/bjdgyc/anylink/pkg/utils"
 | |
| 	"github.com/gorilla/mux"
 | |
| )
 | |
| 
 | |
| // Login 登陆接口
 | |
| func Login(w http.ResponseWriter, r *http.Request) {
 | |
| 	// TODO 调试信息输出
 | |
| 	// hd, _ := httputil.DumpRequest(r, true)
 | |
| 	// fmt.Println("DumpRequest: ", string(hd))
 | |
| 
 | |
| 	_ = r.ParseForm()
 | |
| 	adminUser := r.PostFormValue("admin_user")
 | |
| 	adminPass := r.PostFormValue("admin_pass")
 | |
| 
 | |
| 	// 认证错误
 | |
| 	if !(adminUser == base.Cfg.AdminUser &&
 | |
| 		utils.PasswordVerify(adminPass, base.Cfg.AdminPass)) {
 | |
| 		RespError(w, RespUserOrPassErr)
 | |
| 		return
 | |
| 	}
 | |
| 
 | |
| 	// token有效期
 | |
| 	expiresAt := time.Now().Unix() + 3600*3
 | |
| 	jwtData := map[string]interface{}{"admin_user": adminUser}
 | |
| 	tokenString, err := SetJwtData(jwtData, expiresAt)
 | |
| 	if err != nil {
 | |
| 		RespError(w, 1, err)
 | |
| 		return
 | |
| 	}
 | |
| 
 | |
| 	data := make(map[string]interface{})
 | |
| 	data["token"] = tokenString
 | |
| 	data["admin_user"] = adminUser
 | |
| 	data["expires_at"] = expiresAt
 | |
| 
 | |
| 	RespSucess(w, data)
 | |
| }
 | |
| 
 | |
| func authMiddleware(next http.Handler) http.Handler {
 | |
| 	fn := func(w http.ResponseWriter, r *http.Request) {
 | |
| 		w.Header().Set("Access-Control-Allow-Origin", "*")
 | |
| 		w.Header().Set("Access-Control-Allow-Methods", "GET,POST,OPTIONS")
 | |
| 		w.Header().Set("Access-Control-Allow-Headers", "*")
 | |
| 		if r.Method == http.MethodOptions {
 | |
| 			return
 | |
| 		}
 | |
| 
 | |
| 		route := mux.CurrentRoute(r)
 | |
| 		name := route.GetName()
 | |
| 		// fmt.Println("bb", r.URL.Path, name)
 | |
| 		if utils.InArrStr([]string{"login", "index", "static", "debug"}, name) {
 | |
| 			// 不进行鉴权
 | |
| 			next.ServeHTTP(w, r)
 | |
| 			return
 | |
| 		}
 | |
| 
 | |
| 		// 进行登陆鉴权
 | |
| 		jwtToken := r.Header.Get("Jwt")
 | |
| 		if jwtToken == "" {
 | |
| 			jwtToken = r.FormValue("jwt")
 | |
| 		}
 | |
| 		data, err := GetJwtData(jwtToken)
 | |
| 		if err != nil || base.Cfg.AdminUser != fmt.Sprint(data["admin_user"]) {
 | |
| 			w.WriteHeader(http.StatusUnauthorized)
 | |
| 			return
 | |
| 		}
 | |
| 		next.ServeHTTP(w, r)
 | |
| 	}
 | |
| 
 | |
| 	return http.HandlerFunc(fn)
 | |
| }
 |