|
@@ -1,15 +1,12 @@
|
|
package auth
|
|
package auth
|
|
|
|
|
|
import (
|
|
import (
|
|
- "encoding/base64"
|
|
|
|
- "encoding/json"
|
|
|
|
"errors"
|
|
"errors"
|
|
"fmt"
|
|
"fmt"
|
|
"net/http"
|
|
"net/http"
|
|
"strings"
|
|
"strings"
|
|
"time"
|
|
"time"
|
|
|
|
|
|
- "golang.org/x/crypto/bcrypt"
|
|
|
|
"golang.org/x/oauth2"
|
|
"golang.org/x/oauth2"
|
|
|
|
|
|
"github.com/gorilla/websocket"
|
|
"github.com/gorilla/websocket"
|
|
@@ -31,7 +28,6 @@ const (
|
|
github_provider_name = "github"
|
|
github_provider_name = "github"
|
|
oidc_provider_name = "oidc"
|
|
oidc_provider_name = "oidc"
|
|
verify_user = "verifyuser"
|
|
verify_user = "verifyuser"
|
|
- auth_key = "netmaker_auth"
|
|
|
|
user_signin_length = 16
|
|
user_signin_length = 16
|
|
node_signin_length = 64
|
|
node_signin_length = 64
|
|
headless_signin_length = 32
|
|
headless_signin_length = 32
|
|
@@ -74,7 +70,7 @@ func InitializeAuthProvider() string {
|
|
if functions == nil {
|
|
if functions == nil {
|
|
return ""
|
|
return ""
|
|
}
|
|
}
|
|
- var _, err = fetchPassValue(logic.RandomString(64))
|
|
|
|
|
|
+ var _, err = logic.FetchPassValue(logic.RandomString(64))
|
|
if err != nil {
|
|
if err != nil {
|
|
logger.Log(0, err.Error())
|
|
logger.Log(0, err.Error())
|
|
return ""
|
|
return ""
|
|
@@ -151,16 +147,6 @@ func HandleAuthLogin(w http.ResponseWriter, r *http.Request) {
|
|
functions[handle_login].(func(http.ResponseWriter, *http.Request))(w, r)
|
|
functions[handle_login].(func(http.ResponseWriter, *http.Request))(w, r)
|
|
}
|
|
}
|
|
|
|
|
|
-// IsOauthUser - returns
|
|
|
|
-func IsOauthUser(user *models.User) error {
|
|
|
|
- var currentValue, err = fetchPassValue("")
|
|
|
|
- if err != nil {
|
|
|
|
- return err
|
|
|
|
- }
|
|
|
|
- var bCryptErr = bcrypt.CompareHashAndPassword([]byte(user.Password), []byte(currentValue))
|
|
|
|
- return bCryptErr
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
// HandleHeadlessSSO - handles the OAuth login flow for headless interfaces such as Netmaker CLI via websocket
|
|
// HandleHeadlessSSO - handles the OAuth login flow for headless interfaces such as Netmaker CLI via websocket
|
|
func HandleHeadlessSSO(w http.ResponseWriter, r *http.Request) {
|
|
func HandleHeadlessSSO(w http.ResponseWriter, r *http.Request) {
|
|
conn, err := upgrader.Upgrade(w, r, nil)
|
|
conn, err := upgrader.Upgrade(w, r, nil)
|
|
@@ -243,7 +229,7 @@ func addUser(email string) error {
|
|
logger.Log(1, "error checking for existence of admin user during OAuth login for", email, "; user not added")
|
|
logger.Log(1, "error checking for existence of admin user during OAuth login for", email, "; user not added")
|
|
return err
|
|
return err
|
|
} // generate random password to adapt to current model
|
|
} // generate random password to adapt to current model
|
|
- var newPass, fetchErr = fetchPassValue("")
|
|
|
|
|
|
+ var newPass, fetchErr = logic.FetchPassValue("")
|
|
if fetchErr != nil {
|
|
if fetchErr != nil {
|
|
return fetchErr
|
|
return fetchErr
|
|
}
|
|
}
|
|
@@ -269,37 +255,6 @@ func addUser(email string) error {
|
|
return nil
|
|
return nil
|
|
}
|
|
}
|
|
|
|
|
|
-func fetchPassValue(newValue string) (string, error) {
|
|
|
|
-
|
|
|
|
- type valueHolder struct {
|
|
|
|
- Value string `json:"value" bson:"value"`
|
|
|
|
- }
|
|
|
|
- var b64NewValue = base64.StdEncoding.EncodeToString([]byte(newValue))
|
|
|
|
- var newValueHolder = &valueHolder{
|
|
|
|
- Value: b64NewValue,
|
|
|
|
- }
|
|
|
|
- var data, marshalErr = json.Marshal(newValueHolder)
|
|
|
|
- if marshalErr != nil {
|
|
|
|
- return "", marshalErr
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- var currentValue, err = logic.FetchAuthSecret(auth_key, string(data))
|
|
|
|
- if err != nil {
|
|
|
|
- return "", err
|
|
|
|
- }
|
|
|
|
- var unmarshErr = json.Unmarshal([]byte(currentValue), newValueHolder)
|
|
|
|
- if unmarshErr != nil {
|
|
|
|
- return "", unmarshErr
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- var b64CurrentValue, b64Err = base64.StdEncoding.DecodeString(newValueHolder.Value)
|
|
|
|
- if b64Err != nil {
|
|
|
|
- logger.Log(0, "could not decode pass")
|
|
|
|
- return "", nil
|
|
|
|
- }
|
|
|
|
- return string(b64CurrentValue), nil
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
func getStateAndCode(r *http.Request) (string, string) {
|
|
func getStateAndCode(r *http.Request) (string, string) {
|
|
var state, code string
|
|
var state, code string
|
|
if r.FormValue("state") != "" && r.FormValue("code") != "" {
|
|
if r.FormValue("state") != "" && r.FormValue("code") != "" {
|