Skip to content

Commit

Permalink
Authz loading
Browse files Browse the repository at this point in the history
  • Loading branch information
harture committed Jan 21, 2020
1 parent 6929a56 commit aaa70aa
Show file tree
Hide file tree
Showing 19 changed files with 132 additions and 180 deletions.
2 changes: 2 additions & 0 deletions Gopkg.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

20 changes: 10 additions & 10 deletions api/management/api.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import (
"regexp"
"strconv"

"github.com/cloudtrust/keycloak-bridge/internal/dto"
"github.com/cloudtrust/common-service/configuration"
internal "github.com/cloudtrust/keycloak-bridge/internal/messages"
kc "github.com/cloudtrust/keycloak-client"
)
Expand Down Expand Up @@ -262,7 +262,7 @@ func ConvertToKCGroup(group GroupRepresentation) kc.GroupRepresentation {
}

// ConvertToAPIAuthorizations creates a API authorization representation from an array of DB Authorization
func ConvertToAPIAuthorizations(authorizations []dto.Authorization) AuthorizationsRepresentation {
func ConvertToAPIAuthorizations(authorizations []configuration.Authorization) AuthorizationsRepresentation {
var matrix = make(map[string]map[string]map[string]struct{})

for _, authz := range authorizations {
Expand Down Expand Up @@ -294,8 +294,8 @@ func ConvertToAPIAuthorizations(authorizations []dto.Authorization) Authorizatio
}

// ConvertToDBAuthorizations creates an array of DB Authorization from an API AuthorizationsRepresentation
func ConvertToDBAuthorizations(realmID, groupID string, apiAuthorizations AuthorizationsRepresentation) []dto.Authorization {
var authorizations = []dto.Authorization{}
func ConvertToDBAuthorizations(realmID, groupName string, apiAuthorizations AuthorizationsRepresentation) []configuration.Authorization {
var authorizations = []configuration.Authorization{}

if apiAuthorizations.Matrix == nil {
return authorizations
Expand All @@ -304,9 +304,9 @@ func ConvertToDBAuthorizations(realmID, groupID string, apiAuthorizations Author
for action, u := range *apiAuthorizations.Matrix {
if len(u) == 0 {
var act = string(action)
authorizations = append(authorizations, dto.Authorization{
authorizations = append(authorizations, configuration.Authorization{
RealmID: &realmID,
GroupName: &groupID,
GroupName: &groupName,
Action: &act,
})
continue
Expand All @@ -316,9 +316,9 @@ func ConvertToDBAuthorizations(realmID, groupID string, apiAuthorizations Author
if len(v) == 0 {
var act = string(action)
var targetRealm = string(targetRealmID)
authorizations = append(authorizations, dto.Authorization{
authorizations = append(authorizations, configuration.Authorization{
RealmID: &realmID,
GroupName: &groupID,
GroupName: &groupName,
Action: &act,
TargetRealmID: &targetRealm,
})
Expand All @@ -329,9 +329,9 @@ func ConvertToDBAuthorizations(realmID, groupID string, apiAuthorizations Author
var act = string(action)
var targetRealm = string(targetRealmID)
var targetGroup = string(targetGroupName)
authorizations = append(authorizations, dto.Authorization{
authorizations = append(authorizations, configuration.Authorization{
RealmID: &realmID,
GroupName: &groupID,
GroupName: &groupName,
Action: &act,
TargetRealmID: &targetRealm,
TargetGroupName: &targetGroup,
Expand Down
10 changes: 5 additions & 5 deletions api/management/api_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import (
"strings"
"testing"

"github.com/cloudtrust/keycloak-bridge/internal/dto"
"github.com/cloudtrust/common-service/configuration"
kc "github.com/cloudtrust/keycloak-client"
"github.com/stretchr/testify/assert"
)
Expand Down Expand Up @@ -204,22 +204,22 @@ func TestConvertToAPIAuthorizations(t *testing.T) {
var action2 = "action2"
var any = "*"

var authorizations = []dto.Authorization{}
var authorizations = []configuration.Authorization{}

var authz1 = dto.Authorization{
var authz1 = configuration.Authorization{
RealmID: &master,
GroupName: &groupName2,
Action: &action2,
}

var authz2 = dto.Authorization{
var authz2 = configuration.Authorization{
RealmID: &master,
GroupName: &groupName2,
Action: &action2,
TargetRealmID: &any,
}

var authz3 = dto.Authorization{
var authz3 = configuration.Authorization{
RealmID: &master,
GroupName: &groupName1,
Action: &action,
Expand Down
10 changes: 0 additions & 10 deletions internal/dto/authorization.go

This file was deleted.

15 changes: 0 additions & 15 deletions internal/dto/configuration.go

This file was deleted.

4 changes: 2 additions & 2 deletions internal/keycloakb/authorizationutil.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,12 @@ package keycloakb
import (
"errors"

"github.com/cloudtrust/common-service/configuration"
api "github.com/cloudtrust/keycloak-bridge/api/management"
"github.com/cloudtrust/keycloak-bridge/internal/dto"
)

// Validate the content of the provided array. Returns an error if any issue is detected
func Validate(authorizations []dto.Authorization, allowedTargetRealmsAndGroupNames map[string]map[string]struct{}) error {
func Validate(authorizations []configuration.Authorization, allowedTargetRealmsAndGroupNames map[string]map[string]struct{}) error {
for _, auth := range authorizations {
// Check TargetRealm
if auth.TargetRealmID != nil {
Expand Down
30 changes: 15 additions & 15 deletions internal/keycloakb/authorizationutil_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ package keycloakb
import (
"testing"

"github.com/cloudtrust/keycloak-bridge/internal/dto"
"github.com/cloudtrust/common-service/configuration"
"github.com/stretchr/testify/assert"
)

Expand All @@ -24,12 +24,12 @@ func TestValidate(t *testing.T) {
allowedTargetRealmsAndGroupNames[realmName][groupName2] = struct{}{}
allowedTargetRealmsAndGroupNames[realmName]["*"] = struct{}{}

var authorizations = []dto.Authorization{}
var authorizations = []configuration.Authorization{}

// Invalid targetRealm
{
authorizations = []dto.Authorization{
dto.Authorization{
authorizations = []configuration.Authorization{
configuration.Authorization{
RealmID: &realmName,
GroupName: &groupName1,
Action: &action2,
Expand All @@ -43,8 +43,8 @@ func TestValidate(t *testing.T) {

// Invalid targetGroupName
{
authorizations = []dto.Authorization{
dto.Authorization{
authorizations = []configuration.Authorization{
configuration.Authorization{
RealmID: &realmName,
GroupName: &groupName1,
Action: &action2,
Expand All @@ -59,14 +59,14 @@ func TestValidate(t *testing.T) {

// Incompatible rules due to * in targetRealm
{
authorizations = []dto.Authorization{
dto.Authorization{
authorizations = []configuration.Authorization{
configuration.Authorization{
RealmID: &realmName,
GroupName: &groupName1,
Action: &action2,
TargetRealmID: &star,
},
dto.Authorization{
configuration.Authorization{
RealmID: &realmName,
GroupName: &groupName1,
Action: &action2,
Expand All @@ -80,15 +80,15 @@ func TestValidate(t *testing.T) {

// Incompatible rules due to * in targetGroupName
{
authorizations = []dto.Authorization{
dto.Authorization{
authorizations = []configuration.Authorization{
configuration.Authorization{
RealmID: &realmName,
GroupName: &groupName1,
Action: &action2,
TargetRealmID: &realmName,
TargetGroupName: &star,
},
dto.Authorization{
configuration.Authorization{
RealmID: &realmName,
GroupName: &groupName1,
Action: &action2,
Expand All @@ -103,15 +103,15 @@ func TestValidate(t *testing.T) {

// Valid set of authorizations
{
authorizations = []dto.Authorization{
dto.Authorization{
authorizations = []configuration.Authorization{
configuration.Authorization{
RealmID: &realmName,
GroupName: &groupName1,
Action: &action2,
TargetRealmID: &realmName,
TargetGroupName: &star,
},
dto.Authorization{
configuration.Authorization{
RealmID: &realmName,
GroupName: &groupName1,
Action: &action1,
Expand Down
18 changes: 9 additions & 9 deletions internal/keycloakb/configdbinstrumenting.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,9 @@ import (
"time"

cs "github.com/cloudtrust/common-service"
"github.com/cloudtrust/common-service/configuration"
"github.com/cloudtrust/common-service/database"
cm "github.com/cloudtrust/common-service/metrics"
"github.com/cloudtrust/keycloak-bridge/internal/dto"
)

// Instrumenting middleware at module level.
Expand All @@ -19,10 +19,10 @@ type configDBModuleInstrumentingMW struct {
// ConfigurationDBModule is the interface of the configuration module.
type ConfigurationDBModule interface {
NewTransaction(context context.Context) (database.Transaction, error)
StoreOrUpdate(context.Context, string, dto.RealmConfiguration) error
GetConfiguration(context.Context, string) (dto.RealmConfiguration, error)
GetAuthorizations(context context.Context, realmID string, groupName string) ([]dto.Authorization, error)
CreateAuthorization(context context.Context, authz dto.Authorization) error
StoreOrUpdate(context.Context, string, configuration.RealmConfiguration) error
GetConfiguration(context.Context, string) (configuration.RealmConfiguration, error)
GetAuthorizations(context context.Context, realmID string, groupName string) ([]configuration.Authorization, error)
CreateAuthorization(context context.Context, authz configuration.Authorization) error
DeleteAuthorizations(context context.Context, realmID string, groupName string) error
DeleteAllAuthorizationsWithGroup(context context.Context, realmName, groupName string) error
}
Expand All @@ -46,31 +46,31 @@ func (m *configDBModuleInstrumentingMW) NewTransaction(ctx context.Context) (dat
}

// configDBModuleInstrumentingMW implements Module.
func (m *configDBModuleInstrumentingMW) StoreOrUpdate(ctx context.Context, realmName string, config dto.RealmConfiguration) error {
func (m *configDBModuleInstrumentingMW) StoreOrUpdate(ctx context.Context, realmName string, config configuration.RealmConfiguration) error {
defer func(begin time.Time) {
m.h.With("correlation_id", ctx.Value(cs.CtContextCorrelationID).(string)).Observe(time.Since(begin).Seconds())
}(time.Now())
return m.next.StoreOrUpdate(ctx, realmName, config)
}

// configDBModuleInstrumentingMW implements Module.
func (m *configDBModuleInstrumentingMW) GetConfiguration(ctx context.Context, realmName string) (dto.RealmConfiguration, error) {
func (m *configDBModuleInstrumentingMW) GetConfiguration(ctx context.Context, realmName string) (configuration.RealmConfiguration, error) {
defer func(begin time.Time) {
m.h.With("correlation_id", ctx.Value(cs.CtContextCorrelationID).(string)).Observe(time.Since(begin).Seconds())
}(time.Now())
return m.next.GetConfiguration(ctx, realmName)
}

// configDBModuleInstrumentingMW implements Module.
func (m *configDBModuleInstrumentingMW) GetAuthorizations(ctx context.Context, realmID string, groupID string) ([]dto.Authorization, error) {
func (m *configDBModuleInstrumentingMW) GetAuthorizations(ctx context.Context, realmID string, groupID string) ([]configuration.Authorization, error) {
defer func(begin time.Time) {
m.h.With("correlation_id", ctx.Value(cs.CtContextCorrelationID).(string)).Observe(time.Since(begin).Seconds())
}(time.Now())
return m.next.GetAuthorizations(ctx, realmID, groupID)
}

// configDBModuleInstrumentingMW implements Module.
func (m *configDBModuleInstrumentingMW) CreateAuthorization(ctx context.Context, auth dto.Authorization) error {
func (m *configDBModuleInstrumentingMW) CreateAuthorization(ctx context.Context, auth configuration.Authorization) error {
defer func(begin time.Time) {
m.h.With("correlation_id", ctx.Value(cs.CtContextCorrelationID).(string)).Observe(time.Since(begin).Seconds())
}(time.Now())
Expand Down
16 changes: 8 additions & 8 deletions internal/keycloakb/configdbinstrumenting_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,9 @@ import (
"testing"
"time"

"github.com/cloudtrust/keycloak-bridge/internal/dto"

cs "github.com/cloudtrust/common-service"
"github.com/cloudtrust/common-service/configuration"

"github.com/cloudtrust/keycloak-bridge/internal/keycloakb/mock"

"github.com/golang/mock/gomock"
Expand All @@ -29,28 +29,28 @@ func TestComponentInstrumentingMW(t *testing.T) {
var ctx = context.WithValue(context.Background(), cs.CtContextCorrelationID, corrID)

// Get configuration.
mockComponent.EXPECT().GetConfiguration(ctx, "realmID").Return(dto.RealmConfiguration{}, nil).Times(1)
mockComponent.EXPECT().GetConfiguration(ctx, "realmID").Return(configuration.RealmConfiguration{}, nil).Times(1)
mockHistogram.EXPECT().With("correlation_id", corrID).Return(mockHistogram).Times(1)
mockHistogram.EXPECT().Observe(gomock.Any()).Return().Times(1)
m.GetConfiguration(ctx, "realmID")

// Get configuration without correlation ID.
mockComponent.EXPECT().GetConfiguration(context.Background(), "realmID").Return(dto.RealmConfiguration{}, nil).Times(1)
mockComponent.EXPECT().GetConfiguration(context.Background(), "realmID").Return(configuration.RealmConfiguration{}, nil).Times(1)
var f = func() {
m.GetConfiguration(context.Background(), "realmID")
}
assert.Panics(t, f)

// Update configuration.
mockComponent.EXPECT().StoreOrUpdate(ctx, "realmID", dto.RealmConfiguration{}).Return(nil).Times(1)
mockComponent.EXPECT().StoreOrUpdate(ctx, "realmID", configuration.RealmConfiguration{}).Return(nil).Times(1)
mockHistogram.EXPECT().With("correlation_id", corrID).Return(mockHistogram).Times(1)
mockHistogram.EXPECT().Observe(gomock.Any()).Return().Times(1)
m.StoreOrUpdate(ctx, "realmID", dto.RealmConfiguration{})
m.StoreOrUpdate(ctx, "realmID", configuration.RealmConfiguration{})

// Update configuration without correlation ID.
mockComponent.EXPECT().StoreOrUpdate(context.Background(), "realmID", dto.RealmConfiguration{}).Return(nil).Times(1)
mockComponent.EXPECT().StoreOrUpdate(context.Background(), "realmID", configuration.RealmConfiguration{}).Return(nil).Times(1)
f = func() {
m.StoreOrUpdate(context.Background(), "realmID", dto.RealmConfiguration{})
m.StoreOrUpdate(context.Background(), "realmID", configuration.RealmConfiguration{})
}
assert.Panics(t, f)
}
Loading

0 comments on commit aaa70aa

Please sign in to comment.