YouROK/TorrServer

Refactor auth

leporel opened this issue · 0 comments

Не уверен, но наткнувшись на #172 и посмотрев код, подумал что вешать BasicAuth целиком на все роутеры и потом писать исключения для тех где не нужна авторизация (а потом иметь такие вот баги как в ишью выше), не лучше ли просто

func BasicAuth(accounts gin.Accounts) gin.HandlerFunc {
        pairs := processAccounts(accounts)
	return func(c *gin.Context) {
               	if !settings.HttpAuth {
		        return
	        }
                
		user, found := pairs.searchCredential(c.Request.Header.Get("Authorization"))
		if !found { 
			c.Header("WWW-Authenticate", "Basic realm=Authorization Required")
			c.AbortWithStatus(http.StatusUnauthorized)
			return
		}
		c.Set(gin.AuthUserKey, user)
	}
}

и в роутерах явно указывать где нужен этот мидлварь

authorized := route.Group("/", BasicAuth(accounts))

route.HEAD("/play/:hash/:id", play)
route.GET("/play/:hash/:id", play)	

authorized.GET("/playlistall/all.m3u", allPlayList)

могу попробовать пулреквест сделать если надо