mirror of
https://github.com/openziti/zrok.git
synced 2024-11-25 01:23:49 +01:00
138 lines
4.2 KiB
Go
138 lines
4.2 KiB
Go
package zrokEdgeSdk
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"github.com/openziti/edge-api/rest_management_api_client"
|
|
"github.com/openziti/edge-api/rest_management_api_client/config"
|
|
"github.com/openziti/edge-api/rest_model"
|
|
"github.com/openziti/zrok/sdk/golang/sdk"
|
|
"github.com/sirupsen/logrus"
|
|
"reflect"
|
|
"time"
|
|
)
|
|
|
|
type FrontendOptions struct {
|
|
Interstitial bool
|
|
AuthScheme sdk.AuthScheme
|
|
BasicAuthUsers []*sdk.AuthUserConfig
|
|
Oauth *sdk.OauthConfig
|
|
}
|
|
|
|
func CreateConfig(cfgTypeZId, envZId, shrToken string, options *FrontendOptions, edge *rest_management_api_client.ZitiEdgeManagement) (cfgZId string, err error) {
|
|
cfg := &sdk.FrontendConfig{
|
|
Interstitial: options.Interstitial,
|
|
AuthScheme: options.AuthScheme,
|
|
}
|
|
if cfg.AuthScheme == sdk.Basic {
|
|
cfg.BasicAuth = &sdk.BasicAuthConfig{}
|
|
for _, authUser := range options.BasicAuthUsers {
|
|
cfg.BasicAuth.Users = append(cfg.BasicAuth.Users, &sdk.AuthUserConfig{Username: authUser.Username, Password: authUser.Password})
|
|
}
|
|
}
|
|
if cfg.AuthScheme == sdk.Oauth && options.Oauth != nil {
|
|
cfg.OauthAuth = &sdk.OauthConfig{
|
|
Provider: options.Oauth.Provider,
|
|
EmailDomains: options.Oauth.EmailDomains,
|
|
AuthorizationCheckInterval: options.Oauth.AuthorizationCheckInterval,
|
|
}
|
|
}
|
|
cfgCrt := &rest_model.ConfigCreate{
|
|
ConfigTypeID: &cfgTypeZId,
|
|
Data: cfg,
|
|
Name: &shrToken,
|
|
Tags: ZrokShareTags(shrToken),
|
|
}
|
|
cfgReq := &config.CreateConfigParams{
|
|
Config: cfgCrt,
|
|
Context: context.Background(),
|
|
}
|
|
cfgReq.SetTimeout(30 * time.Second)
|
|
cfgResp, err := edge.Config.CreateConfig(cfgReq, nil)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
logrus.Infof("created config '%v' for environment '%v'", cfgResp.Payload.Data.ID, envZId)
|
|
return cfgResp.Payload.Data.ID, nil
|
|
}
|
|
|
|
func GetConfig(shrToken string, edge *rest_management_api_client.ZitiEdgeManagement) (string, *sdk.FrontendConfig, error) {
|
|
filter := fmt.Sprintf("tags.zrokShareToken=\"%v\"", shrToken)
|
|
limit := int64(0)
|
|
offset := int64(0)
|
|
listReq := &config.ListConfigsParams{
|
|
Filter: &filter,
|
|
Limit: &limit,
|
|
Offset: &offset,
|
|
Context: context.Background(),
|
|
}
|
|
listReq.SetTimeout(30 * time.Second)
|
|
listResp, err := edge.Config.ListConfigs(listReq, nil)
|
|
if err != nil {
|
|
return "", nil, err
|
|
}
|
|
if len(listResp.Payload.Data) != 1 {
|
|
return "", nil, fmt.Errorf("expected 1 configuration, found %v", len(listResp.Payload.Data))
|
|
}
|
|
if listResp.Payload.Data[0].ConfigType.Name != sdk.ZrokProxyConfig {
|
|
return "", nil, fmt.Errorf("expected '%v', found '%v'", sdk.ZrokProxyConfig, listResp.Payload.Data[0].ConfigType.Name)
|
|
}
|
|
if v, ok := listResp.Payload.Data[0].Data.(map[string]interface{}); ok {
|
|
fec, err := sdk.FrontendConfigFromMap(v)
|
|
if err != nil {
|
|
return "", nil, err
|
|
}
|
|
return *listResp.Payload.Data[0].ID, fec, nil
|
|
}
|
|
return "", nil, fmt.Errorf("unknown data type '%v' unmarshaling config for '%v'", reflect.TypeOf(listResp.Payload.Data[0].Data), shrToken)
|
|
}
|
|
|
|
func UpdateConfig(shrToken, cfgZId string, cfg *sdk.FrontendConfig, edge *rest_management_api_client.ZitiEdgeManagement) error {
|
|
logrus.Infof("updating config for '%v' (%v)", shrToken, cfgZId)
|
|
req := &config.UpdateConfigParams{
|
|
Config: &rest_model.ConfigUpdate{
|
|
Data: cfg,
|
|
Name: &shrToken,
|
|
Tags: ZrokShareTags(shrToken),
|
|
},
|
|
ID: cfgZId,
|
|
Context: context.Background(),
|
|
}
|
|
req.SetTimeout(30 * time.Second)
|
|
_, err := edge.Config.UpdateConfig(req, nil)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func DeleteConfig(envZId, shrToken string, edge *rest_management_api_client.ZitiEdgeManagement) error {
|
|
filter := fmt.Sprintf("tags.zrokShareToken=\"%v\"", shrToken)
|
|
limit := int64(0)
|
|
offset := int64(0)
|
|
listReq := &config.ListConfigsParams{
|
|
Filter: &filter,
|
|
Limit: &limit,
|
|
Offset: &offset,
|
|
Context: context.Background(),
|
|
}
|
|
listReq.SetTimeout(30 * time.Second)
|
|
listResp, err := edge.Config.ListConfigs(listReq, nil)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
for _, cfg := range listResp.Payload.Data {
|
|
deleteReq := &config.DeleteConfigParams{
|
|
ID: *cfg.ID,
|
|
Context: context.Background(),
|
|
}
|
|
deleteReq.SetTimeout(30 * time.Second)
|
|
_, err := edge.Config.DeleteConfig(deleteReq, nil)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
logrus.Infof("deleted config '%v' for '%v'", *cfg.ID, envZId)
|
|
}
|
|
return nil
|
|
}
|