func()

in app/registry/public_api.go [79:131]


func (a *App) addPublicAPIReg(ctx *gin.Context) (router.Response, error) {
	registryName := ctx.Param("name")
	var regLimits Limits
	regLimitsValue := ctx.PostForm("reg-limits")

	if err := json.Unmarshal([]byte(regLimitsValue), &regLimits); err != nil {
		return nil, errors.Wrap(err, "unable to decode limits from request")
	}

	publicAPI := PublicAPI{
		Name:    ctx.PostForm("reg-name"),
		URL:     ctx.PostForm("reg-url"),
		Limits:  regLimits,
		Enabled: true,
	}

	values, err := GetValuesFromGit(registryName, MasterBranch, a.Gerrit)
	if err != nil {
		return nil, fmt.Errorf("unable to get values from git, %w", err)
	}

	for _, _er := range values.PublicApi {
		if publicAPI.Name == _er.Name && _er.URL == publicAPI.URL {
			return nil, errors.New("publicAPI reg system already exists")
		}
	}

	values.OriginalYaml[publicAPIValuesIndex] = append(values.PublicApi, PublicAPI{
		Name:    publicAPI.Name,
		Enabled: publicAPI.Enabled,
		URL:     publicAPI.URL,
		Limits:  publicAPI.Limits,
	})

	if err != nil {
		return nil, fmt.Errorf("unable to prepare registry values, %w", err)
	}

	if err := CreateEditMergeRequest(
		ctx,
		registryName,
		values.OriginalYaml,
		a.Gerrit, []string{},
		MRLabel{Key: MRLabelPublicApiTarget, Value: mrTargetPublicAPIReg},
		MRLabel{Key: MRLabelPublicApiName, Value: ctx.PostForm("reg-name")},
		MRLabel{Key: MRLabelPublicApiSubTarget, Value: "creation"},
	); err != nil {
		return nil, fmt.Errorf("unable to create MR, %w", err)
	}

	return router.MakeRedirectResponse(http.StatusFound,
		fmt.Sprintf("/admin/registry/view/%s", registryName)), nil
}