diff --git a/sda/internal/helper/helper.go b/sda/internal/helper/helper.go index ff88236da4..1026a62980 100644 --- a/sda/internal/helper/helper.go +++ b/sda/internal/helper/helper.go @@ -458,9 +458,11 @@ func AnonymizeFilepath(fp string, username string) string { } func UnanonymizeFilepath(fp string, username string) string { - if strings.HasPrefix(fp, strings.Replace(username, "@", "_", 1)) { + sanitized := strings.Replace(username, "@", "_", 1) + sep := string(os.PathSeparator) + if fp == sanitized || strings.HasPrefix(fp, sanitized+sep) || fp == username || strings.HasPrefix(fp, username+sep) { return fp } - return filepath.Join(strings.Replace(username, "@", "_", 1), fp) + return filepath.Join(sanitized, fp) } diff --git a/sda/internal/helper/helper_test.go b/sda/internal/helper/helper_test.go index 06b1dedb52..d99065a2f6 100644 --- a/sda/internal/helper/helper_test.go +++ b/sda/internal/helper/helper_test.go @@ -179,3 +179,17 @@ func (ts *HelperTest) TestUnanonymizeFilepath_oldMessage() { newPath := UnanonymizeFilepath(filePath, userName) assert.Equal(ts.T(), filePath, newPath) } + +func (ts *HelperTest) TestUnanonymizeFilepath_rawUsernamePrefix() { + filePath := "test.user@demo.org/main_folder/sub_folder/file.name" + userName := "test.user@demo.org" + newPath := UnanonymizeFilepath(filePath, userName) + assert.Equal(ts.T(), filePath, newPath) +} + +func (ts *HelperTest) TestUnanonymizeFilepath_bareFileNameStartingWithUsername() { + filePath := "test.user@demo.org_report.name" + userName := "test.user@demo.org" + newPath := UnanonymizeFilepath(filePath, userName) + assert.Equal(ts.T(), filepath.Join(strings.Replace(userName, "@", "_", 1), filePath), newPath) +}