mystcapi/main.go
HeshamTB 485ae194e5
main: quite if missing parameters
Signed-off-by: HeshamTB <hishaminv@gmail.com>
2025-07-16 19:12:22 +03:00

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)
}