Initial QSfera import

This commit is contained in:
Курнат Андрей
2026-06-07 10:20:04 +03:00
commit 2315f25754
16485 changed files with 4826827 additions and 0 deletions
@@ -0,0 +1,125 @@
// Copyright 2018-2021 CERN
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
// In applying this license, CERN does not waive the privileges and immunities
// granted to it by virtue of its status as an Intergovernmental Organization
// or submit itself to any jurisdiction.
package sharedconf
import (
"fmt"
"os"
"sync"
"github.com/mitchellh/mapstructure"
)
var (
sharedConf = &conf{}
sharedConfOnce sync.Once
)
// ClientOptions represent additional options (e.g. tls settings) for the grpc clients
type ClientOptions struct {
TLSMode string `mapstructure:"tls_mode"`
CACertFile string `mapstructure:"cacert"`
}
type conf struct {
JWTSecret string `mapstructure:"jwt_secret"`
GatewaySVC string `mapstructure:"gatewaysvc"`
DataGateway string `mapstructure:"datagateway"`
SkipUserGroupsInToken bool `mapstructure:"skip_user_groups_in_token"`
MultiTenantEnabled bool `mapstructure:"multi_tenant_enabled"`
GRPCClientOptions ClientOptions `mapstructure:"grpc_client_options"`
}
// Decode decodes the configuration.
func Decode(v interface{}) error {
var err error
sharedConfOnce.Do(func() {
if err = mapstructure.Decode(v, sharedConf); err != nil {
return
}
// add some defaults
if sharedConf.GatewaySVC == "" {
sharedConf.GatewaySVC = "0.0.0.0:19000"
}
// this is the default address we use for the data gateway HTTP service
if sharedConf.DataGateway == "" {
host, err := os.Hostname()
if err != nil || host == "" {
sharedConf.DataGateway = "http://0.0.0.0:19001/datagateway"
} else {
sharedConf.DataGateway = fmt.Sprintf("http://%s:19001/datagateway", host)
}
}
// TODO(labkode): would be cool to autogenerate one secret and print
// it on init time.
if sharedConf.JWTSecret == "" {
sharedConf.JWTSecret = "changemeplease"
}
})
return err
}
// GetJWTSecret returns the package level configured jwt secret if not overwritten.
func GetJWTSecret(val string) string {
if val == "" {
return sharedConf.JWTSecret
}
return val
}
// GetGatewaySVC returns the package level configured gateway service if not overwritten.
func GetGatewaySVC(val string) string {
if val == "" {
return sharedConf.GatewaySVC
}
return val
}
// GetDataGateway returns the package level data gateway endpoint if not overwritten.
func GetDataGateway(val string) string {
if val == "" {
return sharedConf.DataGateway
}
return val
}
// SkipUserGroupsInToken returns whether to skip encoding user groups in the access tokens.
func SkipUserGroupsInToken() bool {
return sharedConf.SkipUserGroupsInToken
}
// MultiTenantEnabled returns whether this is a mulit-tenant enabled configuratio
func MultiTenantEnabled() bool {
return sharedConf.MultiTenantEnabled
}
// GRPCClientOptions returns the global grpc client options
func GRPCClientOptions() ClientOptions {
return sharedConf.GRPCClientOptions
}
// this is used by the tests
func resetOnce() {
sharedConf = &conf{}
sharedConfOnce = sync.Once{}
}