func()

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
}