| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -477,81 +477,64 @@ void CheckPublicKey(const FunctionCallbackInfo<Value>& args) { | |||
| 477 | 477 | cert->view().checkPublicKey(key->Data().GetAsymmetricKey())); | |
| 478 | 478 | } | |
| 479 | 479 | ||
| 480 | - void CheckHost(const FunctionCallbackInfo<Value>& args) { | ||
| 480 | + template <typename F> | ||
| 481 | + void CheckX509Subject(const FunctionCallbackInfo<Value>& args, F check) { | ||
| 481 | 482 | Environment* env = Environment::GetCurrent(args); | |
| 482 | 483 | X509Certificate* cert; | |
| 483 | 484 | ASSIGN_OR_RETURN_UNWRAP(&cert, args.This()); | |
| 484 | 485 | ||
| 485 | - CHECK(args[0]->IsString()); // name | ||
| 486 | + CHECK(args[0]->IsString()); // subject | ||
| 486 | 487 | CHECK(args[1]->IsUint32()); // flags | |
| 487 | 488 | ||
| 488 | - Utf8Value name(env->isolate(), args[0]); | ||
| 489 | + Utf8Value subject(env->isolate(), args[0]); | ||
| 489 | 490 | uint32_t flags = args[1].As<Uint32>()->Value(); | |
| 490 | - DataPointer peername; | ||
| 491 | 491 | ||
| 492 | - switch (cert->view().checkHost(name.ToStringView(), flags, &peername)) { | ||
| 493 | - case X509View::CheckMatch::MATCH: { // Match! | ||
| 492 | + DataPointer matched_subject; | ||
| 493 | + X509View view = cert->view(); | ||
| 494 | + auto result = check(view, subject.ToStringView(), flags, &matched_subject); | ||
| 495 | + switch (result) { | ||
| 496 | + case X509View::CheckMatch::MATCH: { | ||
| 494 | 497 | Local<Value> ret = args[0]; | |
| 495 | - if (peername) { | ||
| 498 | + if (matched_subject) { | ||
| 496 | 499 | ret = OneByteString(env->isolate(), | |
| 497 | - static_cast<const char*>(peername.get()), | ||
| 498 | - peername.size()); | ||
| 500 | + matched_subject.get<const char>(), | ||
| 501 | + matched_subject.size()); | ||
| 499 | 502 | } | |
| 500 | 503 | return args.GetReturnValue().Set(ret); | |
| 501 | 504 | } | |
| 502 | - case X509View::CheckMatch::NO_MATCH: // No Match! | ||
| 503 | - return; // No return value is set | ||
| 504 | - case X509View::CheckMatch::INVALID_NAME: // Error! | ||
| 505 | + case X509View::CheckMatch::NO_MATCH: | ||
| 506 | + break; // No return value is set. | ||
| 507 | + case X509View::CheckMatch::INVALID_NAME: | ||
| 505 | 508 | return THROW_ERR_INVALID_ARG_VALUE(env, "Invalid name"); | |
| 506 | - default: // Error! | ||
| 509 | + default: | ||
| 507 | 510 | return THROW_ERR_CRYPTO_OPERATION_FAILED(env); | |
| 508 | 511 | } | |
| 509 | 512 | } | |
| 510 | 513 | ||
| 511 | - void CheckEmail(const FunctionCallbackInfo<Value>& args) { | ||
| 512 | - Environment* env = Environment::GetCurrent(args); | ||
| 513 | - X509Certificate* cert; | ||
| 514 | - ASSIGN_OR_RETURN_UNWRAP(&cert, args.This()); | ||
| 515 | - | ||
| 516 | - CHECK(args[0]->IsString()); // name | ||
| 517 | - CHECK(args[1]->IsUint32()); // flags | ||
| 518 | - | ||
| 519 | - Utf8Value name(env->isolate(), args[0]); | ||
| 520 | - uint32_t flags = args[1].As<Uint32>()->Value(); | ||
| 514 | + void CheckHost(const FunctionCallbackInfo<Value>& args) { | ||
| 515 | + CheckX509Subject( | ||
| 516 | + args, | ||
| 517 | + [](X509View& cert, | ||
| 518 | + std::string_view subject, | ||
| 519 | + uint32_t flags, | ||
| 520 | + DataPointer* match) { return cert.checkHost(subject, flags, match); }); | ||
| 521 | + } | ||
| 521 | 522 | ||
| 522 | - switch (cert->view().checkEmail(name.ToStringView(), flags)) { | ||
| 523 | - case X509View::CheckMatch::MATCH: // Match! | ||
| 524 | - return args.GetReturnValue().Set(args[0]); | ||
| 525 | - case X509View::CheckMatch::NO_MATCH: // No Match! | ||
| 526 | - return; // No return value is set | ||
| 527 | - case X509View::CheckMatch::INVALID_NAME: // Error! | ||
| 528 | - return THROW_ERR_INVALID_ARG_VALUE(env, "Invalid name"); | ||
| 529 | - default: // Error! | ||
| 530 | - return THROW_ERR_CRYPTO_OPERATION_FAILED(env); | ||
| 531 | - } | ||
| 523 | + void CheckEmail(const FunctionCallbackInfo<Value>& args) { | ||
| 524 | + CheckX509Subject( | ||
| 525 | + args, | ||
| 526 | + [](X509View& cert, | ||
| 527 | + std::string_view subject, | ||
| 528 | + uint32_t flags, | ||
| 529 | + DataPointer*) { return cert.checkEmail(subject, flags); }); | ||
| 532 | 530 | } | |
| 533 | 531 | ||
| 534 | 532 | void CheckIP(const FunctionCallbackInfo<Value>& args) { | |
| 535 | - Environment* env = Environment::GetCurrent(args); | ||
| 536 | - X509Certificate* cert; | ||
| 537 | - ASSIGN_OR_RETURN_UNWRAP(&cert, args.This()); | ||
| 538 | - | ||
| 539 | - CHECK(args[0]->IsString()); // IP | ||
| 540 | - CHECK(args[1]->IsUint32()); // flags | ||
| 541 | - | ||
| 542 | - Utf8Value name(env->isolate(), args[0]); | ||
| 543 | - uint32_t flags = args[1].As<Uint32>()->Value(); | ||
| 544 | - | ||
| 545 | - switch (cert->view().checkIp(name.ToStringView(), flags)) { | ||
| 546 | - case X509View::CheckMatch::MATCH: // Match! | ||
| 547 | - return args.GetReturnValue().Set(args[0]); | ||
| 548 | - case X509View::CheckMatch::NO_MATCH: // No Match! | ||
| 549 | - return; // No return value is set | ||
| 550 | - case X509View::CheckMatch::INVALID_NAME: // Error! | ||
| 551 | - return THROW_ERR_INVALID_ARG_VALUE(env, "Invalid IP"); | ||
| 552 | - default: // Error! | ||
| 553 | - return THROW_ERR_CRYPTO_OPERATION_FAILED(env); | ||
| 554 | - } | ||
| 533 | + CheckX509Subject(args, | ||
| 534 | + [](X509View& cert, | ||
| 535 | + std::string_view subject, | ||
| 536 | + uint32_t flags, | ||
| 537 | + DataPointer*) { return cert.checkIp(subject, flags); }); | ||
| 555 | 538 | } | |
| 556 | 539 | ||
| 557 | 540 | void GetIssuerCert(const FunctionCallbackInfo<Value>& args) { | |
| Back | FazBrowse Home | New Git URL |
0 commit comments