TiGa-RCE commited on
Commit
1e1fd22
·
verified ·
1 Parent(s): b9c27ee

Separate job keys from private HF hosting authentication

Browse files
Files changed (3) hide show
  1. RELEASE_MANIFEST.json +2 -2
  2. client.js +1 -1
  3. delivery.py +10 -11
RELEASE_MANIFEST.json CHANGED
@@ -10,8 +10,8 @@
10
  "assets/formula_template.json": "80f745df82bb7be45af52785fd582460bcddc63c5a4e1d8375d85b3122db4c6b",
11
  "bin/altd-sim": "2f2f2144ae14b0ef599ca8510f95712da00243c6875881491d384b394e7499f7",
12
  "bin/extract_saved_track": "3a7733c45b4301a786fcbfe92660a1c484749272da5f608d62f34878bd4ff31a",
13
- "client.js": "828d29ae0291d9696364415397c113e907d1c512e01c0ef4cb771da63e5a48bf",
14
- "delivery.py": "effc7e33c11c2e999b48620feaae263975a13df59c85f9c3a12c3f038ad47a5a",
15
  "index.html": "cf4c0670c81184f8ea2726041457ae3cecc6c79b9030a41fe545b1bc503f0a47",
16
  "requirements.txt": "dbdedd8a6f30e16dc41bc3e210c1a936f679655420075f8f89bdd40bdd03f91b",
17
  "server.py": "df0f3d22c55653de9216da2443d17cd098cf5552f66a0fafb742160b5b29eefe",
 
10
  "assets/formula_template.json": "80f745df82bb7be45af52785fd582460bcddc63c5a4e1d8375d85b3122db4c6b",
11
  "bin/altd-sim": "2f2f2144ae14b0ef599ca8510f95712da00243c6875881491d384b394e7499f7",
12
  "bin/extract_saved_track": "3a7733c45b4301a786fcbfe92660a1c484749272da5f608d62f34878bd4ff31a",
13
+ "client.js": "c80281f2ab24c4efcb6801885cad6a70cb426512c0979397d90e920352ec8dec",
14
+ "delivery.py": "4f5a4e45df92e5cbfdef6eb449ede9ba26217fe24da376fafddae5cbbb73847a",
15
  "index.html": "cf4c0670c81184f8ea2726041457ae3cecc6c79b9030a41fe545b1bc503f0a47",
16
  "requirements.txt": "dbdedd8a6f30e16dc41bc3e210c1a936f679655420075f8f89bdd40bdd03f91b",
17
  "server.py": "df0f3d22c55653de9216da2443d17cd098cf5552f66a0fafb742160b5b29eefe",
client.js CHANGED
@@ -33,7 +33,7 @@ async function encoded(file) {
33
  let text=''; for (let i=0;i<bytes.length;i+=8192) text+=String.fromCharCode(...bytes.subarray(i,i+8192));
34
  return btoa(text);
35
  }
36
- const headers = () => ({Authorization:'Bearer '+job.key});
37
  $('run').onclick = async () => {
38
  localResult=null;
39
  const started=performance.now();
 
33
  let text=''; for (let i=0;i<bytes.length;i+=8192) text+=String.fromCharCode(...bytes.subarray(i,i+8192));
34
  return btoa(text);
35
  }
36
+ const headers = () => ({'X-Job-Key':job.key});
37
  $('run').onclick = async () => {
38
  localResult=null;
39
  const started=performance.now();
delivery.py CHANGED
@@ -119,10 +119,9 @@ def create_api(store=None):
119
  response.headers['X-Content-Type-Options']='nosniff'
120
  return response
121
 
122
- def key(authorization):
123
- if not authorization or not authorization.startswith('Bearer '):
124
  raise HTTPException(404,'Job unavailable')
125
- value = authorization[7:]
126
  if not value.isascii() or len(value)>128: raise HTTPException(404,'Job unavailable')
127
  return value
128
 
@@ -131,21 +130,21 @@ def create_api(store=None):
131
  except Unavailable: raise HTTPException(404,'Job unavailable') from None
132
 
133
  @app.get('/api/jobs/{ident}')
134
- def status(ident:str,authorization:str|None=Header(default=None)):
135
- return call(store.status,ident,key(authorization))
136
 
137
  @app.post('/api/jobs/{ident}/download')
138
- def download(ident:str,authorization:str|None=Header(default=None)):
139
- data,receipt = call(store.download,ident,key(authorization))
140
  return Response(data,media_type='application/octet-stream',headers={
141
  'Content-Disposition':'attachment; filename="candidate.evolution"',
142
  'X-Delivery-Receipt':receipt})
143
 
144
  @app.post('/api/jobs/{ident}/ack')
145
- def ack(ident:str,body:Acknowledgment,authorization:str|None=Header(default=None)):
146
- return call(store.acknowledge,ident,key(authorization),body.receipt)
147
 
148
  @app.delete('/api/jobs/{ident}')
149
- def delete(ident:str,authorization:str|None=Header(default=None)):
150
- return call(store.delete,ident,key(authorization))
151
  return app
 
119
  response.headers['X-Content-Type-Options']='nosniff'
120
  return response
121
 
122
+ def key(value):
123
+ if not value:
124
  raise HTTPException(404,'Job unavailable')
 
125
  if not value.isascii() or len(value)>128: raise HTTPException(404,'Job unavailable')
126
  return value
127
 
 
130
  except Unavailable: raise HTTPException(404,'Job unavailable') from None
131
 
132
  @app.get('/api/jobs/{ident}')
133
+ def status(ident:str,x_job_key:str|None=Header(default=None)):
134
+ return call(store.status,ident,key(x_job_key))
135
 
136
  @app.post('/api/jobs/{ident}/download')
137
+ def download(ident:str,x_job_key:str|None=Header(default=None)):
138
+ data,receipt = call(store.download,ident,key(x_job_key))
139
  return Response(data,media_type='application/octet-stream',headers={
140
  'Content-Disposition':'attachment; filename="candidate.evolution"',
141
  'X-Delivery-Receipt':receipt})
142
 
143
  @app.post('/api/jobs/{ident}/ack')
144
+ def ack(ident:str,body:Acknowledgment,x_job_key:str|None=Header(default=None)):
145
+ return call(store.acknowledge,ident,key(x_job_key),body.receipt)
146
 
147
  @app.delete('/api/jobs/{ident}')
148
+ def delete(ident:str,x_job_key:str|None=Header(default=None)):
149
+ return call(store.delete,ident,key(x_job_key))
150
  return app