1*e7b1675dSTing-Kang Chang // Copyright 2021 Google LLC 2*e7b1675dSTing-Kang Chang // 3*e7b1675dSTing-Kang Chang // Licensed under the Apache License, Version 2.0 (the "License"); 4*e7b1675dSTing-Kang Chang // you may not use this file except in compliance with the License. 5*e7b1675dSTing-Kang Chang // You may obtain a copy of the License at 6*e7b1675dSTing-Kang Chang // 7*e7b1675dSTing-Kang Chang // http://www.apache.org/licenses/LICENSE-2.0 8*e7b1675dSTing-Kang Chang // 9*e7b1675dSTing-Kang Chang // Unless required by applicable law or agreed to in writing, software 10*e7b1675dSTing-Kang Chang // distributed under the License is distributed on an "AS IS" BASIS, 11*e7b1675dSTing-Kang Chang // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12*e7b1675dSTing-Kang Chang // See the License for the specific language governing permissions and 13*e7b1675dSTing-Kang Chang // limitations under the License. 14*e7b1675dSTing-Kang Chang // 15*e7b1675dSTing-Kang Chang /////////////////////////////////////////////////////////////////////////////// 16*e7b1675dSTing-Kang Chang 17*e7b1675dSTing-Kang Chang #include "tink/jwt/verified_jwt.h" 18*e7b1675dSTing-Kang Chang 19*e7b1675dSTing-Kang Chang #include <string> 20*e7b1675dSTing-Kang Chang #include <vector> 21*e7b1675dSTing-Kang Chang 22*e7b1675dSTing-Kang Chang #include "absl/strings/numbers.h" 23*e7b1675dSTing-Kang Chang #include "absl/strings/str_format.h" 24*e7b1675dSTing-Kang Chang #include "absl/strings/substitute.h" 25*e7b1675dSTing-Kang Chang #include "tink/jwt/internal/json_util.h" 26*e7b1675dSTing-Kang Chang 27*e7b1675dSTing-Kang Chang namespace crypto { 28*e7b1675dSTing-Kang Chang namespace tink { 29*e7b1675dSTing-Kang Chang 30*e7b1675dSTing-Kang Chang VerifiedJwt::VerifiedJwt() = default; 31*e7b1675dSTing-Kang Chang VerifiedJwt(const RawJwt & raw_jwt)32*e7b1675dSTing-Kang ChangVerifiedJwt::VerifiedJwt(const RawJwt& raw_jwt) { 33*e7b1675dSTing-Kang Chang raw_jwt_ = raw_jwt; 34*e7b1675dSTing-Kang Chang } 35*e7b1675dSTing-Kang Chang HasTypeHeader() const36*e7b1675dSTing-Kang Changbool VerifiedJwt::HasTypeHeader() const { return raw_jwt_.HasTypeHeader(); } 37*e7b1675dSTing-Kang Chang GetTypeHeader() const38*e7b1675dSTing-Kang Changutil::StatusOr<std::string> VerifiedJwt::GetTypeHeader() const { 39*e7b1675dSTing-Kang Chang return raw_jwt_.GetTypeHeader(); 40*e7b1675dSTing-Kang Chang } 41*e7b1675dSTing-Kang Chang HasIssuer() const42*e7b1675dSTing-Kang Changbool VerifiedJwt::HasIssuer() const { 43*e7b1675dSTing-Kang Chang return raw_jwt_.HasIssuer(); 44*e7b1675dSTing-Kang Chang } 45*e7b1675dSTing-Kang Chang GetIssuer() const46*e7b1675dSTing-Kang Changutil::StatusOr<std::string> VerifiedJwt::GetIssuer() const { 47*e7b1675dSTing-Kang Chang return raw_jwt_.GetIssuer(); 48*e7b1675dSTing-Kang Chang } 49*e7b1675dSTing-Kang Chang HasSubject() const50*e7b1675dSTing-Kang Changbool VerifiedJwt::HasSubject() const { 51*e7b1675dSTing-Kang Chang return raw_jwt_.HasSubject(); 52*e7b1675dSTing-Kang Chang } 53*e7b1675dSTing-Kang Chang GetSubject() const54*e7b1675dSTing-Kang Changutil::StatusOr<std::string> VerifiedJwt::GetSubject() const { 55*e7b1675dSTing-Kang Chang return raw_jwt_.GetSubject(); 56*e7b1675dSTing-Kang Chang } 57*e7b1675dSTing-Kang Chang HasAudiences() const58*e7b1675dSTing-Kang Changbool VerifiedJwt::HasAudiences() const { 59*e7b1675dSTing-Kang Chang return raw_jwt_.HasAudiences(); 60*e7b1675dSTing-Kang Chang } 61*e7b1675dSTing-Kang Chang GetAudiences() const62*e7b1675dSTing-Kang Changutil::StatusOr<std::vector<std::string>> VerifiedJwt::GetAudiences() const { 63*e7b1675dSTing-Kang Chang return raw_jwt_.GetAudiences(); 64*e7b1675dSTing-Kang Chang } 65*e7b1675dSTing-Kang Chang HasJwtId() const66*e7b1675dSTing-Kang Changbool VerifiedJwt::HasJwtId() const { 67*e7b1675dSTing-Kang Chang return raw_jwt_.HasJwtId(); 68*e7b1675dSTing-Kang Chang } 69*e7b1675dSTing-Kang Chang GetJwtId() const70*e7b1675dSTing-Kang Changutil::StatusOr<std::string> VerifiedJwt::GetJwtId() const { 71*e7b1675dSTing-Kang Chang return raw_jwt_.GetJwtId(); 72*e7b1675dSTing-Kang Chang } 73*e7b1675dSTing-Kang Chang HasExpiration() const74*e7b1675dSTing-Kang Changbool VerifiedJwt::HasExpiration() const { 75*e7b1675dSTing-Kang Chang return raw_jwt_.HasExpiration(); 76*e7b1675dSTing-Kang Chang } 77*e7b1675dSTing-Kang Chang GetExpiration() const78*e7b1675dSTing-Kang Changutil::StatusOr<absl::Time> VerifiedJwt::GetExpiration() const { 79*e7b1675dSTing-Kang Chang return raw_jwt_.GetExpiration(); 80*e7b1675dSTing-Kang Chang } 81*e7b1675dSTing-Kang Chang HasNotBefore() const82*e7b1675dSTing-Kang Changbool VerifiedJwt::HasNotBefore() const { 83*e7b1675dSTing-Kang Chang return raw_jwt_.HasNotBefore(); 84*e7b1675dSTing-Kang Chang } 85*e7b1675dSTing-Kang Chang GetNotBefore() const86*e7b1675dSTing-Kang Changutil::StatusOr<absl::Time> VerifiedJwt::GetNotBefore() const { 87*e7b1675dSTing-Kang Chang return raw_jwt_.GetNotBefore(); 88*e7b1675dSTing-Kang Chang } 89*e7b1675dSTing-Kang Chang HasIssuedAt() const90*e7b1675dSTing-Kang Changbool VerifiedJwt::HasIssuedAt() const { 91*e7b1675dSTing-Kang Chang return raw_jwt_.HasIssuedAt(); 92*e7b1675dSTing-Kang Chang } 93*e7b1675dSTing-Kang Chang GetIssuedAt() const94*e7b1675dSTing-Kang Changutil::StatusOr<absl::Time> VerifiedJwt::GetIssuedAt() const { 95*e7b1675dSTing-Kang Chang return raw_jwt_.GetIssuedAt(); 96*e7b1675dSTing-Kang Chang } 97*e7b1675dSTing-Kang Chang IsNullClaim(absl::string_view name) const98*e7b1675dSTing-Kang Changbool VerifiedJwt::IsNullClaim(absl::string_view name) const { 99*e7b1675dSTing-Kang Chang return raw_jwt_.IsNullClaim(name); 100*e7b1675dSTing-Kang Chang } 101*e7b1675dSTing-Kang Chang HasBooleanClaim(absl::string_view name) const102*e7b1675dSTing-Kang Changbool VerifiedJwt::HasBooleanClaim(absl::string_view name) const { 103*e7b1675dSTing-Kang Chang return raw_jwt_.HasBooleanClaim(name); 104*e7b1675dSTing-Kang Chang } 105*e7b1675dSTing-Kang Chang GetBooleanClaim(absl::string_view name) const106*e7b1675dSTing-Kang Changutil::StatusOr<bool> VerifiedJwt::GetBooleanClaim( 107*e7b1675dSTing-Kang Chang absl::string_view name) const { 108*e7b1675dSTing-Kang Chang return raw_jwt_.GetBooleanClaim(name); 109*e7b1675dSTing-Kang Chang } 110*e7b1675dSTing-Kang Chang HasStringClaim(absl::string_view name) const111*e7b1675dSTing-Kang Changbool VerifiedJwt::HasStringClaim(absl::string_view name) const { 112*e7b1675dSTing-Kang Chang return raw_jwt_.HasStringClaim(name); 113*e7b1675dSTing-Kang Chang } 114*e7b1675dSTing-Kang Chang GetStringClaim(absl::string_view name) const115*e7b1675dSTing-Kang Changutil::StatusOr<std::string> VerifiedJwt::GetStringClaim( 116*e7b1675dSTing-Kang Chang absl::string_view name) const { 117*e7b1675dSTing-Kang Chang return raw_jwt_.GetStringClaim(name); 118*e7b1675dSTing-Kang Chang } 119*e7b1675dSTing-Kang Chang HasNumberClaim(absl::string_view name) const120*e7b1675dSTing-Kang Changbool VerifiedJwt::HasNumberClaim(absl::string_view name) const { 121*e7b1675dSTing-Kang Chang return raw_jwt_.HasNumberClaim(name); 122*e7b1675dSTing-Kang Chang } 123*e7b1675dSTing-Kang Chang GetNumberClaim(absl::string_view name) const124*e7b1675dSTing-Kang Changutil::StatusOr<double> VerifiedJwt::GetNumberClaim( 125*e7b1675dSTing-Kang Chang absl::string_view name) const { 126*e7b1675dSTing-Kang Chang return raw_jwt_.GetNumberClaim(name); 127*e7b1675dSTing-Kang Chang } 128*e7b1675dSTing-Kang Chang HasJsonObjectClaim(absl::string_view name) const129*e7b1675dSTing-Kang Changbool VerifiedJwt::HasJsonObjectClaim(absl::string_view name) const { 130*e7b1675dSTing-Kang Chang return raw_jwt_.HasJsonObjectClaim(name); 131*e7b1675dSTing-Kang Chang } 132*e7b1675dSTing-Kang Chang GetJsonObjectClaim(absl::string_view name) const133*e7b1675dSTing-Kang Changutil::StatusOr<std::string> VerifiedJwt::GetJsonObjectClaim( 134*e7b1675dSTing-Kang Chang absl::string_view name) const { 135*e7b1675dSTing-Kang Chang return raw_jwt_.GetJsonObjectClaim(name); 136*e7b1675dSTing-Kang Chang } 137*e7b1675dSTing-Kang Chang HasJsonArrayClaim(absl::string_view name) const138*e7b1675dSTing-Kang Changbool VerifiedJwt::HasJsonArrayClaim(absl::string_view name) const { 139*e7b1675dSTing-Kang Chang return raw_jwt_.HasJsonArrayClaim(name); 140*e7b1675dSTing-Kang Chang } 141*e7b1675dSTing-Kang Chang GetJsonArrayClaim(absl::string_view name) const142*e7b1675dSTing-Kang Changutil::StatusOr<std::string> VerifiedJwt::GetJsonArrayClaim( 143*e7b1675dSTing-Kang Chang absl::string_view name) const { 144*e7b1675dSTing-Kang Chang return raw_jwt_.GetJsonArrayClaim(name); 145*e7b1675dSTing-Kang Chang } 146*e7b1675dSTing-Kang Chang CustomClaimNames() const147*e7b1675dSTing-Kang Changstd::vector<std::string> VerifiedJwt::CustomClaimNames() const { 148*e7b1675dSTing-Kang Chang return raw_jwt_.CustomClaimNames(); 149*e7b1675dSTing-Kang Chang } 150*e7b1675dSTing-Kang Chang GetJsonPayload()151*e7b1675dSTing-Kang Changutil::StatusOr<std::string> VerifiedJwt::GetJsonPayload() { 152*e7b1675dSTing-Kang Chang return raw_jwt_.GetJsonPayload(); 153*e7b1675dSTing-Kang Chang } 154*e7b1675dSTing-Kang Chang 155*e7b1675dSTing-Kang Chang } // namespace tink 156*e7b1675dSTing-Kang Chang } // namespace crypto 157