Преглед на файлове

create invited user on oauth signup, with groups in the invite

abhishek9686 преди 1 година
родител
ревизия
b486787deb
променени са 6 файла, в които са добавени 67 реда и са изтрити 20 реда
  1. 2 0
      logic/users.go
  2. 8 8
      models/user_mgmt.go
  3. 14 3
      pro/auth/azure-ad.go
  4. 15 3
      pro/auth/github.go
  5. 14 3
      pro/auth/google.go
  6. 14 3
      pro/auth/oidc.go

+ 2 - 0
logic/users.go

@@ -128,6 +128,8 @@ func InsertUserInvite(invite models.UserInvite) error {
 	return database.Insert(invite.Email, string(data), database.USER_INVITES_TABLE_NAME)
 }
 
+func ImportGroupsFromInvite() {}
+
 func GetUserInvite(email string) (in models.UserInvite, err error) {
 	d, err := database.FetchRecord(database.USER_INVITES_TABLE_NAME, email)
 	if err != nil {

+ 8 - 8
models/user_mgmt.go

@@ -108,14 +108,14 @@ type User struct {
 
 // ReturnUser - return user struct
 type ReturnUser struct {
-	UserName       string                   `json:"username"`
-	IsAdmin        bool                     `json:"isadmin"`
-	IsSuperAdmin   bool                     `json:"issuperadmin"`
-	RemoteGwIDs    map[string]struct{}      `json:"remote_gw_ids"` // deprecated
-	UserGroups     map[UserGroupID]struct{} `json:"user_group_ids"`
-	PlatformRoleID string                   `json:"platform_role_id"`
-	NetworkRoles   map[NetworkID]UserRole   `json:"network_roles"`
-	LastLoginTime  time.Time                `json:"last_login_time"`
+	UserName       string                              `json:"username"`
+	IsAdmin        bool                                `json:"isadmin"`
+	IsSuperAdmin   bool                                `json:"issuperadmin"`
+	RemoteGwIDs    map[string]struct{}                 `json:"remote_gw_ids"` // deprecated
+	UserGroups     map[UserGroupID]struct{}            `json:"user_group_ids"`
+	PlatformRoleID UserRole                            `json:"platform_role_id"`
+	NetworkRoles   map[NetworkID]map[UserRole]struct{} `json:"network_roles"`
+	LastLoginTime  time.Time                           `json:"last_login_time"`
 }
 
 // UserAuthParams - user auth params struct

+ 14 - 3
pro/auth/azure-ad.go

@@ -3,6 +3,7 @@ package auth
 import (
 	"context"
 	"encoding/json"
+	"errors"
 	"fmt"
 	"io"
 	"net/http"
@@ -73,7 +74,7 @@ func handleAzureCallback(w http.ResponseWriter, r *http.Request) {
 	}
 	var inviteExists bool
 	// check if invite exists for User
-	_, err = logic.GetUserInvite(content.UserPrincipalName)
+	in, err := logic.GetUserInvite(content.UserPrincipalName)
 	if err == nil {
 		inviteExists = true
 	}
@@ -93,10 +94,20 @@ func handleAzureCallback(w http.ResponseWriter, r *http.Request) {
 					logic.ReturnErrorResponse(w, r, logic.FormatError(fetchErr, "internal"))
 					return
 				}
-				if err = logic.CreateUser(&models.User{
+				user := &models.User{
 					UserName: content.UserPrincipalName,
 					Password: newPass,
-				}); err != nil {
+				}
+				for _, inviteGroupID := range in.Groups {
+					userG, err := logic.GetUserGroup(inviteGroupID)
+					if err != nil {
+						logic.ReturnErrorResponse(w, r, logic.FormatError(errors.New("error fetching group id "+inviteGroupID.String()), "badrequest"))
+						return
+					}
+					user.PlatformRoleID = userG.PlatformRole
+					user.UserGroups[inviteGroupID] = struct{}{}
+				}
+				if err = logic.CreateUser(user); err != nil {
 					handleSomethingWentWrong(w)
 					return
 				}

+ 15 - 3
pro/auth/github.go

@@ -3,6 +3,7 @@ package auth
 import (
 	"context"
 	"encoding/json"
+	"errors"
 	"fmt"
 	"io"
 	"net/http"
@@ -73,7 +74,7 @@ func handleGithubCallback(w http.ResponseWriter, r *http.Request) {
 	}
 	var inviteExists bool
 	// check if invite exists for User
-	_, err = logic.GetUserInvite(content.Login)
+	in, err := logic.GetUserInvite(content.Login)
 	if err == nil {
 		inviteExists = true
 	}
@@ -92,10 +93,21 @@ func handleGithubCallback(w http.ResponseWriter, r *http.Request) {
 					logic.ReturnErrorResponse(w, r, logic.FormatError(fetchErr, "internal"))
 					return
 				}
-				if err = logic.CreateUser(&models.User{
+				user := &models.User{
 					UserName: content.Login,
 					Password: newPass,
-				}); err != nil {
+				}
+
+				for _, inviteGroupID := range in.Groups {
+					userG, err := logic.GetUserGroup(inviteGroupID)
+					if err != nil {
+						logic.ReturnErrorResponse(w, r, logic.FormatError(errors.New("error fetching group id "+inviteGroupID.String()), "badrequest"))
+						return
+					}
+					user.PlatformRoleID = userG.PlatformRole
+					user.UserGroups[inviteGroupID] = struct{}{}
+				}
+				if err = logic.CreateUser(user); err != nil {
 					handleSomethingWentWrong(w)
 					return
 				}

+ 14 - 3
pro/auth/google.go

@@ -3,6 +3,7 @@ package auth
 import (
 	"context"
 	"encoding/json"
+	"errors"
 	"fmt"
 	"io"
 	"net/http"
@@ -75,7 +76,7 @@ func handleGoogleCallback(w http.ResponseWriter, r *http.Request) {
 	}
 	var inviteExists bool
 	// check if invite exists for User
-	_, err = logic.GetUserInvite(content.Email)
+	in, err := logic.GetUserInvite(content.Email)
 	if err == nil {
 		inviteExists = true
 	}
@@ -94,10 +95,20 @@ func handleGoogleCallback(w http.ResponseWriter, r *http.Request) {
 					logic.ReturnErrorResponse(w, r, logic.FormatError(fetchErr, "internal"))
 					return
 				}
-				if err = logic.CreateUser(&models.User{
+				user := &models.User{
 					UserName: content.Email,
 					Password: newPass,
-				}); err != nil {
+				}
+				for _, inviteGroupID := range in.Groups {
+					userG, err := logic.GetUserGroup(inviteGroupID)
+					if err != nil {
+						logic.ReturnErrorResponse(w, r, logic.FormatError(errors.New("error fetching group id "+inviteGroupID.String()), "badrequest"))
+						return
+					}
+					user.PlatformRoleID = userG.PlatformRole
+					user.UserGroups[inviteGroupID] = struct{}{}
+				}
+				if err = logic.CreateUser(user); err != nil {
 					handleSomethingWentWrong(w)
 					return
 				}

+ 14 - 3
pro/auth/oidc.go

@@ -2,6 +2,7 @@ package auth
 
 import (
 	"context"
+	"errors"
 	"fmt"
 	"net/http"
 	"strings"
@@ -86,7 +87,7 @@ func handleOIDCCallback(w http.ResponseWriter, r *http.Request) {
 	}
 	var inviteExists bool
 	// check if invite exists for User
-	_, err = logic.GetUserInvite(content.Login)
+	in, err := logic.GetUserInvite(content.Login)
 	if err == nil {
 		inviteExists = true
 	}
@@ -105,10 +106,20 @@ func handleOIDCCallback(w http.ResponseWriter, r *http.Request) {
 					logic.ReturnErrorResponse(w, r, logic.FormatError(fetchErr, "internal"))
 					return
 				}
-				if err = logic.CreateUser(&models.User{
+				user := &models.User{
 					UserName: content.Email,
 					Password: newPass,
-				}); err != nil {
+				}
+				for _, inviteGroupID := range in.Groups {
+					userG, err := logic.GetUserGroup(inviteGroupID)
+					if err != nil {
+						logic.ReturnErrorResponse(w, r, logic.FormatError(errors.New("error fetching group id "+inviteGroupID.String()), "badrequest"))
+						return
+					}
+					user.PlatformRoleID = userG.PlatformRole
+					user.UserGroups[inviteGroupID] = struct{}{}
+				}
+				if err = logic.CreateUser(user); err != nil {
 					handleSomethingWentWrong(w)
 					return
 				}