mystcapi/main.go

83 lines
1.8 KiB
Go

package main
import (
"bufio"
"flag"
"fmt"
"mystcapi/pkg/endpoints"
"mystcapi/pkg/models"
"os"
"strings"
)
const URL_MYSTC_API_BASE = "https://mystc.stc.com.sa"
const PATH_PHONES_LIST = "/api/mystc-api-authentication/phones-list"
func main() {
id := flag.String("id", "", "National ID or Iqama")
pw := flag.String("password", "", "MySTC Password")
flag.Parse()
phones, err := endpoints.GetPhonesList(*id, *pw)
if err != nil {
fmt.Println(err.Error())
os.Exit(1)
}
reader := bufio.NewReader(os.Stdin)
var selectedNumber models.PhoneNumber
mainloop:
for {
for idx, n := range phones.PhoneNumbers {
fmt.Printf("%d: %s %s\n", idx, n.Number, n.Type.String())
}
input, err := reader.ReadString('\n')
if err != nil {
fmt.Println(err.Error())
os.Exit(1)
}
input = strings.Trim(input, "\n")
for idx, n := range phones.PhoneNumbers {
if input == fmt.Sprint(idx) {
selectedNumber = n
break mainloop
}
}
}
fmt.Printf("selectedNumber: %v\n", selectedNumber)
loginOTP, err := endpoints.RequestLoginOTP(phones.LoginToken, selectedNumber.Number)
if err != nil {
fmt.Println(err.Error())
os.Exit(1)
}
fmt.Println("OTP Sent!")
fmt.Print("Enter OTP: ")
otp, err := reader.ReadString('\n')
otp = strings.Trim(otp, "\n")
login, err := endpoints.VerifyLoginOTP(*id, loginOTP.OtpToken, otp)
if err != nil {
fmt.Println(err.Error())
os.Exit(1)
}
fmt.Println("Logged in!")
balance, err := endpoints.GetBalance(login, selectedNumber.Number)
if err != nil {
fmt.Println(err.Error())
os.Exit(1)
}
fmt.Printf("Balance %f\n", balance.Balance)
}