TeslaBot is a simple Keybase bot to control a Tesla, storing access tokens in KVStore
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

47 lines
1010 B

package main
import (
"context"
"encoding/json"
"github.com/bogosj/tesla"
)
func selectDevice(ctx context.Context, devices []tesla.Device) (d tesla.Device, passcode string, err error) {
d = devices[0]
passcode = "000000"
if err != nil {
return tesla.Device{}, "", err
}
return d, passcode, nil
}
func login(ctx context.Context, username string, password string) (string, error) {
defer log.PanicSafe()
log.LogDebug("Creating client for %+v", username)
client, err := tesla.NewClient(
ctx,
tesla.WithMFAHandler(selectDevice),
tesla.WithCredentials(username, password),
)
log.LogDebug("Created client for %+v", username)
if err != nil {
log.LogErrorType(err)
return "", err
}
log.LogDebug("Creating token for %+v", username)
t, err := client.Token()
if err != nil {
log.LogErrorType(err)
return "", err
}
log.LogDebug("Created token for %+v", username)
ret, err := json.Marshal(t)
if err != nil {
log.LogErrorType(err)
return "", err
}
return string(ret), nil
}