;ņ Į7Cc@słdZdZdkZdkZdkZdkZdkZdkZdkZdk Z dk Z dk Z dk Z dk Z dkZdkZdkZdkZeiiZd„Zd„Zd„Zdeiieiifd„ƒYZeieƒdS(s6 Zope's user folder that keeps users in MySQL tables. s $Rev: 73 $NcCsōd|iƒjo(tidddddd|dƒSnt||||||| ||| | | ||| |||ƒ}|id|ƒ|i|_|idƒ}y|i|iƒWntj onX|o|i ||d d ƒSnd S( s Add new mysqlUserFolder s acl_usersstitles Item Existssmessages*This object already contains a User Foldersactions%s/manage_mainsURL1s update_menuiN(!sSelfs objectIdssGlobalss MessageDialogsREQUESTsmysqlUserFoldersrealmsserversportssocketsdatabasesusernamespasswords use_cookiess use_sessionssanon_create_oksanon_create_roles cookie_paths cookie_domainscookie_use_realms dtml_user_dirsdisable_cookies_for_portssdefault_password_typesos _setObjects acl_userss__allow_groups__s_getObsobs _addRoless aq_parentsAttributeErrors manage_main(sSelfsrealms use_cookiess use_sessionssserversportssocketsdatabasesusernamespasswordsanon_create_oksanon_create_roles dtml_user_dirs cookie_paths cookie_domainscookie_use_realmsdisable_cookies_for_portssdefault_password_typesREQUESTsobso((sS/mnt/gmirror/ports/www/zope-mysqluserfolder/work/mysqlUserFolder/mysqlUserFolder.pysmanage_add_mysqlUserFolders,      cCsxtii|ƒ\}}ti|dƒdjo|d}nt|ƒ}|i ƒ}|i ƒ|i|||ƒdS(Ns.i’’’’s.dtml(sosspathssplitsfnamespsnsstringsfindsopensfsreadsdsclosesobjsmanage_addDTMLDocumentsidstitle(sobjsfnamesidstitlesfsnspsd((sS/mnt/gmirror/ports/www/zope-mysqluserfolder/work/mysqlUserFolder/mysqlUserFolder.pys_add_dtml_method;s   cCs|i|ƒdS(N(sobjs_addRolesrole(sobjsrole((sS/mnt/gmirror/ports/www/zope-mysqluserfolder/work/mysqlUserFolder/mysqlUserFolder.pys _add_roleFssmysqlUserFoldercBsŽtZdZdZdZdZdZhdd<dde ƒƒZe i d?e ƒƒZe i d@e ƒƒZe i dAe ƒƒZe i dBe ƒƒZe i dCe ƒƒZe i dDe ƒƒZeiZeiZeiZeiZeiZdEdFdGdHdIdIdIdGdGdGdHdJdHdGdKdHdGedL„ZdM„ZdN„ZdO„Z dP„Z!dQ„Z"dR„Z#dS„Z$dT„Z%dU„Z&dV„Z'dW„Z(dX„Z)dY„Z*dZ„Z+d[„Z,d\„Z-d]„Z.d^„Z/d_„Z0ed`„Z1da„Z2db„Z3dc„Z4fZ5dd„Z6fZ7de„Z8fZ9df„Z:fZ;dg„Z<fZ=dh„Z>fZ?di„Z@dj„ZAegdk„ZBdl„ZCdm„ZDeZEdn„ZEeZFdo„ZGeZHdp„ZIeZJdq„ZKfZLgdr„ZMeZNds„ZOfZPdt„ZQfZRdu„ZSfZTdv„ZUfZVdw„ZWeZXdx„ZYeZZdy„Z[eZ\dz„Z]d{„Z^d|„Z_d}„Z`eed~„ZadGdGdGed„Zbed€„Zced„Zded‚„Zedƒ„Zfd„„ZggdHdHged…„Zhgd†„Zid‡„Zjdˆ„Zkd‰„ZldŠ„Zmed‹„ZnedŒ„ZoeZpdGddŽ„ZqeirgZsdJd„Ztd„Zud‘„Zvd’„ZwRS(“s sMySQL User Folders acl_userssmysqlUserFolders!misc_/mysqlUserFolder/folder_iconslabelsContentssactions manage_mainsInfos manage_infos Propertiessmanage_propertiess Parameterssmanage_parameterss Manage Userss manage_userssSecuritys manage_accesssUndosmanage_UndoFormsAdvancedsmanage_advancedsView management screenssmanages manage_menusmanage_copyrights manage_tabss manage_dialogs Undo changessmanage_undo_transactionssChange permissionss Manage userssmanage_users_newsmanage_users_editsmanage_users_createsmanage_users_change_othersmanage_users_change_passwordsmanage_users_deletesmanage_users_change_rolessmanage_users_change_domainssmanage_role_deletesmanage_role_creates getUserCounts getRoleCounts getUserNamess getRoleNamessgetUserssgetUsershasUserssManage MySQL User Folderss manage_editsmanage_connectsmanage_edit_parameterssmanage_addMySQLRolessmanage_setup_user_actionssuser_change_other_datasuser_change_passwords user_createsdtml/m_Propertiessmchangeis dtml/m_Infos dtml/m_Userssdtml/m_UserEditsdtml/m_UserNewsdtml/m_Parameterss dtml/m_Dialogsdtml/m_Advanceds*s localhostissZopes/s dtml.usercCsŚ| o d} n||_||_ti|ƒ|_||_||_||_ ||_ ||_ | |_ ||_ | |_| |_| |_| |_||_||_|i|ƒ|iƒ|iƒ|iƒdS(Ns/(s cookie_paths mysql_serversSelfs mysql_portsstringsstrips mysql_socketsmysql_dbs mysql_usersmysql_passwordsrealms use_cookiess use_sessionssdefault_password_typesanon_create_oksanon_create_roles cookie_domainscookie_use_realms dtml_user_dirs_setupDisabledPortssdisable_cookies_for_portss!_mysqlUserFolder__setupParameterss_mysqlUserFolder__connects_mysqlUserFolder__initUserDtml(sSelfsrealms mysql_servers mysql_ports mysql_socketsmysql_dbs mysql_usersmysql_passwords use_cookiess use_sessionssanon_create_oksanon_create_roles cookie_paths cookie_domainscookie_use_realms dtml_user_dirsdisable_cookies_for_portssdefault_password_typesREQUEST((sS/mnt/gmirror/ports/www/zope-mysqluserfolder/work/mysqlUserFolder/mysqlUserFolder.pys__init__“s,                   cCstidƒdS(Ns__del__ () called ().(sutils log_debug(sSelf((sS/mnt/gmirror/ports/www/zope-mysqluserfolder/work/mysqlUserFolder/mysqlUserFolder.pys__del__æscCstidƒtii||ƒt|dƒ o d|_nt|dƒ o d|_ nt|dƒ o g|_ nt|dƒ o d|_ nt|dƒ o d |_ nt|d ƒ o d |_ n|iƒt|_t|_t|_t|_t|_dS( Ns__setstate__ () called.s cookie_paths/s cookie_domainss disable_portss mysql_socketscookie_use_realmisdefault_password_type(sutils log_debugsGlobalss Persistents __setstate__sSelfsStateshasattrs cookie_paths cookie_domains disable_portss mysql_socketscookie_use_realmsdefault_password_types!_mysqlUserFolder__setupParameterssNones_v_dbs _v_user_dbs _v_session_dbs _v_token_dbs_v_miscdata_db(sSelfsState((sS/mnt/gmirror/ports/www/zope-mysqluserfolder/work/mysqlUserFolder/mysqlUserFolder.pys __setstate__Ćs(            cCsĻtiƒ}|d|i}d|}t||ddƒd|}t||ddƒd|}t||d d ƒd |}t||d d ƒd|}t||ddƒd|}t||ddƒdS(Ns/s%s/u_Login.dtmlsdocLoginsUser login forms %s/u_UserPages docUserPages User's pages %s/u_UserNews docNewUsers New user forms%s/a_ChangeOthersactChangeOthersChange user datas%s/a_ChangePasswordsactChangePasswordsChange user passs%s/a_CreateUsers actCreateUsers Create a user(sutils base_prod_dirspdirsSelfs dtml_user_dirsdtml_dirsfnames_add_dtml_method(sSelfspdirsdtml_dirsfname((sS/mnt/gmirror/ports/www/zope-mysqluserfolder/work/mysqlUserFolder/mysqlUserFolder.pys__initUserDtmläs       cCsōt|dƒ o d|_nt|dƒ o d|_nt|dƒ o d|_nt|dƒ o d|_nt|d ƒ o d |_nt|d ƒ o d |_nt|d ƒ o d|_nt|dƒ o d |_ ndS(Nsuser_token_timeouti’’’’suser_token_lifei'suser_token_persistentissession_token_timeouti„ssession_token_lifei Œssession_token_persistentissession_log_simplessession_log_full( shasattrsSelfsuser_token_timeoutsuser_token_lifesuser_token_persistentssession_token_timeoutssession_token_lifessession_token_persistentssession_log_simplessession_log_full(sSelf((sS/mnt/gmirror/ports/www/zope-mysqluserfolder/work/mysqlUserFolder/mysqlUserFolder.pys__setupParametersśs        cCs†|o{ti}|io||iiƒ}ntid| ƒx<|D]0}|ti ti gjot ||ƒqJqJWndS(Nsconnect (): Adding roles: ( s ZopeParentscfgsZOPE_SYSTEM_ROLESsrolessSelfs _v_user_dbslist_rolenamessutils log_debugsrolesZOPE_ANONYMOUS_ROLEsZOPE_AUTHENTICATED_ROLEs _add_role(sSelfs ZopeParentsrolessrole((sS/mnt/gmirror/ports/www/zope-mysqluserfolder/work/mysqlUserFolder/mysqlUserFolder.pys _addRoless  cCs`|oUxR|D]F}|tijp |tijoqn|id|gdtƒqWndS(NsrolessREQUEST(s ZopeParentsrolessrscfgsZOPE_SYSTEM_ROLESsZOPE_MANAGER_ROLEs _delRolessNone(sSelfs ZopeParentsrolessr((sS/mnt/gmirror/ports/www/zope-mysqluserfolder/work/mysqlUserFolder/mysqlUserFolder.pys _delRoless  cCsIt|ƒtdƒjod|f}ntiti|ƒƒ|_dS(Nss%s(stypesportssstringssplitsstripsSelfs disable_ports(sSelfsports((sS/mnt/gmirror/ports/www/zope-mysqluserfolder/work/mysqlUserFolder/mysqlUserFolder.pys_setupDisabledPorts(scCsO|itjodSn|iiƒotidƒ|iƒdSndSdS(Nis'DB Connection has errors, reconnecting.i(sSelfs_v_dbsNones has_errorssutils log_debugs_mysqlUserFolder__disconnect(sSelf((sS/mnt/gmirror/ports/www/zope-mysqluserfolder/work/mysqlUserFolder/mysqlUserFolder.pys__is_connected1s  cCstidƒt|_yDti|i|i|i |i |i |i ƒ|_|ii ƒWnt|_‚nXtiƒ}|i|_|i|_|i|_ti|i|i|ƒ|_ti|i|iƒ|_ti|iƒ|_ti|iƒ|_dS(Nsconnect () called.( sutils log_debugsNonesSelfs_v_dbsdbs dbConnections mysql_servers mysql_ports mysql_socketsmysql_dbs mysql_usersmysql_passwordsconnectsvdbsHTTPCookieInfoscis cookie_pathspaths cookie_domainsdomainscookie_use_realms use_realmsTokenDbsrealms _v_token_dbsUserDbs _v_user_dbs SessionDbs _v_session_dbs MiscDataDBs_v_miscdata_db(sSelfsci((sS/mnt/gmirror/ports/www/zope-mysqluserfolder/work/mysqlUserFolder/mysqlUserFolder.pys __connect<s&        cCsZy|io|iiƒnWnnXt|_t|_t|_t|_t|_dS(N(sSelfs_v_dbs disconnectsNones _v_token_dbs _v_user_dbs _v_session_dbs_v_miscdata_db(sSelf((sS/mnt/gmirror/ports/www/zope-mysqluserfolder/work/mysqlUserFolder/mysqlUserFolder.pys __disconnectVs     cCs |iƒ o|iƒndS(N(sSelfs_mysqlUserFolder__is_connecteds_mysqlUserFolder__connect(sSelf((sS/mnt/gmirror/ports/www/zope-mysqluserfolder/work/mysqlUserFolder/mysqlUserFolder.pys__check_connectioncscCsQ|ioti|i|i|ƒn|ii|d|i ƒƒt |d|ii|ƒ}|o!|i ƒ|i jpt ‚qunt}|SdS(s This function returns user object that corresponds to a session. There are three possibilites: Valid user is assigned to a session and it belongs to user folder's realm, it does not belong to user folder's realm, and there is no valid users assigned to a session. N( ssessionsNones getUserIdsuser_idscfgsVDB_INVALID_IDsSelfs _v_user_dbsget_user_by_idsusersgetRealmsrealmsAssertionError(sSelfssessionsuser_idsuser((sS/mnt/gmirror/ports/www/zope-mysqluserfolder/work/mysqlUserFolder/mysqlUserFolder.pys__get_session_userƒs  %cCsG|ii|dƒ}|ii|ƒ}|o|i|ƒn|SdS(Nssession( sSelfs _v_token_dbsrequest_check_tokensREQUESTssess_ids _v_session_dbsget_session_by_idssessions_set_user_folder(sSelfsREQUESTssess_idssession((sS/mnt/gmirror/ports/www/zope-mysqluserfolder/work/mysqlUserFolder/mysqlUserFolder.pys__get_session_from_requestšs c CsŻ|d} |o¹|iƒ}| o”d} | oD|iƒ} |t jo d} qw|i ƒ| jo d} qwn| o0t i dƒ|i|| |ƒd}t }n|djpt‚qŹn| o|i|| |ƒ}d}n|o|o8|ii||i ƒƒt i dd|iƒƒn||d<|ioŽt i|ƒ}t i|ƒ}|id ƒo|d } nd } t| ƒtd ƒjo d } nti|i|i ||| ||ƒnd S( sÓ This method sets up user session. It assumes user is athenticated/authorized. If user is None, then it assumes Anonymous is authorized. Parameter amethod represents the way user is authenticated. sRESPONSEiis'__setup_session (): Wrong session user.sCookies__setup_session (): Assigning suser '%s' to the session.sSessions QUERY_STRINGsN("sREQUESTsRESPONSEssessionsisAnonymousUsers anon_sessionswrong_session_users getUserIdssuser_idsusersNonesgetDBIdsutils log_debugsSelfs#_mysqlUserFolder__terminate_sessionsamethodsAssertionErrors _mysqlUserFolder__create_sessions _v_session_dbsassign_user_ids getUserNamessession_log_fullsget_obj_from_requestsobjsget_address_from_requestsaddrshas_keys query_stringstypeslogssession_log_accesss_v_dbsrealms target_path( sSelfsREQUESTsuserssessionsamethods target_pathsobjsaddrs anon_sessions query_stringssuser_idsRESPONSEswrong_session_user((sS/mnt/gmirror/ports/www/zope-mysqluserfolder/work/mysqlUserFolder/mysqlUserFolder.pys__setup_session¢sF           cCs|iƒdjSdS(Ni(sSelfs getUserCount(sSelf((sS/mnt/gmirror/ports/www/zope-mysqluserfolder/work/mysqlUserFolder/mysqlUserFolder.pyshasUsersęscCs|iƒ|iiƒSdS(s Returns number of users. N(sSelfs"_mysqlUserFolder__check_connections _v_user_dbsget_user_count(sSelf((sS/mnt/gmirror/ports/www/zope-mysqluserfolder/work/mysqlUserFolder/mysqlUserFolder.pys getUserCountés cCs|iƒ|iiƒSdS(s Returns number of roles. N(sSelfs"_mysqlUserFolder__check_connections _v_user_dbsget_role_count(sSelf((sS/mnt/gmirror/ports/www/zope-mysqluserfolder/work/mysqlUserFolder/mysqlUserFolder.pys getRoleCountļs cCs|iƒ|ii|ƒSdS(suReturns a list of user names or [] if no users exist. Optional role can be used to filter usernames by role. N(sSelfs"_mysqlUserFolder__check_connections _v_user_dbslist_usernamessfrole(sSelfsfrole((sS/mnt/gmirror/ports/www/zope-mysqluserfolder/work/mysqlUserFolder/mysqlUserFolder.pys getUserNamesõs cCs|iƒ|iiƒSdS(s4Returns a list of role names or [] if no roles existN(sSelfs"_mysqlUserFolder__check_connections _v_user_dbslist_rolenames(sSelf((sS/mnt/gmirror/ports/www/zope-mysqluserfolder/work/mysqlUserFolder/mysqlUserFolder.pys getRoleNamesżs cCso|iƒ|iiƒ}g}xE|D]=}|ii|ƒ}|o|i |ƒ|i |ƒq&q&W|SdS(s6Returns a list of user objects or [] if no users existN( sSelfs"_mysqlUserFolder__check_connections _v_user_dbslist_usernamess usernamessuserssunamesget_usersusers_set_user_foldersappend(sSelfsusersunames usernamessusers((sS/mnt/gmirror/ports/www/zope-mysqluserfolder/work/mysqlUserFolder/mysqlUserFolder.pysgetUserss  cCs@|iƒ|ii|ƒ}|o|i|ƒ|SntSdS(s<Returns the named user object or None if no such user existsN(sSelfs"_mysqlUserFolder__check_connections _v_user_dbsget_usersusernamesusers_set_user_foldersNone(sSelfsusernamesuser((sS/mnt/gmirror/ports/www/zope-mysqluserfolder/work/mysqlUserFolder/mysqlUserFolder.pysgetUsers  cCsp|ii|ƒ}| otSn|i||ƒo|Sn|ii |ƒ|i||ƒo|SntSdS(N( sSelfs _v_user_dbsget_usersusernamesusersNonesauthenticate_passwordspasswordsREQUESTs refresh_user(sSelfsusernamespasswordsREQUESTsuser((sS/mnt/gmirror/ports/www/zope-mysqluserfolder/work/mysqlUserFolder/mysqlUserFolder.pysauthenticate_user_pass'scCss|i|ƒ}|i|ƒ}|otid|iƒƒntidƒ|otidƒn||fSdS(Ns0authenticate_session (): Valid session found: %is*authenticate_session (): No valid session.s*authenticate_session (): Valid user found.( sSelfs*_mysqlUserFolder__get_session_from_requestsREQUESTssessions"_mysqlUserFolder__get_session_usersusersutils log_debugsgetId(sSelfsREQUESTssessionsuser((sS/mnt/gmirror/ports/www/zope-mysqluserfolder/work/mysqlUserFolder/mysqlUserFolder.pysauthenticate_session8s cCs…|ii|dƒ}tid|ƒ|tijo|i i |ƒ}nt }|t jotidƒntidƒ|SdS(Nsusers'authenticate_cookie (): got user id: %ss&authenticate_cookie (): No valid user.s'authenticate_cookie (): Got valid user.( sSelfs _v_token_dbsrequest_check_tokensREQUESTsuser_idsutils log_debugscfgsVDB_INVALID_IDs _v_user_dbsget_user_by_idsusersNone(sSelfsREQUESTsuser_idsuser((sS/mnt/gmirror/ports/www/zope-mysqluserfolder/work/mysqlUserFolder/mysqlUserFolder.pysauthenticate_cookieIs  cCsĢ|tjotSn|djotSntiti|ƒdƒ}|djotidƒtSnttit i ti|ƒdƒdƒƒ\}}ti d|d|ƒ|i|||ƒSdS( NsisbasicsUnknown http auth type.i’’’’s:sauthenticate_http () called: s (sauthsNonesstringslowerssplits auth_typesutils log_errorstuplesbase64s decodestringsusernamespasswords log_debugsSelfsauthenticate_user_passsREQUEST(sSelfsREQUESTsauths auth_typesusernamespassword((sS/mnt/gmirror/ports/www/zope-mysqluserfolder/work/mysqlUserFolder/mysqlUserFolder.pysauthenticate_httpZs    "cCs"t}t}t}|o|i|ƒ\}}n| o t}n|tjoR|o$|i |ƒ}|o d}qŸq©|i ||ƒ}|o d}q©nd}|o8|i |ƒ o#t idƒt}t}t}qčn|ot id|ƒnt idƒ|||fSdS(NsCookiesHTTPsSessions*authenticate (): Domain spec check failed.s-authenticate (): User authenticated using %s.s.----- authenticate (): User not authenticated.(sNonesuserssessionsamethods use_sessionssSelfsauthenticate_sessionsREQUESTs use_cookiessauthenticate_cookiesauthenticate_httpsauthscheck_domain_specsutils log_debug(sSelfsREQUESTsauths use_cookiess use_sessionssamethodssessionsuser((sS/mnt/gmirror/ports/www/zope-mysqluserfolder/work/mysqlUserFolder/mysqlUserFolder.pysauthenticate_mainms4    c Cs“tid|iƒd|iƒ d| dƒ|d}|i ||ƒ\}}}}t iii|||||||ƒ}| otidƒtSntidƒ|SdS(Nsauthorize (): Username: s, User roles: s, Requested roles: s.s PUBLISHEDs#----- authorize (): Not authorized.s+++++ authorize (): Authorized.(sutils log_debugsusers getUserNamesgetRolessrolessREQUESTsvsSelfs _getobcontextsascsns AccessControlsUsersBasicUserFolders authorizesallowedsNone( sSelfsusersrolessREQUESTsascsallowedsnsv((sS/mnt/gmirror/ports/www/zope-mysqluserfolder/work/mysqlUserFolder/mysqlUserFolder.pysauthorize_main”s3 '  cCs\|i}|i}ti|ƒ}||ijotidƒd}d}n||fSdS(Ns#validate (): disabling cookie auth.i( sSelfs use_cookiess use_sessionssutilsget_port_from_requestsREQUESTsports disable_portss log_debug(sSelfsREQUESTs use_cookiessports use_sessions((sS/mnt/gmirror/ports/www/zope-mysqluserfolder/work/mysqlUserFolder/mysqlUserFolder.pyscheck_auth_config«s    c Cs%|d} ti|ƒ}tid|||fƒti o$tidƒt i i i |ƒSn|iƒ|tjotig}n|tjo d}n|i|ƒ\} }|i||| |ƒ\}}}| o›| o ti|joHtidƒ|o|i|t|||ƒnt i ii |ƒSn| o-||d