Skip to content

Commit

Permalink
fix: fixed bugs
Browse files Browse the repository at this point in the history
  • Loading branch information
YarikRevich committed Sep 23, 2024
1 parent 307dfa5 commit 7146d3b
Show file tree
Hide file tree
Showing 5 changed files with 19 additions and 271 deletions.
22 changes: 4 additions & 18 deletions mobilesdk/zboxapi/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -68,29 +68,15 @@ func GetCsrfToken() (string, error) {
return zboxApiClient.GetCsrfToken(context.TODO())
}

// CreateJwtSession create a jwt session for the given phone number
// - phoneNumber is the phone number
func CreateJwtSession(userID string) (int64, error) {
if zboxApiClient == nil {
return 0, ErrZboxApiNotInitialized
}
return zboxApiClient.CreateJwtSession(context.TODO(), userID)
}

// CreateJwtToken create a fresh jwt token for the given user id
// - phoneNumber is the phone number
// - jwtSessionID is the jwt session id
// - otp is the one time password
func CreateJwtToken(userID string, jwtSessionID int64) (string, error) {
// CreateJwtToken creates JWT token with the help of provided userID.
func CreateJwtToken(userID, accessToken string) (string, error) {
if zboxApiClient == nil {
return "", ErrZboxApiNotInitialized
}
return zboxApiClient.CreateJwtToken(context.TODO(), userID, jwtSessionID)
return zboxApiClient.CreateJwtToken(context.TODO(), userID, accessToken)
}

// RefreshJwtToken refresh jwt token
// - phoneNumber is the phone number for which the token is to be refreshed
// - token is the token to be refreshed
// RefreshJwtToken refreshes JWT token
func RefreshJwtToken(userID string, token string) (string, error) {
if zboxApiClient == nil {
return "", ErrZboxApiNotInitialized
Expand Down
22 changes: 4 additions & 18 deletions wasmsdk/zbox.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,29 +27,15 @@ func getCsrfToken() (string, error) {
return zboxApiClient.GetCsrfToken(context.TODO())
}

// createJwtSession creates jwt session for the given phone number
// - phoneNumber is the phone number of the user
func createJwtSession(userID string) (int64, error) {
if zboxApiClient == nil {
return 0, ErrZboxApiNotInitialized
}
return zboxApiClient.CreateJwtSession(context.TODO(), userID)
}

// createJwtToken creates jwt token for the given phone number
// - phoneNumber is the phone number of the user
// - jwtSessionID is the jwt session id
// - otp is the one time password
func createJwtToken(userID string, jwtSessionID int64) (string, error) {
// createJwtToken creates JWT token with the help of the provided userID.
func createJwtToken(userID, accessToken string) (string, error) {
if zboxApiClient == nil {
return "", ErrZboxApiNotInitialized
}
return zboxApiClient.CreateJwtToken(context.TODO(), userID, jwtSessionID)
return zboxApiClient.CreateJwtToken(context.TODO(), userID, accessToken)
}

// refreshJwtToken refreshes jwt token for the given phone number
// - phoneNumber is the phone number of the user
// - token is the jwt token to refresh
// refreshJwtToken refreshes JWT token for the given userID.
func refreshJwtToken(userID string, token string) (string, error) {
if zboxApiClient == nil {
return "", ErrZboxApiNotInitialized
Expand Down
25 changes: 2 additions & 23 deletions winsdk/zboxapi.go
Original file line number Diff line number Diff line change
Expand Up @@ -100,27 +100,6 @@ func GetCsrfToken() *C.char {
return WithJSON(zboxApiClient.GetCsrfToken(context.TODO()))
}

// CreateJwtSession create a jwt session
//
// return
// {
// "error":"",
// "result":"xxx",
// }
//
//export CreateJwtSession
func CreateJwtSession(userID *C.char) *C.char {
defer func() {
if r := recover(); r != nil {
log.Error("win: crash ", r)
}
}()
if zboxApiClient == nil {
return WithJSON(0, ErrZboxApiNotInitialized)
}
return WithJSON(zboxApiClient.CreateJwtSession(context.TODO(), C.GoString(userID)))
}

// CreateJwtToken create a fresh jwt token
//
// return
Expand All @@ -130,7 +109,7 @@ func CreateJwtSession(userID *C.char) *C.char {
// }
//
//export CreateJwtToken
func CreateJwtToken(userID *C.char, jwtSessionID int64) *C.char {
func CreateJwtToken(userID, accessToken *C.char) *C.char {
defer func() {
if r := recover(); r != nil {
log.Error("win: crash ", r)
Expand All @@ -139,7 +118,7 @@ func CreateJwtToken(userID *C.char, jwtSessionID int64) *C.char {
if zboxApiClient == nil {
return WithJSON("", ErrZboxApiNotInitialized)
}
return WithJSON(zboxApiClient.CreateJwtToken(context.TODO(), C.GoString(userID), jwtSessionID))
return WithJSON(zboxApiClient.CreateJwtToken(context.TODO(), C.GoString(userID), C.GoString(accessToken)))
}

// RefreshJwtToken refresh jwt token
Expand Down
45 changes: 9 additions & 36 deletions zboxapi/sdk.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,12 @@ import (
"encoding/json"
"errors"
"fmt"
"github.com/0chain/gosdk/zcncore"
"net/http"
"strconv"
"time"

"github.com/0chain/gosdk/zcncore"

thrown "github.com/0chain/errors"
"github.com/0chain/gosdk/core/encryption"
"github.com/0chain/gosdk/core/logger"
Expand Down Expand Up @@ -110,7 +111,11 @@ func (c *Client) createResty(ctx context.Context, csrfToken, userID string, head

h["X-CSRF-TOKEN"] = csrfToken
h["X-App-Timestamp"] = strconv.FormatInt(time.Now().Unix(), 10)
h["X-App-ID-Token"] = "*" //ignore firebase token in jwt requests

if _, ok := h["X-App-ID-Token"]; !ok {
h["X-App-ID-Token"] = "*" //ignore firebase token in jwt requests
}

h["X-App-Type"] = c.appType

for k, v := range headers {
Expand All @@ -120,46 +125,14 @@ func (c *Client) createResty(ctx context.Context, csrfToken, userID string, head
return resty.New(resty.WithHeader(h)), nil
}

// CreateJwtSession create a jwt session with user id
func (c *Client) CreateJwtSession(ctx context.Context, userID string) (int64, error) {

csrfToken, err := c.GetCsrfToken(ctx)
if err != nil {
return 0, err
}

r, err := c.createResty(ctx, csrfToken, userID, nil)

if err != nil {
return 0, err
}

var sessionID int64

r.DoPost(ctx, nil, c.baseUrl+"/v2/jwt/session").
Then(func(req *http.Request, resp *http.Response, respBody []byte, cf context.CancelFunc, err error) error {
if err != nil {
return err
}

return c.parseResponse(resp, respBody, &sessionID)
})

if errs := r.Wait(); len(errs) > 0 {
return 0, errs[0]
}

return sessionID, nil
}

// CreateJwtToken create a jwt token with jwt session id and otp
func (c *Client) CreateJwtToken(ctx context.Context, userID string, jwtSessionID int64) (string, error) {
func (c *Client) CreateJwtToken(ctx context.Context, userID, accessToken string) (string, error) {
csrfToken, err := c.GetCsrfToken(ctx)
if err != nil {
return "", err
}
headers := map[string]string{
"X-JWT-Session-ID": strconv.FormatInt(jwtSessionID, 10),
"X-App-ID-Token": accessToken,
}

r, err := c.createResty(ctx, csrfToken, userID, headers)
Expand Down
176 changes: 0 additions & 176 deletions zboxapi/sdk_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,6 @@ package zboxapi

import (
"context"
"encoding/base64"
"encoding/json"
"testing"

"github.com/stretchr/testify/require"
Expand Down Expand Up @@ -31,177 +29,3 @@ func TestGetCsrfToken(t *testing.T) {
require.Nil(t, err)
require.True(t, len(token) > 0)
}

func TestJwtToken(t *testing.T) {
t.Skip("Only for local debugging")

c := NewClient()
c.SetRequest(BaseURL, AppType)
c.SetWallet(ClientID, ClientPrivateKey, ClientPublicKey)
sessionID, err := c.CreateJwtSession(context.TODO(), UserID)

require.Nil(t, err)
require.GreaterOrEqual(t, sessionID, int64(0))

token, err := c.CreateJwtToken(context.TODO(), UserID, sessionID) //any otp works on test phone number

require.Nil(t, err)
require.NotEmpty(t, token)

refreshedToken, err := c.RefreshJwtToken(context.TODO(), UserID, token)
require.Nil(t, err)
require.NotEmpty(t, refreshedToken)
require.NotEqual(t, token, refreshedToken)
}

func TestGetFreeStorage(t *testing.T) {
t.Skip("Only for local debugging")

c := NewClient()
c.SetRequest(BaseURL, AppType)
c.SetWallet(ClientID, ClientPrivateKey, ClientPublicKey)
sessionID, err := c.CreateJwtSession(context.TODO(), UserID)

require.Nil(t, err)
require.GreaterOrEqual(t, sessionID, int64(0))

token, err := c.CreateJwtToken(context.TODO(), UserID, sessionID) //any otp works on test phone number

require.Nil(t, err)
require.NotEmpty(t, token)

marker, err := c.GetFreeStorage(context.TODO(), PhoneNumber, "jwt-"+token)

require.NoError(t, err)
require.NotEmpty(t, marker.Assigner)
require.Equal(t, ClientID, marker.Recipient)
}

var testShareInfo = SharedInfo{
AuthTicket: "eyJjbGllbnRfaWQiOiIiLCJvd25lcl9pZCI6IjcwZTEzMThhOTcwOTc4NmNmOTc1ZjE1Y2E5NDFiZWU3M2QwZjQyMjMwNWVjZDc4YjBmMzU4ODcwZWMxN2Y0MWQiLCJhbGxvY2F0aW9uX2lkIjoiZjQ0OTUxZDkwODRiMTExZGMxNDliMmNkN2E5Nzg5YmU5MDVlYjFiMWRhNzdjMjYxNDZiMWNkY2IxNzE3NTI0NiIsImZpbGVfcGF0aF9oYXNoIjoiM2RlOWQ1ZTMzYWJlNWI3ZjhhNzM2OGY0ZmE4N2QwMmY1MjI1YzIzMzhmM2Q3YWI0MGQxNDczM2NiYmI4ZTc1YiIsImFjdHVhbF9maWxlX2hhc2giOiJkYTJjMzIxZmFiN2RkNmYyZDVlZTAzZWQwNDk2OGJlMTA0YjdjNmY2MTYyYTVmY2ZjNDFmZTEyZTY3ZDBkNjUzIiwiZmlsZV9uYW1lIjoiUVHlm77niYcyMDIxMDkzMDEyMDM1Ny5qcGciLCJyZWZlcmVuY2VfdHlwZSI6ImYiLCJleHBpcmF0aW9uIjowLCJ0aW1lc3RhbXAiOjE2OTgyODY5MjcsImVuY3J5cHRlZCI6ZmFsc2UsInNpZ25hdHVyZSI6ImRkMzg4NzI2YTcwYzBjN2Y5NDZkMTQwMTRjMjhhZTg1MjM4ZTliNmJkMmExMzRjMWUxOGE3MTE5NDViYzg4MGYifQ==",
Message: "shared by unit test",
ShareInfoType: "public",
Link: "https://0box.page.link/cnfFExcvKKRaFzyE9",
}

func TestCreateSharedInfo(t *testing.T) {
t.Skip("Only for local debugging")

c := NewClient()
c.SetRequest(BaseURL, AppType)
c.SetWallet(ClientID, ClientPrivateKey, ClientPublicKey)
sessionID, err := c.CreateJwtSession(context.TODO(), UserID)

require.Nil(t, err)
require.GreaterOrEqual(t, sessionID, int64(0))

token, err := c.CreateJwtToken(context.TODO(), UserID, sessionID) //any otp works on test phone number

require.Nil(t, err)
require.NotEmpty(t, token)

err = c.CreateSharedInfo(context.TODO(), PhoneNumber, "jwt-"+token, testShareInfo)

require.NoError(t, err)

}

func TestGetSharedToMe(t *testing.T) {
t.Skip("Only for local debugging")

c := NewClient()
c.SetRequest(BaseURL, AppType)
c.SetWallet(ClientID, ClientPrivateKey, ClientPublicKey)
sessionID, err := c.CreateJwtSession(context.TODO(), UserID)

require.Nil(t, err)
require.GreaterOrEqual(t, sessionID, int64(0))

token, err := c.CreateJwtToken(context.TODO(), UserID, sessionID) //any otp works on test phone number

require.Nil(t, err)
require.NotEmpty(t, token)

list, err := c.GetSharedToMe(context.TODO(), PhoneNumber, "jwt-"+token)

require.NoError(t, err)
require.Greater(t, len(list), 0)
// require.NotEmpty(t, marker.Assigner)
// require.Equal(t, ClientID, marker.Recipient)
}

func TestGetSharedByMe(t *testing.T) {
t.Skip("Only for local debugging")

c := NewClient()
c.SetRequest(BaseURL, AppType)
c.SetWallet(ClientID, ClientPrivateKey, ClientPublicKey)
sessionID, err := c.CreateJwtSession(context.TODO(), UserID)

require.Nil(t, err)
require.GreaterOrEqual(t, sessionID, int64(0))

token, err := c.CreateJwtToken(context.TODO(), UserID, sessionID) //any otp works on test phone number

require.Nil(t, err)
require.NotEmpty(t, token)

list, err := c.GetSharedByMe(context.TODO(), PhoneNumber, "jwt-"+token)

require.NoError(t, err)
require.Greater(t, len(list), 0)

}

func TestGetSharedByPublic(t *testing.T) {
t.Skip("Only for local debugging")

c := NewClient()
c.SetRequest(BaseURL, AppType)
c.SetWallet(ClientID, ClientPrivateKey, ClientPublicKey)
sessionID, err := c.CreateJwtSession(context.TODO(), UserID)

require.Nil(t, err)
require.GreaterOrEqual(t, sessionID, int64(0))

token, err := c.CreateJwtToken(context.TODO(), UserID, sessionID) //any otp works on test phone number

require.Nil(t, err)
require.NotEmpty(t, token)

list, err := c.GetSharedByPublic(context.TODO(), PhoneNumber, "jwt-"+token)

require.NoError(t, err)
require.Greater(t, len(list), 0)

}

func TestDeleteSharedInfo(t *testing.T) {
t.Skip("Only for local debugging")

c := NewClient()
c.SetRequest(BaseURL, AppType)
c.SetWallet(ClientID, ClientPrivateKey, ClientPublicKey)
sessionID, err := c.CreateJwtSession(context.TODO(), UserID)

require.Nil(t, err)
require.GreaterOrEqual(t, sessionID, int64(0))

token, err := c.CreateJwtToken(context.TODO(), UserID, sessionID) //any otp works on test phone number

require.Nil(t, err)
require.NotEmpty(t, token)

buf, _ := base64.StdEncoding.DecodeString(testShareInfo.AuthTicket)

items := make(map[string]any)

json.Unmarshal(buf, &items)

lookupHash := items["file_path_hash"].(string)

err = c.DeleteSharedInfo(context.TODO(), PhoneNumber, "jwt-"+token, testShareInfo.AuthTicket, lookupHash)

require.NoError(t, err)

}

0 comments on commit 7146d3b

Please sign in to comment.