func main() { log.Printf("Server started")
router := sw.NewRouter() manager := manage.NewDefaultManager() manager.SetAuthorizeCodeTokenCfg(manage.DefaultAuthorizeCodeTokenCfg)
manager.MustTokenStorage(store.NewMemoryTokenStore())
clientStore := store.NewClientStore() manager.MapClientStorage(clientStore)
srv := server.NewDefaultServer(manager) srv.SetAllowGetAccessRequest(true) srv.SetClientInfoHandler(server.ClientFormHandler) manager.SetRefreshTokenCfg(manage.DefaultRefreshTokenCfg)
srv.SetInternalErrorHandler(func(err error) (re *errors.Response) { log.Println("Internal Error:", err.Error()) return })
srv.SetResponseErrorHandler(func(re *errors.Response) { log.Println("Response Error:", re.Error.Error()) })
router.HandleFunc("/oauth2/token", func(w http.ResponseWriter, r *http.Request) { srv.HandleTokenRequest(w, r) })
router.HandleFunc("/credentials", func(w http.ResponseWriter, r *http.Request) { clientId := uuid.New().String()[:8] clientSecret := uuid.New().String()[:8] err := clientStore.Set(clientId, &models.Client{ ID: clientId, Secret: clientSecret, Domain: "http://localhost:9094", }) if err != nil { fmt.Println(err.Error()) }
w.Header().Set("Content-Type", "application/json") json.NewEncoder(w).Encode(map[string]string{"CLIENT_ID": clientId, "CLIENT_SECRET": clientSecret}) })
log.Fatal(http.ListenAndServe(":8000", router))}
//Funtion in handler.go in subdir
func protecteduri(w http.ResponseWriter, r *http.Request) {type Route struct { Name string Method string Pattern string HandlerFunc http.HandlerFunc}
type Routes []Route
func NewRouter() *mux.Router { router := mux.NewRouter().StrictSlash(true) for _, route := range routes { var handler http.Handler handler = route.HandlerFunc handler = Logger(handler, route.Name)
router. Methods(route.Method). Path(route.Pattern). Name(route.Name). Handler(handler) }
return router}
func Index(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Hello World!")}
var routes = Routes{ { "Index", "GET", "/", Index, },
{ "protecteduri", strings.ToUpper("Get"), "/protected", protecteduri, },}func ValidateToken(srv *server.Server) func(http.Handler) http.Handler { return func(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { notAuth := []string{"/oauth2/token", "/credentials"} //List of endpoints that doesn't require auth requestPath := r.URL.Path //current request path
//check if request does not need authentication, serve the request if it doesn't need it for _, value := range notAuth {
if value == requestPath { next.ServeHTTP(w, r) return } } _, err := srv.ValidationBearerToken(r) if err != nil { http.Error(w, err.Error(), http.StatusBadRequest) return }
next.ServeHTTP(w, r) }) }}