@ -166,6 +166,13 @@ static const char claims_without_time_constraint[] =
" \" jti \" : \" jwtuniqueid \" , "
" \" foo \" : \" bar \" } " ;
static const char claims_with_bad_subject [ ] =
" { \" aud \" : \" https://foo.com \" , "
" \" iss \" : \" evil@blah.foo.com \" , "
" \" sub \" : \" juju@blah.foo.com \" , "
" \" jti \" : \" jwtuniqueid \" , "
" \" foo \" : \" bar \" } " ;
static const char invalid_claims [ ] =
" { \" aud \" : \" https://foo.com \" , "
" \" iss \" : 46, " /* Issuer cannot be a number. */
@ -179,6 +186,38 @@ typedef struct {
const char * expected_subject ;
} verifier_test_config ;
static void test_jwt_issuer_email_domain ( void ) {
const char * d = grpc_jwt_issuer_email_domain ( " https://foo.com " ) ;
GPR_ASSERT ( d = = NULL ) ;
d = grpc_jwt_issuer_email_domain ( " foo.com " ) ;
GPR_ASSERT ( d = = NULL ) ;
d = grpc_jwt_issuer_email_domain ( " " ) ;
GPR_ASSERT ( d = = NULL ) ;
d = grpc_jwt_issuer_email_domain ( " @ " ) ;
GPR_ASSERT ( d = = NULL ) ;
d = grpc_jwt_issuer_email_domain ( " bar@foo " ) ;
GPR_ASSERT ( strcmp ( d , " foo " ) = = 0 ) ;
d = grpc_jwt_issuer_email_domain ( " bar@foo.com " ) ;
GPR_ASSERT ( strcmp ( d , " foo.com " ) = = 0 ) ;
d = grpc_jwt_issuer_email_domain ( " bar@blah.foo.com " ) ;
GPR_ASSERT ( strcmp ( d , " foo.com " ) = = 0 ) ;
d = grpc_jwt_issuer_email_domain ( " bar.blah@blah.foo.com " ) ;
GPR_ASSERT ( strcmp ( d , " foo.com " ) = = 0 ) ;
d = grpc_jwt_issuer_email_domain ( " bar.blah@baz.blah.foo.com " ) ;
GPR_ASSERT ( strcmp ( d , " foo.com " ) = = 0 ) ;
/* This is not a very good parser but make sure we do not crash on these weird
inputs . */
d = grpc_jwt_issuer_email_domain ( " @foo " ) ;
GPR_ASSERT ( strcmp ( d , " foo " ) = = 0 ) ;
d = grpc_jwt_issuer_email_domain ( " bar@. " ) ;
GPR_ASSERT ( d ! = NULL ) ;
d = grpc_jwt_issuer_email_domain ( " bar@.. " ) ;
GPR_ASSERT ( d ! = NULL ) ;
d = grpc_jwt_issuer_email_domain ( " bar@... " ) ;
GPR_ASSERT ( d ! = NULL ) ;
}
static void test_claims_success ( void ) {
grpc_jwt_claims * claims ;
grpc_slice s = grpc_slice_from_copied_string ( claims_without_time_constraint ) ;
@ -242,6 +281,19 @@ static void test_bad_audience_claims_failure(void) {
grpc_jwt_claims_destroy ( claims ) ;
}
static void test_bad_subject_claims_failure ( void ) {
grpc_jwt_claims * claims ;
grpc_slice s = grpc_slice_from_copied_string ( claims_with_bad_subject ) ;
grpc_json * json = grpc_json_parse_string_with_len (
( char * ) GRPC_SLICE_START_PTR ( s ) , GRPC_SLICE_LENGTH ( s ) ) ;
GPR_ASSERT ( json ! = NULL ) ;
claims = grpc_jwt_claims_from_json ( json , s ) ;
GPR_ASSERT ( claims ! = NULL ) ;
GPR_ASSERT ( grpc_jwt_claims_check ( claims , " https://foo.com " ) = =
GRPC_JWT_VERIFIER_BAD_SUBJECT ) ;
grpc_jwt_claims_destroy ( claims ) ;
}
static char * json_key_str ( const char * last_part ) {
size_t result_len = strlen ( json_key_str_part1 ) + strlen ( json_key_str_part2 ) +
strlen ( last_part ) ;
@ -563,10 +615,12 @@ static void test_jwt_verifier_bad_format(void) {
int main ( int argc , char * * argv ) {
grpc_test_init ( argc , argv ) ;
grpc_init ( ) ;
test_jwt_issuer_email_domain ( ) ;
test_claims_success ( ) ;
test_expired_claims_failure ( ) ;
test_invalid_claims_failure ( ) ;
test_bad_audience_claims_failure ( ) ;
test_bad_subject_claims_failure ( ) ;
test_jwt_verifier_google_email_issuer_success ( ) ;
test_jwt_verifier_custom_email_issuer_success ( ) ;
test_jwt_verifier_url_issuer_success ( ) ;