Browse Source

Merge pull request #396 from gravitl/bugfix_v0.8.5_oauth_params

Bugfix v0.8.5 oauth params
dcarns 3 years ago
parent
commit
ae80dd2c79
4 changed files with 47 additions and 16 deletions
  1. 27 1
      auth/auth.go
  2. 10 0
      auth/error.go
  3. 0 5
      controllers/userHttpController.go
  4. 10 10
      serverctl/serverctl.go

+ 27 - 1
auth/auth.go

@@ -3,7 +3,9 @@ package auth
 import (
 	"encoding/base64"
 	"encoding/json"
+	"fmt"
 	"net/http"
+	"strings"
 
 	"github.com/gravitl/netmaker/logic"
 	"github.com/gravitl/netmaker/models"
@@ -59,12 +61,26 @@ func InitializeAuthProvider() string {
 		return ""
 	}
 	var authInfo = servercfg.GetAuthProviderInfo()
-	functions[init_provider].(func(string, string, string))(servercfg.GetAPIConnString()+"/api/oauth/callback", authInfo[1], authInfo[2])
+	var serverConn = servercfg.GetAPIHost()
+	if strings.Contains(serverConn, "localhost") || strings.Contains(serverConn, "127.0.0.1") {
+		serverConn = "http://" + serverConn
+		logic.Log("localhost OAuth detected, proceeding with insecure http redirect: "+serverConn+")", 1)
+	} else {
+		serverConn = "https://" + serverConn
+		logic.Log("external OAuth detected, proceeding with https redirect: ("+serverConn+")", 1)
+	}
+
+	functions[init_provider].(func(string, string, string))(serverConn+"/api/oauth/callback", authInfo[1], authInfo[2])
 	return authInfo[0]
 }
 
 // HandleAuthCallback - handles oauth callback
 func HandleAuthCallback(w http.ResponseWriter, r *http.Request) {
+	if auth_provider == nil {
+		w.Header().Set("Content-Type", "text/html; charset=utf-8")
+		fmt.Fprintln(w, oauthNotConfigured)
+		return
+	}
 	var functions = getCurrentAuthFunctions()
 	if functions == nil {
 		return
@@ -74,6 +90,16 @@ func HandleAuthCallback(w http.ResponseWriter, r *http.Request) {
 
 // HandleAuthLogin - handles oauth login
 func HandleAuthLogin(w http.ResponseWriter, r *http.Request) {
+	if auth_provider == nil {
+		var referer = r.Header.Get("referer")
+		if referer != "" {
+			http.Redirect(w, r, referer+"?oauth=callback-error", http.StatusTemporaryRedirect)
+			return
+		}
+		w.Header().Set("Content-Type", "text/html; charset=utf-8")
+		fmt.Fprintln(w, oauthNotConfigured)
+		return
+	}
 	var functions = getCurrentAuthFunctions()
 	if functions == nil {
 		return

+ 10 - 0
auth/error.go

@@ -0,0 +1,10 @@
+package auth
+
+// == define error HTML here ==
+const oauthNotConfigured = `<!DOCTYPE html><html>
+<body>
+<h3>Your Netmaker server does not have OAuth configured.</h3>
+<p>Please visit the docs <a href="https://docs.netmaker.org/oauth.html" target="_blank" rel="noopener">here</a> to learn how to.</p>
+</body>
+</html>
+`

+ 0 - 5
controllers/userHttpController.go

@@ -29,11 +29,6 @@ func userHandlers(r *mux.Router) {
 	r.HandleFunc("/api/users", authorizeUserAdm(http.HandlerFunc(getUsers))).Methods("GET")
 	r.HandleFunc("/api/oauth/login", auth.HandleAuthLogin).Methods("GET")
 	r.HandleFunc("/api/oauth/callback", auth.HandleAuthCallback).Methods("GET")
-	r.HandleFunc("/api/oauth/error", throwOauthError).Methods("GET")
-}
-
-func throwOauthError(response http.ResponseWriter, request *http.Request) {
-	returnErrorResponse(response, request, formatError(errors.New("No token returned"), "unauthorized"))
 }
 
 // Node authenticates using its password and retrieves a JWT for authorization.

+ 10 - 10
serverctl/serverctl.go

@@ -5,6 +5,7 @@ import (
 	"errors"
 	"io"
 	"log"
+	"net"
 	"os"
 	"strings"
 
@@ -98,7 +99,6 @@ func HandleContainedClient() error {
 		if err != nil {
 			return err
 		}
-		log.SetFlags(log.Flags() &^ (log.Llongfile | log.Lshortfile))
 		err := SyncNetworks(servernets)
 		if err != nil {
 			logic.Log("error syncing networks: "+err.Error(), 1)
@@ -119,7 +119,7 @@ func HandleContainedClient() error {
 // SyncNetworks - syncs the networks for servers
 func SyncNetworks(servernets []models.Network) error {
 
-	localnets, err := ncutils.GetSystemNetworks()
+	localnets, err := net.Interfaces()
 	if err != nil {
 		return err
 	}
@@ -127,7 +127,7 @@ func SyncNetworks(servernets []models.Network) error {
 	for _, servernet := range servernets {
 		exists := false
 		for _, localnet := range localnets {
-			if servernet.NetID == localnet {
+			if servernet.DefaultInterface == localnet.Name {
 				exists = true
 			}
 		}
@@ -147,20 +147,20 @@ func SyncNetworks(servernets []models.Network) error {
 	}
 	// check networks to leave
 	for _, localnet := range localnets {
-		exists := false
+		var exists = ""
 		for _, servernet := range servernets {
-			if servernet.NetID == localnet {
-				exists = true
+			if servernet.DefaultInterface == localnet.Name {
+				exists = servernet.NetID
 			}
 		}
-		if !exists {
-			success, err := RemoveNetwork(localnet)
+		if exists != "" {
+			success, err := RemoveNetwork(exists)
 			if err != nil || !success {
 				if err == nil {
-					err = errors.New("network delete failed for " + localnet)
+					err = errors.New("network delete failed for " + exists)
 				}
 				if servercfg.GetVerbose() >= 1 {
-					log.Printf("[netmaker] error removing network %s during sync %s \n", localnet, err)
+					log.Printf("[netmaker] error removing network %s during sync %s \n", exists, err)
 				}
 			}
 		}