Added exception handling and test for key/secret not present

This commit is contained in:
Arun M 2017-12-26 20:35:51 +05:30
parent 99f3c1db86
commit a5e18cc4f4
4 changed files with 42 additions and 12 deletions

View file

@ -58,17 +58,31 @@ public:
/**
*/
class SignatureFormatError final : public std::runtime_error
class SignatureFormatError final : public DecodeError
{
public:
/**
*/
SignatureFormatError(std::string msg)
: std::runtime_error(std::move(msg))
: DecodeError(std::move(msg))
{
}
};
/**
*/
class KeyNotPresentError final : public DecodeError
{
public:
/**
*/
KeyNotPresentError(std::string msg)
: DecodeError(std::move(msg))
{
}
};
/**
*/
class VerificationError : public std::runtime_error

View file

@ -581,15 +581,6 @@ jwt_object decode(const string_view enc_str,
ec = DecodeErrc::SignatureFormatError;
return obj;
}
if (!dparams.has_secret) {
ec = DecodeErrc::KeyNotPresent;
return obj;
}
} else {
if (dparams.has_secret) {
ec = DecodeErrc::KeyNotRequiredForNoneAlg;
}
}
//throws decode error
@ -607,7 +598,12 @@ jwt_object decode(const string_view enc_str,
}
//Verify the signature only if some algorithm was used
if (obj.header().algo() != algorithm::NONE) {
if (obj.header().algo() != algorithm::NONE)
{
if (!dparams.has_secret) {
ec = DecodeErrc::KeyNotPresent;
return obj;
}
jwt_signature jsign{dparams.secret};
// Length of the encoded header and payload only.
@ -698,6 +694,10 @@ void jwt_throw_exception(const std::error_code& ec)
{
throw SignatureFormatError(ec.message());
}
case DecodeErrc::KeyNotPresent:
{
throw KeyNotPresentError(ec.message());
}
case DecodeErrc::KeyNotRequiredForNoneAlg:
{
// Not an error. Just to be ignored.