| 349 | ) |
| 350 | |
| 351 | func (model Model) ToText() string { |
| 352 | tokenPatterns := make(map[string]string) |
| 353 | |
| 354 | for _, ptype := range []string{"r", "p"} { |
| 355 | for _, token := range model[ptype][ptype].Tokens { |
| 356 | tokenPatterns[token] = rPattern.ReplaceAllString(pPattern.ReplaceAllString(token, "p."), "r.") |
| 357 | } |
| 358 | } |
| 359 | if strings.Contains(model["e"]["e"].Value, "p_eft") { |
| 360 | tokenPatterns["p_eft"] = "p.eft" |
| 361 | } |
| 362 | s := strings.Builder{} |
| 363 | writeString := func(sec string) { |
| 364 | for ptype := range model[sec] { |
| 365 | value := model[sec][ptype].Value |
| 366 | for tokenPattern, newToken := range tokenPatterns { |
| 367 | value = strings.Replace(value, tokenPattern, newToken, -1) |
| 368 | } |
| 369 | s.WriteString(fmt.Sprintf("%s = %s\n", sec, value)) |
| 370 | } |
| 371 | } |
| 372 | s.WriteString("[request_definition]\n") |
| 373 | writeString("r") |
| 374 | s.WriteString("[policy_definition]\n") |
| 375 | writeString("p") |
| 376 | if _, ok := model["g"]; ok { |
| 377 | s.WriteString("[role_definition]\n") |
| 378 | for ptype := range model["g"] { |
| 379 | s.WriteString(fmt.Sprintf("%s = %s\n", ptype, model["g"][ptype].Value)) |
| 380 | } |
| 381 | } |
| 382 | if _, ok := model["c"]; ok { |
| 383 | s.WriteString("[constraint_definition]\n") |
| 384 | for ptype := range model["c"] { |
| 385 | s.WriteString(fmt.Sprintf("%s = %s\n", ptype, model["c"][ptype].Value)) |
| 386 | } |
| 387 | } |
| 388 | s.WriteString("[policy_effect]\n") |
| 389 | writeString("e") |
| 390 | s.WriteString("[matchers]\n") |
| 391 | writeString("m") |
| 392 | return s.String() |
| 393 | } |
| 394 | |
| 395 | func (model Model) Copy() Model { |
| 396 | newModel := NewModel() |