From 4265158e2ae61aaea4dfaba5eb72ddf416f488d8 Mon Sep 17 00:00:00 2001
From: Alexis Poyen <apoyen@mail.apoyen.fr>
Date: Tue, 12 May 2020 14:06:22 +0200
Subject: [PATCH] Feat : Set IsAdmin field, break on several groupe OAuth

---
 internal/auth/inmemory.go | 10 ++++++++++
 internal/auth/oauth2.go   |  4 ++++
 2 files changed, 14 insertions(+)

diff --git a/internal/auth/inmemory.go b/internal/auth/inmemory.go
index 70aab98..6e84c59 100644
--- a/internal/auth/inmemory.go
+++ b/internal/auth/inmemory.go
@@ -101,6 +101,11 @@ func (d *DataHandler) AddUser(w http.ResponseWriter, req *http.Request) {
 		http.Error(w, "passwords cannot be blank", 400)
 		return
 	}
+	if newUser.Role == "ADMIN" {
+		newUser.IsAdmin = true
+	} else {
+		newUser.IsAdmin = false
+	}
 	if newUser.Password != "" {
 		hash, err := bcrypt.GenerateFromPassword([]byte(newUser.Password), bcrypt.DefaultCost)
 		if err != nil {
@@ -154,6 +159,11 @@ func (d *DataHandler) UpdateUser(w http.ResponseWriter, req *http.Request) {
 		user.Name = newUser.Name
 		user.Surname = newUser.Surname
 		user.Role = newUser.Role
+		if user.Role == "ADMIN" {
+			user.IsAdmin = true
+		} else {
+			user.IsAdmin = false
+		}
 		if newUser.Password != "" {
 			hash, err := bcrypt.GenerateFromPassword([]byte(newUser.Password), bcrypt.DefaultCost)
 			if err != nil {
diff --git a/internal/auth/oauth2.go b/internal/auth/oauth2.go
index 73b04e7..39d404c 100644
--- a/internal/auth/oauth2.go
+++ b/internal/auth/oauth2.go
@@ -163,8 +163,12 @@ func (d *DataHandler) addUserInMemory(userOauth2 UserOAuth2) (User, error) {
 	for _, userRole := range userOauth2.Groups {
 		if userRole != "" && (userRole == os.Getenv("ADMIN_GROUP")) {
 			user.Role = "ADMIN"
+			user.IsAdmin = true
+			break
 		} else if userRole != "" && (userRole == os.Getenv("CLIENT_GROUP")) {
 			user.Role = "CLIENT"
+			user.IsAdmin = false
+			break
 		} else {
 			return user, errors.New("user not in an app group")
 		}
-- 
GitLab