Skip to content

Commit 7086987

Browse files
authored
Merge pull request #13 from GLEIF-IT/feature/signed_headers_verification
Added /authorizations signed headers verification support
2 parents aeddcdf + c8358bd commit 7086987

6 files changed

Lines changed: 84 additions & 101 deletions

File tree

controllers.py

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import logging
2-
from vlei_verifier_client import VerifierClient, VerifierResponse, AsyncVerifierClient
2+
from vlei_verifier_client import VerifierResponse, AsyncVerifierClient
33
from utils.router_state import RouterState
44

55
# Configure logging
@@ -33,7 +33,7 @@ async def presentation(said: str, vlei: str) -> VerifierResponse:
3333
"""
3434
logger.info(f"Starting presentation for SAID: {said}")
3535
verifier_client = VerifierController._get_verifier_client(said=said)
36-
verifier_response = await verifier_client.login(said=said, vlei=vlei)
36+
verifier_response = await verifier_client.presentation(said=said, vlei=vlei)
3737

3838
if verifier_response.code >= 300:
3939
logger.warning(f"Presentation failed for SAID: {said}. Code: {verifier_response.code}, Message: {verifier_response.message}")
@@ -46,13 +46,13 @@ async def presentation(said: str, vlei: str) -> VerifierResponse:
4646
return verifier_response
4747

4848
@staticmethod
49-
async def authorization(aid: str) -> VerifierResponse:
49+
async def authorization(aid: str, headers) -> VerifierResponse:
5050
"""
5151
Handle authorization logic for a given AID.
5252
"""
5353
logger.info(f"Starting authorization for AID: {aid}")
5454
verifier_client = VerifierController._get_verifier_client(aid=aid)
55-
verifier_response = await verifier_client.check_login(aid=aid)
55+
verifier_response = await verifier_client.authorization(aid=aid, headers=headers)
5656

5757
if verifier_response.code >= 300:
5858
logger.warning(f"Authorization failed for AID: {aid}. Code: {verifier_response.code}, Message: {verifier_response.message}")
@@ -61,6 +61,23 @@ async def authorization(aid: str) -> VerifierResponse:
6161

6262
return verifier_response
6363

64+
@staticmethod
65+
async def presentations_history(aid: str) -> VerifierResponse:
66+
"""
67+
Handle authorization logic for a given AID.
68+
"""
69+
logger.info(f"Starting get presentations history for AID: {aid}")
70+
verifier_client = VerifierController._get_verifier_client(aid=aid)
71+
verifier_response = await verifier_client.get_presentations_history(aid=aid)
72+
73+
if verifier_response.code >= 300:
74+
logger.warning(
75+
f"Authorization failed for AID: {aid}. Code: {verifier_response.code}, Message: {verifier_response.message}")
76+
else:
77+
logger.info(f"Get presentations history successful for AID: {aid}")
78+
79+
return verifier_response
80+
6481
@staticmethod
6582
async def signed_headers_verification(aid: str, sig: str, ser: str) -> VerifierResponse:
6683
"""

docker-compose-load-test.yml

Lines changed: 26 additions & 82 deletions
Original file line numberDiff line numberDiff line change
@@ -106,66 +106,13 @@ services:
106106
- redis_data:/data
107107
restart: always
108108

109-
vlei-server:
110-
image: gleif/vlei
111-
environment:
112-
- PYTHONUNBUFFERED=1
113-
- PYTHONIOENCODING=UTF-8
114-
command:
115-
- vLEI-server
116-
- -s
117-
- ./schema/acdc
118-
- -c
119-
- ./samples/acdc/
120-
- -o
121-
- ./samples/oobis/
122-
healthcheck:
123-
test:
124-
- CMD
125-
- curl
126-
- -f
127-
- http://localhost:7723/oobi/EBfdlu8R27Fbx-ehrqwImnK-8Cm79sqbAQ4MmvEAYqao
128-
interval: 2s
129-
timeout: 3s
130-
retries: 5
131-
start_period: 2s
132-
ports:
133-
- 7723:7723
134-
135-
witness-demo:
136-
image: weboftrust/keri-witness-demo:1.1.0
137-
environment:
138-
- PYTHONUNBUFFERED=1
139-
- PYTHONIOENCODING=UTF-8
140-
healthcheck:
141-
test: [ 'CMD', 'curl', '-f', 'http://localhost:5642/oobi' ]
142-
interval: 2s
143-
timeout: 3s
144-
retries: 5
145-
start_period: 2s
146-
configs:
147-
- source: wan.json
148-
target: /keripy/scripts/keri/cf/main/wan.json
149-
- source: wes.json
150-
target: /keripy/scripts/keri/cf/main/wes.json
151-
- source: wil.json
152-
target: /keripy/scripts/keri/cf/main/wil.json
153-
- source: wit.json
154-
target: /keripy/scripts/keri/cf/main/wit.json
155-
- source: wub.json
156-
target: /keripy/scripts/keri/cf/main/wub.json
157-
- source: wyx.json
158-
target: /keripy/scripts/keri/cf/main/wyx.json
159-
160109
vlei-verifier-single-mode:
161-
image: gleif/vlei-verifier:latest
110+
image: gleif/vlei-verifier:0.1.2
162111
container_name: vlei-verifier-single-mode
163112
hostname: vlei-verifier-single-mode
164113
environment:
165114
- VERIFIER_CONFIG_FILE=verifier-config-test.json
166-
depends_on:
167-
- vlei-server
168-
- witness-demo
115+
- VERIFIER_MODE=test
169116
ports:
170117
- 7676:7676
171118
healthcheck:
@@ -176,14 +123,12 @@ services:
176123
start_period: 2s
177124

178125
vlei-verifier-1:
179-
image: gleif/vlei-verifier:latest
126+
image: gleif/vlei-verifier:0.1.2
180127
container_name: vlei-verifier-1
181128
hostname: vlei-verifier-1
182129
environment:
183130
- VERIFIER_CONFIG_FILE=verifier-config-test.json
184-
depends_on:
185-
- vlei-server
186-
- witness-demo
131+
- VERIFIER_MODE=test
187132
ports:
188133
- 5652:7676
189134
healthcheck:
@@ -194,14 +139,12 @@ services:
194139
start_period: 2s
195140

196141
vlei-verifier-2:
197-
image: gleif/vlei-verifier:latest
142+
image: gleif/vlei-verifier:0.1.2
198143
container_name: vlei-verifier-2
199144
hostname: vlei-verifier-2
200145
environment:
201146
- VERIFIER_CONFIG_FILE=verifier-config-test.json
202-
depends_on:
203-
- vlei-server
204-
- witness-demo
147+
- VERIFIER_MODE=test
205148
ports:
206149
- 5653:7676
207150
healthcheck:
@@ -212,14 +155,12 @@ services:
212155
start_period: 2s
213156

214157
vlei-verifier-3:
215-
image: gleif/vlei-verifier:latest
158+
image: gleif/vlei-verifier:0.1.2
216159
container_name: vlei-verifier-3
217160
hostname: vlei-verifier-3
218161
environment:
219162
- VERIFIER_CONFIG_FILE=verifier-config-test.json
220-
depends_on:
221-
- vlei-server
222-
- witness-demo
163+
- VERIFIER_MODE=test
223164
ports:
224165
- 5654:7676
225166
healthcheck:
@@ -230,14 +171,12 @@ services:
230171
start_period: 2s
231172

232173
vlei-verifier-4:
233-
image: gleif/vlei-verifier:latest
174+
image: gleif/vlei-verifier:0.1.2
234175
container_name: vlei-verifier-4
235176
hostname: vlei-verifier-4
236177
environment:
237178
- VERIFIER_CONFIG_FILE=verifier-config-test.json
238-
depends_on:
239-
- vlei-server
240-
- witness-demo
179+
- VERIFIER_MODE=test
241180
ports:
242181
- 5655:7676
243182
healthcheck:
@@ -248,14 +187,12 @@ services:
248187
start_period: 2s
249188

250189
vlei-verifier-5:
251-
image: gleif/vlei-verifier:latest
190+
image: gleif/vlei-verifier:0.1.2
252191
container_name: vlei-verifier-5
253192
hostname: vlei-verifier-5
254193
environment:
255194
- VERIFIER_CONFIG_FILE=verifier-config-test.json
256-
depends_on:
257-
- vlei-server
258-
- witness-demo
195+
- VERIFIER_MODE=test
259196
ports:
260197
- 5656:7676
261198
healthcheck:
@@ -269,22 +206,29 @@ services:
269206
image: alpine:latest
270207
command: [ 'echo', 'Router mode dependencies running' ]
271208
depends_on:
272-
vlei-server:
273-
condition: service_healthy
274-
witness-demo:
275-
condition: service_healthy
276209
vlei-verifier-router:
277210
condition: service_healthy
278211

279212
verifier:
280213
image: alpine:latest
281214
command: [ 'echo', 'Verifier mode dependencies running' ]
282215
depends_on:
283-
vlei-server:
216+
vlei-verifier-single-mode:
217+
condition: service_healthy
218+
219+
verifier-instances:
220+
image: alpine:latest
221+
command: [ 'echo', 'Verifier mode dependencies running' ]
222+
depends_on:
223+
vlei-verifier-1:
284224
condition: service_healthy
285-
witness-demo:
225+
vlei-verifier-2:
286226
condition: service_healthy
287-
vlei-verifier-single-mode:
227+
vlei-verifier-3:
228+
condition: service_healthy
229+
vlei-verifier-4:
230+
condition: service_healthy
231+
vlei-verifier-5:
288232
condition: service_healthy
289233

290234

main.py

Lines changed: 27 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212

1313

1414
@asynccontextmanager
15-
async def lifespan(app: FastAPI):
15+
async def lifespan(fastapi_app: FastAPI):
1616
"""
1717
Lifespan event handler for FastAPI.
1818
"""
@@ -35,8 +35,14 @@ async def present_credential(said: str, request: Request):
3535

3636

3737
@app.get("/authorizations/{aid}")
38-
async def authorization(aid: str,):
39-
response = await VerifierController.authorization(aid)
38+
async def authorization(aid: str, request: Request):
39+
response = await VerifierController.authorization(aid, request.headers)
40+
return JSONResponse(status_code=response.code, content=response.body)
41+
42+
43+
@app.get("/presentations/history/{aid}")
44+
async def presentations_history(aid: str, request: Request):
45+
response = await VerifierController.presentations_history(aid)
4046
return JSONResponse(status_code=response.code, content=response.body)
4147

4248

@@ -77,6 +83,23 @@ async def add_verifier_instance(request: Request):
7783
return JSONResponse(status_code=200, content="Success")
7884

7985

86+
@app.get("/service_status")
87+
async def add_verifier_instance():
88+
return JSONResponse(status_code=200, content={
89+
"status": "OK",
90+
"mode": "router"
91+
})
92+
93+
94+
@app.get("/get_verifier_url_for_aid/{aid}")
95+
async def add_verifier_instance(aid: str):
96+
router_state = RouterState.get_state()
97+
verifier_instance = router_state.get_verifier_instance_for_aid(aid)
98+
return JSONResponse(status_code=200, content={
99+
"verifier_url": verifier_instance
100+
})
101+
102+
80103
def main():
81104
logger.info("Starting Vlei-Verifier_Router")
82105
import uvicorn
@@ -85,4 +108,4 @@ def main():
85108

86109

87110
if __name__ == "__main__":
88-
main()
111+
main()

setup.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515

1616
setup(
1717
name='vlei-verifier-router',
18-
version='0.1.0', # also change in src/verifier/__init__.py
18+
version='0.1.1',
1919
license='Apache Software License 2.0',
2020
description='Vlei Verifier Router',
2121
long_description="Vlei Verifier Router",
@@ -60,7 +60,7 @@
6060
"requests>=2.32.3",
6161
"python-multipart",
6262
"apscheduler>=3.11.0",
63-
"vlei-verifier-client==0.1.1",
63+
"vlei-verifier-client==0.1.4",
6464
"redis>=5.2.1"
6565
],
6666
extras_require={

test/load/load_test.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@ async def send_post_request(aid, said, vlei):
1414
client = AsyncVerifierClient("http://localhost:7676")
1515
start_time = time.perf_counter()
1616

17-
presentations_response: VerifierResponse = await client.login(said, vlei)
18-
auth_response: VerifierResponse = await client.check_login(aid)
17+
presentations_response: VerifierResponse = await client.presentation(said, vlei)
18+
auth_response: VerifierResponse = await client.authorization(aid)
1919

2020
end_time = time.perf_counter()
2121
latency = end_time - start_time

utils/router_state.py

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import json
22
import os
3-
from dataclasses import dataclass, field
3+
from dataclasses import dataclass
44
import redis
55
from typing import List, Dict, Optional
66
import logging
@@ -17,7 +17,7 @@ class RouterState:
1717
"""
1818

1919
_instance: Optional["RouterState"] = None
20-
__current_verifier_instance_num: int = 0
20+
_current_verifier_instance_num: int = 0
2121

2222
def __new__(cls, *args, **kwargs):
2323
"""
@@ -158,10 +158,9 @@ def _get_next_verifier_instance(self) -> str:
158158
raise ValueError("No verifier instances available.")
159159

160160
# Round-robin selection
161-
if self.__current_verifier_instance_num >= len(verifier_instances):
162-
self.__current_verifier_instance_num = 0
163-
instance = verifier_instances[self.__current_verifier_instance_num]
164-
self.__current_verifier_instance_num += 1
165-
instance = instance
161+
if self._current_verifier_instance_num >= len(verifier_instances):
162+
self._current_verifier_instance_num = 0
163+
instance = verifier_instances[self._current_verifier_instance_num]
164+
self._current_verifier_instance_num += 1
166165
logger.debug(f"Selected verifier instance: {instance}")
167166
return instance

0 commit comments

Comments
 (0)