def raw_jwt_from_proto(proto_raw_jwt: testing_api_pb2.JwtToken) -> jwt.RawJwt: """Converts a proto JwtToken into a jwt.RawJwt.""" type_header = None if proto_raw_jwt.HasField('type_header'): type_header = proto_raw_jwt.type_header.value issuer = None if proto_raw_jwt.HasField('issuer'): issuer = proto_raw_jwt.issuer.value subject = None if proto_raw_jwt.HasField('subject'): subject = proto_raw_jwt.subject.value audiences = list(proto_raw_jwt.audiences) if not audiences: audiences = None jwt_id = None if proto_raw_jwt.HasField('jwt_id'): jwt_id = proto_raw_jwt.jwt_id.value custom_claims = {} for name, claim in proto_raw_jwt.custom_claims.items(): if claim.HasField('null_value'): custom_claims[name] = None elif claim.HasField('number_value'): custom_claims[name] = claim.number_value elif claim.HasField('string_value'): custom_claims[name] = claim.string_value elif claim.HasField('bool_value'): custom_claims[name] = claim.bool_value elif claim.HasField('json_object_value'): custom_claims[name] = json.loads(claim.json_object_value) elif claim.HasField('json_array_value'): custom_claims[name] = json.loads(claim.json_array_value) else: raise ValueError('claim %s has unknown type' % name) return jwt.new_raw_jwt( type_header=type_header, issuer=issuer, subject=subject, audiences=audiences, jwt_id=jwt_id, expiration=_from_timestamp_proto(proto_raw_jwt.expiration), not_before=_from_timestamp_proto(proto_raw_jwt.not_before), issued_at=_from_timestamp_proto(proto_raw_jwt.issued_at), custom_claims=custom_claims)
def proto_to_verified_jwt(token: testing_api_pb2.JwtToken) -> jwt.VerifiedJwt: """Converts a proto JwtToken into a jwt.VerifiedJwt.""" type_header = None if token.HasField('type_header'): type_header = token.type_header.value issuer = None if token.HasField('issuer'): issuer = token.issuer.value subject = None if token.HasField('subject'): subject = token.subject.value jwt_id = None if token.HasField('jwt_id'): jwt_id = token.jwt_id.value audiences = None if token.audiences: audiences = list(token.audiences) if token.HasField('expiration'): expiration = to_datetime(token.expiration.seconds, token.expiration.nanos) without_expiration = False else: expiration = None without_expiration = True not_before = None if token.HasField('not_before'): not_before = to_datetime(token.not_before.seconds, token.not_before.nanos) issued_at = None if token.HasField('issued_at'): issued_at = to_datetime(token.issued_at.seconds, token.issued_at.nanos) custom_claims = {} for name in token.custom_claims: value = token.custom_claims[name] if value.HasField('null_value'): custom_claims[name] = None if value.HasField('number_value'): custom_claims[name] = value.number_value if value.HasField('string_value'): custom_claims[name] = value.string_value if value.HasField('bool_value'): custom_claims[name] = value.bool_value if value.HasField('json_object_value'): custom_claims[name] = json.loads(value.json_object_value) if value.HasField('json_array_value'): custom_claims[name] = json.loads(value.json_array_value) raw_jwt = jwt.new_raw_jwt(type_header=type_header, issuer=issuer, subject=subject, audiences=audiences, jwt_id=jwt_id, expiration=expiration, without_expiration=without_expiration, not_before=not_before, issued_at=issued_at, custom_claims=custom_claims) return jwt.VerifiedJwt._create(raw_jwt) # pylint: disable=protected-access
def proto_to_verified_jwt(token: testing_api_pb2.JwtToken) -> jwt.VerifiedJwt: """Converts a proto JwtToken into a jwt.VerifiedJwt.""" issuer = None if token.HasField('issuer'): issuer = token.issuer.value subject = None if token.HasField('subject'): subject = token.subject.value jwt_id = None if token.HasField('jwt_id'): jwt_id = token.jwt_id.value audiences = None if token.audiences: audiences = list(token.audiences) expiration = None if token.HasField('expiration'): expiration = datetime.datetime.fromtimestamp(token.expiration.seconds, datetime.timezone.utc) not_before = None if token.HasField('not_before'): not_before = datetime.datetime.fromtimestamp(token.not_before.seconds, datetime.timezone.utc) issued_at = None if token.HasField('issued_at'): issued_at = datetime.datetime.fromtimestamp(token.issued_at.seconds, datetime.timezone.utc) custom_claims = {} for name in token.custom_claims: value = token.custom_claims[name] if value.HasField('null_value'): custom_claims[name] = None if value.HasField('number_value'): custom_claims[name] = value.number_value if value.HasField('string_value'): custom_claims[name] = value.string_value if value.HasField('bool_value'): custom_claims[name] = value.bool_value if value.HasField('json_object_value'): custom_claims[name] = json.loads(value.json_object_value) if value.HasField('json_array_value'): custom_claims[name] = json.loads(value.json_array_value) raw_jwt = jwt.new_raw_jwt(issuer, subject, audiences, jwt_id, expiration, not_before, issued_at, custom_claims) return jwt.VerifiedJwt._create(raw_jwt) # pylint: disable=protected-access