o k`b@sddlZddlZddlZddlZddlZddlmZddlmZddl m Z ddl Tddl m Z ddlmZmZmZddlmZmZmZdd lmZmZdd lmZdd lmZmZmZdd lm Z m!Z!m"Z"m#Z#m$Z$dd l%m&Z&m'Z'm(Z(ddl)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/ddl0m1Z1e2Z3e34eje34ejGddde5Z6dddZ7Gddde5Z8Gddde5Z9Gddde5Z:Gddde5Z;dS)N)partial)log)IAdminPanelProvider)*)get_plugin_info) LOG_LEVELSLOG_LEVEL_ALIASESLOG_LEVEL_ALIASES_MAP)IPermissionRequestorPermissionExistsErrorPermissionSystem) all_timezonespytz)tag)exception_to_unicodeunicode_from_base64unicode_to_base64)_Localeget_available_localesngettexttag_) HTTPNotFoundIRequestHandleris_valid_default_handler)ChromeINavigationContributorITemplateProvider add_noticeadd_stylesheet add_warning)format_to_htmlc@s\eZdZdZeeeeee Z ddZ ddZ ddZ dd Zd d Zd d ZddZdS) AdminModulez8Web administration interface provider and panel manager.cCsdS)Nadminselfreqr$r$3/usr/lib/python3/dist-packages/trac/admin/web_ui.pyget_active_navigation_item;z&AdminModule.get_active_navigation_itemccs<||\}}|rddtjtd|jdfVdSdS)Nmainnavr#Admin)href) _get_panelsrarr-r#)r&r'panels providersr$r$r(get_navigation_items>s $z AdminModule.get_navigation_itemscCsJtd|j}|r#|d|jd<|d|jd<|d|jd<dSdS) Nz+/admin(?:/([^/]+)(?:/([^/]+)(?:/(.+))?)?)?$cat_idpanel_id path_infoT)rematchr8groupargs)r&r'r:r$r$r( match_requestGszAdminModule.match_requestc s&||\}}|sttddd}|j|d|jdp$|dd|jd}|jd}|sRzttfd d |dd }Wn tyQttd w||f}|sattd | |||}|dd \} } | |t |j d |t dd|Ddd dt|d|S)Nz"No administration panels availablecSs$|ddd}|ddk|dk|fS)Nr5rgeneral)r>basicsr$)panelitemsr$r$r( _panel_orderUsz1AdminModule.process_request.._panel_order)keyr4rr6r8cs |dkS)Nrr$)r@r4r$r(_s z-AdminModule.process_request..r5zUnknown administration panelr#cSs2g|]}|d|dd|d|dddqS)rr3)idlabelr5r7)categoryr@r$).0r@r$r$r( ns  z/AdminModule.process_request..cSs|dS)NrHr$)kr$r$r(rEqs) active_cat active_panel panel_hrefr0zcommon/css/admin.css)r.rrsortr<getlistfilter IndexErrorrender_admin_panelupdaterr- itertoolsgroupbyr) r&r'r0r1rBr6r8providerresptemplatedatar$rDr(process_requestPsH         zAdminModule.process_requestcCsgSNr$r&r$r$r(get_htdocs_dirsyr*zAdminModule.get_htdocs_dirscCstddgS)Nz trac.admin templates) pkg_resourcesresource_filenamer^r$r$r(get_templates_dirs|szAdminModule.get_templates_dirscCsTg}i}|jD]}t||pg}|D] }|||d|df<q||7}q||fS)z(Return a list of available admin panels.rr5)panel_providersrQget_admin_panels)r&r'r0r1rXpr@r$r$r(r.s  zAdminModule._get_panelsN)__name__ __module__ __qualname____doc__ implementsrrrExtensionPointrrdr)r2r=r\r_rcr.r$r$r$r(r"2s   ) r"c Cszz||durtdg}|D]}t||qWdSty<}z|dt|t|tdWYd}~dSd}~ww)zZTry to save the config, and display either a success notice or a failure warning. NzYour changes have been saved.zError writing to trac.ini: %szhError writing to trac.ini, make sure it is writable by the web server. Your changes have not been saved.)saverr Exceptionerrorrr )configr'rnoticesnoticeer$r$r( _save_configs  rtc@s,eZdZeeeeZddZddZ dS)BasicsAdminPanelcc0d|ddvrdtddtdfVdSdS)N TRAC_ADMINr#zgeneral/basicsr>Generalr?zBasic Settingspermrr%r$r$r(rez!BasicsAdminPanel.get_admin_panelsc Csdd|jD}tr!t}dd|D}tddt||D}nggg}}}|jdkrdD]} |jd| |j | q0|j d } |jd d | |j d } | t vrYd } |jd d | |j d } | |vrmd } |jd d | |j d} | dkrd } |jd d| |j d}|dvrd}|jd d|t |j||j | |j|||j d d } |j d d } |j d d } |j d d} |j d d}| t|| t tdu| dd|| |tdud }t|j|d|fS)NcSsg|] }t|r|jjqSr$)r __class__rg)rIhandlerr$r$r(rJsz7BasicsAdminPanel.render_admin_panel..cSsg|]}t|qSr$)rparse)rIlocaler$r$r(rJscss|] \}}||jfVqdSr]) display_name)rIrFrr$r$r( sz6BasicsAdminPanel.render_admin_panel..POST)nameurldescrprojectdefault_handlertracdefault_timezonedefault_languagedefault_date_formatiso8601default_dateinfo_format)relativeabsoluter-r) rvalid_default_handlersr timezoneshas_pytzr languagesrr has_babelzadmin_basics.html)request_handlersrrsortedzipmethodrpsetr<rPr rtrredirectr-r#rreplacerenvadd_textarea_grips)r&r'catpager8r locale_idslocalesroptionrrrrrr[r$r$r(rTsr           z#BasicsAdminPanel.render_admin_panelN) rgrhrirkrrlrrrerTr$r$r$r(rus  ruc@s$eZdZeeddZddZdS)LoggingAdminPanelccrv)Nrwr#zgeneral/loggingr>rxloggingLoggingryr%r$r$r(rer{z"LoggingAdminPanel.get_admin_panelsc Cs|jj}|jj}|jj}|jj}tdtd|dkddtdtd|dkddtdtd|dkddtd td |d vtjd kdtd td|dvtjdkdg} |j dkr1d} |j d} | dd| Dvrqt td| dtd|j d|} | st tdtd|j d|} | t vrt td| dtd| }tj|stj|jj| }z|j| || |jj\}}Wn+ty}zt|tdtt|d |jd!t|d"d#WYd}~n;d}~ww|| |kr|jd$d| d"} | }| |kr |jd$d| d"} | }| |kr|jd$d| d"} | }| r't|j||jf||j !||t"tj#tj#j d"d%}d&d|D}t$ ||}|| ||||d'}d(d)|ifS)*NnoneNoneF)rrGselecteddisabledstderrConsolefileFilesyslogSyslog)unixrposixeventlogzWindows event log)winlogr nteventlogntrlog_typecSsg|]}|dqSrr$)rItr$r$r(rJsz8LoggingAdminPanel.render_admin_panel..zUnknown log type %(type)s)typezInvalid log typelog_filezYou must specify a log filez Missing field log_levelzUnknown log level %(level)s)levelzInvalid log levelz_Changes not saved. Logger configuration error: %(error)s. Inspect the log for more information.)rozLogger configuration error: %sT tracebackr)rCreversecSsg|] }|tjvr|qSr$)rr)rIrr$r$r(rJK)rtypesrlevelsrdirzadmin_logging.htmlr)%rrrrlog_dirdictrosrrr<rP TracError_valid_log_levelspathisabsjoin create_logger log_formatrnr rrcoderrrocloserprrtrr-r#r LOG_LEVEL_MAPr )r&r'rrr8rrrr log_typeschangednew_typenew_file new_level new_file_pathloggerr}rs all_levels log_levelsr[r$r$r(rTs                    z$LoggingAdminPanel.render_admin_panelN)rgrhrirkrrerTr$r$r$r(rs rc@s.eZdZeeeddZddZddZdS)PermissionAdminPanelcCsddg}|d|fgS)NPERMISSION_GRANTPERMISSION_REVOKEPERMISSION_ADMINr$)r&actionsr$r$r(get_permission_actions[sz+PermissionAdminPanel.get_permission_actionsccs<|dd}d|vsd|vrdtddtdfVdSdS) Nr# general/permrrr>rxrz Permissionsry)r&r'rzr$r$r(re`s  z%PermissionAdminPanel.get_admin_panelsc st|j}|}jdkrjdd}jdd}jd} jdd} |r6|sB| r<| sB|rH|rHtt ddjvr|r| r d d  d | |vrdtt d j | z| || Wnty} z t | WYd} ~ n/d} ~ wwtt d || dndjvr|r| r d d  d t|j| ddD]} j j | tdt|t| t| ddqz| || Wnty} z t | WYd} ~ nd} ~ wwtt d|| dndjvrp|rp|rp d d  d ||g} | s t t d|d| D]B} | |vr3|jd| |q"| j vrEt t d| |dq"z| || Wn tyXYq"wtt d || dq"j||nEdjvrdjvr d d  djdD]"} | dd \}} t|}t| } || f|vr||| qtt d!j||d"|fd#d$|D|| t!d%fS)&Nrsubjectrtargetactionr;z9All upper-cased tokens are reserved for permission names.addr#rrzUnknown actionzCThe subject %(subject)s has been granted the permission %(action)s.)rrF) expand_metazThe subject %(subject)s was not added to the group %(group)s. The group has %(perm)s permission and you cannot grant permissions you don't possess.)rr;rz)messagez>The subject %(subject)s has been added to the group %(group)s.)rr;copyz6The subject %(subject)s does not have any permissions.)rz2Skipped granting %s to %s: permission unavailable.zsThe permission %(action)s was not granted to %(subject)s because users cannot grant permissions they don't possess.)rrremoveselr:r3z+The selected permissions have been revoked.zadmin_perms.htmlcsg|] }|jvr|qSr$)rz)rIr/r'r$r(rJrz;PermissionAdminPanel.render_admin_panel..)rallowed_actionspermsgroupsr)"r r get_actionsrr<rPstripisupperrrrzrequiregrant_permissionr rrget_user_permissionsrrstrongget_users_dictrwarningr rr-r#getlistsplitrget_all_permissionsrevoke_permissionget_groups_dictr)r&r'rrr8rz all_actionsrrrr;rssubject_permissionsrCr$rr(rTes              z'PermissionAdminPanel.render_admin_panelN) rgrhrirkrr rrerTr$r$r$r(rVs   rc@sDeZdZeeddZddZddZddZd d Z d d Z d S)PluginAdminPanelccrv)Nrwr#zgeneral/pluginr>rxpluginPluginsryr%r$r$r(rer{z!PluginAdminPanel.get_admin_panelscCs|jdkr=d|jvr||nd|jvr||n||d}d|jvr1d|jdd}||j|||| |S)Nrinstall uninstallrrz#no%dr3) rr< _do_install _do_uninstall _do_updategetintrr-r# _render_view)r&r'rrr8anchorr$r$r(rTs        z#PluginAdminPanel.render_admin_panelcCsbd|jvr ttd|jd}t|ts|jsttd|jdddd}tj |}|s7ttd| dsG| dsGttdtj |j j |}tj|r^ttd |d |jd |tjtjtj}z|tj7}Wn ty~Ynwtt||d d }t|j||jd||Wdn1swY|j jdS)zInstall a plugin. plugin_filezNo file uploaded\/rz.eggz.pyz0Uploaded file is not a Python source file or eggz!Plugin %(name)s already installedrzInstalling plugin %siwbzPlugin %s installed to %sN)r<rr isinstancestrfilenamerrrbasenameendswithrr plugins_dirisfilerinfoO_CREATO_WRONLYO_EXCLO_BINARYAttributeErrorfdopenopenshutil copyfileobjrrptouch)r&r'uploadplugin_filename target_pathflags target_filer$r$r(rsF           zPluginAdminPanel._do_installcCs^|jd}|s dStj|jj|}tj|sdS|j d|t ||jj dS)zUninstall a plugin.r$NzUninstalling plugin %s) r<rPrrrrrrrrrrpr")r&r'r$ plugin_pathr$r$r(rs   zPluginAdminPanel._do_uninstallc Cs<|jd}|jd}gg}}|D]7}t|j|}||v}||krJ|jd||r.dnd|jd|r9dnd||rE| |q| |q|sO|rd d } | | g} |rqt d d t |} | t | | ||rt d dt |} | t | | ||D] }|jj|dqt|j||j| dSdS)zUpdate component enable state. componentenable componentsrenabledz%sabling component %sDisEncSs,dd|D}tjtdd|DddS)NcSsg|]}|ddqS).r3)rsplit)rIitemr$r$r(rJ:szBPluginAdminPanel._do_update..make_list..css8|]\}}ttj|ddtjd|ddVqdS)z trac-nameclass_z(%s.*)N)rtrtd)rImcr$r$r(r;s zAPluginAdminPanel._do_update..make_list..z trac-pluglistr2)rtabletbody)rApartsr$r$r( make_list9s z.PluginAdminPanel._do_update..make_listz*The following component has been disabled:z,The following components have been disabled:z)The following component has been enabled:z+The following components have been enabled:)r)N)r<rboolris_component_enabledrprrrappendrOrlenr set_defaultsrt) r&r'r+r,addedremovedr) is_enabled must_enabler;rqmsgr$r$r(r "sL        zPluginAdminPanel._do_updatecsNtjdd}fdd}||jdtjjtjtj |d}d|fS)NT) include_corec sVztj||WSty*}zjdt|ddt|WYd}~Sd}~ww)Nz,Unable to render component documentation: %sTr)r!rrnrrorrpre)contexttextrsr^r$r(safe_wiki_to_htmlVs z8PluginAdminPanel._render_view..safe_wiki_to_htmlshow)pluginsrKreadonlyrJzadmin_plugins.html) rrr<rPraccessrF_OKW_OK)r&r'rLrJr[r$r^r(r Ss   zPluginAdminPanel._render_viewN) rgrhrirkrrerTrrr r r$r$r$r(rs& 1rr])s8          ]Qe}