Skip to content

AmirRezaM75/go-router

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

package main

import (
	"github.com/amirrezam75/go-router"
	m "github.com/amirrezam75/go-router/middlewares"
	"net/http"
)

func setupRoutes() *router.Router {
	var r = router.NewRouter()

	r.Middleware(middlewares.CorsPolicy{})

	var rateLimiterLogger = func(identifier, url string) {
		services.LogService{}.Info(map[string]string{
			"message":    "Too many requests.",
			"identifier": identifier,
			"url":        url,
		})
	}

	var rateLimiterConfig = m.RateLimiterConfig{
		Duration: time.Minute,
		Limit:    15,
		Extractor: func(r *http.Request) string {
			var user = services.ContextService{}.GetUser(r.Context())

			if user == nil {
				return r.RemoteAddr
			}

			return user.Id
		},
	}

	var rateLimiterMiddleware = m.NewRateLimiterMiddleware(rateLimiterConfig, rateLimiterLogger)

	r.Post("/lobbies", lobbyHandler.Create).
		Middleware(authMiddleware).
		Middleware(rateLimiterMiddleware)

	return r
}

Middlewares

package middlewares

import (
	"net/http"
	"os"
)

type CorsPolicy struct {
}

func (cp CorsPolicy) Handle(next http.Handler) http.Handler {
	return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
		w.Header().Set("Access-Control-Allow-Origin", os.Getenv("FRONTEND_URL"))
		w.Header().Set("Access-Control-Allow-Headers", "Accept, Content-Type, Authorization")
		w.Header().Set("Access-Control-Allow-Methods", "GET, POST, PATCH, OPTIONS")
		w.Header().Set("Access-Control-Max-Age", "3600")

		// Handles preflight requests
		if r.Method == http.MethodOptions {
			w.WriteHeader(http.StatusNoContent)
			return
		}

		next.ServeHTTP(w, r)
	})
}

About

No description or website provided.

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages