use of co.krypt.krypton.silo.Silo in project krypton-android by kryptco.
the class Policy method onAction.
public static void onAction(final Context context, final String requestID, final String action) {
Log.i(TAG, action + " requestID " + requestID);
final Pair<Pairing, Request> pairingAndRequest;
// Lock manually to prevent deadlock from Silo
synchronized (Policy.class) {
pairingAndRequest = pendingRequestCache.remove(requestID);
}
if (pairingAndRequest == null) {
Log.e(TAG, "requestID " + requestID + " not pending");
return;
}
Silo silo = Silo.shared(context);
OpenDatabaseHelper db = silo.pairings().dbHelper;
Notifications.clearRequest(context, pairingAndRequest.second);
switch(action) {
case APPROVE_ONCE:
try {
silo.respondToRequest(pairingAndRequest.first, pairingAndRequest.second, true);
new Analytics(context).postEvent(pairingAndRequest.second.analyticsCategory(), "background approve", "once", null, false);
} catch (Exception e) {
e.printStackTrace();
}
break;
case APPROVE_ALL_TEMPORARILY:
try {
pairingAndRequest.second.body.visit(new RequestBody.Visitor<Void, Unrecoverable>() {
@Override
public Void visit(MeRequest meRequest) throws Unrecoverable {
return null;
}
@Override
public Void visit(SignRequest signRequest) throws Unrecoverable {
try {
Approval.approveSSHAnyHost(db, pairingAndRequest.first.uuid);
} catch (IOException | SQLException e) {
throw new Unrecoverable(e);
}
return null;
}
@Override
public Void visit(GitSignRequest gitSignRequest) throws Unrecoverable {
gitSignRequest.body.visit(new GitSignRequestBody.Visitor<Void, Unrecoverable>() {
@Override
public Void visit(CommitInfo commit) throws Unrecoverable {
try {
Approval.approveGitCommitSignatures(db, pairingAndRequest.first.uuid);
} catch (IOException | SQLException e) {
throw new Unrecoverable(e);
}
return null;
}
@Override
public Void visit(TagInfo tag) throws Unrecoverable {
try {
Approval.approveGitTagSignatures(db, pairingAndRequest.first.uuid);
} catch (IOException | SQLException e) {
throw new Unrecoverable(e);
}
return null;
}
});
return null;
}
@Override
public Void visit(UnpairRequest unpairRequest) throws Unrecoverable {
return null;
}
@Override
public Void visit(HostsRequest hostsRequest) throws Unrecoverable {
return null;
}
@Override
public Void visit(ReadTeamRequest readTeamRequest) throws Unrecoverable {
try {
Approval.approveReadTeamData(db, pairingAndRequest.first.uuid);
} catch (IOException | SQLException e) {
throw new Unrecoverable(e);
}
return null;
}
@Override
public Void visit(LogDecryptionRequest logDecryptionRequest) throws Unrecoverable {
try {
Approval.approveReadTeamData(db, pairingAndRequest.first.uuid);
} catch (IOException | SQLException e) {
throw new Unrecoverable(e);
}
return null;
}
@Override
public Void visit(TeamOperationRequest teamOperationRequest) throws Unrecoverable {
return null;
}
});
silo.respondToRequest(pairingAndRequest.first, pairingAndRequest.second, true);
new Analytics(context).postEvent(pairingAndRequest.second.analyticsCategory(), "background approve", "time", (int) temporaryApprovalSeconds(context, pairingAndRequest.second), false);
} catch (Exception e) {
e.printStackTrace();
}
break;
case APPROVE_THIS_TEMPORARILY:
try {
pairingAndRequest.second.body.visit(new RequestBody.Visitor<Void, Unrecoverable>() {
@Override
public Void visit(MeRequest meRequest) throws Unrecoverable {
return null;
}
@Override
public Void visit(SignRequest signRequest) throws Unrecoverable {
String user = signRequest.user();
if (signRequest.hostNameVerified && signRequest.hostAuth.hostNames.length > 0) {
try {
Approval.approveSSHUserHost(db, pairingAndRequest.first.uuid, user, signRequest.hostAuth.hostNames[0]);
} catch (IOException | SQLException e) {
throw new Unrecoverable(e);
}
}
return null;
}
@Override
public Void visit(GitSignRequest gitSignRequest) throws Unrecoverable {
return null;
}
@Override
public Void visit(UnpairRequest unpairRequest) throws Unrecoverable {
return null;
}
@Override
public Void visit(HostsRequest hostsRequest) throws Unrecoverable {
return null;
}
@Override
public Void visit(ReadTeamRequest readTeamRequest) throws Unrecoverable {
return null;
}
@Override
public Void visit(LogDecryptionRequest logDecryptionRequest) throws Unrecoverable {
return null;
}
@Override
public Void visit(TeamOperationRequest teamOperationRequest) throws Unrecoverable {
return null;
}
});
silo.respondToRequest(pairingAndRequest.first, pairingAndRequest.second, true);
new Analytics(context).postEvent(pairingAndRequest.second.analyticsCategory(), "background approve this", "time", (int) temporaryApprovalSeconds(context, pairingAndRequest.second), false);
} catch (Exception e) {
e.printStackTrace();
}
case REJECT:
try {
silo.respondToRequest(pairingAndRequest.first, pairingAndRequest.second, false);
new Analytics(context).postEvent(pairingAndRequest.second.analyticsCategory(), "background reject", null, null, false);
} catch (Unrecoverable e) {
e.printStackTrace();
}
break;
}
}
use of co.krypt.krypton.silo.Silo in project krypton-android by kryptco.
the class PairFragment method onPairingFailure.
private void onPairingFailure(final Pairing pairing) {
Silo silo = Silo.shared(getContext());
silo.unpair(pairing, false);
pendingPairingQR.set(null);
new Analytics(silo.context).postEvent("device", "pair", "failed", null, false);
pairingStatusText.setText("Failed to pair with\n" + pairing.workstationName);
pairingStatusView.setVisibility(View.VISIBLE);
pairingStatusView.postDelayed(new Runnable() {
@Override
public void run() {
pairingStatusView.setVisibility(View.INVISIBLE);
}
}, 2000);
}
Aggregations