93 lines
2.1 KiB
Go
93 lines
2.1 KiB
Go
package main
|
|
|
|
import (
|
|
"bufio"
|
|
"errors"
|
|
"flag"
|
|
"fmt"
|
|
"os"
|
|
"strings"
|
|
|
|
"gitea.hbanafa.com/hesham/mystc-api/pkg/endpoints"
|
|
"gitea.hbanafa.com/hesham/mystc-api/pkg/models"
|
|
)
|
|
|
|
const URL_MYSTC_API_BASE = "https://mystc.stc.com.sa"
|
|
const PATH_PHONES_LIST = "/api/mystc-api-authentication/phones-list"
|
|
|
|
var ErrMissingFlags = errors.New("flag: missing required flags. use -h")
|
|
|
|
func main() {
|
|
|
|
id := flag.String("id", "", "National ID or Iqama")
|
|
pw := flag.String("password", "", "MySTC Password")
|
|
flag.Parse()
|
|
|
|
if *id == "" || *pw == "" {
|
|
fmt.Fprintf(os.Stderr, "%s\n", ErrMissingFlags.Error())
|
|
os.Exit(1)
|
|
}
|
|
|
|
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())
|
|
}
|
|
fmt.Printf("Select a number: ")
|
|
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)
|
|
|
|
|
|
|
|
|
|
}
|