1616import pymacaroons
1717
1818from synapse .api .errors import AuthError , ResourceLimitError
19+ from synapse .rest import admin
1920
2021from tests import unittest
2122from tests .test_utils import make_awaitable
2223
2324
2425class AuthTestCase (unittest .HomeserverTestCase ):
26+ servlets = [
27+ admin .register_servlets ,
28+ ]
29+
2530 def prepare (self , reactor , clock , hs ):
2631 self .auth_handler = hs .get_auth_handler ()
2732 self .macaroon_generator = hs .get_macaroon_generator ()
@@ -35,16 +40,10 @@ def prepare(self, reactor, clock, hs):
3540 self .small_number_of_users = 1
3641 self .large_number_of_users = 100
3742
38- def test_token_is_a_macaroon (self ):
39- token = self .macaroon_generator .generate_access_token ("some_user" )
40- # Check that we can parse the thing with pymacaroons
41- macaroon = pymacaroons .Macaroon .deserialize (token )
42- # The most basic of sanity checks
43- if "some_user" not in macaroon .inspect ():
44- self .fail ("some_user was not in %s" % macaroon .inspect ())
43+ self .user1 = self .register_user ("a_user" , "pass" )
4544
4645 def test_macaroon_caveats (self ):
47- token = self .macaroon_generator .generate_access_token ("a_user" )
46+ token = self .macaroon_generator .generate_guest_access_token ("a_user" )
4847 macaroon = pymacaroons .Macaroon .deserialize (token )
4948
5049 def verify_gen (caveat ):
@@ -59,19 +58,23 @@ def verify_type(caveat):
5958 def verify_nonce (caveat ):
6059 return caveat .startswith ("nonce =" )
6160
61+ def verify_guest (caveat ):
62+ return caveat == "guest = true"
63+
6264 v = pymacaroons .Verifier ()
6365 v .satisfy_general (verify_gen )
6466 v .satisfy_general (verify_user )
6567 v .satisfy_general (verify_type )
6668 v .satisfy_general (verify_nonce )
69+ v .satisfy_general (verify_guest )
6770 v .verify (macaroon , self .hs .config .macaroon_secret_key )
6871
6972 def test_short_term_login_token_gives_user_id (self ):
7073 token = self .macaroon_generator .generate_short_term_login_token (
71- "a_user" , "" , 5000
74+ self . user1 , "" , 5000
7275 )
7376 res = self .get_success (self .auth_handler .validate_short_term_login_token (token ))
74- self .assertEqual ("a_user" , res .user_id )
77+ self .assertEqual (self . user1 , res .user_id )
7578 self .assertEqual ("" , res .auth_provider_id )
7679
7780 # when we advance the clock, the token should be rejected
@@ -83,22 +86,22 @@ def test_short_term_login_token_gives_user_id(self):
8386
8487 def test_short_term_login_token_gives_auth_provider (self ):
8588 token = self .macaroon_generator .generate_short_term_login_token (
86- "a_user" , auth_provider_id = "my_idp"
89+ self . user1 , auth_provider_id = "my_idp"
8790 )
8891 res = self .get_success (self .auth_handler .validate_short_term_login_token (token ))
89- self .assertEqual ("a_user" , res .user_id )
92+ self .assertEqual (self . user1 , res .user_id )
9093 self .assertEqual ("my_idp" , res .auth_provider_id )
9194
9295 def test_short_term_login_token_cannot_replace_user_id (self ):
9396 token = self .macaroon_generator .generate_short_term_login_token (
94- "a_user" , "" , 5000
97+ self . user1 , "" , 5000
9598 )
9699 macaroon = pymacaroons .Macaroon .deserialize (token )
97100
98101 res = self .get_success (
99102 self .auth_handler .validate_short_term_login_token (macaroon .serialize ())
100103 )
101- self .assertEqual ("a_user" , res .user_id )
104+ self .assertEqual (self . user1 , res .user_id )
102105
103106 # add another "user_id" caveat, which might allow us to override the
104107 # user_id.
@@ -114,7 +117,7 @@ def test_mau_limits_disabled(self):
114117 # Ensure does not throw exception
115118 self .get_success (
116119 self .auth_handler .get_access_token_for_user_id (
117- "user_a" , device_id = None , valid_until_ms = None
120+ self . user1 , device_id = None , valid_until_ms = None
118121 )
119122 )
120123
@@ -132,7 +135,7 @@ def test_mau_limits_exceeded_large(self):
132135
133136 self .get_failure (
134137 self .auth_handler .get_access_token_for_user_id (
135- "user_a" , device_id = None , valid_until_ms = None
138+ self . user1 , device_id = None , valid_until_ms = None
136139 ),
137140 ResourceLimitError ,
138141 )
@@ -160,7 +163,7 @@ def test_mau_limits_parity(self):
160163 # If not in monthly active cohort
161164 self .get_failure (
162165 self .auth_handler .get_access_token_for_user_id (
163- "user_a" , device_id = None , valid_until_ms = None
166+ self . user1 , device_id = None , valid_until_ms = None
164167 ),
165168 ResourceLimitError ,
166169 )
@@ -177,7 +180,7 @@ def test_mau_limits_parity(self):
177180 )
178181 self .get_success (
179182 self .auth_handler .get_access_token_for_user_id (
180- "user_a" , device_id = None , valid_until_ms = None
183+ self . user1 , device_id = None , valid_until_ms = None
181184 )
182185 )
183186 self .get_success (
@@ -195,7 +198,7 @@ def test_mau_limits_not_exceeded(self):
195198 # Ensure does not raise exception
196199 self .get_success (
197200 self .auth_handler .get_access_token_for_user_id (
198- "user_a" , device_id = None , valid_until_ms = None
201+ self . user1 , device_id = None , valid_until_ms = None
199202 )
200203 )
201204
@@ -210,6 +213,6 @@ def test_mau_limits_not_exceeded(self):
210213
211214 def _get_macaroon (self ):
212215 token = self .macaroon_generator .generate_short_term_login_token (
213- "user_a" , "" , 5000
216+ self . user1 , "" , 5000
214217 )
215218 return pymacaroons .Macaroon .deserialize (token )
0 commit comments