@@ -66,13 +66,58 @@ def __init__(self, bastion_address):
66
66
self .basic_headers = {
67
67
'User-Agent' : self .user_agent
68
68
}
69
- self .kwargs_updater = self .update_kwargs
70
-
71
- def update_kwargs (self , method , ** kwargs ):
69
+ self .kwargs_updater = self .__kwargs_updater
70
+
71
+ def __kwargs_updater (self , method , ** kwargs ):
72
+ if method == METHOD_POST :
73
+ kid = None
74
+ if "kid" in kwargs :
75
+ kid = kwargs .pop ("kid" )
76
+ key = None
77
+ if "key" in kwargs :
78
+ key = kwargs .pop ("key" )
79
+ uri = None
80
+ if "uri" in kwargs :
81
+ uri = kwargs .pop ("uri" )
82
+ protected = self .get_protected_headers (key , uri = uri )
83
+ if kid :
84
+ protected ['kid' ] = kid
85
+ protected .pop ("jwk" )
86
+ data = kwargs .get ("data" )
87
+ if data :
88
+ kwargs ['data' ] = sign_request_v2 (key , protected , data )
72
89
if self .peasant .verify :
73
90
kwargs ['verify' ] = self .peasant .verify
74
91
return kwargs
75
92
93
+ def get_protected_headers (self , key , uri = None ):
94
+ """
95
+ Builds a new pair of headers for signed requests.
96
+ """
97
+ header = generate_protected_header (key )
98
+ protected_header = copy .deepcopy (header )
99
+ protected_header ['nonce' ] = self .new_nonce ()
100
+ if uri is not None :
101
+ protected_header ['url' ] = uri
102
+ return protected_header
103
+
104
+ def post_as_get (self , path , ** kwargs ):
105
+ """Send a POST request.
106
+
107
+ :param path: absolute or relative URL for the new
108
+ :class:`requests.Request` object.
109
+ :param **kwargs: Optional arguments that ``request`` takes.
110
+ :return: :class:`requests.Response <Response>` object
111
+ :rtype: requests.Response
112
+ """
113
+ url = self .get_url (path , ** kwargs )
114
+ headers = self .get_headers (** kwargs )
115
+ kwargs ['headers' ] = headers
116
+ kwargs = self .update_kwargs (METHOD_POST , ** kwargs )
117
+ with requests .post (url , ** kwargs ) as result :
118
+ result .raise_for_status ()
119
+ return result
120
+
76
121
def set_directory (self ):
77
122
response = self .get ("/%s" % self .peasant .directory_path )
78
123
if response .status_code == 200 :
0 commit comments