1 package org
.asamk
.signal
.manager
.util
;
3 import java
.io
.ByteArrayOutputStream
;
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
.BasicFileAttributes
;
11 import java
.nio
.file
.attribute
.FileTime
;
12 import java
.nio
.file
.attribute
.PosixFilePermission
;
13 import java
.nio
.file
.attribute
.PosixFilePermissions
;
14 import java
.util
.EnumSet
;
17 import static java
.nio
.file
.attribute
.PosixFilePermission
.OWNER_EXECUTE
;
18 import static java
.nio
.file
.attribute
.PosixFilePermission
.OWNER_READ
;
19 import static java
.nio
.file
.attribute
.PosixFilePermission
.OWNER_WRITE
;
21 public class IOUtils
{
23 public static File
createTempFile() throws IOException
{
24 final var tempFile
= File
.createTempFile("signal-cli_tmp_", ".tmp");
25 tempFile
.deleteOnExit();
29 public static byte[] readFully(InputStream
in) throws IOException
{
30 var baos
= new ByteArrayOutputStream();
31 IOUtils
.copyStream(in, baos
);
32 return baos
.toByteArray();
35 public static void createPrivateDirectories(File file
) throws IOException
{
40 final var path
= file
.toPath();
42 Set
<PosixFilePermission
> perms
= EnumSet
.of(OWNER_READ
, OWNER_WRITE
, OWNER_EXECUTE
);
43 Files
.createDirectories(path
, PosixFilePermissions
.asFileAttribute(perms
));
44 } catch (UnsupportedOperationException e
) {
45 Files
.createDirectories(path
);
49 public static void createPrivateFile(File path
) throws IOException
{
50 final var file
= path
.toPath();
52 Set
<PosixFilePermission
> perms
= EnumSet
.of(OWNER_READ
, OWNER_WRITE
);
53 Files
.createFile(file
, PosixFilePermissions
.asFileAttribute(perms
));
54 } catch (UnsupportedOperationException e
) {
55 Files
.createFile(file
);
59 public static void copyFileToStream(File inputFile
, OutputStream output
) throws IOException
{
60 try (InputStream inputStream
= new FileInputStream(inputFile
)) {
61 copyStream(inputStream
, output
);
65 public static void copyStream(InputStream input
, OutputStream output
) throws IOException
{
66 copyStream(input
, output
, 4096);
69 public static void copyStream(InputStream input
, OutputStream output
, int bufferSize
) throws IOException
{
70 var buffer
= new byte[bufferSize
];
73 while ((read
= input
.read(buffer
)) != -1) {
74 output
.write(buffer
, 0, read
);
78 public static long getFileCreateTime(final File file
) {
80 BasicFileAttributes attr
= Files
.readAttributes(file
.toPath(), BasicFileAttributes
.class);
81 FileTime fileTime
= attr
.creationTime();
82 return fileTime
.toMillis();
83 } catch (IOException ex
) {