internal/service/parse.go (67 lines of code) (raw):

package service import ( "errors" "fmt" "net/http" "strings" "github.com/aliyun/alibabacloud-kms-agent/internal/model" ) func getSecretParams(r *http.Request, pathPrefix string) (*model.GetSecretParams, error) { var params *model.GetSecretParams var err error if r.URL.Path == QueryStylePath { params, err = getParamsFromQuery(r) } if strings.HasPrefix(r.URL.Path, pathPrefix) { params, err = getParamsFromPath(r, pathPrefix) } return params, err } func getParamsFromQuery(r *http.Request) (*model.GetSecretParams, error) { params := &model.GetSecretParams{} query := r.URL.Query() if val, exists := query[QueryParamsSecretId]; exists { params.SecretID = val[0] } else { return nil, errors.New("missing parameter secretId") } if val, exists := query[QueryParamsVersionId]; exists { params.VersionID = val[0] } // Compatible with vault format if val, exists := query[QueryParamsVersion]; exists { params.VersionID = val[0] } if val, exists := query[QueryParamsVersionStage]; exists { params.VersionStage = val[0] } for param := range query { if param != QueryParamsSecretId && param != QueryParamsVersionId && param != QueryParamsVersion && param != QueryParamsVersionStage { return nil, fmt.Errorf("unknown parameter: %s", param) } } return params, nil } func getParamsFromPath(r *http.Request, pathPrefix string) (*model.GetSecretParams, error) { params := &model.GetSecretParams{} secretPath := r.URL.Path if !strings.HasPrefix(secretPath, pathPrefix) || len(secretPath) <= len(pathPrefix) { return nil, errors.New("missing secret ID") } params.SecretID = secretPath[len(pathPrefix):] query := r.URL.Query() if val, exists := query[QueryParamsVersionId]; exists { params.VersionID = val[0] } // Compatible with vault format if val, exists := query[QueryParamsVersion]; exists { params.VersionID = val[0] } if val, exists := query[QueryParamsVersionStage]; exists { params.VersionStage = val[0] } for param := range query { if param != QueryParamsVersionId && param != QueryParamsVersion && param != QueryParamsVersionStage { return nil, fmt.Errorf("unknown parameter: %s", param) } } return params, nil }