mirror of
https://github.com/pomerium/pomerium.git
synced 2025-04-29 18:36:30 +02:00
40 lines
923 B
Go
40 lines
923 B
Go
package reconciler
|
|
|
|
import (
|
|
"fmt"
|
|
"io"
|
|
"os"
|
|
|
|
"github.com/hashicorp/go-multierror"
|
|
)
|
|
|
|
// ReadWriteSeekCloser is a file that can be read, written, seeked, and closed.
|
|
type ReadWriteSeekCloser interface {
|
|
io.ReadWriteSeeker
|
|
io.Closer
|
|
}
|
|
|
|
// GetTmpFile returns a temporary file for the reconciler to use.
|
|
// TODO: encrypt contents to ensure encryption at rest
|
|
func (c *service) GetTmpFile(key string) (ReadWriteSeekCloser, error) {
|
|
fd, err := os.CreateTemp(c.config.tmpDir, fmt.Sprintf("pomerium-bundle-%s", key))
|
|
if err != nil {
|
|
return nil, fmt.Errorf("create temp file: %w", err)
|
|
}
|
|
return &tmpFile{File: fd}, nil
|
|
}
|
|
|
|
type tmpFile struct {
|
|
*os.File
|
|
}
|
|
|
|
func (f *tmpFile) Close() error {
|
|
var errs *multierror.Error
|
|
if err := f.File.Close(); err != nil {
|
|
errs = multierror.Append(errs, err)
|
|
}
|
|
if err := os.Remove(f.File.Name()); err != nil {
|
|
errs = multierror.Append(errs, err)
|
|
}
|
|
return errs.ErrorOrNil()
|
|
}
|