;ò Á7Cc@sÍdZdZdkZdkZdkZdkZdklZdkZdk Z dk Z dk Z dk Z dfd„ƒYZ dfd„ƒYZdfd „ƒYZd fd „ƒYZd fd „ƒYZdS(sß Classes that represent interface to data in MySQL tables. It is supposed for all this classes to be referenced as _v_ atributes of mysql user folder, so each thread has it's own copy (so there is no need for locks). s $Rev: 73 $N(s dbConnectionsUserDbcBs­tZdZd„Zed„Zd„Zd„Zd„Zd„Z d„Z d„Z d „Z ed „Z d „Zd „Zd „Zd„Zd„Zd„Zd„ZRS(s< Class that represents (local) interface to User database. cCsN||_||_tio.titiƒ|_titiƒ|_ ndS(N( sdbsSelfsrealmscfgs CACHE_USERSscachesv_cachesCACHE_USERS_LIFEs user_cachesusername_cache(sSelfsdbsrealm((sG/mnt/gmirror/ports/www/zope-mysqluserfolder/work/mysqlUserFolder/vdb.pys__init__s    cCs>|tjo|ii|iƒSn|ii|i|ƒSdS(N(srolesNonesSelfsdbslist_usernamessrealmslist_usernames_with_role(sSelfsrole((sG/mnt/gmirror/ports/www/zope-mysqluserfolder/work/mysqlUserFolder/vdb.pyslist_usernames"s cCs|ii|iƒSdS(N(sSelfsdbslist_rolenamessrealm(sSelf((sG/mnt/gmirror/ports/www/zope-mysqluserfolder/work/mysqlUserFolder/vdb.pyslist_rolenames(scCsM|iƒ}x:|D]2}||j o|i|ƒ|i|ƒqqWdS(N(sSelfslist_rolenamessdb_rolessrolessrs create_rolesappend(sSelfsrolessdb_rolessr((sG/mnt/gmirror/ports/www/zope-mysqluserfolder/work/mysqlUserFolder/vdb.pysauto_create_roles+s   cCsÃtiotid|iƒƒn|ii|ƒ}| o|Snti oj|i ƒ}|iƒ}|ii|ƒo|ii|ƒn|ii|ƒo|ii|ƒq»n|SdS(Nsrefresh_user (): '%s'(scfgsDEBUGsutils log_debugsusers getUserNamesSelfsdbs get_user_datasrets CACHE_USERSsgetDBIdsuidsusernames user_cachesgetsdeletesusername_cache(sSelfsusersusernamesuidsret((sG/mnt/gmirror/ports/www/zope-mysqluserfolder/work/mysqlUserFolder/vdb.pys refresh_user3s    cCs|ii|iƒSdS(N(sSelfsdbs count_userssrealm(sSelf((sG/mnt/gmirror/ports/www/zope-mysqluserfolder/work/mysqlUserFolder/vdb.pysget_user_countJscCs|ii|iƒSdS(N(sSelfsdbs count_rolessrealm(sSelf((sG/mnt/gmirror/ports/www/zope-mysqluserfolder/work/mysqlUserFolder/vdb.pysget_role_countMscCs<tiotid|ƒntiow|ii|ƒ}|t j o|i i|ƒ}nt }|t j o)tiotidƒn|i ƒSq nti||iƒ}|ii|ƒ o t }nGtio<|iƒ}|ii||ƒ|i i||i ƒƒntiotidƒn|SdS(Nsget_user (): Begin (%s)s'get_user (): getting user from a cache.sget_user (): End(scfgsDEBUGsutils log_debugsusernames CACHE_USERSsSelfsusername_cachesgetsuidsNones user_cachesusers_copys c_classess mysqlUsersrealmsdbs get_user_datasgetDBIdsadd(sSelfsusernamesuidsuser((sG/mnt/gmirror/ports/www/zope-mysqluserfolder/work/mysqlUserFolder/vdb.pysget_userPs*       cCstiotid|ƒntioM|ii|ƒ}|t j o)tiotidƒn|i ƒSqvnt i d|iƒ}|i|ƒ|ii|dƒ o t }n(tio|ii||i ƒƒntiotidƒn|SdS(Nsget_user_by_id (): Begin (%s)s-get_user_by_id (): getting user from a cache.s isget_user_by_id (): End(scfgsDEBUGsutils log_debugsuser_ids CACHE_USERSsSelfs user_cachesgetsusersNones_copys c_classess mysqlUsersrealms_setDBIdsdbs get_user_datasadd(sSelfsuser_idsuser((sG/mnt/gmirror/ports/www/zope-mysqluserfolder/work/mysqlUserFolder/vdb.pysget_user_by_idps"       cCsx|tjo|iƒ}n|tijodSn|djoti||ƒ}n|i i |||ƒ}|SdS(s[ Changes user password. If password type is not specified, current type will be used. iN( sptypesNonesusersgetPasswordTypescfgsVDB_INVALID_PASSWORD_TYPEs passwordssencodesnew_passsSelfsdbschange_user_passwordsret(sSelfsusersnew_passsptypesret((sG/mnt/gmirror/ports/www/zope-mysqluserfolder/work/mysqlUserFolder/vdb.pyschange_user_passwordŠs  cCsWtd„|ƒ}tio|i|ƒn|ii||ƒ}|i |ƒ|SdS(NcCs |tijS(N(sxscfgsZOPE_SYSTEM_ROLES(sx((sG/mnt/gmirror/ports/www/zope-mysqluserfolder/work/mysqlUserFolder/vdb.pysœs( sfiltersrolesscfgsAUTO_CREATE_ROLESsSelfsauto_create_rolessdbschange_user_rolessusersrets refresh_user(sSelfsusersrolessret((sG/mnt/gmirror/ports/www/zope-mysqluserfolder/work/mysqlUserFolder/vdb.pyschange_user_roles›s   cCs-|ii|||ƒ}|i|ƒ|SdS(N(sSelfsdbschange_user_othersusersrealnamesemailsrets refresh_user(sSelfsusersrealnamesemailsret((sG/mnt/gmirror/ports/www/zope-mysqluserfolder/work/mysqlUserFolder/vdb.pyschange_user_other¥s cCs*|ii||ƒ}|i|ƒ|SdS(N(sSelfsdbschange_user_domainssusersdomainssrets refresh_user(sSelfsusersdomainssret((sG/mnt/gmirror/ports/www/zope-mysqluserfolder/work/mysqlUserFolder/vdb.pyschange_user_domainsªs cCs^tio|i|ƒn|ii||i|ƒ}|o|i |ƒ}nt }|SdS(N( scfgsAUTO_CREATE_ROLESsSelfsauto_create_rolessrolessdbs create_usersusernamesrealmsoksget_usersusersNone(sSelfsusernamesrolessoksuser((sG/mnt/gmirror/ports/www/zope-mysqluserfolder/work/mysqlUserFolder/vdb.pys create_user¯s cCs#|ii||idƒ}|SdS(Nsuser(sSelfsdbsdel_usersusernamesrealmsok(sSelfsusernamesok((sG/mnt/gmirror/ports/www/zope-mysqluserfolder/work/mysqlUserFolder/vdb.pysdel_userºscCs |ii||iƒ}|SdS(N(sSelfsdbs create_rolesrolesrealmsok(sSelfsrolesok((sG/mnt/gmirror/ports/www/zope-mysqluserfolder/work/mysqlUserFolder/vdb.pys create_role¾scCs |ii||iƒ}|SdS(N(sSelfsdbsdel_rolesrolesrealmsok(sSelfsrolesok((sG/mnt/gmirror/ports/www/zope-mysqluserfolder/work/mysqlUserFolder/vdb.pysdel_roleÂs(s__name__s __module__s__doc__s__init__sNoneslist_usernamesslist_rolenamessauto_create_roless refresh_usersget_user_countsget_role_countsget_usersget_user_by_idschange_user_passwordschange_user_rolesschange_user_otherschange_user_domainss create_usersdel_users create_rolesdel_role(((sG/mnt/gmirror/ports/www/zope-mysqluserfolder/work/mysqlUserFolder/vdb.pysUserDbs$              s SessionDbcBs2tZdZd„Zd„Zd„Zd„ZRS(sÒ Class that represents (local) interface to the session db. This class will cache sessions only if they belog to a valid user. Otherwise, some threads might have outdated session's user id in a cache. cCs0||_tiotitiƒ|_ndS(N(sdbsSelfscfgsCACHE_SESSIONSscachesv_cachesCACHE_SESSIONS_LIFEs session_cache(sSelfsdb((sG/mnt/gmirror/ports/www/zope-mysqluserfolder/work/mysqlUserFolder/vdb.pys__init__Ñs  cCsotiƒ}|i|ƒ|ii|ƒ|ti jo.ti o |i i |i |iƒƒqgn|SdS(N(s c_classess mysqlSessionsss _setUserIdsuser_idsSelfsdbscreate_sessionscfgsVDB_INVALID_IDsCACHE_SESSIONSs session_cachesaddsids_copy(sSelfsuser_idss((sG/mnt/gmirror/ports/www/zope-mysqluserfolder/work/mysqlUserFolder/vdb.pyscreate_sessionÖs   $cCsÈtio2|ii|ƒ}|tj o|iƒSq<nt i ƒ}|i |ƒ|i i|ƒ|iƒtijotSntio|iƒtijo|ii||iƒƒn|SdS(N(scfgsCACHE_SESSIONSsSelfs session_cachesgetsidsosNones_copys c_classess mysqlSessionsss_setIdsdbs get_sessionsgetIdsVDB_INVALID_IDs getUserIdsadd(sSelfsidsoss((sG/mnt/gmirror/ports/www/zope-mysqluserfolder/work/mysqlUserFolder/vdb.pysget_session_by_idâs    cCs:|itijpt‚|ii||ƒ||_dS(N(ssessionsuser_idscfgsVDB_INVALID_IDsAssertionErrorsSelfsdbssession_set_user_id(sSelfssessionsuser_id((sG/mnt/gmirror/ports/www/zope-mysqluserfolder/work/mysqlUserFolder/vdb.pysassign_user_idõs(s__name__s __module__s__doc__s__init__screate_sessionsget_session_by_idsassign_user_id(((sG/mnt/gmirror/ports/www/zope-mysqluserfolder/work/mysqlUserFolder/vdb.pys SessionDbÉs   sHTTPCookieInfocBstZRS(N(s__name__s __module__(((sG/mnt/gmirror/ports/www/zope-mysqluserfolder/work/mysqlUserFolder/vdb.pysHTTPCookieInfoÿssTokenDbcBsƒtZdZd„Zd„Zd„Zd„Zd„Zd„Zd„Z d„Z d „Z d „Z d „Z d „Zd „ZRS(sT This class defines API for token validation. Tokens are identified by (class_id, token_id). Random value is assigned to a token when it is created. Life and timeout values are also recorded for tokens. There are three general functions for tokens (create, delete, check) and three functions that save tokens as cookies. cCs6||_||_||_tio h|_ndS(N(sdbsSelfsrealmshttp_cookie_infoscfgs CACHE_TOKENSs token_caches(sSelfsdbsrealmshttp_cookie_info((sG/mnt/gmirror/ports/www/zope-mysqluserfolder/work/mysqlUserFolder/vdb.pys__init__ s     cCsM|ii|tƒ}|tjo#titi ƒ}||i||i | |ƒo tiSn|ii||||iƒntio| o| i|| ƒn|SdS(Niis8check_token (%s, %s): Invalid token: value: '%s' != '%s'(stimesctimesNonesrsfound_in_cachescfgs CACHE_TOKENSsSelfs_TokenDb__get_cache_dbsclass_idscache_dbsgetstoken_ids_TokenDb__check_token_expireds_TokenDb__check_token_values token_valuestoken_oksdeletesdbs get_tokensrealmsVDB_INVALID_IDsdb_token_valuesdb_token_createdsdb_token_accessedsdb_token_timeouts db_token_lifesutils log_debugsupdate_token_accessedsadd(sSelfsclass_idstoken_ids token_valuestoken_oksdb_token_accessedsdb_token_timeoutsctimesfound_in_caches db_token_lifesrsdb_token_valuescache_dbsdb_token_created((sG/mnt/gmirror/ports/www/zope-mysqluserfolder/work/mysqlUserFolder/vdb.pys check_tokenis8  &      cCs¤|i|ƒ\}}|ii}|ii}|o6|i |d|d|ƒ|i |d|d|ƒn'|i |d|ƒ|i |d|ƒ|i ||ƒdS(Nspathsdomain(sSelfs_TokenDb__mk_cookie_namessclass_idsn1sn2shttp_cookie_infospaths cookie_pathsdomains cookie_domainsRESPONSEs expireCookies delete_tokenstoken_id(sSelfsRESPONSEsclass_idstoken_ids cookie_domainsn1sn2s cookie_path((sG/mnt/gmirror/ports/www/zope-mysqluserfolder/work/mysqlUserFolder/vdb.pysrequest_delete_token™s   cCs>|i|ƒ\}}|i||||ƒ}|} d|} |o!|t ijo t i}qknd}|djo2tiƒ} | |} |iti| ƒƒ}n|ii}|ii}|| g}|| g}h} || d<|o|| d