use of com.github.dedis.popstellar.model.objects.Lao in project popstellar by dedis.
the class LaoDetailViewModel method endElection.
public void endElection(Election election) {
Log.d(TAG, "ending election with name : " + election.getName());
Lao lao = getCurrentLaoValue();
if (lao == null) {
Log.d(TAG, LAO_FAILURE_MESSAGE);
return;
}
Channel channel = election.getChannel();
String laoId = lao.getId();
ElectionEnd electionEnd = new ElectionEnd(election.getId(), laoId, election.computerRegisteredVotes());
Log.d(TAG, PUBLISH_MESSAGE);
Disposable disposable = networkManager.getMessageSender().publish(keyManager.getMainKeyPair(), channel, electionEnd).subscribe(() -> {
Log.d(TAG, "ended election successfully");
endElectionEvent();
}, error -> ErrorUtils.logAndShow(getApplication(), TAG, error, R.string.error_end_election));
disposables.add(disposable);
}
use of com.github.dedis.popstellar.model.objects.Lao in project popstellar by dedis.
the class LaoDetailViewModel method signMessage.
public void signMessage(WitnessMessage witnessMessage) {
Log.d(TAG, "signing message with ID " + witnessMessage.getMessageId());
Lao lao = getCurrentLaoValue();
if (lao == null) {
Log.d(TAG, LAO_FAILURE_MESSAGE);
return;
}
Channel channel = lao.getChannel();
try {
KeyPair mainKey = keyManager.getMainKeyPair();
// generate the signature of the message
Signature signature = mainKey.sign(witnessMessage.getMessageId());
Log.d(TAG, PUBLISH_MESSAGE);
WitnessMessageSignature signatureMessage = new WitnessMessageSignature(witnessMessage.getMessageId(), signature);
disposables.add(networkManager.getMessageSender().publish(keyManager.getMainKeyPair(), channel, signatureMessage).subscribe(() -> Log.d(TAG, "Verifying the signature of message with id: " + witnessMessage.getMessageId()), error -> ErrorUtils.logAndShow(getApplication(), TAG, error, R.string.error_sign_message)));
} catch (GeneralSecurityException e) {
Log.d(TAG, PK_FAILURE_MESSAGE, e);
}
}
use of com.github.dedis.popstellar.model.objects.Lao in project popstellar by dedis.
the class ElectionStartFragment method onCreateView.
@Override
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
ElectionStartFragmentBinding binding = ElectionStartFragmentBinding.inflate(inflater, container, false);
electionStart = binding.electionStart;
electionStatus = binding.electionStatus;
LaoDetailViewModel mLaoDetailViewModel = LaoDetailActivity.obtainViewModel(requireActivity());
Election election = mLaoDetailViewModel.getCurrentElection();
if (election == null) {
Log.e(TAG, "The current election of the LaoDetailViewModel is null");
return null;
}
String scheduledDate = dateFormat.format(new Date(election.getStartTimestampInMillis()));
String electionId = election.getId();
String instanceId = ElectInstance.generateConsensusId("election", electionId, "state");
binding.electionTitle.setText(getString(R.string.election_start_title, election.getName()));
electionStatus.setText(R.string.waiting_scheduled_time);
electionStart.setText(getString(R.string.election_scheduled, scheduledDate));
electionStart.setEnabled(false);
setupTimerUpdate(election);
setupButtonListeners(binding, mLaoDetailViewModel, electionId);
Lao lao = mLaoDetailViewModel.getCurrentLaoValue();
List<ConsensusNode> nodes = lao.getNodes();
ownNode = lao.getNode(mLaoDetailViewModel.getPublicKey());
if (ownNode == null) {
// Only possible if the user wasn't an acceptor, but shouldn't have access to this fragment
Log.e(TAG, "Couldn't find the Node with public key : " + mLaoDetailViewModel.getPublicKey());
throw new IllegalStateException("Only acceptors are allowed to access ElectionStartFragment");
}
NodesAcceptorAdapter adapter = new NodesAcceptorAdapter(nodes, ownNode, instanceId, getViewLifecycleOwner(), mLaoDetailViewModel);
GridView gridView = binding.nodesGrid;
gridView.setAdapter(adapter);
if (isElectionStartTimePassed(election)) {
updateStartAndStatus(nodes, election, instanceId);
}
mLaoDetailViewModel.getNodes().observe(getViewLifecycleOwner(), consensusNodes -> {
Log.d(TAG, "got an update for nodes : " + consensusNodes);
adapter.setList(consensusNodes);
if (isElectionStartTimePassed(election)) {
updateStartAndStatus(consensusNodes, election, instanceId);
}
});
binding.setLifecycleOwner(getViewLifecycleOwner());
return binding.getRoot();
}
use of com.github.dedis.popstellar.model.objects.Lao in project popstellar by dedis.
the class LaoDetailViewModel method createNewElection.
/**
* Creates new Election event.
*
* <p>Publish a GeneralMessage containing ElectionSetup data.
*
* @param name the name of the election
* @param creation the creation time of the election
* @param start the start time of the election
* @param end the end time of the election
* @param votingMethod the type of voting method (e.g Plurality)
* @param ballotOptions the list of ballot options
* @param question the question associated to the election
* @return the id of the newly created election event, null if fails to create the event
*/
public String createNewElection(String name, long creation, long start, long end, List<String> votingMethod, List<Boolean> writeIn, List<List<String>> ballotOptions, List<String> question) {
Log.d(TAG, "creating a new election with name " + name);
Lao lao = getCurrentLaoValue();
if (lao == null) {
Log.d(TAG, LAO_FAILURE_MESSAGE);
return null;
}
Channel channel = lao.getChannel();
ElectionSetup electionSetup = new ElectionSetup(name, creation, start, end, votingMethod, writeIn, ballotOptions, question, lao.getId());
Log.d(TAG, PUBLISH_MESSAGE);
Disposable disposable = networkManager.getMessageSender().publish(keyManager.getMainKeyPair(), channel, electionSetup).subscribe(() -> {
Log.d(TAG, "setup an election");
mElectionCreatedEvent.postValue(new SingleEvent<>(true));
}, error -> ErrorUtils.logAndShow(getApplication(), TAG, error, R.string.error_create_election));
disposables.add(disposable);
return electionSetup.getId();
}
use of com.github.dedis.popstellar.model.objects.Lao in project popstellar by dedis.
the class LaoDetailViewModel method updateLaoWitnesses.
/**
* Method to update the list of witnesses of a Lao by sending an updateLao msg and a stateLao msg
* to the backend
*/
public void updateLaoWitnesses() {
Log.d(TAG, "Updating lao witnesses ");
Lao lao = getCurrentLaoValue();
if (lao == null) {
Log.d(TAG, LAO_FAILURE_MESSAGE);
return;
}
Channel channel = lao.getChannel();
KeyPair mainKey = keyManager.getMainKeyPair();
long now = Instant.now().getEpochSecond();
UpdateLao updateLao = new UpdateLao(mainKey.getPublicKey(), lao.getCreation(), lao.getName(), now, witnesses);
MessageGeneral msg = new MessageGeneral(mainKey, updateLao, gson);
Disposable disposable = networkManager.getMessageSender().publish(channel, msg).subscribe(() -> {
Log.d(TAG, "updated lao witnesses");
dispatchLaoUpdate("lao state with new witnesses", updateLao, lao, channel, msg);
}, error -> ErrorUtils.logAndShow(getApplication(), TAG, error, R.string.error_update_lao));
disposables.add(disposable);
}
Aggregations