mirror of
https://github.com/project-zot/zot.git
synced 2026-06-16 04:17:55 +08:00
routes: changes required to do browser authentication
whenever we make a request that contains header apart from CORS allowed header, browser sends a preflight request and in response accept *Access-Control-Allow-Headers*. preflight request is in form of OPTIONS method, added new http handler func to set headers and returns HTTP status ok in case of OPTIONS method. in case of authorization, request contains authorization header added authorization header in Access-Control-Allow-Headers list added AllowOrigin field in HTTPConfig this field value is set to Access-Control-Allow-Origin header and will give zot adminstrator to limit incoming request. Signed-off-by: Shivam Mishra <shimish2@cisco.com>
This commit is contained in:
committed by
Ramkumar Chinchani
parent
aee94218aa
commit
b8010e1ee4
+15
-5
@@ -57,19 +57,29 @@ func NewController(config *config.Config) *Controller {
|
||||
return &controller
|
||||
}
|
||||
|
||||
func DefaultHeaders() mux.MiddlewareFunc {
|
||||
func (c *Controller) CORSHeaders() mux.MiddlewareFunc {
|
||||
return func(next http.Handler) http.Handler {
|
||||
return http.HandlerFunc(func(response http.ResponseWriter, request *http.Request) {
|
||||
// CORS
|
||||
response.Header().Set("Access-Control-Allow-Origin", "*")
|
||||
response.Header().Set("Access-Control-Allow-Methods", "POST, GET, OPTIONS")
|
||||
c.CORSHandler(response, request)
|
||||
|
||||
// handle the request
|
||||
next.ServeHTTP(response, request)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func (c *Controller) CORSHandler(response http.ResponseWriter, request *http.Request) {
|
||||
// allow origin as specified in config if not accept request from anywhere.
|
||||
if c.Config.HTTP.AllowOrigin == "" {
|
||||
response.Header().Set("Access-Control-Allow-Origin", "*")
|
||||
} else {
|
||||
response.Header().Set("Access-Control-Allow-Origin", c.Config.HTTP.AllowOrigin)
|
||||
}
|
||||
|
||||
response.Header().Set("Access-Control-Allow-Methods", "HEAD,GET,POST,OPTIONS")
|
||||
response.Header().Set("Access-Control-Allow-Headers", "Authorization")
|
||||
}
|
||||
|
||||
func DumpRuntimeParams(log log.Logger) {
|
||||
var rLimit syscall.Rlimit
|
||||
|
||||
@@ -120,7 +130,7 @@ func (c *Controller) Run() error {
|
||||
}
|
||||
|
||||
engine.Use(
|
||||
DefaultHeaders(),
|
||||
c.CORSHeaders(),
|
||||
SessionLogger(c),
|
||||
handlers.RecoveryHandler(handlers.RecoveryLogger(c.Log),
|
||||
handlers.PrintRecoveryStack(false)))
|
||||
|
||||
Reference in New Issue
Block a user