verifyPin method
Verifies a PIN for authentication purposes.
Not used by the auth manager itself, but available for host app use (e.g. a custom PIN login flow).
Implementation
Future<VerifyPinResult> verifyPin({
required String userId,
required String pin,
required String businessId,
String population = 'External',
}) async {
final trace = await monitoringService.createTrace(name: 'verifyPin', operation: 'PIN_VERIFY');
try {
_ensureInitialised();
final response = await client.post(
url: '$_iamServiceUrl/iam/api/v1/iam/pin/verify',
requestData: {
'userId': userId,
'pin': pin,
'businessId': businessId,
'population': population,
},
user: _user,
);
if (response?.statusCode == 200 && response?.data != null) {
final data = response!.data as Map<String, dynamic>;
return VerifyPinResult(
verified: data['verified'] ?? false,
hasPin: data['hasPin'] ?? false,
locked: data['locked'] ?? false,
remainingAttempts: data['remainingAttempts'] ?? 0,
);
}
if (response?.statusCode == 403 && response?.data != null) {
final data = response!.data as Map<String, dynamic>;
return VerifyPinResult(
verified: data['verified'] ?? false,
hasPin: data['hasPin'] ?? false,
locked: data['locked'] ?? false,
remainingAttempts: data['remainingAttempts'] ?? 0,
);
}
return VerifyPinResult(
verified: false,
hasPin: false,
locked: false,
remainingAttempts: 0,
);
} on AuthException catch (e) {
logger.error(this, 'AuthException verifying PIN: ${e.message}', error: e);
return VerifyPinResult(
verified: false,
hasPin: false,
locked: false,
remainingAttempts: 0,
);
} catch (e, s) {
logger.error(this, 'Error verifying PIN', error: e, stackTrace: s);
return VerifyPinResult(
verified: false,
hasPin: false,
locked: false,
remainingAttempts: 0,
);
} finally {
trace.stop();
}
}