| 156 | } |
| 157 | |
| 158 | func (h *Handler) GetFile(filename string) (*os.File, error) { |
| 159 | if err := h.setup(); err != nil { |
| 160 | return nil, fmt.Errorf("setup: %w", err) |
| 161 | } |
| 162 | |
| 163 | // check for path traversal |
| 164 | path := filepath.Join(h.tempDir, filename) |
| 165 | if !strings.HasPrefix(path, filepath.Clean(h.tempDir)+string(os.PathSeparator)) { |
| 166 | return nil, errPathTraversal |
| 167 | } |
| 168 | |
| 169 | f, err := os.Open(path) |
| 170 | if err != nil { |
| 171 | return nil, fmt.Errorf("open file: %w", err) |
| 172 | } |
| 173 | return f, nil |
| 174 | } |
| 175 | |
| 176 | func (h *Handler) Cleanup() error { |
| 177 | if err := os.RemoveAll(h.tempDir); err != nil && !os.IsNotExist(err) { |