diff --git a/src/main/java/net/kemitix/trello/AttachmentDirectoryImpl.java b/src/main/java/net/kemitix/trello/AttachmentDirectoryImpl.java index aefe73b..44b7a4a 100644 --- a/src/main/java/net/kemitix/trello/AttachmentDirectoryImpl.java +++ b/src/main/java/net/kemitix/trello/AttachmentDirectoryImpl.java @@ -17,19 +17,22 @@ public class AttachmentDirectoryImpl implements AttachmentDirectory { private static final Logger LOG = Logger.getLogger( AttachmentDirectoryImpl.class.getName()); + private static final String ILLEGAL_CHARS = "[\\\\/:*?\"<>|]"; private Path dir; private List toDelete = new ArrayList<>(); @PostConstruct - void init() throws IOException { + public void init() throws IOException { dir = Files.createTempDirectory("attachments"); LOG.info("Attachments directory: " + dir); } @Override public File createFile(File fileName) { - File file = dir.resolve(fileName.getName()).toFile(); + String cleanFilename = fileName.getName() + .replaceAll(ILLEGAL_CHARS, ""); + File file = dir.resolve(cleanFilename).toFile(); LOG.info("Created attachment: " + file); toDelete.add(file); return file; diff --git a/src/test/java/net/kemitix/trello/AttachmentDirectoryImplTest.java b/src/test/java/net/kemitix/trello/AttachmentDirectoryImplTest.java new file mode 100644 index 0000000..4b63e86 --- /dev/null +++ b/src/test/java/net/kemitix/trello/AttachmentDirectoryImplTest.java @@ -0,0 +1,32 @@ +package net.kemitix.trello; + +import org.assertj.core.api.WithAssertions; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import java.io.File; +import java.io.IOException; + +public class AttachmentDirectoryImplTest + implements WithAssertions { + + AttachmentDirectoryImpl attachmentDirectory = + new AttachmentDirectoryImpl(); + + @BeforeEach + public void setUp() throws IOException { + attachmentDirectory.init(); + } + + @Test + @DisplayName("Creates safe filenames") + public void createsSafeFilenames() { + //given + String filename = "x\\y"; + //when + File result = attachmentDirectory.createFile(new File(filename)); + //then + assertThat(result.getName()).isEqualTo("xy"); + } +}