/* * MinIO Cloud Storage, (C) 2015, 2016, 2017, 2018 MinIO, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package cmd import ( "encoding/base64" "net/url" "strconv" ) // Parse bucket url queries func getListObjectsV1Args(values url.Values) (prefix, marker, delimiter string, maxkeys int, encodingType string, errCode APIErrorCode) { errCode = ErrNone if values.Get("max-keys") != "" { var err error if maxkeys, err = strconv.Atoi(values.Get("max-keys")); err != nil { errCode = ErrInvalidMaxKeys return } } else { maxkeys = maxObjectList } var err error prefix, err = unescapePath(values.Get("prefix")) if err != nil { errCode = ErrInvalidRequest return } marker, err = unescapePath(values.Get("marker")) if err != nil { errCode = ErrInvalidRequest return } delimiter = values.Get("delimiter") encodingType = values.Get("encoding-type") return } func getListBucketObjectVersionsArgs(values url.Values) (prefix, marker, delimiter string, maxkeys int, encodingType, versionIDMarker string, errCode APIErrorCode) { errCode = ErrNone if values.Get("max-keys") != "" { var err error if maxkeys, err = strconv.Atoi(values.Get("max-keys")); err != nil { errCode = ErrInvalidMaxKeys return } } else { maxkeys = maxObjectList } var err error prefix, err = unescapePath(values.Get("prefix")) if err != nil { errCode = ErrInvalidRequest return } marker, err = unescapePath(values.Get("key-marker")) if err != nil { errCode = ErrInvalidRequest return } delimiter = values.Get("delimiter") encodingType = values.Get("encoding-type") versionIDMarker = values.Get("version-id-marker") return } // Parse bucket url queries for ListObjects V2. func getListObjectsV2Args(values url.Values) (prefix, token, startAfter, delimiter string, fetchOwner bool, maxkeys int, encodingType string, errCode APIErrorCode) { errCode = ErrNone // The continuation-token cannot be empty. if val, ok := values["continuation-token"]; ok { if len(val[0]) == 0 { errCode = ErrIncorrectContinuationToken return } } if values.Get("max-keys") != "" { var err error if maxkeys, err = strconv.Atoi(values.Get("max-keys")); err != nil { errCode = ErrInvalidMaxKeys return } } else { maxkeys = maxObjectList } var err error prefix, err = unescapePath(values.Get("prefix")) if err != nil { errCode = ErrInvalidRequest return } startAfter, err = unescapePath(values.Get("start-after")) if err != nil { errCode = ErrInvalidRequest return } delimiter = values.Get("delimiter") fetchOwner = values.Get("fetch-owner") == "true" encodingType = values.Get("encoding-type") if token = values.Get("continuation-token"); token != "" { decodedToken, err := base64.StdEncoding.DecodeString(token) if err != nil { errCode = ErrIncorrectContinuationToken return } token = string(decodedToken) } return } // Parse bucket url queries for ?uploads func getBucketMultipartResources(values url.Values) (prefix, keyMarker, uploadIDMarker, delimiter string, maxUploads int, encodingType string, errCode APIErrorCode) { errCode = ErrNone if values.Get("max-uploads") != "" { var err error if maxUploads, err = strconv.Atoi(values.Get("max-uploads")); err != nil { errCode = ErrInvalidMaxUploads return } } else { maxUploads = maxUploadsList } var err error prefix, err = unescapePath(values.Get("prefix")) if err != nil { errCode = ErrInvalidRequest return } keyMarker, err = unescapePath(values.Get("key-marker")) if err != nil { errCode = ErrInvalidRequest return } uploadIDMarker = values.Get("upload-id-marker") delimiter = values.Get("delimiter") encodingType = values.Get("encoding-type") return } // Parse object url queries func getObjectResources(values url.Values) (uploadID string, partNumberMarker, maxParts int, encodingType string, errCode APIErrorCode) { var err error errCode = ErrNone if values.Get("max-parts") != "" { if maxParts, err = strconv.Atoi(values.Get("max-parts")); err != nil { errCode = ErrInvalidMaxParts return } } else { maxParts = maxPartsList } if values.Get("part-number-marker") != "" { if partNumberMarker, err = strconv.Atoi(values.Get("part-number-marker")); err != nil { errCode = ErrInvalidPartNumberMarker return } } uploadID = values.Get("uploadId") encodingType = values.Get("encoding-type") return }