in app/registry/trembita_client.go [73:138]
func (a *App) setTrembitaClientRegistryData(ctx *gin.Context) (rsp router.Response, retErr error) {
registryName := ctx.Param("name")
_, err := a.Codebase.Get(registryName)
if err != nil {
return nil, errors.Wrap(err, "unable to find registry")
}
var tf TrembitaClientRegistryForm
if err := ctx.ShouldBind(&tf); err != nil {
return nil, errors.Wrap(err, "unable to parse form")
}
values, err := GetValuesFromGit(registryName, MasterBranch, a.Gerrit)
if err != nil {
return nil, errors.Wrap(err, "unable to get values")
}
trembitaRegistryFromValues, ok := values.Trembita.Registries[tf.TrembitaClientRegitryName]
if !ok {
return nil, errors.New("wrong registry name")
}
trembitaRegistry := tf.ToNestedStruct(strings.ReplaceAll(a.Config.WiremockAddr, registryNamePlaceholder,
registryName))
trembitaRegistry.Type = trembitaRegistryFromValues.Type
trembitaRegistry.Protocol = trembitaRegistryFromValues.Protocol
trembita, ok := values.OriginalYaml[trembitaValuesKey]
if !ok {
return nil, errors.New("no trembita config in values")
}
trembitaDict := trembita.(map[string]interface{})
registriesDict := trembitaDict[trembitaRegistriesValuesKet].(map[string]interface{})
//TODO: change path to single secret vault:secret/<registry>/trembita-registries
//TODO: check if keys rewrited or keep
if tf.TrembitaServiceAuthType == authTypeAuthToken && tf.TrembitaServiceAuthSecret != "" {
vaultPath := fmt.Sprintf("%s/trembita-registries/%s-%s", a.vaultRegistryPath(registryName), tf.TrembitaClientRegitryName, time.Now().Format("20060201T150405Z"))
prefixedPath := fmt.Sprintf("vault:%s", vaultPath)
if tf.TrembitaServiceAuthSecret != prefixedPath {
if err := CreateVaultSecrets(a.Vault, map[string]map[string]interface{}{
vaultPath: {
fmt.Sprintf("trembita.registries.%s.auth.secret.token", tf.TrembitaClientRegitryName): tf.TrembitaServiceAuthSecret,
},
}, true); err != nil {
return nil, errors.Wrap(err, "unable to create auth token secret")
}
}
//todo: maybe move to nested struct converter
trembitaRegistry.Auth["secret"] = prefixedPath
}
registriesDict[tf.TrembitaClientRegitryName] = trembitaRegistry
trembitaDict[trembitaRegistriesKey] = registriesDict
values.OriginalYaml[trembitaValuesKey] = trembitaDict
if err := CreateEditMergeRequest(ctx, registryName, values.OriginalYaml, a.Gerrit,
[]string{}, MRLabel{Key: MRLabelTarget, Value: MRLabelTargetTrembitaRegistryUpdate},
MRLabel{Key: MRLabelTrembitaRegsitryName, Value: tf.TrembitaClientRegitryName}); err != nil {
return nil, errors.Wrap(err, "unable to create merge request")
}
return router.MakeRedirectResponse(http.StatusFound,
fmt.Sprintf("/admin/registry/view/%s", registryName)), nil
}