mirror of
https://github.com/opencloud-eu/opencloud.git
synced 2025-12-30 09:38:26 -05:00
141 lines
4.3 KiB
Go
141 lines
4.3 KiB
Go
package main
|
|
|
|
import (
|
|
"context"
|
|
"crypto/tls"
|
|
"fmt"
|
|
|
|
"github.com/Nerzal/gocloak/v13"
|
|
"github.com/go-resty/resty/v2"
|
|
libregraph "github.com/opencloud-eu/libre-graph-api-go"
|
|
)
|
|
|
|
const (
|
|
provisioningAPIURL = "http://localhost:9120/graph"
|
|
provisioningAuthToken = "changeme"
|
|
)
|
|
|
|
type tenantWithUsers struct {
|
|
tenant libregraph.EducationSchool
|
|
users []libregraph.EducationUser
|
|
}
|
|
|
|
var demoTenants = []tenantWithUsers{
|
|
{
|
|
tenant: libregraph.EducationSchool{
|
|
DisplayName: libregraph.PtrString("Famous Coders"),
|
|
},
|
|
users: []libregraph.EducationUser{
|
|
{
|
|
DisplayName: libregraph.PtrString("Dennis Ritchie"),
|
|
OnPremisesSamAccountName: libregraph.PtrString("dennis"),
|
|
Mail: libregraph.PtrString("dennis@example.org"),
|
|
},
|
|
{
|
|
DisplayName: libregraph.PtrString("Grace Hopper"),
|
|
OnPremisesSamAccountName: libregraph.PtrString("grace"),
|
|
Mail: libregraph.PtrString("grace@example.org"),
|
|
},
|
|
},
|
|
},
|
|
{
|
|
tenant: libregraph.EducationSchool{
|
|
DisplayName: libregraph.PtrString("Scientists"),
|
|
},
|
|
users: []libregraph.EducationUser{
|
|
{
|
|
DisplayName: libregraph.PtrString("Albert Einstein"),
|
|
OnPremisesSamAccountName: libregraph.PtrString("einstein"),
|
|
Mail: libregraph.PtrString("einstein@example.org"),
|
|
},
|
|
{
|
|
DisplayName: libregraph.PtrString("Marie Curie"),
|
|
OnPremisesSamAccountName: libregraph.PtrString("marie"),
|
|
Mail: libregraph.PtrString("marie@example.org"),
|
|
},
|
|
},
|
|
},
|
|
}
|
|
|
|
func main() {
|
|
lgconf := libregraph.NewConfiguration()
|
|
lgconf.Servers = libregraph.ServerConfigurations{
|
|
{
|
|
URL: provisioningAPIURL,
|
|
},
|
|
}
|
|
lgconf.DefaultHeader = map[string]string{"Authorization": "Bearer " + provisioningAuthToken}
|
|
lgclient := libregraph.NewAPIClient(lgconf)
|
|
|
|
for _, tenant := range demoTenants {
|
|
tenantid, err := createTenant(lgclient, tenant.tenant)
|
|
if err != nil {
|
|
fmt.Printf("Failed to create tenant: %s\n", err)
|
|
continue
|
|
}
|
|
for _, user := range tenant.users {
|
|
userid1, err := createUser(lgclient, user)
|
|
if err != nil {
|
|
fmt.Printf("Failed to create user: %s\n", err)
|
|
continue
|
|
}
|
|
_, err = lgclient.EducationSchoolApi.AddUserToSchool(context.TODO(), tenantid).EducationUserReference(libregraph.EducationUserReference{
|
|
OdataId: libregraph.PtrString(fmt.Sprintf("%s/education/users/%s", provisioningAPIURL, userid1)),
|
|
}).Execute()
|
|
if err != nil {
|
|
fmt.Printf("Failed to add user to tenant: %s\n", err)
|
|
continue
|
|
}
|
|
}
|
|
}
|
|
|
|
resetAllUserPasswords()
|
|
}
|
|
|
|
func createUser(client *libregraph.APIClient, user libregraph.EducationUser) (string, error) {
|
|
newUser, _, err := client.EducationUserApi.CreateEducationUser(context.TODO()).EducationUser(user).Execute()
|
|
if err != nil {
|
|
fmt.Printf("Failed to create user: %s\n", err)
|
|
return "", err
|
|
}
|
|
fmt.Printf("Created user: %s with id %s\n", newUser.GetDisplayName(), newUser.GetId())
|
|
return newUser.GetId(), nil
|
|
}
|
|
|
|
func createTenant(client *libregraph.APIClient, tenant libregraph.EducationSchool) (string, error) {
|
|
newTenant, _, err := client.EducationSchoolApi.CreateSchool(context.TODO()).EducationSchool(tenant).Execute()
|
|
if err != nil {
|
|
fmt.Printf("Failed to create tenant: %s\n", err)
|
|
return "", err
|
|
}
|
|
fmt.Printf("Created tenant: %s with id %s\n", newTenant.GetDisplayName(), newTenant.GetId())
|
|
return newTenant.GetId(), nil
|
|
}
|
|
|
|
func resetAllUserPasswords() {
|
|
tls := tls.Config{InsecureSkipVerify: true}
|
|
restyClient := resty.New().SetTLSClientConfig(&tls)
|
|
client := gocloak.NewClient("https://keycloak.opencloud.test")
|
|
client.SetRestyClient(restyClient)
|
|
ctx := context.Background()
|
|
token, err := client.LoginAdmin(ctx, "kcadmin", "admin", "master")
|
|
if err != nil {
|
|
fmt.Printf("Failed to login: %s\n", err)
|
|
panic("Something wrong with the credentials or url")
|
|
}
|
|
|
|
users, err := client.GetUsers(ctx, token.AccessToken, "openCloud", gocloak.GetUsersParams{})
|
|
if err != nil {
|
|
fmt.Printf("%s\n", err)
|
|
panic("Oh no!, failed to list users :(")
|
|
}
|
|
for _, user := range users {
|
|
fmt.Printf("Setting password for user: %s\n", *user.Username)
|
|
err = client.SetPassword(ctx, token.AccessToken, *user.ID, "openCloud", "demo", false)
|
|
if err != nil {
|
|
fmt.Printf("Failed to set password for user %s: %s\n", *user.Username, err)
|
|
}
|
|
}
|
|
|
|
}
|