feat(app): implement EVE SSO login and waypoint setting functionality
This commit is contained in:
62
app.go
62
app.go
@@ -2,12 +2,17 @@ package main
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"fmt"
|
||||
"os"
|
||||
|
||||
"github.com/wailsapp/wails/v2/pkg/runtime"
|
||||
)
|
||||
|
||||
// App struct
|
||||
type App struct {
|
||||
ctx context.Context
|
||||
ssi *ESISSO
|
||||
}
|
||||
|
||||
// NewApp creates a new App application struct
|
||||
@@ -19,9 +24,66 @@ func NewApp() *App {
|
||||
// so we can call the runtime methods
|
||||
func (a *App) startup(ctx context.Context) {
|
||||
a.ctx = ctx
|
||||
|
||||
clientID := os.Getenv("EVE_SSO_CLIENT_ID")
|
||||
if clientID == "" {
|
||||
clientID = "5091f74037374697938384bdbac2698c"
|
||||
}
|
||||
redirectURI := os.Getenv("EVE_SSO_REDIRECT_URI")
|
||||
if redirectURI == "" {
|
||||
redirectURI = "http://localhost:8080/callback"
|
||||
}
|
||||
|
||||
a.ssi = NewESISSO(clientID, redirectURI, []string{"esi-ui.write_waypoint.v1"})
|
||||
}
|
||||
|
||||
// Greet returns a greeting for the given name
|
||||
func (a *App) Greet(name string) string {
|
||||
return fmt.Sprintf("Hello %s, It's show time!", name)
|
||||
}
|
||||
|
||||
// StartESILogin begins the PKCE SSO flow and opens a browser to the EVE login page
|
||||
func (a *App) StartESILogin() (string, error) {
|
||||
if a.ssi == nil {
|
||||
return "", errors.New("ESI not initialised")
|
||||
}
|
||||
url, err := a.ssi.BuildAuthorizeURL()
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
go func() { _ = a.ssi.StartCallbackServer() }()
|
||||
runtime.BrowserOpenURL(a.ctx, url)
|
||||
return url, nil
|
||||
}
|
||||
|
||||
// ESILoginStatus returns a short status string of the active token/character
|
||||
func (a *App) ESILoginStatus() string {
|
||||
if a.ssi == nil {
|
||||
return "not initialised"
|
||||
}
|
||||
st := a.ssi.Status()
|
||||
if st.LoggedIn {
|
||||
return fmt.Sprintf("logged in as %s (%d)", st.CharacterName, st.CharacterID)
|
||||
}
|
||||
return "not logged in"
|
||||
}
|
||||
|
||||
// SetDestination posts a waypoint to ESI to set destination
|
||||
func (a *App) SetDestination(destinationID int64, clearOthers bool, addToBeginning bool) error {
|
||||
if a.ssi == nil {
|
||||
return errors.New("ESI not initialised")
|
||||
}
|
||||
return a.ssi.PostWaypoint(destinationID, clearOthers, addToBeginning)
|
||||
}
|
||||
|
||||
// SetDestinationByName resolves a solar system name to ID and sets destination
|
||||
func (a *App) SetDestinationByName(systemName string, clearOthers bool, addToBeginning bool) error {
|
||||
if a.ssi == nil {
|
||||
return errors.New("ESI not initialised")
|
||||
}
|
||||
id, err := a.ssi.ResolveSystemIDByName(a.ctx, systemName)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return a.ssi.PostWaypoint(id, clearOthers, addToBeginning)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user