YouROK / TorrServer

Torrent stream server
GNU General Public License v3.0
1.51k stars 192 forks source link

Refactor auth #358

Closed leporel closed 7 months ago

leporel commented 7 months ago

Не уверен, но наткнувшись на https://github.com/YouROK/TorrServer/issues/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)

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