-
Notifications
You must be signed in to change notification settings - Fork 29
/
sharerequest.go
100 lines (94 loc) · 2.72 KB
/
sharerequest.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
package sdk
import (
"context"
b64 "encoding/base64"
"encoding/json"
"github.com/0chain/gosdk/core/common"
"github.com/0chain/gosdk/zboxcore/blockchain"
"github.com/0chain/gosdk/zboxcore/client"
"github.com/0chain/gosdk/zboxcore/encryption"
"github.com/0chain/gosdk/zboxcore/fileref"
"github.com/0chain/gosdk/zboxcore/marker"
)
type ShareRequest struct {
allocationID string
allocationTx string
blobbers []*blockchain.StorageNode
remotefilepath string
remotefilename string
authToken *marker.AuthTicket
refType string
ctx context.Context
}
func (req *ShareRequest) GetAuthTicketForEncryptedFile(clientID string, encPublicKey string) (string, error) {
at := &marker.AuthTicket{}
at.AllocationID = req.allocationID
at.OwnerID = client.GetClientID()
at.ClientID = clientID
at.FileName = req.remotefilename
at.FilePathHash = fileref.GetReferenceLookup(req.allocationID, req.remotefilepath)
at.RefType = req.refType
timestamp := int64(common.Now())
at.Expiration = timestamp + 7776000
at.Timestamp = timestamp
err := at.Sign()
if err != nil {
return "", err
}
var fileRef *fileref.FileRef
listReq := &ListRequest{
remotefilepathhash: at.FilePathHash,
allocationID: req.allocationID,
allocationTx: req.allocationTx,
blobbers: req.blobbers,
ctx: req.ctx,
}
//listReq.authToken = at
_, fileRef, _ = listReq.getFileConsensusFromBlobbers()
if fileRef == nil {
return "", common.NewError("file_meta_error", "Error getting object meta data from blobbers")
}
if fileRef.Type == fileref.DIRECTORY || len(fileRef.EncryptedKey) == 0 {
return req.GetAuthTicket(clientID)
}
var encscheme encryption.EncryptionScheme
encscheme = encryption.NewEncryptionScheme()
encscheme.Initialize(client.GetClient().Mnemonic)
reKey, err := encscheme.GetReGenKey(encPublicKey, "filetype:audio")
if err != nil {
return "", err
}
at.ReEncryptionKey = reKey
err = at.Sign()
if err != nil {
return "", err
}
atBytes, err := json.Marshal(at)
if err != nil {
return "", err
}
sEnc := b64.StdEncoding.EncodeToString(atBytes)
return sEnc, nil
}
func (req *ShareRequest) GetAuthTicket(clientID string) (string, error) {
at := &marker.AuthTicket{}
at.AllocationID = req.allocationID
at.OwnerID = client.GetClientID()
at.ClientID = clientID
at.FileName = req.remotefilename
at.FilePathHash = fileref.GetReferenceLookup(req.allocationID, req.remotefilepath)
at.RefType = req.refType
timestamp := int64(common.Now())
at.Expiration = timestamp + 7776000
at.Timestamp = timestamp
err := at.Sign()
if err != nil {
return "", err
}
atBytes, err := json.Marshal(at)
if err != nil {
return "", err
}
sEnc := b64.StdEncoding.EncodeToString(atBytes)
return sEnc, nil
}