2019-06-17 09:49:09 +02:00
|
|
|
package lu.circl.mispbump.activities;
|
|
|
|
|
|
|
|
import android.os.Bundle;
|
|
|
|
import android.view.MenuItem;
|
|
|
|
import android.view.View;
|
|
|
|
|
|
|
|
import androidx.appcompat.app.ActionBar;
|
|
|
|
import androidx.appcompat.app.AppCompatActivity;
|
|
|
|
import androidx.appcompat.widget.Toolbar;
|
|
|
|
import androidx.coordinatorlayout.widget.CoordinatorLayout;
|
|
|
|
|
|
|
|
import com.google.android.material.floatingactionbutton.FloatingActionButton;
|
|
|
|
import com.google.android.material.snackbar.Snackbar;
|
|
|
|
import com.google.gson.Gson;
|
|
|
|
|
|
|
|
import java.io.IOException;
|
|
|
|
import java.util.List;
|
|
|
|
import java.util.UUID;
|
|
|
|
|
|
|
|
import lu.circl.mispbump.R;
|
|
|
|
import lu.circl.mispbump.auxiliary.DialogManager;
|
|
|
|
import lu.circl.mispbump.auxiliary.PreferenceManager;
|
|
|
|
import lu.circl.mispbump.custom_views.UploadAction;
|
|
|
|
import lu.circl.mispbump.models.UploadInformation;
|
|
|
|
import lu.circl.mispbump.restful_client.MispRestClient;
|
|
|
|
import lu.circl.mispbump.restful_client.MispServer;
|
|
|
|
import lu.circl.mispbump.restful_client.Organisation;
|
|
|
|
import lu.circl.mispbump.restful_client.Server;
|
|
|
|
import lu.circl.mispbump.restful_client.User;
|
|
|
|
|
|
|
|
public class UploadActivity extends AppCompatActivity {
|
|
|
|
|
|
|
|
public static final String EXTRA_UPLOAD_INFO = "uploadInformation";
|
|
|
|
|
|
|
|
private PreferenceManager preferenceManager;
|
|
|
|
private MispRestClient restClient;
|
|
|
|
private UploadInformation uploadInformation;
|
|
|
|
|
|
|
|
private CoordinatorLayout rootLayout;
|
|
|
|
|
|
|
|
private UploadAction availableAction, orgAction, userAction, serverAction;
|
|
|
|
|
|
|
|
@Override
|
|
|
|
protected void onCreate(Bundle savedInstanceState) {
|
|
|
|
super.onCreate(savedInstanceState);
|
|
|
|
setContentView(R.layout.activity_upload);
|
|
|
|
parseExtra();
|
|
|
|
init();
|
|
|
|
}
|
|
|
|
|
|
|
|
private void parseExtra() {
|
|
|
|
String uploadInfoString = getIntent().getStringExtra(EXTRA_UPLOAD_INFO);
|
|
|
|
uploadInformation = new Gson().fromJson(uploadInfoString, UploadInformation.class);
|
|
|
|
assert uploadInformation != null;
|
|
|
|
}
|
|
|
|
|
|
|
|
private void init() {
|
|
|
|
preferenceManager = PreferenceManager.getInstance(this);
|
|
|
|
restClient = new MispRestClient(this);
|
|
|
|
rootLayout = findViewById(R.id.rootLayout);
|
|
|
|
|
|
|
|
// toolbar
|
|
|
|
Toolbar toolbar = findViewById(R.id.toolbar);
|
|
|
|
setSupportActionBar(toolbar);
|
|
|
|
ActionBar ab = getSupportActionBar();
|
|
|
|
assert ab != null;
|
|
|
|
ab.setDisplayShowTitleEnabled(true);
|
|
|
|
ab.setDisplayHomeAsUpEnabled(true);
|
|
|
|
ab.setHomeAsUpIndicator(R.drawable.ic_close);
|
|
|
|
|
|
|
|
// fab
|
|
|
|
FloatingActionButton fab = findViewById(R.id.fab);
|
|
|
|
fab.setOnClickListener(new View.OnClickListener() {
|
|
|
|
@Override
|
|
|
|
public void onClick(View v) {
|
|
|
|
startUpload();
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
availableAction = findViewById(R.id.availableAction);
|
|
|
|
orgAction = findViewById(R.id.orgAction);
|
|
|
|
userAction = findViewById(R.id.userAction);
|
|
|
|
serverAction = findViewById(R.id.serverAction);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public boolean onOptionsItemSelected(MenuItem item) {
|
|
|
|
switch (item.getItemId()) {
|
|
|
|
case android.R.id.home:
|
|
|
|
preferenceManager.addUploadInformation(uploadInformation);
|
|
|
|
finish();
|
|
|
|
return true;
|
|
|
|
|
|
|
|
default:
|
|
|
|
return super.onOptionsItemSelected(item);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Start upload to misp instance.
|
|
|
|
*/
|
|
|
|
private void startUpload() {
|
|
|
|
availableAction.setCurrentUploadState(UploadAction.UploadState.LOADING);
|
|
|
|
restClient.isAvailable(availableCallback);
|
|
|
|
}
|
|
|
|
|
|
|
|
private User generateSyncUser(Organisation organisation) {
|
|
|
|
User syncUser = new User();
|
|
|
|
syncUser.org_id = organisation.id;
|
|
|
|
syncUser.role_id = User.ROLE_SYNC_USER;
|
2019-06-17 12:02:05 +02:00
|
|
|
syncUser.email = uploadInformation.getRemote().syncUserEmail;
|
2019-06-17 09:49:09 +02:00
|
|
|
|
2019-06-17 12:02:05 +02:00
|
|
|
// String emailSaveOrgName = organisation.name.replace(" ", "").toLowerCase();
|
|
|
|
// String syncUserEmailFormat = uploadInformation.getRemote().syncUserEmail;
|
|
|
|
// syncUser.email = syncUserEmailFormat.replace("[ORG]", emailSaveOrgName);
|
|
|
|
// uploadInformation.getLocal().syncUserEmail = syncUser.email;
|
2019-06-17 09:49:09 +02:00
|
|
|
|
|
|
|
syncUser.password = uploadInformation.getRemote().syncUserPassword;
|
|
|
|
syncUser.authkey = uploadInformation.getRemote().syncUserAuthkey;
|
|
|
|
syncUser.termsaccepted = true;
|
|
|
|
|
|
|
|
return syncUser;
|
|
|
|
}
|
|
|
|
|
|
|
|
private MispRestClient.AvailableCallback availableCallback = new MispRestClient.AvailableCallback() {
|
|
|
|
@Override
|
|
|
|
public void available() {
|
|
|
|
availableAction.setCurrentUploadState(UploadAction.UploadState.DONE);
|
|
|
|
orgAction.setCurrentUploadState(UploadAction.UploadState.LOADING);
|
2019-06-17 12:02:05 +02:00
|
|
|
restClient.addOrganisation(uploadInformation.getRemote().organisation, organisationCallback);
|
2019-06-17 09:49:09 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void unavailable(String error) {
|
|
|
|
availableAction.setCurrentUploadState(UploadAction.UploadState.ERROR);
|
|
|
|
availableAction.setError(error);
|
|
|
|
uploadInformation.setCurrentSyncStatus(UploadInformation.SyncStatus.FAILURE);
|
|
|
|
|
|
|
|
Snackbar sb = Snackbar.make(rootLayout, error, Snackbar.LENGTH_INDEFINITE);
|
|
|
|
sb.setAction("Retry", new View.OnClickListener() {
|
|
|
|
@Override
|
|
|
|
public void onClick(View v) {
|
|
|
|
availableAction.setError(null);
|
|
|
|
availableAction.setCurrentUploadState(UploadAction.UploadState.LOADING);
|
|
|
|
startUpload();
|
|
|
|
}
|
|
|
|
});
|
|
|
|
sb.show();
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
private MispRestClient.OrganisationCallback organisationCallback = new MispRestClient.OrganisationCallback() {
|
|
|
|
@Override
|
|
|
|
public void success(Organisation organisation) {
|
|
|
|
orgAction.setCurrentUploadState(UploadAction.UploadState.DONE);
|
|
|
|
userAction.setCurrentUploadState(UploadAction.UploadState.LOADING);
|
|
|
|
|
|
|
|
// for later reference in add user callback
|
|
|
|
uploadInformation.getRemote().organisation.id = organisation.id;
|
|
|
|
|
|
|
|
restClient.addUser(generateSyncUser(organisation), userCallback);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void failure(String error) {
|
|
|
|
orgAction.setCurrentUploadState(UploadAction.UploadState.ERROR);
|
2019-06-17 12:02:05 +02:00
|
|
|
orgAction.setError(error);
|
|
|
|
|
2019-06-17 09:49:09 +02:00
|
|
|
uploadInformation.setCurrentSyncStatus(UploadInformation.SyncStatus.FAILURE);
|
|
|
|
preferenceManager.addUploadInformation(uploadInformation);
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
private MispRestClient.UserCallback userCallback = new MispRestClient.UserCallback() {
|
|
|
|
@Override
|
|
|
|
public void success(User user) {
|
|
|
|
userAction.setCurrentUploadState(UploadAction.UploadState.DONE);
|
|
|
|
|
|
|
|
Server server = new Server();
|
|
|
|
server.name = uploadInformation.getRemote().organisation.name + "'s Sync Server";
|
|
|
|
server.url = uploadInformation.getRemote().baseUrl;
|
|
|
|
server.remote_org_id = uploadInformation.getRemote().organisation.id;
|
|
|
|
server.authkey = uploadInformation.getLocal().syncUserAuthkey;
|
2019-06-17 12:02:05 +02:00
|
|
|
|
2019-06-17 09:49:09 +02:00
|
|
|
server.pull = uploadInformation.isPull();
|
|
|
|
server.push = uploadInformation.isPush();
|
|
|
|
server.caching_enabled = uploadInformation.isCached();
|
|
|
|
server.self_signed = uploadInformation.isAllowSelfSigned();
|
|
|
|
|
|
|
|
restClient.addServer(server, serverCallback);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void failure(String error) {
|
|
|
|
userAction.setCurrentUploadState(UploadAction.UploadState.ERROR);
|
2019-06-17 12:02:05 +02:00
|
|
|
userAction.setError(error);
|
|
|
|
|
2019-06-17 09:49:09 +02:00
|
|
|
uploadInformation.setCurrentSyncStatus(UploadInformation.SyncStatus.FAILURE);
|
|
|
|
preferenceManager.addUploadInformation(uploadInformation);
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
private MispRestClient.ServerCallback serverCallback = new MispRestClient.ServerCallback() {
|
|
|
|
@Override
|
|
|
|
public void success(List<MispServer> servers) {
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void success(MispServer server) {
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void success(Server server) {
|
|
|
|
serverAction.setCurrentUploadState(UploadAction.UploadState.DONE);
|
|
|
|
uploadInformation.setCurrentSyncStatus(UploadInformation.SyncStatus.COMPLETE);
|
|
|
|
preferenceManager.addUploadInformation(uploadInformation);
|
|
|
|
finish();
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void failure(String error) {
|
|
|
|
serverAction.setCurrentUploadState(UploadAction.UploadState.ERROR);
|
2019-06-17 12:02:05 +02:00
|
|
|
serverAction.setError(error);
|
|
|
|
|
2019-06-17 09:49:09 +02:00
|
|
|
uploadInformation.setCurrentSyncStatus(UploadInformation.SyncStatus.FAILURE);
|
|
|
|
preferenceManager.addUploadInformation(uploadInformation);
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
private int organisationExists() throws IOException {
|
|
|
|
final UUID uuidToCheck = UUID.fromString(uploadInformation.getRemote().organisation.uuid);
|
|
|
|
|
|
|
|
Organisation[] organisations = restClient.getAllOrganisations();
|
|
|
|
|
|
|
|
if (organisations != null) {
|
|
|
|
for (Organisation organisation : organisations) {
|
|
|
|
if (uuidToCheck.compareTo(UUID.fromString(organisation.uuid)) == 0) {
|
|
|
|
return organisation.id;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return -1;
|
|
|
|
}
|
|
|
|
|
|
|
|
private int userExists() {
|
|
|
|
|
|
|
|
return -1;
|
|
|
|
}
|
|
|
|
}
|