mirror of
https://github.com/superseriousbusiness/gotosocial.git
synced 2025-12-16 16:03:02 -06:00
[chore] update dependencies (#4188)
Update dependencies:
- github.com/gin-gonic/gin v1.10.0 -> v1.10.1
- github.com/gin-contrib/sessions v1.10.3 -> v1.10.4
- github.com/jackc/pgx/v5 v5.7.4 -> v5.7.5
- github.com/minio/minio-go/v7 v7.0.91 -> v7.0.92
- github.com/pquerna/otp v1.4.0 -> v1.5.0
- github.com/tdewolff/minify/v2 v2.23.5 -> v2.23.8
- github.com/yuin/goldmark v1.7.11 -> v1.7.12
- go.opentelemetry.io/otel{,/*} v1.35.0 -> v1.36.0
- modernc.org/sqlite v1.37.0 -> v1.37.1
Reviewed-on: https://codeberg.org/superseriousbusiness/gotosocial/pulls/4188
Reviewed-by: Daenney <daenney@noreply.codeberg.org>
Co-authored-by: kim <grufwub@gmail.com>
Co-committed-by: kim <grufwub@gmail.com>
This commit is contained in:
parent
20aad9be0f
commit
b6ff55662e
214 changed files with 44839 additions and 32023 deletions
182
vendor/github.com/minio/minio-go/v7/create-session.go
generated
vendored
Normal file
182
vendor/github.com/minio/minio-go/v7/create-session.go
generated
vendored
Normal file
|
|
@ -0,0 +1,182 @@
|
|||
/*
|
||||
* MinIO Go Library for Amazon S3 Compatible Cloud Storage
|
||||
* Copyright 2015-2025 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 minio
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/xml"
|
||||
"errors"
|
||||
"net"
|
||||
"net/http"
|
||||
"net/url"
|
||||
"path"
|
||||
"time"
|
||||
|
||||
"github.com/minio/minio-go/v7/pkg/credentials"
|
||||
"github.com/minio/minio-go/v7/pkg/s3utils"
|
||||
"github.com/minio/minio-go/v7/pkg/signer"
|
||||
)
|
||||
|
||||
// SessionMode - session mode type there are only two types
|
||||
type SessionMode string
|
||||
|
||||
// Session constants
|
||||
const (
|
||||
SessionReadWrite SessionMode = "ReadWrite"
|
||||
SessionReadOnly SessionMode = "ReadOnly"
|
||||
)
|
||||
|
||||
type createSessionResult struct {
|
||||
XMLName xml.Name `xml:"http://s3.amazonaws.com/doc/2006-03-01/ CreateSessionResult"`
|
||||
Credentials struct {
|
||||
AccessKey string `xml:"AccessKeyId" json:"accessKey,omitempty"`
|
||||
SecretKey string `xml:"SecretAccessKey" json:"secretKey,omitempty"`
|
||||
SessionToken string `xml:"SessionToken" json:"sessionToken,omitempty"`
|
||||
Expiration time.Time `xml:"Expiration" json:"expiration,omitempty"`
|
||||
} `xml:",omitempty"`
|
||||
}
|
||||
|
||||
// CreateSession - https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateSession.html
|
||||
// the returning credentials may be cached depending on the expiration of the original
|
||||
// credential, credentials will get renewed 10 secs earlier than when its gonna expire
|
||||
// allowing for some leeway in the renewal process.
|
||||
func (c *Client) CreateSession(ctx context.Context, bucketName string, sessionMode SessionMode) (cred credentials.Value, err error) {
|
||||
if err := s3utils.CheckValidBucketNameS3Express(bucketName); err != nil {
|
||||
return credentials.Value{}, err
|
||||
}
|
||||
|
||||
v, ok := c.bucketSessionCache.Get(bucketName)
|
||||
if ok && v.Expiration.After(time.Now().Add(10*time.Second)) {
|
||||
// Verify if the credentials will not expire
|
||||
// in another 10 seconds, if not we renew it again.
|
||||
return v, nil
|
||||
}
|
||||
|
||||
req, err := c.createSessionRequest(ctx, bucketName, sessionMode)
|
||||
if err != nil {
|
||||
return credentials.Value{}, err
|
||||
}
|
||||
|
||||
resp, err := c.do(req)
|
||||
defer closeResponse(resp)
|
||||
if err != nil {
|
||||
return credentials.Value{}, err
|
||||
}
|
||||
|
||||
if resp.StatusCode != http.StatusOK {
|
||||
return credentials.Value{}, httpRespToErrorResponse(resp, bucketName, "")
|
||||
}
|
||||
|
||||
credSession := &createSessionResult{}
|
||||
dec := xml.NewDecoder(resp.Body)
|
||||
if err = dec.Decode(credSession); err != nil {
|
||||
return credentials.Value{}, err
|
||||
}
|
||||
|
||||
defer c.bucketSessionCache.Set(bucketName, cred)
|
||||
|
||||
return credentials.Value{
|
||||
AccessKeyID: credSession.Credentials.AccessKey,
|
||||
SecretAccessKey: credSession.Credentials.SecretKey,
|
||||
SessionToken: credSession.Credentials.SessionToken,
|
||||
Expiration: credSession.Credentials.Expiration,
|
||||
}, nil
|
||||
}
|
||||
|
||||
// createSessionRequest - Wrapper creates a new CreateSession request.
|
||||
func (c *Client) createSessionRequest(ctx context.Context, bucketName string, sessionMode SessionMode) (*http.Request, error) {
|
||||
// Set location query.
|
||||
urlValues := make(url.Values)
|
||||
urlValues.Set("session", "")
|
||||
|
||||
// Set get bucket location always as path style.
|
||||
targetURL := *c.endpointURL
|
||||
|
||||
// Fetch new host based on the bucket location.
|
||||
host := getS3ExpressEndpoint(c.region, s3utils.IsS3ExpressBucket(bucketName))
|
||||
|
||||
// as it works in makeTargetURL method from api.go file
|
||||
if h, p, err := net.SplitHostPort(host); err == nil {
|
||||
if targetURL.Scheme == "http" && p == "80" || targetURL.Scheme == "https" && p == "443" {
|
||||
host = h
|
||||
if ip := net.ParseIP(h); ip != nil && ip.To16() != nil {
|
||||
host = "[" + h + "]"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
isVirtualStyle := c.isVirtualHostStyleRequest(targetURL, bucketName)
|
||||
|
||||
var urlStr string
|
||||
|
||||
if isVirtualStyle {
|
||||
urlStr = c.endpointURL.Scheme + "://" + bucketName + "." + host + "/?session"
|
||||
} else {
|
||||
targetURL.Path = path.Join(bucketName, "") + "/"
|
||||
targetURL.RawQuery = urlValues.Encode()
|
||||
urlStr = targetURL.String()
|
||||
}
|
||||
|
||||
// Get a new HTTP request for the method.
|
||||
req, err := http.NewRequestWithContext(ctx, http.MethodGet, urlStr, nil)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// Set UserAgent for the request.
|
||||
c.setUserAgent(req)
|
||||
|
||||
// Get credentials from the configured credentials provider.
|
||||
value, err := c.credsProvider.GetWithContext(c.CredContext())
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
var (
|
||||
signerType = value.SignerType
|
||||
accessKeyID = value.AccessKeyID
|
||||
secretAccessKey = value.SecretAccessKey
|
||||
sessionToken = value.SessionToken
|
||||
)
|
||||
|
||||
// Custom signer set then override the behavior.
|
||||
if c.overrideSignerType != credentials.SignatureDefault {
|
||||
signerType = c.overrideSignerType
|
||||
}
|
||||
|
||||
// If signerType returned by credentials helper is anonymous,
|
||||
// then do not sign regardless of signerType override.
|
||||
if value.SignerType == credentials.SignatureAnonymous {
|
||||
signerType = credentials.SignatureAnonymous
|
||||
}
|
||||
|
||||
if signerType.IsAnonymous() || signerType.IsV2() {
|
||||
return req, errors.New("Only signature v4 is supported for CreateSession() API")
|
||||
}
|
||||
|
||||
// Set sha256 sum for signature calculation only with signature version '4'.
|
||||
contentSha256 := emptySHA256Hex
|
||||
if c.secure {
|
||||
contentSha256 = unsignedPayload
|
||||
}
|
||||
|
||||
req.Header.Set("X-Amz-Content-Sha256", contentSha256)
|
||||
req.Header.Set("x-amz-create-session-mode", string(sessionMode))
|
||||
req = signer.SignV4Express(*req, accessKeyID, secretAccessKey, sessionToken, c.region)
|
||||
return req, nil
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue