Add LoginToken helper class and basic validation

master
Garrett Mills 3 years ago
parent d73c79f083
commit 398903588e
Signed by: garrettmills
GPG Key ID: D2BF5FBA8298F246

@ -3,7 +3,6 @@ package dev.garrettmills.starship.hyperlink;
import android.content.SharedPreferences;
public class Hyperlink {
public static final int PERMISSION_REQUEST_CAMERA = 0;
public static final String SHARED_PREFERENCES_NAME = "dev.garrettmills.starship.hyperlink.main";
public static final String SERVER_ADDR = "dev.garrettmills.starship.hyperlink.server";
public static final String SERVER_TOKEN = "dev.garrettmills.starship.hyperlink.token.server";
@ -11,6 +10,7 @@ public class Hyperlink {
public static final String EXTRA_LOGIN_TOKEN = "dev.garrettmills.starship.hyperlink.extra.login_token";
public static final int REQUEST_LOGIN_TOKEN = 180;
public static final int REQUEST_PERMISSION_CAMERA = 181;
public static SharedPreferences preferences;
}

@ -25,6 +25,8 @@ import java.util.concurrent.ExecutionException;
import dev.garrettmills.starship.hyperlink.scanner.QRCodeImageAnalyzer;
import dev.garrettmills.starship.hyperlink.scanner.QRCodeListener;
import dev.garrettmills.starship.hyperlink.util.InvalidLoginTokenException;
import dev.garrettmills.starship.hyperlink.util.LoginToken;
public class LoginTokenScannerActivity extends AppCompatActivity implements QRCodeListener {
private PreviewView previewView;
@ -45,21 +47,22 @@ public class LoginTokenScannerActivity extends AppCompatActivity implements QRCo
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED) {
startCamera();
} else {
if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.CAMERA)) {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA}, Hyperlink.PERMISSION_REQUEST_CAMERA);
} else {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA}, Hyperlink.PERMISSION_REQUEST_CAMERA);
}
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA}, Hyperlink.REQUEST_PERMISSION_CAMERA);
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
if (requestCode == Hyperlink.PERMISSION_REQUEST_CAMERA) {
if (requestCode == Hyperlink.REQUEST_PERMISSION_CAMERA) {
if (grantResults.length == 1 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
startCamera();
} else {
Toast.makeText(this, "Camera Permission Denied", Toast.LENGTH_SHORT).show();
if ( BuildConfig.DEBUG ) {
Toast.makeText(this, "Camera permission denied", Toast.LENGTH_SHORT).show();
}
// If we denied, go back up to the main activity, w/o any login token
finish();
}
}
}
@ -70,7 +73,11 @@ public class LoginTokenScannerActivity extends AppCompatActivity implements QRCo
ProcessCameraProvider cameraProvider = cameraProviderFuture.get();
bindCameraPreview(cameraProvider);
} catch (ExecutionException | InterruptedException e) {
Toast.makeText(this, "Error starting camera: " + e.getMessage(), Toast.LENGTH_LONG).show();
if ( BuildConfig.DEBUG ) {
Toast.makeText(this, "Error starting camera: " + e.getMessage(), Toast.LENGTH_LONG).show();
}
finish();
}
}, ContextCompat.getMainExecutor(this));
}
@ -109,6 +116,11 @@ public class LoginTokenScannerActivity extends AppCompatActivity implements QRCo
public void onQRCodeNotFound() {}
public boolean isValidLoginToken(String token) {
return true;
try {
new LoginToken(token);
return true;
} catch (InvalidLoginTokenException e) {
return false;
}
}
}

@ -27,7 +27,9 @@ public class MainActivity extends AppCompatActivity {
if ( resultCode == RESULT_OK && requestCode == Hyperlink.REQUEST_LOGIN_TOKEN ) {
if ( data.hasExtra(Hyperlink.EXTRA_LOGIN_TOKEN) ) {
Toast.makeText(getApplicationContext(), data.getExtras().getString(Hyperlink.EXTRA_LOGIN_TOKEN), Toast.LENGTH_SHORT).show();
if ( BuildConfig.DEBUG ) {
Toast.makeText(getApplicationContext(), data.getExtras().getString(Hyperlink.EXTRA_LOGIN_TOKEN), Toast.LENGTH_SHORT).show();
}
}
}
}

@ -0,0 +1,4 @@
package dev.garrettmills.starship.hyperlink.util;
public class InvalidLoginTokenException extends Exception {
}

@ -0,0 +1,24 @@
package dev.garrettmills.starship.hyperlink.util;
public class LoginToken {
private String _server;
private String _token;
public LoginToken(String token) throws InvalidLoginTokenException {
String[] parts = token.split("\\|");
if ( parts.length != 3 || !parts[0].equals("hyperlink")) {
throw new InvalidLoginTokenException();
}
this._server = parts[1];
this._token = parts[2];
}
public String getServer() {
return _server;
}
public String getToken() {
return _token;
}
}
Loading…
Cancel
Save