in oracle/controllers/user_repository.go [41:79]
func (us *users) diff(ctx context.Context, client dbdpb.DatabaseDaemonClient) (toCreateUsers, toUpdateUsers, toDeleteUsers, toUpdatePwdUsers []*user, err error) {
if err := us.readEnv(ctx, client); err != nil {
return nil, nil, nil, nil, fmt.Errorf("failed to read the env users: %v", err)
}
var specUserNames []string
for k := range us.nameToUser {
specUserNames = append(specUserNames, k)
}
toCreate, toCheck, toDelete := compare(specUserNames, us.envUserNames)
toCreateUsers, err = us.getUsers(toCreate)
if err != nil {
return nil, nil, nil, nil, err
}
toCheckUsers, err := us.getUsers(toCheck)
if err != nil {
return nil, nil, nil, nil, err
}
for _, d := range toDelete {
du := newNoSpecUser(us.databaseName, d)
if err := du.readEnv(ctx, client); err != nil {
return nil, nil, nil, nil, fmt.Errorf("failed to read the env user %v: %v", du, err)
}
toDeleteUsers = append(toDeleteUsers, du)
}
for _, u := range toCheckUsers {
toGrant, toRevoke, toUpdatePwd, err := u.diff(ctx, client)
if err != nil {
return nil, nil, nil, nil, fmt.Errorf("failed to read the env user %v: %v", u, err)
}
if len(toGrant) != 0 || len(toRevoke) != 0 {
toUpdateUsers = append(toUpdateUsers, u)
}
if toUpdatePwd {
toUpdatePwdUsers = append(toUpdatePwdUsers, u)
}
}
return toCreateUsers, toUpdateUsers, toDeleteUsers, toUpdatePwdUsers, nil
}