code.gitea.io/gitea@v1.21.7/routers/api/packages/nuget/auth.go (about)

     1  // Copyright 2022 The Gitea Authors. All rights reserved.
     2  // SPDX-License-Identifier: MIT
     3  
     4  package nuget
     5  
     6  import (
     7  	"net/http"
     8  
     9  	auth_model "code.gitea.io/gitea/models/auth"
    10  	user_model "code.gitea.io/gitea/models/user"
    11  	"code.gitea.io/gitea/modules/log"
    12  	"code.gitea.io/gitea/modules/timeutil"
    13  	"code.gitea.io/gitea/services/auth"
    14  )
    15  
    16  var _ auth.Method = &Auth{}
    17  
    18  type Auth struct{}
    19  
    20  func (a *Auth) Name() string {
    21  	return "nuget"
    22  }
    23  
    24  // https://docs.microsoft.com/en-us/nuget/api/package-publish-resource#request-parameters
    25  func (a *Auth) Verify(req *http.Request, w http.ResponseWriter, store auth.DataStore, sess auth.SessionStore) (*user_model.User, error) {
    26  	token, err := auth_model.GetAccessTokenBySHA(req.Context(), req.Header.Get("X-NuGet-ApiKey"))
    27  	if err != nil {
    28  		if !(auth_model.IsErrAccessTokenNotExist(err) || auth_model.IsErrAccessTokenEmpty(err)) {
    29  			log.Error("GetAccessTokenBySHA: %v", err)
    30  			return nil, err
    31  		}
    32  		return nil, nil
    33  	}
    34  
    35  	u, err := user_model.GetUserByID(req.Context(), token.UID)
    36  	if err != nil {
    37  		log.Error("GetUserByID:  %v", err)
    38  		return nil, err
    39  	}
    40  
    41  	token.UpdatedUnix = timeutil.TimeStampNow()
    42  	if err := auth_model.UpdateAccessToken(req.Context(), token); err != nil {
    43  		log.Error("UpdateAccessToken:  %v", err)
    44  	}
    45  
    46  	return u, nil
    47  }