PracowniaProgramowania/backend/go_jwt/server/main.go
2018-11-18 17:29:47 +01:00

61 lines
1.6 KiB
Go

package main
import (
"fmt"
"log"
"net/http"
jwt "github.com/dgrijalva/jwt-go" //jwt jako alias do repo =~ import numpy as np ; jwt to takie np
)
var mySigningKey = []byte("mysupersecretphrase")
func homePage(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Super Secret Information from Server")
fmt.Println("Endpoint Hit: homePage")
}
func isAuthorized(endpoint func(http.ResponseWriter, *http.Request)) http.Handler {
//modyfikacja funkcji homePage =~ jak dektorator w pythonie
//sprawdza czy jest prawidlowy JWTToken
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { //[!] handleR nie samo handle
if r.Header["Token"] != nil {
//walidacja
//parsowanie naglowka z tokenem
// token *jwt.Token token to zmienna - [!] bez przecinka w func(token *jwt.Token) (interface{}, error)
// inaczej bład:
//# command-line-arguments
// .\main.go:26:55: undefined: token
// .\main.go:27:17: undefined: token
token, err := jwt.Parse(r.Header["Token"][0], func(token *jwt.Token) (interface{}, error) {
if _, ok := token.Method.(*jwt.SigningMethodHMAC); !ok {
return nil, fmt.Errorf("There was an error")
}
return mySigningKey, nil //nil zamias errora
})
if err != nil {
fmt.Fprintf(w, err.Error())
}
if token.Valid {
endpoint(w, r) //jak wszystko ok, to zwraca oryginalnego endpointa, przekazanego jako argument
}
} else {
//brak tokena
fmt.Fprintf(w, "Not Authorized")
}
})
}
func handleRequests() {
http.Handle("/", isAuthorized(homePage))
log.Fatal(http.ListenAndServe(":9000", nil))
}
func main() {
handleRequests()
}