diff --git a/bindings/localstorage/localstorage.go b/bindings/localstorage/localstorage.go index f5587b415a..441b7a7f39 100644 --- a/bindings/localstorage/localstorage.go +++ b/bindings/localstorage/localstorage.go @@ -57,6 +57,7 @@ type LocalStorage struct { // Metadata defines the metadata. type Metadata struct { RootPath string `json:"rootPath"` + FromTemp bool `json:"fromTemp"` } type createResponse struct { @@ -91,6 +92,10 @@ func (ls *LocalStorage) parseMetadata(meta bindings.Metadata) (*Metadata, error) return nil, err } + if m.FromTemp { + m.RootPath = filepath.Join(os.TempDir(), m.RootPath) + } + m.RootPath, err = validateRootPath(m.RootPath) if err != nil { return nil, err diff --git a/bindings/localstorage/localstorage_test.go b/bindings/localstorage/localstorage_test.go index e148587301..88c4020579 100644 --- a/bindings/localstorage/localstorage_test.go +++ b/bindings/localstorage/localstorage_test.go @@ -37,8 +37,21 @@ func TestParseMetadata(t *testing.T) { meta, err := localStorage.parseMetadata(m) require.NoError(t, err) assert.Equal(t, path, meta.RootPath) -} + m.Properties = map[string]string{ + "rootPath": "myapp_data", + "fromTemp": "true", + } + metaTemp, err := localStorage.parseMetadata(m) + require.NoError(t, err) + + realTempDir, err := filepath.EvalSymlinks(os.TempDir()) + require.NoError(t, err) + expectedTempPath := filepath.Join(realTempDir, "myapp_data") + + assert.Equal(t, expectedTempPath, metaTemp.RootPath) + assert.True(t, metaTemp.FromTemp) +} func TestValidateRootPath(t *testing.T) { // Get the current working directory cwd, err := os.Getwd() diff --git a/bindings/localstorage/metadata.yaml b/bindings/localstorage/metadata.yaml index 58107c88d9..46584d246a 100644 --- a/bindings/localstorage/metadata.yaml +++ b/bindings/localstorage/metadata.yaml @@ -23,3 +23,8 @@ metadata: required: true description: "The file name to write" example: "data.txt" + - name: fromTemp + description: "If true, resolves rootPath from the system-wide temporary directory." + type: bool + required: false + default: "false" \ No newline at end of file