48 lines
1.3 KiB
Go
48 lines
1.3 KiB
Go
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
|
|
}
|