zitadel/pkg/databases/user.go
Elio Bischof c0878e4509
feat(operator): make running ZITADEL easy (#1562)
* docs: describe crd mode

* docs: fix links

* docs: fix commands and crdb resources

* feat: add configure command

* chore: use latest ORBOS

* chore: use latest ORBOS

* docs: start gitops docs

* fix: compile

* chore: fix build script path

* chore: remove redundant prebuild

* chore: add configure.go

* docs: describe gitops mode

* docs: point template links to main branch

* docs: fix versions

* feat: initialize empty keys

* feat: reconfigure running ZITADEL

* docs: describe crd mode

* docs: fix links

* docs: fix commands and crdb resources

* feat: add configure command

* chore: use latest ORBOS

* chore: use latest ORBOS

* docs: start gitops docs

* fix: compile

* chore: fix build script path

* chore: remove redundant prebuild

* chore: add configure.go

* docs: describe gitops mode

* docs: point template links to main branch

* docs: fix versions

* feat: initialize empty keys

* feat: reconfigure running ZITADEL

* test: fix

* docs: keys are generated with configure

* docs: remove keys from template

* chore: pass compile time data

* chore: use latest ORBOS

* fix: when in-cluster, use in-cluster k8s client

* fix: try in-cluster config if kubeconfig is empty

* fix: reduce unneeded side effects for configure command

* docs: boom version

* chore: use latest ORBOS

* chore: use latest ORBOS

* initial commit

* inital changes

* commit WIP Information Architecture

* commit a working state

* add static assets and project

* add org and fix img names

* add plausible

* remove img

* change sidebar to easier mgmt

* add openid oauth and domains

* lint md

* quickstarts

* add auth flow

* identity brokering

* remove site

* fix broken links

* extend footer

* extend readme

* fix: styling

* fix: zitadel logo on index

* styling

* border

* fix: nav

* fix: nav

* fix: index

* fix: corrected zitadelctl examples

* fix: rename architecture to concepts

* fix: introductions

* fix: introductions

* fix: introductions

* docs: cli r/w secrets examples

* docs: finish ZITADEL Enterprise Cloud

* docs: mention ZITADEL Enterprise Cloud tier

* docs: comment configuration options

* docs: fix broken links

* docs: move some introduction texts around

* docs: twilio and email are mandatory

* docs: download latest binaries

Co-authored-by: Florian Forster <florian@caos.ch>
Co-authored-by: fabi <fabienne.gerschwiler@gmail.com>
Co-authored-by: Livio Amstutz <livio.a@gmail.com>
Co-authored-by: Stefan Benz <stefan@caos.ch>
2021-04-22 16:43:34 +00:00

196 lines
3.9 KiB
Go

package databases
import (
"github.com/caos/orbos/mntr"
"github.com/caos/orbos/pkg/git"
"github.com/caos/orbos/pkg/kubernetes"
"github.com/caos/orbos/pkg/tree"
"github.com/caos/zitadel/operator/api/database"
coredb "github.com/caos/zitadel/operator/database/kinds/databases/core"
orbdb "github.com/caos/zitadel/operator/database/kinds/orb"
)
func CrdListUsers(
monitor mntr.Monitor,
k8sClient kubernetes.ClientInt,
) ([]string, error) {
desired, err := database.ReadCrd(k8sClient)
if err != nil {
monitor.Error(err)
return nil, err
}
return listUsers(monitor, k8sClient, desired)
}
func GitOpsListUsers(
monitor mntr.Monitor,
k8sClient kubernetes.ClientInt,
gitClient *git.Client,
) ([]string, error) {
desired, err := gitClient.ReadTree(git.DatabaseFile)
if err != nil {
monitor.Error(err)
return nil, err
}
return listUsers(monitor, k8sClient, desired)
}
func listUsers(
monitor mntr.Monitor,
k8sClient kubernetes.ClientInt,
desired *tree.Tree,
) ([]string, error) {
current := &tree.Tree{}
query, _, _, _, _, _, err := orbdb.AdaptFunc("", nil, false, "database")(monitor, desired, current)
if err != nil {
return nil, err
}
queried := map[string]interface{}{}
_, err = query(k8sClient, queried)
if err != nil {
return nil, err
}
currentDB, err := coredb.ParseQueriedForDatabase(queried)
if err != nil {
return nil, err
}
list, err := currentDB.GetListUsersFunc()(k8sClient)
if err != nil {
return nil, err
}
users := []string{}
for _, listedUser := range list {
if listedUser != "root" {
users = append(users, listedUser)
}
}
return users, nil
}
func CrdAddUser(
monitor mntr.Monitor,
user string,
k8sClient kubernetes.ClientInt,
) error {
desired, err := database.ReadCrd(k8sClient)
if err != nil {
monitor.Error(err)
return err
}
return addUser(monitor, user, k8sClient, desired)
}
func GitOpsAddUser(
monitor mntr.Monitor,
user string,
k8sClient kubernetes.ClientInt,
gitClient *git.Client,
) error {
desired, err := gitClient.ReadTree(git.DatabaseFile)
if err != nil {
monitor.Error(err)
return err
}
return addUser(monitor, user, k8sClient, desired)
}
func addUser(
monitor mntr.Monitor,
user string,
k8sClient kubernetes.ClientInt,
desired *tree.Tree,
) error {
current := &tree.Tree{}
query, _, _, _, _, _, err := orbdb.AdaptFunc("", nil, false, "database")(monitor, desired, current)
if err != nil {
return err
}
queried := map[string]interface{}{}
_, err = query(k8sClient, queried)
if err != nil {
return err
}
currentDB, err := coredb.ParseQueriedForDatabase(queried)
if err != nil {
return err
}
queryUser, err := currentDB.GetAddUserFunc()(user)
if err != nil {
return err
}
ensureUser, err := queryUser(k8sClient, queried)
if err != nil {
return err
}
return ensureUser(k8sClient)
}
func GitOpsDeleteUser(
monitor mntr.Monitor,
user string,
k8sClient kubernetes.ClientInt,
gitClient *git.Client,
) error {
desired, err := gitClient.ReadTree(git.DatabaseFile)
if err != nil {
monitor.Error(err)
return err
}
return deleteUser(monitor, user, k8sClient, desired)
}
func CrdDeleteUser(
monitor mntr.Monitor,
user string,
k8sClient kubernetes.ClientInt,
) error {
desired, err := database.ReadCrd(k8sClient)
if err != nil {
monitor.Error(err)
return err
}
return deleteUser(monitor, user, k8sClient, desired)
}
func deleteUser(
monitor mntr.Monitor,
user string,
k8sClient kubernetes.ClientInt,
desired *tree.Tree,
) error {
current := &tree.Tree{}
query, _, _, _, _, _, err := orbdb.AdaptFunc("", nil, false, "database")(monitor, desired, current)
if err != nil {
return err
}
queried := map[string]interface{}{}
_, err = query(k8sClient, queried)
if err != nil {
return err
}
currentDB, err := coredb.ParseQueriedForDatabase(queried)
if err != nil {
return err
}
deleteUser, err := currentDB.GetDeleteUserFunc()(user)
if err != nil {
return err
}
return deleteUser(k8sClient)
}