validateToken method
Implementation
Result<Principal> validateToken(String accessToken) {
JWT decoded;
try {
decoded = JWT.verify(
accessToken,
publicVerifyKey,
);
} on JWTExpiredException {
return Result.error("Token has expired");
} on JWTException catch (e) {
// invalid signature / malformed token / etc
print("JWT verification error: $e");
return Result.error("Invalid token");
} catch (e) {
print("Unexpected error during JWT verification: $e");
return Result.error("Invalid token");
}
// Extract claims
final payload = decoded.payload; // Map<String, dynamic>
final issuedFor = payload["issued_for"]?.toString().trim();
if (issuedFor == null || issuedFor.isEmpty) {
return Result.error("Invalid token: missing issuedFor claim");
}
final permission = int.tryParse(payload["permission"]?.toString() ?? "");
if (permission == null) {
return Result.error(
"Invalid token: missing permission claim or not an integer (single digit POSIX permission)");
}
final principal = Principal._fromNumberPermission(issuedFor, permission);
return Result.value(principal);
}