Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 10 additions & 4 deletions auth/access.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ import (

"crypto/sha1"

"github.com/StarHack/go-internxt-drive/config"
"github.com/internxt/rclone/config"

"golang.org/x/crypto/pbkdf2"
)
Expand Down Expand Up @@ -70,7 +70,14 @@ func AccessLogin(cfg *config.Config, lr *LoginResponse) (*AccessResponse, error)
}

b, _ := json.Marshal(req)
resp, err := http.Post(cfg.DriveAPIURL+"/auth/login/access", "application/json", bytes.NewReader(b))

httpReq, err := http.NewRequest(http.MethodPost, cfg.DriveAPIURL+"/auth/login/access", bytes.NewReader(b))
if err != nil {
return nil, err
}
httpReq.Header.Set("Content-Type", "application/json")

resp, err := cfg.HTTPClient.Do(httpReq)
if err != nil {
return nil, err
}
Expand Down Expand Up @@ -110,8 +117,7 @@ func AreCredentialsCorrect(cfg *config.Config, hashedPassword string) (bool, err
}
req.Header.Set("Authorization", "Bearer "+cfg.Token)

client := &http.Client{}
resp, err := client.Do(req)
resp, err := cfg.HTTPClient.Do(req)
if err != nil {
return false, err
}
Expand Down
11 changes: 9 additions & 2 deletions auth/login.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import (
"encoding/json"
"net/http"

"github.com/StarHack/go-internxt-drive/config"
"github.com/internxt/rclone/config"
)

type LoginResponse struct {
Expand All @@ -21,7 +21,14 @@ type LoginResponse struct {
func Login(cfg *config.Config) (*LoginResponse, error) {
payload := map[string]string{"email": cfg.Email}
b, _ := json.Marshal(payload)
resp, err := http.Post(cfg.DriveAPIURL+"/auth/login", "application/json", bytes.NewReader(b))

req, err := http.NewRequest(http.MethodPost, cfg.DriveAPIURL+"/auth/login", bytes.NewReader(b))
if err != nil {
return nil, err
}
req.Header.Set("Content-Type", "application/json")

resp, err := cfg.HTTPClient.Do(req)
if err != nil {
return nil, err
}
Expand Down
4 changes: 2 additions & 2 deletions auth/logout.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import (
"io"
"net/http"

"github.com/StarHack/go-internxt-drive/config"
"github.com/internxt/rclone/config"
)

// Logout calls GET {DRIVE_API_URL}/logout to end the session.
Expand All @@ -17,7 +17,7 @@ func Logout(cfg *config.Config) error {
return err
}
req.Header.Set("Authorization", "Bearer "+cfg.Token)
resp, err := http.DefaultClient.Do(req)
resp, err := cfg.HTTPClient.Do(req)
if err != nil {
return err
}
Expand Down
10 changes: 5 additions & 5 deletions auth/tfa.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import (
"io"
"net/http"

"github.com/StarHack/go-internxt-drive/config"
"github.com/internxt/rclone/config"
)

type TFAEnableRequest struct {
Expand All @@ -34,7 +34,7 @@ func IsTFAEnabled(cfg *config.Config) (bool, error) {
}
req.Header.Set("Authorization", "Bearer "+cfg.Token)

resp, err := http.DefaultClient.Do(req)
resp, err := cfg.HTTPClient.Do(req)
if err != nil {
return false, err
}
Expand All @@ -58,7 +58,7 @@ func FetchTFASetup(cfg *config.Config) (*TFASecretResponse, error) {
}
req.Header.Set("Authorization", "Bearer "+cfg.Token)

resp, err := http.DefaultClient.Do(req)
resp, err := cfg.HTTPClient.Do(req)
if err != nil {
return nil, err
}
Expand Down Expand Up @@ -87,7 +87,7 @@ func EnableTFA(cfg *config.Config, key, code string) error {
req.Header.Set("Authorization", "Bearer "+cfg.Token)
req.Header.Set("Content-Type", "application/json")

resp, err := http.DefaultClient.Do(req)
resp, err := cfg.HTTPClient.Do(req)
if err != nil {
return err
}
Expand All @@ -114,7 +114,7 @@ func DisableTFA(cfg *config.Config, code string) error {
req.Header.Set("Content-Type", "application/json")
req.ContentLength = int64(len(bodyBytes))

resp, err := http.DefaultClient.Do(req)
resp, err := cfg.HTTPClient.Do(req)
if err != nil {
return err
}
Expand Down
12 changes: 8 additions & 4 deletions buckets/download.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import (
"strconv"
"strings"

"github.com/StarHack/go-internxt-drive/config"
"github.com/internxt/rclone/config"
)

const bucketAPIBase = "https://api.internxt.com"
Expand Down Expand Up @@ -46,7 +46,7 @@ func GetBucketFileInfo(cfg *config.Config, bucketID, fileID string) (*BucketFile
req.Header.Set("internxt-version", "1.0")
req.Header.Set("internxt-client", "internxt-go-sdk")

resp, err := http.DefaultClient.Do(req)
resp, err := cfg.HTTPClient.Do(req)
if err != nil {
return nil, err
}
Expand Down Expand Up @@ -82,7 +82,11 @@ func DownloadFile(cfg *config.Config, fileID, destPath string) error {
}

// 3) GET the encrypted shard directly from its presigned URL
resp, err := http.Get(shard.URL)
req, err := http.NewRequest("GET", shard.URL, nil)
if err != nil {
return err
}
resp, err := cfg.HTTPClient.Do(req)
if err != nil {
return err
}
Expand Down Expand Up @@ -179,7 +183,7 @@ func DownloadFileStream(cfg *config.Config, fileUUID string, optionalRange ...st
req.Header.Set("Range", rangeValue)
}

resp, err := http.DefaultClient.Do(req)
resp, err := cfg.HTTPClient.Do(req)
if err != nil {
return nil, err
}
Expand Down
4 changes: 2 additions & 2 deletions buckets/finish.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import (
"net/http"
"strings"

"github.com/StarHack/go-internxt-drive/config"
"github.com/internxt/rclone/config"
)

type Shard struct {
Expand Down Expand Up @@ -46,7 +46,7 @@ func FinishUpload(cfg *config.Config, bucketID, index string, shards []Shard) (*
req.Header.Set("internxt-client", "drive-web")
req.Header.Set("Content-Type", "application/json; charset=utf-8")

resp, err := http.DefaultClient.Do(req)
resp, err := cfg.HTTPClient.Do(req)
if err != nil {
return nil, err
}
Expand Down
4 changes: 2 additions & 2 deletions buckets/meta.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import (
"net/http"
"time"

"github.com/StarHack/go-internxt-drive/config"
"github.com/internxt/rclone/config"
)

type CreateMetaRequest struct {
Expand Down Expand Up @@ -65,7 +65,7 @@ func CreateMetaFile(cfg *config.Config, name, bucketID, fileID, encryptVersion,
req.Header.Set("internxt-version", "v1.0.436")
req.Header.Set("internxt-client", "drive-web")
req.Header.Set("Content-Type", "application/json; charset=utf-8")
resp, err := http.DefaultClient.Do(req)
resp, err := cfg.HTTPClient.Do(req)
if err != nil {
return nil, err
}
Expand Down
4 changes: 2 additions & 2 deletions buckets/start.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import (
"fmt"
"net/http"

"github.com/StarHack/go-internxt-drive/config"
"github.com/internxt/rclone/config"
)

const API = "https://api.internxt.com"
Expand Down Expand Up @@ -48,7 +48,7 @@ func StartUpload(cfg *config.Config, bucketID string, parts []UploadPartSpec) (*
req.Header.Set("internxt-client", "drive-web")
req.Header.Set("Content-Type", "application/json; charset=utf-8")

resp, err := http.DefaultClient.Do(req)
resp, err := cfg.HTTPClient.Do(req)
if err != nil {
return nil, err
}
Expand Down
6 changes: 4 additions & 2 deletions buckets/transfer.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,16 +4,18 @@ import (
"fmt"
"io"
"net/http"

"github.com/internxt/rclone/config"
)

func Transfer(part UploadPart, r io.Reader, size int64) error {
func Transfer(cfg *config.Config, part UploadPart, r io.Reader, size int64) error {
req, err := http.NewRequest("PUT", part.URL, r)
if err != nil {
return err
}
req.Header.Set("Content-Type", "application/octet-stream")
req.ContentLength = size
resp, err := http.DefaultClient.Do(req)
resp, err := cfg.HTTPClient.Do(req)
if err != nil {
return err
}
Expand Down
10 changes: 4 additions & 6 deletions buckets/upload.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ import (
"strings"
"time"

"github.com/StarHack/go-internxt-drive/config"
"github.com/internxt/rclone/config"
)

func UploadFile(cfg *config.Config, filePath, targetFolderUUID string, modTime time.Time) (*CreateMetaResponse, error) {
Expand All @@ -21,9 +21,7 @@ func UploadFile(cfg *config.Config, filePath, targetFolderUUID string, modTime t
return nil, err
}
plainSize := int64(len(raw))
ph := sha256.Sum256(raw)

ph = [32]byte{}
var ph [32]byte
if _, err := rand.Read(ph[:]); err != nil {
return nil, fmt.Errorf("cannot generate random index: %w", err)
}
Expand Down Expand Up @@ -52,7 +50,7 @@ func UploadFile(cfg *config.Config, filePath, targetFolderUUID string, modTime t
return nil, err
}
part := startResp.Uploads[0]
if err := Transfer(part, r, plainSize); err != nil {
if err := Transfer(cfg, part, r, plainSize); err != nil {
return nil, err
}
encIndex := hex.EncodeToString(ph[:])
Expand Down Expand Up @@ -109,7 +107,7 @@ func UploadFileStream(cfg *config.Config, targetFolderUUID, fileName string, in

part := startResp.Uploads[0]

if err := Transfer(part, r, plainSize); err != nil {
if err := Transfer(cfg, part, r, plainSize); err != nil {
return nil, err
}

Expand Down
85 changes: 46 additions & 39 deletions config/config.go
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
package config

import (
"encoding/json"
"os"
"net"
"net/http"
"time"
)

const (
Expand All @@ -16,22 +17,23 @@ const (
)

type Config struct {
Email string `json:"email,omitempty"`
Password string `json:"password,omitempty"`
TFA string `json:"tfa,omitempty"`
Token string `json:"token,omitempty"`
RootFolderID string `json:"root_folder_id,omitempty"`
Bucket string `json:"bucket,omitempty"`
Mnemonic string `json:"mnemonic,omitempty"`
BasicAuthHeader string `json:"basic_auth_header,omitempty"`
DriveAPIURL string `json:"drive_api_url,omitempty"`
AuthAPIURL string `json:"auth_api_url,omitempty"`
UsersAPIURL string `json:"users_api_url,omitempty"`
AppCryptoSecret string `json:"app_crypto_secret,omitempty"`
AppCryptoSecret2 string `json:"app_crypto_secret2,omitempty"`
AppMagicIV string `json:"app_magic_iv,omitempty"`
AppMagicSalt string `json:"app_magic_salt,omitempty"`
EncryptedPassword string `json:"encrypted_password,omitempty"`
Email string `json:"email,omitempty"`
Password string `json:"password,omitempty"`
TFA string `json:"tfa,omitempty"`
Token string `json:"token,omitempty"`
RootFolderID string `json:"root_folder_id,omitempty"`
Bucket string `json:"bucket,omitempty"`
Mnemonic string `json:"mnemonic,omitempty"`
BasicAuthHeader string `json:"basic_auth_header,omitempty"`
DriveAPIURL string `json:"drive_api_url,omitempty"`
AuthAPIURL string `json:"auth_api_url,omitempty"`
UsersAPIURL string `json:"users_api_url,omitempty"`
AppCryptoSecret string `json:"app_crypto_secret,omitempty"`
AppCryptoSecret2 string `json:"app_crypto_secret2,omitempty"`
AppMagicIV string `json:"app_magic_iv,omitempty"`
AppMagicSalt string `json:"app_magic_salt,omitempty"`
EncryptedPassword string `json:"encrypted_password,omitempty"`
HTTPClient *http.Client `json:"-"`
}

func NewDefault(email, password string) *Config {
Expand Down Expand Up @@ -61,27 +63,6 @@ func NewDefaultToken(token string) *Config {
return cfg
}

func LoadFromJSON(path string) (*Config, error) {
b, err := os.ReadFile(path)
if err != nil {
return nil, err
}
var cfg Config
if err := json.Unmarshal(b, &cfg); err != nil {
return nil, err
}
cfg.applyDefaults()
return &cfg, nil
}

func (c *Config) SaveToJSON(path string) error {
b, err := json.MarshalIndent(c, "", " ")
if err != nil {
return err
}
return os.WriteFile(path, b, os.ModePerm)
}

func (c *Config) applyDefaults() {
if c.DriveAPIURL == "" {
c.DriveAPIURL = DefaultDriveAPIURL
Expand All @@ -104,4 +85,30 @@ func (c *Config) applyDefaults() {
if c.AppMagicSalt == "" {
c.AppMagicSalt = DefaultAppMagicSalt
}
if c.HTTPClient == nil {
c.HTTPClient = newHTTPClient()
}
}

// newHTTPClient: properly configured HTTP client with sensible timeouts
func newHTTPClient() *http.Client {
return &http.Client{
Timeout: 60 * time.Second,
Transport: &http.Transport{
MaxIdleConns: 100,
MaxIdleConnsPerHost: 10,
MaxConnsPerHost: 50,
IdleConnTimeout: 90 * time.Second,
DialContext: (&net.Dialer{
Timeout: 10 * time.Second,
KeepAlive: 30 * time.Second,
}).DialContext,
TLSHandshakeTimeout: 10 * time.Second,
ResponseHeaderTimeout: 20 * time.Second,
ExpectContinueTimeout: 1 * time.Second,
DisableKeepAlives: false,
DisableCompression: false,
ForceAttemptHTTP2: true,
},
}
}
Loading