@@ -49,18 +49,59 @@ class FakeService:
4949 _shuffle_after_create : bool = False
5050 """Whether to shuffle the dispatches after creating them."""
5151
52+ def _check_access (self , metadata : grpc .aio .Metadata ) -> None :
53+ """Check if the access key is valid.
54+
55+ Args:
56+ metadata: The metadata.
57+
58+ Raises:
59+ grpc.RpcError: If the access key is invalid.
60+ """
61+ # metadata is a weird tuple of tuples, we don't like it
62+ metadata_dict = dict (metadata )
63+
64+ if "key" not in metadata_dict :
65+ raise grpc .RpcError (
66+ grpc .StatusCode .UNAUTHENTICATED ,
67+ "No access key provided" ,
68+ )
69+
70+ key = metadata_dict ["key" ]
71+
72+ if key is None :
73+ raise grpc .RpcError (
74+ grpc .StatusCode .UNAUTHENTICATED ,
75+ "No access key provided" ,
76+ )
77+
78+ if key == "none" :
79+ raise grpc .RpcError (
80+ grpc .StatusCode .PERMISSION_DENIED ,
81+ "Permission denied" ,
82+ )
83+
84+ if key != "all" :
85+ raise grpc .RpcError (
86+ grpc .StatusCode .UNAUTHENTICATED ,
87+ "Invalid access key" ,
88+ )
89+
5290 # pylint: disable=invalid-name
5391 async def ListMicrogridDispatches (
54- self , request : PBDispatchListRequest
92+ self , request : PBDispatchListRequest , metadata : grpc . aio . Metadata
5593 ) -> DispatchList :
5694 """List microgrid dispatches.
5795
5896 Args:
5997 request: The request.
98+ metadata: The metadata.
6099
61100 Returns:
62101 The dispatch list.
63102 """
103+ self ._check_access (metadata )
104+
64105 return DispatchList (
65106 dispatches = map (
66107 lambda d : d .to_protobuf (),
@@ -108,8 +149,10 @@ def _filter_dispatch(dispatch: Dispatch, request: PBDispatchListRequest) -> bool
108149 async def CreateMicrogridDispatch (
109150 self ,
110151 request : PBDispatchCreateRequest ,
152+ metadata : grpc .aio .Metadata ,
111153 ) -> Empty :
112154 """Create a new dispatch."""
155+ self ._check_access (metadata )
113156 self ._last_id += 1
114157
115158 self .dispatches .append (
@@ -128,8 +171,10 @@ async def CreateMicrogridDispatch(
128171 async def UpdateMicrogridDispatch (
129172 self ,
130173 request : DispatchUpdateRequest ,
174+ metadata : grpc .aio .Metadata ,
131175 ) -> Empty :
132176 """Update a dispatch."""
177+ self ._check_access (metadata )
133178 index = next (
134179 (i for i , d in enumerate (self .dispatches ) if d .id == request .id ),
135180 None ,
@@ -194,8 +239,10 @@ async def UpdateMicrogridDispatch(
194239 async def GetMicrogridDispatch (
195240 self ,
196241 request : DispatchGetRequest ,
242+ metadata : grpc .aio .Metadata ,
197243 ) -> PBDispatch :
198244 """Get a single dispatch."""
245+ self ._check_access (metadata )
199246 dispatch = next ((d for d in self .dispatches if d .id == request .id ), None )
200247
201248 if dispatch is None :
@@ -211,8 +258,10 @@ async def GetMicrogridDispatch(
211258 async def DeleteMicrogridDispatch (
212259 self ,
213260 request : DispatchDeleteRequest ,
261+ metadata : grpc .aio .Metadata ,
214262 ) -> Empty :
215263 """Delete a given dispatch."""
264+ self ._check_access (metadata )
216265 num_dispatches = len (self .dispatches )
217266 self .dispatches = [d for d in self .dispatches if d .id != request .id ]
218267
0 commit comments