I have modify the middleware to the below but it only work if the handler 
function "/protected" is in the main function.
I have many handlers and do not want to put all of them in the main.go. 
You suggest i define a struct and use member function of the struct, can 
you elaborate more about for me or the format.

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)
})
}
}


On Thursday, April 4, 2019 at 10:46:08 AM UTC+3, afriyie...@gmail.com wrote:
>
> changing and using "router.Use(getTokenMW(server))" is validating all the 
> routes. How can i exclude routes
> /oauth2/token and /credentials. I read that populate but i dont get the 
> idea. 
> Any clew about how to go about this?
>  
> On Wednesday, April 3, 2019 at 6:47:12 PM UTC+3, Burak Serdar wrote:
>>
>> On Wed, Apr 3, 2019 at 8:35 AM <afriyie...@gmail.com> wrote: 
>>
>> > 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, 
>> >     }, 
>> > } 
>> > 
>> > My question is how do i apply the "validateToken" function (middleware) 
>> to the routes in the router.go? 
>> > The function is to validate the access token in the request message 
>> before calling the handler functions. 
>> > 
>> Have you looked at the gorilla/mux documentation about middlewares? 
>> There are examples there: https://godoc.org/github.com/gorilla/mux 
>>
>> You need to change the validateToken func: 
>>
>> func getTokenMW(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) { 
>>       } 
>>    } 
>> } 
>>
>> Then: 
>> router.Use(getTokenMW(server)) 
>>
>> Or, you can define a struct, put the server pointer in it, and use a 
>> member function of that struct as the middleware. 
>>
>

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to