mirror of
https://github.com/AsamK/signal-cli
synced 2025-08-29 18:40:39 +00:00
Create config directory/files as only user readable
Directories are created with mode 700, files with 600 Fixes #21
This commit is contained in:
parent
d78551564b
commit
ee5062a2cc
1 changed files with 34 additions and 6 deletions
|
@ -60,12 +60,17 @@ import java.nio.channels.Channels;
|
||||||
import java.nio.channels.FileChannel;
|
import java.nio.channels.FileChannel;
|
||||||
import java.nio.channels.FileLock;
|
import java.nio.channels.FileLock;
|
||||||
import java.nio.file.Files;
|
import java.nio.file.Files;
|
||||||
|
import java.nio.file.Path;
|
||||||
import java.nio.file.Paths;
|
import java.nio.file.Paths;
|
||||||
import java.nio.file.StandardCopyOption;
|
import java.nio.file.StandardCopyOption;
|
||||||
|
import java.nio.file.attribute.PosixFilePermission;
|
||||||
|
import java.nio.file.attribute.PosixFilePermissions;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
import java.util.concurrent.TimeoutException;
|
import java.util.concurrent.TimeoutException;
|
||||||
|
|
||||||
|
import static java.nio.file.attribute.PosixFilePermission.*;
|
||||||
|
|
||||||
class Manager implements Signal {
|
class Manager implements Signal {
|
||||||
private final static String URL = "https://textsecure-service.whispersystems.org";
|
private final static String URL = "https://textsecure-service.whispersystems.org";
|
||||||
private final static TrustStore TRUST_STORE = new WhisperTrustStore();
|
private final static TrustStore TRUST_STORE = new WhisperTrustStore();
|
||||||
|
@ -124,10 +129,29 @@ class Manager implements Signal {
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getFileName() {
|
public String getFileName() {
|
||||||
new File(dataPath).mkdirs();
|
|
||||||
return dataPath + "/" + username;
|
return dataPath + "/" + username;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static void createPrivateDirectories(String path) throws IOException {
|
||||||
|
final Path file = new File(path).toPath();
|
||||||
|
try {
|
||||||
|
Set<PosixFilePermission> perms = EnumSet.of(OWNER_READ, OWNER_WRITE, OWNER_EXECUTE);
|
||||||
|
Files.createDirectories(file, PosixFilePermissions.asFileAttribute(perms));
|
||||||
|
} catch (UnsupportedOperationException e) {
|
||||||
|
Files.createDirectories(file);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void createPrivateFile(String path) throws IOException {
|
||||||
|
final Path file = new File(path).toPath();
|
||||||
|
try {
|
||||||
|
Set<PosixFilePermission> perms = EnumSet.of(OWNER_READ, OWNER_WRITE);
|
||||||
|
Files.createFile(file, PosixFilePermissions.asFileAttribute(perms));
|
||||||
|
} catch (UnsupportedOperationException e) {
|
||||||
|
Files.createFile(file);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public boolean userExists() {
|
public boolean userExists() {
|
||||||
if (username == null) {
|
if (username == null) {
|
||||||
return false;
|
return false;
|
||||||
|
@ -153,6 +177,10 @@ class Manager implements Signal {
|
||||||
if (fileChannel != null)
|
if (fileChannel != null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
createPrivateDirectories(dataPath);
|
||||||
|
if (!new File(getFileName()).exists()) {
|
||||||
|
createPrivateFile(getFileName());
|
||||||
|
}
|
||||||
fileChannel = new RandomAccessFile(new File(getFileName()), "rw").getChannel();
|
fileChannel = new RandomAccessFile(new File(getFileName()), "rw").getChannel();
|
||||||
lock = fileChannel.tryLock();
|
lock = fileChannel.tryLock();
|
||||||
if (lock == null) {
|
if (lock == null) {
|
||||||
|
@ -202,7 +230,7 @@ class Manager implements Signal {
|
||||||
File attachmentFile = getAttachmentFile(g.getAvatarId());
|
File attachmentFile = getAttachmentFile(g.getAvatarId());
|
||||||
if (!avatarFile.exists() && attachmentFile.exists()) {
|
if (!avatarFile.exists() && attachmentFile.exists()) {
|
||||||
try {
|
try {
|
||||||
new File(avatarsPath).mkdirs();
|
createPrivateDirectories(avatarsPath);
|
||||||
Files.copy(attachmentFile.toPath(), avatarFile.toPath(), StandardCopyOption.REPLACE_EXISTING);
|
Files.copy(attachmentFile.toPath(), avatarFile.toPath(), StandardCopyOption.REPLACE_EXISTING);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
// Ignore
|
// Ignore
|
||||||
|
@ -569,7 +597,7 @@ class Manager implements Signal {
|
||||||
|
|
||||||
File aFile = getGroupAvatarFile(g.groupId);
|
File aFile = getGroupAvatarFile(g.groupId);
|
||||||
if (avatarFile != null) {
|
if (avatarFile != null) {
|
||||||
new File(avatarsPath).mkdirs();
|
createPrivateDirectories(avatarsPath);
|
||||||
Files.copy(Paths.get(avatarFile), aFile.toPath(), StandardCopyOption.REPLACE_EXISTING);
|
Files.copy(Paths.get(avatarFile), aFile.toPath(), StandardCopyOption.REPLACE_EXISTING);
|
||||||
}
|
}
|
||||||
if (aFile.exists()) {
|
if (aFile.exists()) {
|
||||||
|
@ -908,7 +936,7 @@ class Manager implements Signal {
|
||||||
}
|
}
|
||||||
|
|
||||||
private File retrieveContactAvatarAttachment(SignalServiceAttachment attachment, String number) throws IOException, InvalidMessageException {
|
private File retrieveContactAvatarAttachment(SignalServiceAttachment attachment, String number) throws IOException, InvalidMessageException {
|
||||||
new File(avatarsPath).mkdirs();
|
createPrivateDirectories(avatarsPath);
|
||||||
if (attachment.isPointer()) {
|
if (attachment.isPointer()) {
|
||||||
SignalServiceAttachmentPointer pointer = attachment.asPointer();
|
SignalServiceAttachmentPointer pointer = attachment.asPointer();
|
||||||
return retrieveAttachment(pointer, getContactAvatarFile(number), false);
|
return retrieveAttachment(pointer, getContactAvatarFile(number), false);
|
||||||
|
@ -923,7 +951,7 @@ class Manager implements Signal {
|
||||||
}
|
}
|
||||||
|
|
||||||
private File retrieveGroupAvatarAttachment(SignalServiceAttachment attachment, byte[] groupId) throws IOException, InvalidMessageException {
|
private File retrieveGroupAvatarAttachment(SignalServiceAttachment attachment, byte[] groupId) throws IOException, InvalidMessageException {
|
||||||
new File(avatarsPath).mkdirs();
|
createPrivateDirectories(avatarsPath);
|
||||||
if (attachment.isPointer()) {
|
if (attachment.isPointer()) {
|
||||||
SignalServiceAttachmentPointer pointer = attachment.asPointer();
|
SignalServiceAttachmentPointer pointer = attachment.asPointer();
|
||||||
return retrieveAttachment(pointer, getGroupAvatarFile(groupId), false);
|
return retrieveAttachment(pointer, getGroupAvatarFile(groupId), false);
|
||||||
|
@ -938,7 +966,7 @@ class Manager implements Signal {
|
||||||
}
|
}
|
||||||
|
|
||||||
private File retrieveAttachment(SignalServiceAttachmentPointer pointer) throws IOException, InvalidMessageException {
|
private File retrieveAttachment(SignalServiceAttachmentPointer pointer) throws IOException, InvalidMessageException {
|
||||||
new File(attachmentsPath).mkdirs();
|
createPrivateDirectories(attachmentsPath);
|
||||||
return retrieveAttachment(pointer, getAttachmentFile(pointer.getId()), true);
|
return retrieveAttachment(pointer, getAttachmentFile(pointer.getId()), true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue