File tree Expand file tree Collapse file tree 1 file changed +9
-31
lines changed
crates/apollo-mcp-server/src/auth Expand file tree Collapse file tree 1 file changed +9
-31
lines changed Original file line number Diff line number Diff line change @@ -50,43 +50,21 @@ pub(super) trait ValidateToken {
5050 pub sub : String ,
5151 }
5252
53- /// Custom deserializer to handle both single string and array of strings for audience claim
5453 fn deserialize_audience < ' de , D > ( deserializer : D ) -> Result < Vec < String > , D :: Error >
5554 where
5655 D : serde:: Deserializer < ' de > ,
5756 {
58- use serde:: de:: { SeqAccess , Visitor } ;
59- use std:: fmt;
60-
61- struct AudienceVisitor ;
62-
63- impl < ' de > Visitor < ' de > for AudienceVisitor {
64- type Value = Vec < String > ;
65-
66- fn expecting ( & self , formatter : & mut fmt:: Formatter ) -> fmt:: Result {
67- formatter. write_str ( "a string or array of strings" )
68- }
69-
70- fn visit_str < E > ( self , value : & str ) -> Result < Self :: Value , E >
71- where
72- E : serde:: de:: Error ,
73- {
74- Ok ( vec ! [ value. to_string( ) ] )
75- }
76-
77- fn visit_seq < A > ( self , mut seq : A ) -> Result < Self :: Value , A :: Error >
78- where
79- A : SeqAccess < ' de > ,
80- {
81- let mut audiences = Vec :: new ( ) ;
82- while let Some ( aud) = seq. next_element ( ) ? {
83- audiences. push ( aud) ;
84- }
85- Ok ( audiences)
86- }
57+ #[ derive( Deserialize ) ]
58+ #[ serde( untagged) ]
59+ enum Audience {
60+ Single ( String ) ,
61+ Multiple ( Vec < String > ) ,
8762 }
8863
89- deserializer. deserialize_any ( AudienceVisitor )
64+ Ok ( match Audience :: deserialize ( deserializer) ? {
65+ Audience :: Single ( s) => vec ! [ s] ,
66+ Audience :: Multiple ( v) => v,
67+ } )
9068 }
9169
9270 let jwt = token. token ( ) ;
You can’t perform that action at this time.
0 commit comments