a ‡e@sdZddlmZddlmZddlmZmZddlZddl Z ddl Z ddl m Z ddl Z ddlZeGdddZGd d d Zed d d ZdS)z&fixperms sys.argv cli argument parsing) dataclass)Logger)ArgumentParserArgumentTypeErrorN)Literalc@s^eZdZUdZeded<eeed<eeed<eed<e ed<eed<eed <e ed <d S) Argsz3Dataclass for more strict type hints for parse_args)CWPcPanelWP3roleusersskipnoopprocs skip_mail preserve_execloggerN) __name__ __module__ __qualname____doc__r__annotations__setstrboolintrrr"./usr/lib/fixperms/fixperms_cli.pyr s    rc@sjeZdZdZddddZeedddZeeedd d Zeeedd d Z eee dd dZ dS) ArgValidatorzValidates custom argsNreturncCsht|_tjr(d|_t|_|j|_nd|_|j |_n&t j drZd|_|j|_n tddS)Nrr z!/etc/ansible/wordpress-ultrastackr z.fixperms requires a cPanel, CWP, or WP3 server)r_all_cwp_userscwpZHAS_CWPr Z all_users _cwp_useruserradsZ HAS_CPANEL _cpanel_userospathexists _wp3_usersysexit)selfrrr__init__s     zArgValidator.__init__)valr cCs ||jvr|St|ddS)Nz is not a valid CWP user)r!r)r-r/rrrr#-s zArgValidator._cwp_usercCs t|r|St|ddS)Nz is not a valid cPanel user)r%Z is_cpuserrr/rrrr&2s zArgValidator._cpanel_usercCs>|dkr,zt||WSty*Yn0t|ddS)NZ wordpressz is not a valid WP3 user)pwdgetpwnamKeyErrorrr0rrrr*8s  zArgValidator._wp3_usercCs&t|}|dkr|St|ddS)zTest an arg is an int >= 1z must be >= 1N)rrr0rrrpositiveBszArgValidator.positive) rrrrr.rr# staticmethodr&r*rr5rrrrrs rrc Cs8t}td|jdd}|}|jdd|jdddd |jd d d d d|jddd dd|jddd dd|jdtjjddgdd|jddddd|jdkr|jd d d!d|jd"dd#|j d$d%| }|j rd&}n|j rd'}nd(}t |}t|jt|jt|j|j|j|jdkr*|jnd)|j|d*S)+zParse sys.argvz'Safely corrects permission issues on a z user) descriptionz-pz--procsZNUMzHmax users to process at once, if multiple were requested (defaults to 4))typedefaultmetavarhelpz-vz --verbose store_truez/show verbose output of every permissions change)actionr<z-qz--quietzhide all output but errorsz-nz--noopz0Test mode; Make no actual changes to the accountz--skipPATH+zbpath(s) to skip changing permissions on. If you want to skip etc and mail, use --skip-mail instead)r9r;nargsr:r<z--no-preserve-execrZ store_falsez'Don't preserve the execute bit on files)destr>r<r z --skip-mailz;Do not run mailperm to fix permissions on etc and mail dirsr ZUSERzcPanel user(s))rAr;r9r<DEBUGZERRORINFOT)r r r rrrrr)rrr Zadd_mutually_exclusive_group add_argumentr5r'r(realpathr$ parse_argsverbosequietr%Zsetup_verbosityrrr r rrrr)Z custom_argsparsergroupargsZloglevelrrrrrGKsv   rG)rZ dataclassesrZloggingrargparserrr'r1r+typingrr%r"rrrGrrrrs    0