Allow account creation and reading password from STDIN

This commit is contained in:
Torsten Grote
2018-08-18 17:15:22 -03:00
parent 6c296c1348
commit 0d1ebddcd2
2 changed files with 109 additions and 18 deletions

View File

@@ -0,0 +1,105 @@
package org.briarproject.briar.headless;
import org.briarproject.bramble.api.account.AccountManager;
import org.briarproject.bramble.api.lifecycle.LifecycleManager;
import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
import java.io.Console;
import java.util.Scanner;
import java.util.logging.Logger;
import javax.annotation.ParametersAreNonnullByDefault;
import javax.inject.Inject;
import static java.lang.System.console;
import static java.lang.System.err;
import static java.lang.System.exit;
import static java.lang.System.out;
import static java.util.logging.Logger.getLogger;
import static org.briarproject.bramble.api.identity.AuthorConstants.MAX_AUTHOR_NAME_LENGTH;
@MethodsNotNullByDefault
@ParametersAreNonnullByDefault
public class BriarService {
private final static Logger LOG = getLogger(BriarService.class.getName());
private final AccountManager accountManager;
private final LifecycleManager lifecycleManager;
@Inject
public BriarService(AccountManager accountManager,
LifecycleManager lifecycleManager) {
this.accountManager = accountManager;
this.lifecycleManager = lifecycleManager;
}
public void start() {
Console console = console();
out.println("Welcome to Briar!\n");
if (!accountManager.accountExists()) {
if (console == null) {
LOG.warning("No account found.");
LOG.warning("Please start in terminal to set one up.");
exit(1);
}
console.printf("No account found. Let's create one!\n\n");
String nickname = createNickname(console);
String password = createPassword(console);
accountManager.createAccount(nickname, password);
} else {
out.print("Password: ");
String password;
if (console == null) {
Scanner scanner = new Scanner(System.in);
password = scanner.nextLine();
} else {
password = new String(console.readPassword());
}
if (!accountManager.signIn(password)) {
err.println("Error: Password invalid");
exit(1);
}
}
assert accountManager.getDatabaseKey() != null;
lifecycleManager.startServices(accountManager.getDatabaseKey());
}
private String createNickname(Console console) {
String nickname;
boolean error;
do {
nickname = console.readLine("Nickname: ");
if (nickname.length() == 0) {
console.printf("Please enter a nickname!\n");
error = true;
} else if (nickname.length() > MAX_AUTHOR_NAME_LENGTH) {
console.printf("Please choose a shorter nickname!\n");
error = true;
} else {
error = false;
}
} while (error);
return nickname;
}
private String createPassword(Console console) {
String password;
boolean error;
do {
password = new String(console.readPassword("Password: "));
if (password.length() < 4) {
console.printf(
"Please enter a password with at least 4 characters!\n");
error = true;
// TODO enforce stronger password
} else {
error = false;
}
} while (error);
return password;
}
}

View File

@@ -1,8 +1,5 @@
package org.briarproject.briar.headless;
import org.briarproject.bramble.api.account.AccountManager;
import org.briarproject.bramble.api.lifecycle.LifecycleManager;
import javax.inject.Inject;
import javax.inject.Singleton;
@@ -11,28 +8,17 @@ import io.javalin.Javalin;
@Singleton
public class Router {
private final AccountManager accountManager;
private final LifecycleManager lifecycleManager;
private final BriarService briarService;
private final ForumController forumController;
@Inject
public Router(AccountManager accountManager,
LifecycleManager lifecycleManager,
ForumController forumController) {
this.accountManager = accountManager;
this.lifecycleManager = lifecycleManager;
public Router(BriarService briarService, ForumController forumController) {
this.briarService = briarService;
this.forumController = forumController;
}
public void start() {
if (accountManager.accountExists()) {
accountManager.signIn("test");
} else {
accountManager.createAccount("test", "test");
}
assert accountManager.getDatabaseKey() != null;
lifecycleManager.startServices(accountManager.getDatabaseKey());
briarService.start();
Javalin app = Javalin.create()
.port(7000)