diff options
Diffstat (limited to 'vendor/github.com/Philipp15b/go-steam/tradeoffer/escrow.go')
-rw-r--r-- | vendor/github.com/Philipp15b/go-steam/tradeoffer/escrow.go | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/vendor/github.com/Philipp15b/go-steam/tradeoffer/escrow.go b/vendor/github.com/Philipp15b/go-steam/tradeoffer/escrow.go new file mode 100644 index 00000000..07806716 --- /dev/null +++ b/vendor/github.com/Philipp15b/go-steam/tradeoffer/escrow.go @@ -0,0 +1,47 @@ +package tradeoffer + +import ( + "errors" + "fmt" + "regexp" + "strconv" +) + +type EscrowDuration struct { + DaysMyEscrow uint32 + DaysTheirEscrow uint32 +} + +func parseEscrowDuration(data []byte) (*EscrowDuration, error) { + // TODO: why we are using case insensitive matching? + myRegex := regexp.MustCompile("(?i)g_daysMyEscrow[\\s=]+(\\d+);") + theirRegex := regexp.MustCompile("(?i)g_daysTheirEscrow[\\s=]+(\\d+);") + + myM := myRegex.FindSubmatch(data) + theirM := theirRegex.FindSubmatch(data) + + if myM == nil || theirM == nil { + // check if access token is valid + notFriendsRegex := regexp.MustCompile(">You are not friends with this user<") + notFriendsM := notFriendsRegex.FindSubmatch(data) + if notFriendsM == nil { + return nil, errors.New("regexp does not match") + } else { + return nil, errors.New("you are not friends with this user") + } + } + + myEscrow, err := strconv.ParseUint(string(myM[1]), 10, 32) + if err != nil { + return nil, fmt.Errorf("failed to parse my duration into uint: %v", err) + } + theirEscrow, err := strconv.ParseUint(string(theirM[1]), 10, 32) + if err != nil { + return nil, fmt.Errorf("failed to parse their duration into uint: %v", err) + } + + return &EscrowDuration{ + DaysMyEscrow: uint32(myEscrow), + DaysTheirEscrow: uint32(theirEscrow), + }, nil +} |