add callback for headless sso

This commit is contained in:
Anish Mukherjee
2023-01-02 14:48:39 +05:30
parent 289bb3e5ec
commit 93fdf359b3
3 changed files with 103 additions and 16 deletions

View File

@@ -7,6 +7,7 @@ import (
"io"
"log"
"net/http"
"net/url"
"os"
"os/signal"
"strings"
@@ -15,19 +16,19 @@ import (
"github.com/gravitl/netmaker/cli/config"
"github.com/gravitl/netmaker/logger"
"github.com/gravitl/netmaker/models"
nmconfig "github.com/gravitl/netmaker/netclient/config"
)
func ssoLogin(endpoint string) string {
var (
accessToken *models.AccessToken
interrupt = make(chan os.Signal, 1)
socketURL = fmt.Sprintf("wss://%s/api/oauth/headless", endpoint)
authToken string
interrupt = make(chan os.Signal, 1)
url, _ = url.Parse(endpoint)
socketURL = fmt.Sprintf("wss://%s/api/oauth/headless", url.Host)
)
signal.Notify(interrupt, os.Interrupt)
conn, _, err := websocket.DefaultDialer.Dial(socketURL, nil)
if err != nil {
log.Fatal("error connecting to endpoint: ", err.Error())
log.Fatal("error connecting to endpoint ", socketURL, err.Error())
}
defer conn.Close()
_, msg, err := conn.ReadMessage()
@@ -54,12 +55,9 @@ func ssoLogin(endpoint string) string {
done <- struct{}{}
return
}
if strings.Contains(string(msg), "AccessToken: ") {
if strings.Contains(string(msg), "JWT: ") {
// Access was granted
rxToken := strings.TrimPrefix(string(msg), "AccessToken: ")
if accessToken, err = nmconfig.ParseAccessToken(rxToken); err != nil {
log.Fatalf("failed to parse received access token %s,err=%s\n", accessToken, err.Error())
}
authToken = strings.TrimPrefix(string(msg), "JWT: ")
} else {
logger.Log(0, "Message from server:", string(msg))
return
@@ -69,13 +67,13 @@ func ssoLogin(endpoint string) string {
for {
select {
case <-done:
return accessToken.Key
return authToken
case <-interrupt:
err := conn.WriteMessage(websocket.CloseMessage, websocket.FormatCloseMessage(websocket.CloseNormalClosure, ""))
if err != nil {
logger.Log(0, "write close:", err.Error())
}
return accessToken.Key
return authToken
}
}
}