@@ -116,6 +116,10 @@ func (am *AuthUserMiddleware) MustAuthWithoutAccountAvailable() gin.HandlerFunc
116116 ctx .Abort ()
117117 return
118118 }
119+ // Check API key scope
120+ if am .AuthAPIKeyScope (ctx , token ) {
121+ return
122+ }
119123 userInfo , err := am .authService .GetUserCacheInfo (ctx , token )
120124 if err != nil || userInfo == nil {
121125 handler .HandleResponse (ctx , errors .Unauthorized (reason .UnauthorizedError ), nil )
@@ -141,6 +145,10 @@ func (am *AuthUserMiddleware) MustAuthAndAccountAvailable() gin.HandlerFunc {
141145 ctx .Abort ()
142146 return
143147 }
148+ // Check API key scope
149+ if am .AuthAPIKeyScope (ctx , token ) {
150+ return
151+ }
144152 userInfo , err := am .authService .GetUserCacheInfo (ctx , token )
145153 if err != nil || userInfo == nil {
146154 handler .HandleResponse (ctx , errors .Unauthorized (reason .UnauthorizedError ), nil )
@@ -226,6 +234,26 @@ func (am *AuthUserMiddleware) CheckPrivateMode() gin.HandlerFunc {
226234 ctx .Next ()
227235 }
228236}
237+
238+ func (am * AuthUserMiddleware ) AuthAPIKeyScope (ctx * gin.Context , accessToken string ) (apiHaveNoScope bool ) {
239+ if ! strings .HasPrefix (accessToken , "sk_" ) {
240+ return false
241+ }
242+ var err error
243+ pass , err := am .authService .AuthAPIKey (ctx , ctx .Request .Method == "GET" , accessToken )
244+ if err != nil {
245+ handler .HandleResponse (ctx , errors .Forbidden (reason .ForbiddenError ), nil )
246+ ctx .Abort ()
247+ return true
248+ }
249+ if ! pass {
250+ handler .HandleResponse (ctx , errors .Forbidden (reason .ForbiddenError ), nil )
251+ ctx .Abort ()
252+ return true
253+ }
254+ return false
255+ }
256+
229257func ShowIndexPage (ctx * gin.Context ) {
230258 ctx .Header ("content-type" , "text/html;charset=utf-8" )
231259 ctx .Header ("X-Frame-Options" , "DENY" )
0 commit comments