]> nmode's Git Repositories - signal-cli/blob - lib/src/main/java/org/asamk/signal/manager/util/IOUtils.java
Refactor ReceiveCommand in dbus mode and remove ExtendedDbusCommand
[signal-cli] / lib / src / main / java / org / asamk / signal / manager / util / IOUtils.java
1 package org.asamk.signal.manager.util;
2
3 import java.io.ByteArrayOutputStream;
4 import java.io.File;
5 import java.io.FileInputStream;
6 import java.io.IOException;
7 import java.io.InputStream;
8 import java.io.OutputStream;
9 import java.nio.file.Files;
10 import java.nio.file.attribute.PosixFilePermission;
11 import java.nio.file.attribute.PosixFilePermissions;
12 import java.util.EnumSet;
13 import java.util.Set;
14
15 import static java.nio.file.attribute.PosixFilePermission.OWNER_EXECUTE;
16 import static java.nio.file.attribute.PosixFilePermission.OWNER_READ;
17 import static java.nio.file.attribute.PosixFilePermission.OWNER_WRITE;
18
19 public class IOUtils {
20
21 public static File createTempFile() throws IOException {
22 final var tempFile = File.createTempFile("signal-cli_tmp_", ".tmp");
23 tempFile.deleteOnExit();
24 return tempFile;
25 }
26
27 public static byte[] readFully(InputStream in) throws IOException {
28 var baos = new ByteArrayOutputStream();
29 IOUtils.copyStream(in, baos);
30 return baos.toByteArray();
31 }
32
33 public static void createPrivateDirectories(File file) throws IOException {
34 if (file.exists()) {
35 return;
36 }
37
38 final var path = file.toPath();
39 try {
40 Set<PosixFilePermission> perms = EnumSet.of(OWNER_READ, OWNER_WRITE, OWNER_EXECUTE);
41 Files.createDirectories(path, PosixFilePermissions.asFileAttribute(perms));
42 } catch (UnsupportedOperationException e) {
43 Files.createDirectories(path);
44 }
45 }
46
47 public static void createPrivateFile(File path) throws IOException {
48 final var file = path.toPath();
49 try {
50 Set<PosixFilePermission> perms = EnumSet.of(OWNER_READ, OWNER_WRITE);
51 Files.createFile(file, PosixFilePermissions.asFileAttribute(perms));
52 } catch (UnsupportedOperationException e) {
53 Files.createFile(file);
54 }
55 }
56
57 public static void copyFileToStream(File inputFile, OutputStream output) throws IOException {
58 try (InputStream inputStream = new FileInputStream(inputFile)) {
59 copyStream(inputStream, output);
60 }
61 }
62
63 public static void copyStream(InputStream input, OutputStream output) throws IOException {
64 copyStream(input, output, 4096);
65 }
66
67 public static void copyStream(InputStream input, OutputStream output, int bufferSize) throws IOException {
68 var buffer = new byte[bufferSize];
69 int read;
70
71 while ((read = input.read(buffer)) != -1) {
72 output.write(buffer, 0, read);
73 }
74 }
75 }