Merge pull request #98 from RafayLabs/dev-mode

changes to support dev mode testing
This commit is contained in:
Nirav Parikh
2022-04-12 14:18:58 +05:30
committed by GitHub
5 changed files with 91 additions and 68 deletions

View File

@@ -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)

View File

@@ -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")
}

View File

@@ -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()

View File

@@ -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 {

View File

@@ -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()