59 lines
1.9 KiB
Python
59 lines
1.9 KiB
Python
from quixote import get_session, get_session_manager, get_request, get_publisher
|
|
|
|
import authentic.identities
|
|
|
|
import collectivity
|
|
|
|
|
|
class MergedIdentityStore(authentic.identities.IdentitiesStoreStorage):
|
|
def get_identity_for_name_identifier(self, name_identifier):
|
|
x = authentic.identities.IdentitiesStoreStorage.get_identity_for_name_identifier(
|
|
self, name_identifier)
|
|
if x:
|
|
return x
|
|
|
|
for coll in collectivity.Collectivity.select():
|
|
store = get_collectivity_store(coll.id)
|
|
x = store.get_identity_for_name_identifier(name_identifier)
|
|
if x:
|
|
return x
|
|
|
|
return None
|
|
|
|
|
|
class InheritingIdentityStore(authentic.identities.IdentitiesStoreStorage):
|
|
def get_identity_for_account(self, account):
|
|
t = authentic.identities.IdentitiesStoreStorage.get_identity_for_account(self, account)
|
|
if not t:
|
|
store = get_collectivity_store(None)
|
|
t = store.get_identity_for_account(account)
|
|
if t:
|
|
get_session().force_base_store = True
|
|
load_store()
|
|
return t
|
|
|
|
|
|
def get_collectivity_identity_class(collectivity_id):
|
|
class CollectivityIdentity(authentic.identities.Identity):
|
|
_names = 'identities-' + str(collectivity_id)
|
|
return CollectivityIdentity
|
|
|
|
|
|
def get_collectivity_store(collectivity_id):
|
|
if collectivity_id == '547263': # Parthenay
|
|
raise NotImplementedError()
|
|
elif collectivity_id:
|
|
# Vandoeuvre (546555) and others
|
|
store = InheritingIdentityStore(
|
|
identity_class = get_collectivity_identity_class(collectivity_id))
|
|
else:
|
|
store = MergedIdentityStore()
|
|
return store
|
|
|
|
|
|
def load_store():
|
|
coll_id = get_request().get_header('X-Gdd-Account-Number')
|
|
if get_session().force_base_store:
|
|
coll_id = None
|
|
get_publisher().store = get_collectivity_store(coll_id)
|