diff options
Diffstat (limited to 'bitbake/lib/hashserv/client.py')
-rw-r--r-- | bitbake/lib/hashserv/client.py | 42 |
1 files changed, 37 insertions, 5 deletions
diff --git a/bitbake/lib/hashserv/client.py b/bitbake/lib/hashserv/client.py index 82400fe5aa..4457f8e50d 100644 --- a/bitbake/lib/hashserv/client.py +++ b/bitbake/lib/hashserv/client.py | |||
@@ -18,10 +18,11 @@ class AsyncClient(bb.asyncrpc.AsyncClient): | |||
18 | MODE_GET_STREAM = 1 | 18 | MODE_GET_STREAM = 1 |
19 | 19 | ||
20 | def __init__(self, username=None, password=None): | 20 | def __init__(self, username=None, password=None): |
21 | super().__init__('OEHASHEQUIV', '1.1', logger) | 21 | super().__init__("OEHASHEQUIV", "1.1", logger) |
22 | self.mode = self.MODE_NORMAL | 22 | self.mode = self.MODE_NORMAL |
23 | self.username = username | 23 | self.username = username |
24 | self.password = password | 24 | self.password = password |
25 | self.saved_become_user = None | ||
25 | 26 | ||
26 | async def setup_connection(self): | 27 | async def setup_connection(self): |
27 | await super().setup_connection() | 28 | await super().setup_connection() |
@@ -29,8 +30,13 @@ class AsyncClient(bb.asyncrpc.AsyncClient): | |||
29 | self.mode = self.MODE_NORMAL | 30 | self.mode = self.MODE_NORMAL |
30 | await self._set_mode(cur_mode) | 31 | await self._set_mode(cur_mode) |
31 | if self.username: | 32 | if self.username: |
33 | # Save off become user temporarily because auth() resets it | ||
34 | become = self.saved_become_user | ||
32 | await self.auth(self.username, self.password) | 35 | await self.auth(self.username, self.password) |
33 | 36 | ||
37 | if become: | ||
38 | await self.become_user(become) | ||
39 | |||
34 | async def send_stream(self, msg): | 40 | async def send_stream(self, msg): |
35 | async def proc(): | 41 | async def proc(): |
36 | await self.socket.send(msg) | 42 | await self.socket.send(msg) |
@@ -92,7 +98,14 @@ class AsyncClient(bb.asyncrpc.AsyncClient): | |||
92 | async def get_outhash(self, method, outhash, taskhash, with_unihash=True): | 98 | async def get_outhash(self, method, outhash, taskhash, with_unihash=True): |
93 | await self._set_mode(self.MODE_NORMAL) | 99 | await self._set_mode(self.MODE_NORMAL) |
94 | return await self.invoke( | 100 | return await self.invoke( |
95 | {"get-outhash": {"outhash": outhash, "taskhash": taskhash, "method": method, "with_unihash": with_unihash}} | 101 | { |
102 | "get-outhash": { | ||
103 | "outhash": outhash, | ||
104 | "taskhash": taskhash, | ||
105 | "method": method, | ||
106 | "with_unihash": with_unihash, | ||
107 | } | ||
108 | } | ||
96 | ) | 109 | ) |
97 | 110 | ||
98 | async def get_stats(self): | 111 | async def get_stats(self): |
@@ -120,6 +133,7 @@ class AsyncClient(bb.asyncrpc.AsyncClient): | |||
120 | result = await self.invoke({"auth": {"username": username, "token": token}}) | 133 | result = await self.invoke({"auth": {"username": username, "token": token}}) |
121 | self.username = username | 134 | self.username = username |
122 | self.password = token | 135 | self.password = token |
136 | self.saved_become_user = None | ||
123 | return result | 137 | return result |
124 | 138 | ||
125 | async def refresh_token(self, username=None): | 139 | async def refresh_token(self, username=None): |
@@ -128,13 +142,19 @@ class AsyncClient(bb.asyncrpc.AsyncClient): | |||
128 | if username: | 142 | if username: |
129 | m["username"] = username | 143 | m["username"] = username |
130 | result = await self.invoke({"refresh-token": m}) | 144 | result = await self.invoke({"refresh-token": m}) |
131 | if self.username and result["username"] == self.username: | 145 | if ( |
146 | self.username | ||
147 | and not self.saved_become_user | ||
148 | and result["username"] == self.username | ||
149 | ): | ||
132 | self.password = result["token"] | 150 | self.password = result["token"] |
133 | return result | 151 | return result |
134 | 152 | ||
135 | async def set_user_perms(self, username, permissions): | 153 | async def set_user_perms(self, username, permissions): |
136 | await self._set_mode(self.MODE_NORMAL) | 154 | await self._set_mode(self.MODE_NORMAL) |
137 | return await self.invoke({"set-user-perms": {"username": username, "permissions": permissions}}) | 155 | return await self.invoke( |
156 | {"set-user-perms": {"username": username, "permissions": permissions}} | ||
157 | ) | ||
138 | 158 | ||
139 | async def get_user(self, username=None): | 159 | async def get_user(self, username=None): |
140 | await self._set_mode(self.MODE_NORMAL) | 160 | await self._set_mode(self.MODE_NORMAL) |
@@ -149,12 +169,23 @@ class AsyncClient(bb.asyncrpc.AsyncClient): | |||
149 | 169 | ||
150 | async def new_user(self, username, permissions): | 170 | async def new_user(self, username, permissions): |
151 | await self._set_mode(self.MODE_NORMAL) | 171 | await self._set_mode(self.MODE_NORMAL) |
152 | return await self.invoke({"new-user": {"username": username, "permissions": permissions}}) | 172 | return await self.invoke( |
173 | {"new-user": {"username": username, "permissions": permissions}} | ||
174 | ) | ||
153 | 175 | ||
154 | async def delete_user(self, username): | 176 | async def delete_user(self, username): |
155 | await self._set_mode(self.MODE_NORMAL) | 177 | await self._set_mode(self.MODE_NORMAL) |
156 | return await self.invoke({"delete-user": {"username": username}}) | 178 | return await self.invoke({"delete-user": {"username": username}}) |
157 | 179 | ||
180 | async def become_user(self, username): | ||
181 | await self._set_mode(self.MODE_NORMAL) | ||
182 | result = await self.invoke({"become-user": {"username": username}}) | ||
183 | if username == self.username: | ||
184 | self.saved_become_user = None | ||
185 | else: | ||
186 | self.saved_become_user = username | ||
187 | return result | ||
188 | |||
158 | 189 | ||
159 | class Client(bb.asyncrpc.Client): | 190 | class Client(bb.asyncrpc.Client): |
160 | def __init__(self, username=None, password=None): | 191 | def __init__(self, username=None, password=None): |
@@ -182,6 +213,7 @@ class Client(bb.asyncrpc.Client): | |||
182 | "get_all_users", | 213 | "get_all_users", |
183 | "new_user", | 214 | "new_user", |
184 | "delete_user", | 215 | "delete_user", |
216 | "become_user", | ||
185 | ) | 217 | ) |
186 | 218 | ||
187 | def _get_async_client(self): | 219 | def _get_async_client(self): |