0

I have a use case where I need to upload csv files to workdocs. I'm using golang language and I receive the error as "The request signature we calculated does not match the signature you provided." I'm using InitiateDocumentVersionUpload with IAM user credentials. Can you please help me as what might be causing this error.

    optionsWd := workdocs.Options{Credentials: credentials.NewStaticCredentialsProvider(request.AccessKeyId, request.SecretAccessKey, ""),
        Region: "us-east-1"}
    client := workdocs.New(optionsWd)
    folderId := "e38c72c9ae6918109b573a17ece5f24e7a353374672b627b1b3b54918354cd5e"
    docName := "testdoc"
    docType := "text/csv"
    data, err := r.S3.GetGetObject(ctx, "test-bucket", s3Path)

    params := workdocs.InitiateDocumentVersionUploadInput{
        ParentFolderId: &folderId,
        Name:           &docName,
        ContentType:    &docType,
    }
    res, err := client.InitiateDocumentVersionUpload(ctx, &params)
    if err != nil {
        fmt.Println(err)
    }

    fmt.Println(res.Metadata)
    resval := *res.UploadMetadata
    urlVal := *resval.UploadUrl
    signedHeadVal := resval.SignedHeaders
    fmt.Println(urlVal)
    fmt.Println(signedHeadVal)
    metadata := *res.Metadata
    fmt.Println(metadata)
    fmt.Println(signedHeadVal)
    wdclient := &http.Client{}
    req, err := http.NewRequest(http.MethodPut, urlVal, strings.NewReader(data))

    if err != nil {
        fmt.Println(err)
    }
    
    req.Header.Set("Content-Type", "text/csv")
    
    signer := v4.NewSigner()
    credsVal := aws.Credentials{
        AccessKeyID:     aws.ToString(&request.AccessKeyId),
        SecretAccessKey: aws.ToString(&request.SecretAccessKey),
        SessionToken:    "",
    }

    requestBodyBytes, _ := ioutil.ReadAll(req.Body)
    sha := sha256.Sum256(requestBodyBytes)
    payloadHash := hex.EncodeToString(sha[:])
    if err != nil {
        fmt.Println(err)
    }
    signer.SignHTTP(req.Context(), credsVal, req, payloadHash, "s3", "us-east-1", time.Now())
    _, err = wdclient.Do(req)
    if err != nil {
        fmt.Println(err)
    }


I tried the code mentioned above and unable to resolve the error. Expectation is to upload the file in workdocs.

Sukruti
  • 1
  • 1

0 Answers0