У меня есть API, который управляет различными заданиями компании, авторизует с помощью токена на предъявителя. Я хочу, чтобы пользователь выбрал одно из доступных заданий в списке задач, чтобы использовать URL / api / tasks / {task} следующим образом: / api/ tasks / checkaccount, если заданная задача отсутствует в списке задач, возвращает недействительный URL.Есть ли способ справиться с этим заданием в функции validateMiddleware?
Моя функция startApi:
func (s *ApiServerStruct) Start(interval int) {
router := mux.NewRouter()
log.Println("Starting the Api")
log.Printf("Api Listen: %s\n", "127.0.0.1:8080")
router.HandleFunc("/api/customer/newcustomer", ValidateMiddleware(s.newcustomer)).Methods("POST")
router.HandleFunc("/api/customer/setsalary", ValidateMiddleware(s.SetSalary)).Methods("POST")
router.HandleFunc("/api/customer/listcustomers", ValidateMiddleware(s.ListCustomers)).Methods("GET")
router.HandleFunc("/api/customer/{login:0x[0-9a-fA-F]{40}}/newjob", ValidateMiddleware(s.NewJob)).Methods("POST")
router.HandleFunc("/api/tasks/{task}/setnewtask", ValidateMiddleware(s.SetNewTask)).Methods("POST")
И функция validateMiddleware, которая проверяет, является ли данный токен в заголовке действительным или нет:
func ValidateMiddleware(next http.HandlerFunc) http.HandlerFunc {
return http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) {
authorizationHeader := req.Header.Get("authorization")
if authorizationHeader != "" {
bearerToken := strings.Split(authorizationHeader, " ")
tempData := Data[bearerToken[1]]
secretKey := tempData["secretkey"]
if secretKey == "" {
json.NewEncoder(w).Encode(Exception{Message: "Invalid authorization token"})
return
}
if len(bearerToken) == 2 {
token, error := jwt.Parse(bearerToken[1], func(token *jwt.Token) (interface{}, error) {
if _, ok := token.Method.(*jwt.SigningMethodHMAC); !ok {
return nil, fmt.Errorf("There was an error")
}
return []byte(secretKey), nil
})
if error != nil {
json.NewEncoder(w).Encode(Exception{Message: error.Error()})
return
}
if token.Valid {
context.Set(req, "decoded", token.Claims)
next(w, req)
} else {
json.NewEncoder(w).Encode(Exception{Message: "Invalid authorization token"})
}
}
} else {
json.NewEncoder(w).Encode(Exception{Message: "An authorization header is required"})
}
})
}