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.
46 lines
911 B
46 lines
911 B
package main |
|
|
|
import ( |
|
"context" |
|
"encoding/json" |
|
|
|
"github.com/bogosj/tesla" |
|
"golang.org/x/oauth2" |
|
) |
|
|
|
func noDevice(ctx context.Context, devices []tesla.Device) (d tesla.Device, passcode string, err error) { |
|
return tesla.Device{}, "", nil |
|
} |
|
func login(ctx context.Context, username string, password string, tok string) (string, error) { |
|
var client *tesla.Client |
|
var err error |
|
if tok != "" { |
|
client, err = tesla.NewClient( |
|
ctx, |
|
tesla.WithToken(&oauth2.Token{ |
|
RefreshToken: tok, |
|
}), |
|
) |
|
} else { |
|
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 |
|
}
|
|
|