<
8000
path d="M8 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3ZM1.5 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Zm13 0a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z">
@@ -1,5 +1,5 @@
1
1
from ..request_factory import RequestFactory
2
-
2
+ from . exceptions import ServerResponseError
3
3
from .endpoint import Endpoint , api
4
4
import xml .etree .ElementTree as ET
5
5
import logging
@@ -52,3 +52,24 @@ def sign_out(self):
52
52
self .post_request (url , '' )
53
53
self .parent_srv ._clear_auth ()
54
54
logger .info ('Signed out' )
55
+
56
+ @api (version = "2.6" )
57
+ def switch_site (self , site_item ):
58
+ url = "{0}/{1}" .format (self .baseurl , 'switchSite' )
59
+ switch_req = RequestFactory .Auth .switch_req (site_item .content_url )
60
+ try :
61
+ server_response = self .post_request (url , switch_req )
62
+ except ServerResponseError as e :
63
+ if e .code == "403070" :
64
+ return Auth .contextmgr (self .sign_out )
65
+ else :
66
+ raise e
67
+ self .parent_srv ._namespace .detect (server_response .content )
68
+ self ._check_status (server_response )
69
+ parsed_response = ET .fromstring (server_response .content )
70
+ site_id = parsed_response .find ('.//t:site' , namespaces = self .parent_srv .namespace ).get ('id' , None )
71
+ user_id = parsed_response .find ('.//t:user' , namespaces = self .parent_srv .namespace ).get ('id' , None )
72
+ auth_token = parsed_response .find ('t:credentials' , namespaces = self .parent_srv .namespace ).get ('token' , None )
73
+ self .parent_srv ._set_auth (site_id , user_id , auth_token )
74
+ logger .info ('Signed into {0} as user with id {1}' .format (self .parent_srv .server_address , user_id ))
75
+ return Auth .contextmgr (self .sign_out )
0 commit comments