(name string, s Writer, reader io.Reader)
| 382 | } |
| 383 | |
| 384 | func importTar(name string, s Writer, reader io.Reader) error { |
| 385 | tr := tar.NewReader(&limitedReader{R: reader, N: maxAllowedFileSizeToImport}) |
| 386 | tlsData := ContextTLSData{ |
| 387 | Endpoints: map[string]EndpointTLSData{}, |
| 388 | } |
| 389 | var importedMetaFile bool |
| 390 | for { |
| 391 | hdr, err := tr.Next() |
| 392 | if err == io.EOF { |
| 393 | break |
| 394 | } |
| 395 | if err != nil { |
| 396 | return err |
| 397 | } |
| 398 | if hdr.Typeflag != tar.TypeReg { |
| 399 | // skip this entry, only taking files into account |
| 400 | continue |
| 401 | } |
| 402 | if err := isValidFilePath(hdr.Name); err != nil { |
| 403 | return fmt.Errorf("%s: %w", hdr.Name, err) |
| 404 | } |
| 405 | if hdr.Name == metaFile { |
| 406 | data, err := io.ReadAll(tr) |
| 407 | if err != nil { |
| 408 | return err |
| 409 | } |
| 410 | meta, err := parseMetadata(data, name) |
| 411 | if err != nil { |
| 412 | return err |
| 413 | } |
| 414 | if err := s.CreateOrUpdate(meta); err != nil { |
| 415 | return err |
| 416 | } |
| 417 | importedMetaFile = true |
| 418 | } else if strings.HasPrefix(hdr.Name, "tls/") { |
| 419 | data, err := io.ReadAll(tr) |
| 420 | if err != nil { |
| 421 | return err |
| 422 | } |
| 423 | if err := importEndpointTLS(&tlsData, hdr.Name, data); err != nil { |
| 424 | return err |
| 425 | } |
| 426 | } |
| 427 | } |
| 428 | if !importedMetaFile { |
| 429 | return invalidParameter(errors.New("invalid context: no metadata found")) |
| 430 | } |
| 431 | return s.ResetTLSMaterial(name, &tlsData) |
| 432 | } |
| 433 | |
| 434 | func importZip(name string, s Writer, reader io.Reader) error { |
| 435 | body, err := io.ReadAll(&limitedReader{R: reader, N: maxAllowedFileSizeToImport}) |
no test coverage detected
searching dependent graphs…