From 7f3d3abdb14c1cf6ace817cb47bfca0ee46d049e Mon Sep 17 00:00:00 2001
From: Kevin Lyda <kevin@ie.suberic.net>
Date: Sun, 22 Jan 2017 19:54:57 +0000
Subject: [PATCH] Some refinements.

This also includes an initial pass at letting people set minimum levels.
But it's a little more complex than I'd like, so will delete in the next
commit.
---
 server/auth/gitlab/gitlab.go | 24 +++++++++++++++++++++++-
 1 file changed, 23 insertions(+), 1 deletion(-)

diff --git a/server/auth/gitlab/gitlab.go b/server/auth/gitlab/gitlab.go
index a32745c2..bbd206a9 100644
--- a/server/auth/gitlab/gitlab.go
+++ b/server/auth/gitlab/gitlab.go
@@ -4,6 +4,7 @@ import (
 	"errors"
 	"fmt"
 	"net/http"
+	"strconv"
 
 	"github.com/nsheridan/cashier/server/auth"
 	"github.com/nsheridan/cashier/server/config"
@@ -22,10 +23,19 @@ type Config struct {
 	config    *oauth2.Config
 	baseurl   string
 	group     string
+	level     int
 	whitelist map[string]bool
 	allusers  bool
 }
 
+var levelMap = map[string]int{
+	"guest":     10,
+	"reporter":  20,
+	"developer": 30,
+	"master":    40,
+	"owner":     50,
+}
+
 // New creates a new Gitlab provider from a configuration.
 func New(c *config.Auth) (auth.Provider, error) {
 	uw := make(map[string]bool)
@@ -46,6 +56,16 @@ func New(c *config.Auth) (auth.Provider, error) {
 			return nil, errors.New("gitlab_opts siteurl must end in /")
 		}
 	}
+	levelOpt := 0
+	if c.ProviderOpts["level"] != "" {
+		levelOpt = levelMap[c.ProviderOpts["level"]]
+		if levelOpt == 0 {
+			var err error
+			if levelOpt, err = strconv.Atoi(c.ProviderOpts["level"]); err != nil {
+				return nil, errors.New("gitlab_opts level unrecognised; must be number or text level")
+			}
+		}
+	}
 	return &Config{
 		config: &oauth2.Config{
 			ClientID:     c.OauthClientID,
@@ -60,6 +80,7 @@ func New(c *config.Auth) (auth.Provider, error) {
 			},
 		},
 		group:     c.ProviderOpts["group"],
+		level:     levelOpt,
 		whitelist: uw,
 		allusers:  allUsers,
 		baseurl:   siteUrl + "api/v3/",
@@ -94,7 +115,8 @@ func (c *Config) Valid(token *oauth2.Token) bool {
 	}
 	client := gitlabapi.NewOAuthClient(nil, token.AccessToken)
 	client.SetBaseURL(c.baseurl)
-	groups, _, err := client.Groups.ListGroups(nil)
+	groups, response, err := client.Groups.SearchGroup(c.group)
+	fmt.Printf("response: %+v\n", response)
 	if err != nil {
 		return false
 	}
-- 
GitLab