|
|
|
package main
|
|
|
|
|
|
|
|
import (
|
|
|
|
"context"
|
|
|
|
"encoding/json"
|
|
|
|
|
|
|
|
"github.com/bogosj/tesla"
|
|
|
|
"golang.org/x/oauth2"
|
|
|
|
)
|
|
|
|
|
|
|
|
var mfaCode string
|
|
|
|
|
|
|
|
func noDevice(ctx context.Context, devices []tesla.Device) (d tesla.Device, passcode string, err error) {
|
|
|
|
return devices[0], mfaCode, nil
|
|
|
|
}
|
|
|
|
func login(ctx context.Context, username string, password string, tok string) (string, error) {
|
|
|
|
var client *tesla.Client
|
|
|
|
var err error
|
|
|
|
if username == "" {
|
|
|
|
client, err = tesla.NewClient(
|
|
|
|
ctx,
|
|
|
|
tesla.WithToken(&oauth2.Token{
|
|
|
|
RefreshToken: tok,
|
|
|
|
}),
|
|
|
|
)
|
|
|
|
} else {
|
|
|
|
mfaCode = tok
|
|
|
|
client, err = tesla.NewClient(
|
|
|
|
ctx,
|
|
|
|
tesla.WithMFAHandler(noDevice),
|
|
|
|
tesla.WithCredentials(username, password),
|
|
|
|
)
|
|
|
|
}
|
|
|
|
if err != nil {
|
|
|
|
log.LogErrorType(err)
|
|
|
|
return "", err
|
|
|
|
}
|
|
|
|
t, err := client.Token()
|
|
|
|
if err != nil {
|
|
|
|
log.LogErrorType(err)
|
|
|
|
return "", err
|
|
|
|
}
|
|
|
|
ret, err := json.Marshal(t)
|
|
|
|
if err != nil {
|
|
|
|
log.LogErrorType(err)
|
|
|
|
return "", err
|
|
|
|
}
|
|
|
|
return string(ret), nil
|
|
|
|
}
|