initial commit
This commit is contained in:
54
billinglayer/python/jwt/jwkset.py
Normal file
54
billinglayer/python/jwt/jwkset.py
Normal file
@@ -0,0 +1,54 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
#
|
||||
# Copyright 2017 Gehirn Inc.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
from collections import UserList
|
||||
from typing import TYPE_CHECKING
|
||||
|
||||
from .jwk import AbstractJWKBase, jwk_from_dict
|
||||
|
||||
if TYPE_CHECKING:
|
||||
UserListBase = UserList[AbstractJWKBase]
|
||||
else:
|
||||
UserListBase = UserList
|
||||
|
||||
|
||||
class JWKSet(UserListBase):
|
||||
|
||||
def filter_keys(self, kid=None, kty=None):
|
||||
# When "kid" values are used within a JWK Set, different
|
||||
# keys within the JWK Set SHOULD use distinct "kid" values. (One
|
||||
# example in which different keys might use the same "kid" value is if
|
||||
# they have different "kty" (key type) values but are considered to be
|
||||
# equivalent alternatives by the application using them.)
|
||||
|
||||
if kid and kty:
|
||||
return [key for key in self.data
|
||||
if key.get_kty() == kty and key.get_kid() == kid]
|
||||
if kid:
|
||||
return [key for key in self.data if key.get_kid() == kid]
|
||||
if kty:
|
||||
return [key for key in self.data if key.get_kty() == kty]
|
||||
|
||||
return self.data.copy()
|
||||
|
||||
def to_dict(self, public_only=True):
|
||||
keys = [key.to_dict(public_only=public_only) for key in self.data]
|
||||
return {'keys': keys}
|
||||
|
||||
@classmethod
|
||||
def from_dict(cls, dct):
|
||||
keys = [jwk_from_dict(key_dct) for key_dct in dct.get('keys', [])]
|
||||
return cls(keys)
|
||||
Reference in New Issue
Block a user