diff --git a/main.go b/main.go index c44c6e5..4eed1b8 100644 --- a/main.go +++ b/main.go @@ -305,7 +305,7 @@ func setup() { ps = service.NewPartnerService(db, auditLogger) os = service.NewOrganizationService(db, auditLogger) - pps = service.NewProjectService(db, as, auditLogger) + pps = service.NewProjectService(db, as, auditLogger, dev) // users and role management services cc := common.CliConfigDownloadData{ @@ -318,7 +318,7 @@ func setup() { cc.Profile = "production" } ks = service.NewApiKeyService(db, auditLogger) - us = service.NewUserService(providers.NewKratosAuthProvider(kc), db, as, ks, cc, auditLogger) + us = service.NewUserService(providers.NewKratosAuthProvider(kc), db, as, ks, cc, auditLogger, dev) gs = service.NewGroupService(db, as, auditLogger) rs = service.NewRoleService(db, as, auditLogger) rrs = service.NewRolepermissionService(db) diff --git a/pkg/service/project.go b/pkg/service/project.go index c82d6c5..609fcd7 100644 --- a/pkg/service/project.go +++ b/pkg/service/project.go @@ -44,11 +44,12 @@ type projectService struct { db *bun.DB azc AuthzService al *zap.Logger + dev bool } // NewProjectService return new project service -func NewProjectService(db *bun.DB, azc AuthzService, al *zap.Logger) ProjectService { - return &projectService{db: db, azc: azc, al: al} +func NewProjectService(db *bun.DB, azc AuthzService, al *zap.Logger, dev bool) ProjectService { + return &projectService{db: db, azc: azc, al: al, dev: dev} } func (s *projectService) Create(ctx context.Context, project *systemv3.Project) (*systemv3.Project, error) { @@ -338,12 +339,15 @@ func (s *projectService) Delete(ctx context.Context, project *systemv3.Project) } func (s *projectService) List(ctx context.Context, project *systemv3.Project) (*systemv3.ProjectList, error) { - sd, ok := GetSessionDataFromContext(ctx) + username := "" - if !ok { - return &systemv3.ProjectList{}, fmt.Errorf("cannot perform project listing without auth") + if !s.dev { + sd, ok := GetSessionDataFromContext(ctx) + if !ok { + return &systemv3.ProjectList{}, fmt.Errorf("cannot perform project listing without auth") + } + username = sd.Username } - username = sd.Username var projects []*systemv3.Project projectList := &systemv3.ProjectList{ @@ -365,55 +369,66 @@ func (s *projectService) List(ctx context.Context, project *systemv3.Project) (* return &systemv3.ProjectList{}, err } - entity, err := dao.GetByTraits(ctx, s.db, username, &models.KratosIdentities{}) - if err != nil { - return &systemv3.ProjectList{}, err - } - - if usr, ok := entity.(*models.KratosIdentities); ok { - projs, err := dao.GetFileteredProjects(ctx, s.db, usr.ID, part.ID, org.ID) + var projs []models.Project + if !s.dev { + entity, err := dao.GetByTraits(ctx, s.db, username, &models.KratosIdentities{}) if err != nil { return &systemv3.ProjectList{}, err } - for _, proj := range projs { - labels := make(map[string]string) - labels["organization"] = proj.OrganizationId.String() - labels["partner"] = proj.PartnerId.String() - pnr, err := dao.GetProjectGroupRoles(ctx, s.db, proj.ID) + if usr, ok := entity.(*models.KratosIdentities); ok { + projs, err = dao.GetFileteredProjects(ctx, s.db, usr.ID, part.ID, org.ID) if err != nil { - return nil, err + return &systemv3.ProjectList{}, err } - ur, err := dao.GetProjectUserRoles(ctx, s.db, proj.ID) - if err != nil { - return nil, err - } - project := &systemv3.Project{ - Metadata: &v3.Metadata{ - Name: proj.Name, - Description: proj.Description, - Id: proj.ID.String(), - Organization: proj.OrganizationId.String(), - Partner: proj.PartnerId.String(), - Labels: labels, - ModifiedAt: timestamppb.New(proj.ModifiedAt), - }, - Spec: &systemv3.ProjectSpec{ - Default: proj.Default, - ProjectNamespaceRoles: pnr, - UserRoles: ur, - }, - } - projects = append(projects, project) } - //update the list metadata and items response - projectList.Metadata = &v3.ListMetadata{ - Count: int64(len(projects)), + } else { + _, err = dao.List(ctx, s.db, uuid.NullUUID{UUID: part.ID, Valid: true}, uuid.NullUUID{UUID: org.ID, Valid: true}, &projs) + if err != nil { + return &systemv3.ProjectList{}, err } - projectList.Items = projects - return projectList, nil } + + for _, proj := range projs { + labels := make(map[string]string) + labels["organization"] = proj.OrganizationId.String() + labels["partner"] = proj.PartnerId.String() + + pnr, err := dao.GetProjectGroupRoles(ctx, s.db, proj.ID) + if err != nil { + return nil, err + } + ur, err := dao.GetProjectUserRoles(ctx, s.db, proj.ID) + if err != nil { + return nil, err + } + project := &systemv3.Project{ + Metadata: &v3.Metadata{ + Name: proj.Name, + Description: proj.Description, + Id: proj.ID.String(), + Organization: proj.OrganizationId.String(), + Partner: proj.PartnerId.String(), + Labels: labels, + ModifiedAt: timestamppb.New(proj.ModifiedAt), + }, + Spec: &systemv3.ProjectSpec{ + Default: proj.Default, + ProjectNamespaceRoles: pnr, + UserRoles: ur, + }, + } + projects = append(projects, project) + } + + //update the list metadata and items response + projectList.Metadata = &v3.ListMetadata{ + Count: int64(len(projects)), + } + projectList.Items = projects + return projectList, nil + } return projectList, fmt.Errorf("missing organization id in metadata") } diff --git a/pkg/service/project_test.go b/pkg/service/project_test.go index aa45ca7..e8ce08b 100644 --- a/pkg/service/project_test.go +++ b/pkg/service/project_test.go @@ -22,7 +22,7 @@ func TestCreateProject(t *testing.T) { defer db.Close() mazc := mockAuthzClient{} - ps := NewProjectService(db, &mazc, getLogger()) + ps := NewProjectService(db, &mazc, getLogger(), true) puuid := uuid.New().String() ouuid := uuid.New().String() @@ -50,7 +50,7 @@ func TestCreateProjectDuplicate(t *testing.T) { defer db.Close() mazc := mockAuthzClient{} - gs := NewProjectService(db, &mazc, getLogger()) + gs := NewProjectService(db, &mazc, getLogger(), true) puuid := uuid.New().String() @@ -73,7 +73,7 @@ func TestProjectDelete(t *testing.T) { defer db.Close() mazc := mockAuthzClient{} - ps := NewProjectService(db, &mazc, getLogger()) + ps := NewProjectService(db, &mazc, getLogger(), true) puuid := uuid.New().String() @@ -101,7 +101,7 @@ func TestProjectDeleteNonExist(t *testing.T) { defer db.Close() mazc := mockAuthzClient{} - ps := NewProjectService(db, &mazc, getLogger()) + ps := NewProjectService(db, &mazc, getLogger(), true) puuid := uuid.New().String() @@ -122,7 +122,7 @@ func TestProjectGetByName(t *testing.T) { defer db.Close() mazc := mockAuthzClient{} - ps := NewProjectService(db, &mazc, getLogger()) + ps := NewProjectService(db, &mazc, getLogger(), true) partuuid := uuid.New().String() ouuid := uuid.New().String() @@ -166,7 +166,7 @@ func TestProjectGetById(t *testing.T) { defer db.Close() mazc := mockAuthzClient{} - ps := NewProjectService(db, &mazc, getLogger()) + ps := NewProjectService(db, &mazc, getLogger(), true) puuid := uuid.New().String() @@ -188,7 +188,7 @@ func TestProjectUpdate(t *testing.T) { defer db.Close() mazc := mockAuthzClient{} - ps := NewProjectService(db, &mazc, getLogger()) + ps := NewProjectService(db, &mazc, getLogger(), true) puuid := uuid.New().String() diff --git a/pkg/service/user.go b/pkg/service/user.go index 9888e6f..fffd8af 100644 --- a/pkg/service/user.go +++ b/pkg/service/user.go @@ -56,6 +56,7 @@ type userService struct { ks ApiKeyService cc common.CliConfigDownloadData al *zap.Logger + dev bool } type userTraits struct { @@ -72,8 +73,8 @@ type parsedIds struct { Organization uuid.UUID } -func NewUserService(ap providers.AuthProvider, db *bun.DB, azc AuthzService, kss ApiKeyService, cfg common.CliConfigDownloadData, al *zap.Logger) UserService { - return &userService{ap: ap, db: db, azc: azc, ks: kss, cc: cfg, al: al} +func NewUserService(ap providers.AuthProvider, db *bun.DB, azc AuthzService, kss ApiKeyService, cfg common.CliConfigDownloadData, al *zap.Logger, dev bool) UserService { + return &userService{ap: ap, db: db, azc: azc, ks: kss, cc: cfg, al: al, dev: dev} } func getUserTraits(traits map[string]interface{}) userTraits { @@ -460,12 +461,19 @@ func (s *userService) GetByName(ctx context.Context, user *userv3.User) (*userv3 } func (s *userService) GetUserInfo(ctx context.Context, user *userv3.User) (*userv3.UserInfo, error) { - sd, ok := GetSessionDataFromContext(ctx) username := "" - if !ok { - return &userv3.UserInfo{}, fmt.Errorf("cannot get user info without auth") + if s.dev { + username = user.Metadata.Name + if len(username) == 0 { + return &userv3.UserInfo{}, fmt.Errorf("username should be provided") + } + } else { + sd, ok := GetSessionDataFromContext(ctx) + if !ok { + return &userv3.UserInfo{}, fmt.Errorf("cannot get user info without auth") + } + username = sd.Username } - username = sd.Username entity, err := dao.GetByTraits(ctx, s.db, username, &models.KratosIdentities{}) if err != nil { diff --git a/pkg/service/user_test.go b/pkg/service/user_test.go index 85ce27f..dc43821 100644 --- a/pkg/service/user_test.go +++ b/pkg/service/user_test.go @@ -62,7 +62,7 @@ func TestCreateUser(t *testing.T) { ap := &mockAuthProvider{} mazc := mockAuthzClient{} - us := NewUserService(ap, db, &mazc, nil, common.CliConfigDownloadData{}, getLogger()) + us := NewUserService(ap, db, &mazc, nil, common.CliConfigDownloadData{}, getLogger(), true) uuuid := uuid.New().String() puuid, ouuid := addParterOrgFetchExpectation(mock) @@ -110,7 +110,7 @@ func TestCreateUserWithRole(t *testing.T) { ap := &mockAuthProvider{} mazc := mockAuthzClient{} - us := NewUserService(ap, db, &mazc, nil, common.CliConfigDownloadData{}, getLogger()) + us := NewUserService(ap, db, &mazc, nil, common.CliConfigDownloadData{}, getLogger(), true) uuuid := uuid.New().String() @@ -167,7 +167,7 @@ func TestUpdateUser(t *testing.T) { ap := &mockAuthProvider{} mazc := mockAuthzClient{} - us := NewUserService(ap, db, &mazc, nil, common.CliConfigDownloadData{}, getLogger()) + us := NewUserService(ap, db, &mazc, nil, common.CliConfigDownloadData{}, getLogger(), true) // performing update uuuid := addUserIdFetchExpectation(mock) @@ -203,7 +203,7 @@ func TestUserGetByName(t *testing.T) { ap := &mockAuthProvider{} mazc := mockAuthzClient{} - us := NewUserService(ap, db, &mazc, nil, common.CliConfigDownloadData{}, getLogger()) + us := NewUserService(ap, db, &mazc, nil, common.CliConfigDownloadData{}, getLogger(), true) puuid := uuid.New().String() ouuid := uuid.New().String() @@ -260,7 +260,7 @@ func TestUserGetInfo(t *testing.T) { ap := &mockAuthProvider{} mazc := mockAuthzClient{} - us := NewUserService(ap, db, &mazc, nil, common.CliConfigDownloadData{}, getLogger()) + us := NewUserService(ap, db, &mazc, nil, common.CliConfigDownloadData{}, getLogger(), false) uuuid := uuid.New().String() fakeuuuid := uuid.New().String() @@ -332,7 +332,7 @@ func TestUserGetById(t *testing.T) { ap := &mockAuthProvider{} mazc := mockAuthzClient{} - us := NewUserService(ap, db, &mazc, nil, common.CliConfigDownloadData{}, getLogger()) + us := NewUserService(ap, db, &mazc, nil, common.CliConfigDownloadData{}, getLogger(), true) uuuid := uuid.New().String() puuid := uuid.New().String() @@ -397,7 +397,7 @@ func TestUserList(t *testing.T) { ap := &mockAuthProvider{} mazc := mockAuthzClient{} - us := NewUserService(ap, db, &mazc, nil, common.CliConfigDownloadData{}, getLogger()) + us := NewUserService(ap, db, &mazc, nil, common.CliConfigDownloadData{}, getLogger(), true) uuuid1 := uuid.New().String() uuuid2 := uuid.New().String() @@ -495,7 +495,7 @@ func TestUserDelete(t *testing.T) { ap := &mockAuthProvider{} mazc := mockAuthzClient{} - us := NewUserService(ap, db, &mazc, nil, common.CliConfigDownloadData{}, getLogger()) + us := NewUserService(ap, db, &mazc, nil, common.CliConfigDownloadData{}, getLogger(), true) uuuid := uuid.New().String() puuid := uuid.New().String()