Parcourir la source

feat(go): implement azure ad client;

Vishal Dalwadi il y a 5 mois
Parent
commit
244e8f47a7
1 fichiers modifiés avec 86 ajouts et 0 suppressions
  1. 86 0
      pro/idp/azure/azure.go

+ 86 - 0
pro/idp/azure/azure.go

@@ -0,0 +1,86 @@
+package azure
+
+import (
+	"context"
+	"github.com/Azure/azure-sdk-for-go/sdk/azidentity"
+	"github.com/gravitl/netmaker/pro/idp"
+	msgraphsdk "github.com/microsoftgraph/msgraph-sdk-go"
+	msgraphgroups "github.com/microsoftgraph/msgraph-sdk-go/groups"
+	msgraphusers "github.com/microsoftgraph/msgraph-sdk-go/users"
+)
+
+type Client struct {
+	client *msgraphsdk.GraphServiceClient
+}
+
+func NewAzureEntraIDClient() (*Client, error) {
+	cred, err := azidentity.NewClientSecretCredential("", "", "", nil)
+	if err != nil {
+	}
+
+	client, err := msgraphsdk.NewGraphServiceClientWithCredentials(cred, nil)
+	if err != nil {
+		return nil, err
+	}
+
+	return &Client{
+		client: client,
+	}, nil
+}
+
+func (a *Client) GetUsers() ([]idp.User, error) {
+	resp, err := a.client.Users().Get(context.TODO(), &msgraphusers.UsersRequestBuilderGetRequestConfiguration{
+		QueryParameters: &msgraphusers.UsersRequestBuilderGetQueryParameters{
+			Select: []string{"id", "userPrincipalName"},
+		},
+	})
+	if err != nil {
+		return nil, err
+	}
+
+	users := resp.GetValue()
+
+	retval := make([]idp.User, len(users))
+	for i, user := range users {
+		retval[i] = idp.User{
+			ID:       *user.GetId(),
+			Username: *user.GetUserPrincipalName(),
+		}
+	}
+
+	return retval, nil
+}
+
+func (a *Client) GetGroups() ([]idp.Group, error) {
+	resp, err := a.client.Groups().Get(context.TODO(), &msgraphgroups.GroupsRequestBuilderGetRequestConfiguration{
+		QueryParameters: &msgraphgroups.GroupsRequestBuilderGetQueryParameters{
+			Select: []string{"id", "displayName"},
+			Expand: []string{"members"},
+		},
+	})
+	if err != nil {
+		return nil, err
+	}
+
+	groups := resp.GetValue()
+
+	retval := make([]idp.Group, len(groups))
+	for i, group := range groups {
+		members := group.GetMembers()
+
+		retvalMembers := make([]idp.User, len(members))
+		for j, member := range members {
+			retvalMembers[j] = idp.User{
+				ID: *member.GetId(),
+			}
+		}
+
+		retval[i] = idp.Group{
+			ID:      *group.GetId(),
+			Name:    *group.GetDisplayName(),
+			Members: retvalMembers,
+		}
+	}
+
+	return retval, nil
+}