250 lines
6.3 KiB
Go
250 lines
6.3 KiB
Go
package client
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"net/http"
|
|
|
|
"github.com/ihexxa/quickshare/src/handlers/fileshdr"
|
|
"github.com/parnurzeal/gorequest"
|
|
)
|
|
|
|
type FilesClient struct {
|
|
addr string
|
|
r *gorequest.SuperAgent
|
|
token *http.Cookie
|
|
}
|
|
|
|
func NewFilesClient(addr string, token *http.Cookie) *FilesClient {
|
|
gr := gorequest.New()
|
|
return &FilesClient{
|
|
addr: addr,
|
|
r: gr,
|
|
token: token,
|
|
}
|
|
}
|
|
|
|
func (cl *FilesClient) url(urlpath string) string {
|
|
return fmt.Sprintf("%s%s", cl.addr, urlpath)
|
|
}
|
|
|
|
func (cl *FilesClient) Create(filepath string, size int64) (*http.Response, string, []error) {
|
|
return cl.r.Post(cl.url("/v1/fs/files")).
|
|
AddCookie(cl.token).
|
|
Send(fileshdr.CreateReq{
|
|
Path: filepath,
|
|
FileSize: size,
|
|
}).
|
|
End()
|
|
}
|
|
|
|
func (cl *FilesClient) Delete(filepath string) (*http.Response, string, []error) {
|
|
return cl.r.Delete(cl.url("/v1/fs/files")).
|
|
AddCookie(cl.token).
|
|
Param(fileshdr.FilePathQuery, filepath).
|
|
End()
|
|
}
|
|
|
|
func (cl *FilesClient) Metadata(filepath string) (*http.Response, *fileshdr.MetadataResp, []error) {
|
|
resp, body, errs := cl.r.Get(cl.url("/v1/fs/metadata")).
|
|
AddCookie(cl.token).
|
|
Param(fileshdr.FilePathQuery, filepath).
|
|
End()
|
|
|
|
mResp := &fileshdr.MetadataResp{}
|
|
err := json.Unmarshal([]byte(body), mResp)
|
|
if err != nil {
|
|
errs = append(errs, err)
|
|
return nil, nil, errs
|
|
}
|
|
return resp, mResp, nil
|
|
}
|
|
|
|
func (cl *FilesClient) Mkdir(dirpath string) (*http.Response, string, []error) {
|
|
return cl.r.Post(cl.url("/v1/fs/dirs")).
|
|
AddCookie(cl.token).
|
|
Send(fileshdr.MkdirReq{Path: dirpath}).
|
|
End()
|
|
}
|
|
|
|
func (cl *FilesClient) Move(oldpath, newpath string) (*http.Response, string, []error) {
|
|
return cl.r.Patch(cl.url("/v1/fs/files/move")).
|
|
AddCookie(cl.token).
|
|
Send(fileshdr.MoveReq{
|
|
OldPath: oldpath,
|
|
NewPath: newpath,
|
|
}).
|
|
End()
|
|
}
|
|
|
|
func (cl *FilesClient) UploadChunk(filepath string, content string, offset int64) (*http.Response, string, []error) {
|
|
return cl.r.Patch(cl.url("/v1/fs/files/chunks")).
|
|
AddCookie(cl.token).
|
|
Send(fileshdr.UploadChunkReq{
|
|
Path: filepath,
|
|
Content: content,
|
|
Offset: offset,
|
|
}).
|
|
End()
|
|
}
|
|
|
|
func (cl *FilesClient) UploadStatus(filepath string) (*http.Response, *fileshdr.UploadStatusResp, []error) {
|
|
resp, body, errs := cl.r.Get(cl.url("/v1/fs/files/chunks")).
|
|
AddCookie(cl.token).
|
|
Param(fileshdr.FilePathQuery, filepath).
|
|
End()
|
|
|
|
uResp := &fileshdr.UploadStatusResp{}
|
|
err := json.Unmarshal([]byte(body), uResp)
|
|
if err != nil {
|
|
errs = append(errs, err)
|
|
return nil, nil, errs
|
|
}
|
|
return resp, uResp, nil
|
|
}
|
|
|
|
func (cl *FilesClient) Download(filepath string, headers map[string]string) (*http.Response, string, []error) {
|
|
r := cl.r.Get(cl.url("/v1/fs/files")).
|
|
AddCookie(cl.token).
|
|
Param(fileshdr.FilePathQuery, filepath)
|
|
for key, val := range headers {
|
|
r = r.Set(key, val)
|
|
}
|
|
return r.End()
|
|
}
|
|
|
|
func (cl *FilesClient) List(dirPath string) (*http.Response, *fileshdr.ListResp, []error) {
|
|
resp, body, errs := cl.r.Get(cl.url("/v1/fs/dirs")).
|
|
AddCookie(cl.token).
|
|
Param(fileshdr.ListDirQuery, dirPath).
|
|
End()
|
|
if len(errs) > 0 {
|
|
return nil, nil, errs
|
|
}
|
|
|
|
lResp := &fileshdr.ListResp{}
|
|
err := json.Unmarshal([]byte(body), lResp)
|
|
if err != nil {
|
|
return nil, nil, append(errs, err)
|
|
}
|
|
return resp, lResp, nil
|
|
}
|
|
|
|
func (cl *FilesClient) ListHome() (*http.Response, *fileshdr.ListResp, []error) {
|
|
resp, body, errs := cl.r.Get(cl.url("/v1/fs/dirs/home")).
|
|
AddCookie(cl.token).
|
|
End()
|
|
if len(errs) > 0 {
|
|
return nil, nil, errs
|
|
}
|
|
|
|
lResp := &fileshdr.ListResp{}
|
|
err := json.Unmarshal([]byte(body), lResp)
|
|
if err != nil {
|
|
return nil, nil, append(errs, err)
|
|
}
|
|
return resp, lResp, nil
|
|
}
|
|
|
|
func (cl *FilesClient) ListUploadings() (*http.Response, *fileshdr.ListUploadingsResp, []error) {
|
|
resp, body, errs := cl.r.Get(cl.url("/v1/fs/uploadings")).
|
|
AddCookie(cl.token).
|
|
End()
|
|
if len(errs) > 0 {
|
|
return nil, nil, errs
|
|
}
|
|
|
|
lResp := &fileshdr.ListUploadingsResp{}
|
|
err := json.Unmarshal([]byte(body), lResp)
|
|
if err != nil {
|
|
return nil, nil, append(errs, err)
|
|
}
|
|
return resp, lResp, nil
|
|
}
|
|
|
|
func (cl *FilesClient) DelUploading(filepath string) (*http.Response, string, []error) {
|
|
return cl.r.Delete(cl.url("/v1/fs/uploadings")).
|
|
AddCookie(cl.token).
|
|
Param(fileshdr.FilePathQuery, filepath).
|
|
End()
|
|
}
|
|
|
|
func (cl *FilesClient) AddSharing(dirpath string) (*http.Response, string, []error) {
|
|
return cl.r.Post(cl.url("/v1/fs/sharings")).
|
|
AddCookie(cl.token).
|
|
Send(fileshdr.SharingReq{SharingPath: dirpath}).
|
|
End()
|
|
}
|
|
|
|
func (cl *FilesClient) DelSharing(dirpath string) (*http.Response, string, []error) {
|
|
return cl.r.Delete(cl.url("/v1/fs/sharings")).
|
|
AddCookie(cl.token).
|
|
Param(fileshdr.FilePathQuery, dirpath).
|
|
End()
|
|
}
|
|
|
|
func (cl *FilesClient) IsSharing(dirpath string) (*http.Response, string, []error) {
|
|
return cl.r.Get(cl.url("/v1/fs/sharings/exist")).
|
|
AddCookie(cl.token).
|
|
Param(fileshdr.FilePathQuery, dirpath).
|
|
End()
|
|
}
|
|
|
|
// Deprecated: use ListSharingIDs intead
|
|
func (cl *FilesClient) ListSharings() (*http.Response, *fileshdr.SharingResp, []error) {
|
|
resp, body, errs := cl.r.Get(cl.url("/v1/fs/sharings")).
|
|
AddCookie(cl.token).
|
|
End()
|
|
if len(errs) > 0 {
|
|
return nil, nil, errs
|
|
}
|
|
|
|
shResp := &fileshdr.SharingResp{}
|
|
err := json.Unmarshal([]byte(body), shResp)
|
|
if err != nil {
|
|
return nil, nil, append(errs, err)
|
|
}
|
|
return resp, shResp, nil
|
|
}
|
|
|
|
func (cl *FilesClient) ListSharingIDs() (*http.Response, *fileshdr.SharingIDsResp, []error) {
|
|
resp, body, errs := cl.r.Get(cl.url("/v1/fs/sharings/ids")).
|
|
AddCookie(cl.token).
|
|
End()
|
|
if len(errs) > 0 {
|
|
return nil, nil, errs
|
|
}
|
|
|
|
shResp := &fileshdr.SharingIDsResp{}
|
|
err := json.Unmarshal([]byte(body), shResp)
|
|
if err != nil {
|
|
return nil, nil, append(errs, err)
|
|
}
|
|
return resp, shResp, nil
|
|
}
|
|
|
|
func (cl *FilesClient) GenerateHash(filepath string) (*http.Response, string, []error) {
|
|
return cl.r.Post(cl.url("/v1/fs/hashes/sha1")).
|
|
AddCookie(cl.token).
|
|
Send(fileshdr.GenerateHashReq{
|
|
FilePath: filepath,
|
|
}).
|
|
End()
|
|
}
|
|
|
|
func (cl *FilesClient) GetSharingDir(shareID string) (*http.Response, string, []error) {
|
|
resp, body, errs := cl.r.Get(cl.url("/v1/fs/sharings/dirs")).
|
|
AddCookie(cl.token).
|
|
Param(fileshdr.ShareIDQuery, shareID).
|
|
End()
|
|
if len(errs) > 0 {
|
|
return nil, "", errs
|
|
}
|
|
|
|
sdResp := &fileshdr.GetSharingDirResp{}
|
|
err := json.Unmarshal([]byte(body), sdResp)
|
|
if err != nil {
|
|
return nil, "", append(errs, err)
|
|
}
|
|
return resp, sdResp.SharingDir, nil
|
|
}
|