File size: 3,020 Bytes
76e0bfa
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
be1eee5
76e0bfa
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
"""Read-only, hash-checked reference tracks; separate from ephemeral job data."""
import hashlib
import json
from pathlib import Path
import re


class TrackLibrary:
    def __init__(self, root):
        self.root=Path(root).resolve()
        self._entries={}
        catalog=self.root/'catalog.json'
        if not catalog.exists():return  # Older/local upload-only installations.
        if catalog.stat().st_size>256*1024:raise ValueError('Track catalog too large')
        data=json.loads(catalog.read_text())
        if data.get('schema')!='ald-editor-format-replicas-v1':raise ValueError('Unknown track catalog')
        tracks=data['tracks']
        if not isinstance(tracks,list) or not 1<=len(tracks)<=128:raise ValueError('Track count')
        for entry in tracks:
            identifier=entry['id'];relative=Path(entry['file'])
            if not isinstance(identifier,str) or not re.fullmatch(r'[a-z0-9-]{1,80}',identifier):
                raise ValueError('Track ID')
            if identifier in self._entries:raise ValueError('Duplicate track ID')
            if len(relative.parts)!=2 or relative.parts[0]!='tracks' or relative.suffix!='.track':
                raise ValueError('Track path')
            path=self.root/relative
            if path.is_symlink() or path.resolve()!=path or not path.is_file():raise ValueError('Track path')
            size=entry['bytes'];digest=entry['sha256']
            if type(size)!=int or not 1<=size<=1024*1024 or not re.fullmatch(r'[a-f0-9]{64}',digest):
                raise ValueError('Track size/hash')
            for label in ('display_name','reference_label'):
                if not isinstance(entry[label],str) or not 1<=len(entry[label])<=100:raise ValueError('Track label')
            public={key:entry[key] for key in ('id','display_name','reference_label','bytes','sha256')}
            self._entries[identifier]=(path,public)
            self.read(identifier)

    def catalog(self):
        # Never expose private provenance source paths or arbitrary input fields.
        return {'schema':'ald-builtin-track-library-v1',
                'method':'programmatically reconstructed editor-format replicas',
                'editor_authored':False,'clean_room':False,
                'challenge_runtime_status':'per-run fixed-policy prediction; original opponent races not evaluated',
                'tracks':[dict(entry) for _,entry in self._entries.values()]}

    def read(self, identifier):
        if identifier not in self._entries:raise KeyError(identifier)
        path,entry=self._entries[identifier]
        if path.is_symlink() or path.resolve()!=path or path.stat().st_size!=entry['bytes']:
            raise ValueError('Track validation failed')
        payload=path.read_bytes()
        if hashlib.sha256(payload).hexdigest()!=entry['sha256']:raise ValueError('Track validation failed')
        return payload

    def members(self):
        return [(path.relative_to(self.root).as_posix(),path) for path,_ in self._entries.values()]